概念 | 表空间和数据文件 管理表空间
●表空间的空间管理是Oracle描述表空间中空间分配状况的方法,从Oracle8i开始,空间管理方法有以下两种:数据字典管理表空间: 数据字典和本地管理表空间
移植一个DMT表空间 | ||||||||||||
表空间的状态 | ●正常的表空间运行在Online状态下,Offline状 态的表空间是不可访问的,意味着表空间上所有的数据都不能被访问●表空间在Offline的时候会带来检查点事件 ●大多数表空间是可以Ofline的, 但是也有些表空间不能被离线: 一系统表空间 : -存在激活的回滚段的表空间-默认的临时表空间●Offline表空间的语句: ALTER TABLESPACE users OFFLINE;●Online表空间的语句: ALTER TABLESPACE users ONLINE; | ||||||||||||
| |||||||||||||
调整表空间
|
增加文件大小 重置数据文件的大小 删除数据文件 数据文件自动扩展
| ||||||||||||
移动数据文件 | 将表空间离线 SQL> alter tablespace users offline; 在操作系统下将数据文件移到另一位置 SQL> host mv /u01/app/oracle/oradata/ocp/users01.dbf /u02/ SQL> host ls /u02/ 修改控制文件的记录指针 SQL> alter database rename file '/u01/app/oracle/oradata/ocp/users01.dbf' to '/u02/users01.dbf'; 或者 SQL> alter tablespace users rename datafile '/u01/app/oracle/oradata/ocp/users01.dbf' to '/u02/users01.dbf'; 注:执行此项时,目标文件(TO后面的那一段)一定要存在。 5、将表空间在线 SQL> alter tablespace users online; 对于那些不能offline的表空间,只能关闭数据,在mount状态下修改,修改后再OPEN | ||||||||||||
表空间脱机 | 表空间的ONLINE和OFFLINE状态 1. 只要数据库处于OPEN状态,除了SYSTEM表空间外的其他表空间,都可以将其置为online或offline状态。SYSTEM表空间之所以不能置为offline,是因为其中保存的数据字典需要一直使用。将表空间置为offline,可能的原因包括维护、备份以及恢复等目的。 3. 如果表空间处于offline状态,那么Oracle不会允许任何对该表空间中对象的SQL执行。表空间置为offline时仍处于活动状态的语句在交易级别并不会受影响。Oracle会保存这些尚未完成语句相关的回滚数据到SYSTEM表空间。当表空间置为online时,如果有必要,那么Oracle会应用这些回滚数据。 3. 除了Oracle外,没有任何应用能够读取或编辑offline的表空间。因此,offline的表空间更不能导到其他数据库。 4. Oracle在一些场景下会自动切换表空间状态从online到offline。例如,当数据库写进程DBWn,尝试几次仍不能写入表空间的数据文件中。用户访问offline表空间时会收到一个报错。如果造成这种磁盘IO失败的问题是介质错误,解决这问题之后需要恢复表空间。 5. 将表空间置为offline可能包含如下原因: (1) 需要禁止访问一部分数据库的场景。 (2) 执行一次offline表空间备份(尽管表空间可以在online和使用情况下备份)。 (3) 当更新或维护应用时,需要让应用和对应的表临时不能访问。 (4) 重命名或重分配表空间中的数据文件。 当表空间置为offline,数据库会将关联的所有数据文件都置为offline状态。但是如下表空间不能置为offline: > SYSTEM > UNDO表空间 > 临时表空间 6. 将表空间置为offline之前,若有用户设置该表空间为其默认表空间,需要考虑是否需要改变其默认表空间。之所以这样做,是因为这些用户将不能访问offline表空间中的对象。 7. 使用ALTER TABLESPACE ... OFFLINE语句可以添加如下参数: NORMAL:如果表空间的任何数据文件没有出现错误,表空间能够正常地置为offline。如果出现写错误,那么表空间中的数据文件不会被置为offline。当明确使用OFFLINE NORMAL,数据库会对所有数据文件进行一次checkpoint检查点事件,NORMAL是默认设置。 TEMPORARY:表空间能够临时置为offline状态,即使一个或多个文件出现错误。当使用OFFLINE TEMPORARY,数据库会将还没有置为offline的数据文件进行置位操作,并执行检查点事件。 如果没有文件是offline,但使用了temporary语句,那么当将表空间置为online时不需要介质恢复。然而,如果表空间的一个或多个文件由于写入错误因此导致offline状态,能够临时将表空间置为offline状态,恢复online之前需要对表空间进行恢复操作。 IMMEDIATE:表空间能够立即设置为offline状态,数据库不会进行任何数据文件的检查点事件。当使用OFFLINE IMMEDIATE,那表空间置为online之前需要对表空间进行介质恢复操作。但是如果数据库处于NOARCHIVELOG模式,表空间就不能立即置为offline状态。 8. 如果必须设置表空间为offline状态,建议首先使用默认的NORMAL语句。他会确保当表空间置为online前不需要执行恢复操作,尽管在不完全恢复之后,使用LATER DATABASE OPEN RESTLOGS语句重置了redo日志sequence。 仅仅当不能使用NORMAL方式将表空间置为offline时,可以使用TEMPORARY。使用TEMPORARY后,在表空间置为online前,仅需要恢复那些出错的offline文件。 如果NORMAL和TEMPORARY都失败时,才可以选择使用IMMEDIATE选项。 9. 如果表空间没有“干净地”置为offline(也就是没有使用NORMAL语句执行的offline操作),那么置为online前需要首先对该表空间执行介质恢复操作。否则数据库会报错,表空间仍处于offline状态。
置脱机状态,可以使用下面4个参数来控制脱机方式 NORMAL 该参数表示将表空间以正常方式切换到脱机状态,在进入脱机状态过程中,ORACLE会执行一次检查点, 将SGA区中与该表空间相关的脏缓存块写入数据文件中,然后再关闭表空间的所有数据文件。如果在这过程中没有发生任何错误,则可以使用NORMAL参数,这也是默认的方式。 TEMPORARY 该参数将表空间以临时方式切换到脱机状态。这时ORACLE在执行检查点时并不会检查各个数据文件的状态,即使某些数据文件处于不可用状态,ORACLE也会忽略这些错误。这样将表空间设置为联机状态时,可能需要进行数据恢复。 IMMEDIATE 该参数将表空间以立即方式切换到脱机状态,这时ORACLE不会执行检查点,也不会检查数据文件是否可用。而是直接将属于表空间的数据文件设置为脱机状态。下一次将表空间恢复为联机状态时必须进行数据库恢复。 FOR RECOVER 该参数将表空间以用于恢复方式切换到脱机状态,如果要对表空间进行基于时间的恢复,可以使用这个参数将表空间切换到脱机状态。 如果数据库运行在非归档模式下(NOARCHIVELOG),由于无法保留恢复表空间所需要的重做数据,所以不能将表空间以立即方式切换到脱机状态。如果表空间脱机了,则查询表空间下的表,会报错误:ORA-00376 此时无法读取文件 以及 ORA-01110:数据文件x......
注意:脱机(offline)一般用于数据库的联机备份,数据恢复等维护操作。有些表空间不能OFFLINE,如:SYTEM,UNDO等 1. SYTEM 不能offline,也不能read only 2. 当前的UNDO表空空间,不能offline,也不能read only 3. 当前的临时表空间不能offline,也不能read only 4. SYSAUX可以offline 不能read only SQL> ALTER TABLESPACE SYSTEM OFFLINE; ALTER TABLESPACE SYSTEM OFFLINE ORA-01541: system tablespace cannot be brought offline; shut down if necessary SQL> ALTER TABLESPACE SYSTEM OFFLINE; ALTER TABLESPACE SYSTEM OFFLINE ORA-01541: system tablespace cannot be brought offline; shut down if necessary
| ||||||||||||
查看表空间容量 | select tablespace_name,sum(bytes) from dba_free_space group by tablespace_name; TABLESPACE_NAME SUM(BYTES) | ||||||||||||
查看表空间剩余总量 | SELECT dbf.tablespace_name, | ||||||||||||
缩表空间语句 | select 'alter database datafile ''' || a.file_name || ''' resize ' || | ||||||||||||
| |||||||||||||
select segment_ name, blocks, extents, bytes, segment_ type, tablespace_ name fromdba_ segments where segment_ name=' T2 ; analyze table tablename compute statlstlcs ;
| |||||||||||||
SELECT NUM ROWS, -表中的记录数BLOCKS,一表中数据所占的数据块数EMPTY_ BLOCKS, --表中的空块数
列的统计信息
| |||||||||||||