一.DataFile脫機(jī)或聯(lián)機(jī)的兩種方法:
① ALTER DATABASE 語句修改單獨(dú)的DataFile
② ALTER TABLESPACE 語句修改所有的DataFile
1、在ARCHIVRLOG模式下的更改DataFile狀態(tài)
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' ONLINE;
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' OFFLINE;
或者用文件號來表示 :
SQL>select file#,name,checkpoint_change# from v$datafile;
FILE# |
NAME |
CHECKPOINT_CHANGE# |
1 |
D:\ORACLE\ORADATA\DBA\SYSTEM01.DBF |
1194854 |
2 |
D:\ORACLE\ORADATA\DBA\UNDOTBS01.DBF |
1194854 |
3 |
D:\ORACLE\ORADATA\DBA\SYSAUX01.DBF |
1194854 |
4 |
D:\ORACLE\ORADATA\DBA\USERS01.DBF |
1194854 |
5 |
D:\ORACLE\ORADATA\DBA\TEST01.DBF |
1203262 |
ALTER DATABASE DATAFILE 5 ONLINE;
ALTER DATABASE DATAFILE 5 OFFLINE;
注:只有在ARCHIVELOG模式下才可使用ALTER DATABASE來更改DataFile
2、在NOARCHIVELOG模式下使DataFile脫機(jī)
由于在NOARCHIVELOG模式下,數(shù)據(jù)文件脫機(jī)后會造成數(shù)據(jù)的遺失,所以只能使用ALTER DATABASE語句下帶有DATAFILE和OFFLINE DROP子句的選項(xiàng)將該DataFile直接取消,例如該DataFile只包含臨時(shí)段數(shù)據(jù),并沒有備份時(shí)
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/users3.dbf' OFFLINE DROP;
3、修改TableSpace中所有DataFile或TempFile的可用性
ALTER TABLESPACE ... DATAFILE {ONLINE|OFFLINE}
ALTER TABLESPACE ... TEMPFILE {ONLINE|OFFLINE}
注:修改某TableSpace中的所有數(shù)據(jù)文件,但是TableSpace本身的狀態(tài)不改變。
我們不能使用'alter database datafile ... offline' 在歸檔模式下,但是 'alter tablespace ... offline' 可以。
我們不是使用'alter tablespace ... offline'在數(shù)據(jù)庫的read-only模式下,但是'alter database datafile ... offline' 可以。
總結(jié):
① ALTER TABLESPACE可以在數(shù)據(jù)庫裝載狀態(tài)時(shí)發(fā)布,無需打開
② 涉及到系統(tǒng)表空間、撤銷表空間、默認(rèn)臨時(shí)表空間時(shí),必須是未打開的數(shù)據(jù)庫
③ ALTER DATABASE DATAFILE 語句中必須填入文件全名
二. 表空間 與 數(shù)據(jù)文件 脫機(jī)的區(qū)別
1. ALTER TABLESPACE ... OFFLINE
Does a checkpoint on the datafiles
Takes the datafiles offline
表空間Offline時(shí),數(shù)據(jù)文件的SCN會被凍結(jié),而且表空間的數(shù)據(jù)文件offline/online時(shí)又會發(fā)生文件檢查點(diǎn),使單個(gè)數(shù)據(jù)文件SCN和數(shù)據(jù)庫其他問題不一致。
表空間online時(shí),Oracle會取得當(dāng)前SCN,解凍offline文件SCN,和當(dāng)前SCN同步。
tablespace offline有幾種選項(xiàng)可供選擇normal, temporary,immediate, for recovery,而在datafile中則沒有這些選項(xiàng)。
SQL>select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1203246
SQL>alter tablespace test offline;
Tablespace altered.
SQL>select file#,name,checkpoint_change# from v$datafile;
FILE# |
NAME |
CHECKPOINT_CHANGE# |
1 |
D:\ORACLE\ORADATA\DBA\SYSTEM01.DBF |
1194854 |
2 |
D:\ORACLE\ORADATA\DBA\UNDOTBS01.DBF |
1194854 |
3 |
D:\ORACLE\ORADATA\DBA\SYSAUX01.DBF |
1194854 |
4 |
D:\ORACLE\ORADATA\DBA\USERS01.DBF |
1194854 |
5 |
D:\ORACLE\ORADATA\DBA\TEST01.DBF |
1203262 |
SQL>select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1203328
SQL>alter tablespace test online;
Tablespace altered.
SQL>select file#,name,checkpoint_change# from v$datafile;
FILE# |
NAME |
CHECKPOINT_CHANGE# |
1 |
D:\ORACLE\ORADATA\DBA\SYSTEM01.DBF |
1,194,854 |
2 |
D:\ORACLE\ORADATA\DBA\UNDOTBS01.DBF |
1,194,854 |
3 |
D:\ORACLE\ORADATA\DBA\SYSAUX01.DBF |
1,194,854 |
4 |
D:\ORACLE\ORADATA\DBA\USERS01.DBF |
1,194,854 |
5 |
D:\ORACLE\ORADATA\DBA\TEST01.DBF |
1,203,343 |
SQL>select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1203440
2. ALTER DATABASE DATAFILE ... OFFLINE
單純的offline datafile,將不會觸發(fā)文件檢查點(diǎn),只有針對offline tablespace的時(shí)候才會觸發(fā)文件檢查點(diǎn),這也是為什么online datafile需要media recovery而online tablespace不需要。
注:只有在ARCHIVELOG模式下才可使用ALTER DATABASE來更改DataFile
SQL>select file#,name,checkpoint_change# from v$datafile;
FILE# |
NAME |
CHECKPOINT_CHANGE# |
1 |
D:\ORACLE\ORADATA\DBA\SYSTEM01.DBF |
1,194,854 |
2 |
D:\ORACLE\ORADATA\DBA\UNDOTBS01.DBF |
1,194,854 |
3 |
D:\ORACLE\ORADATA\DBA\SYSAUX01.DBF |
1,194,854 |
4 |
D:\ORACLE\ORADATA\DBA\USERS01.DBF |
1,194,854 |
5 |
D:\ORACLE\ORADATA\DBA\TEST01.DBF |
1,203,343 |
SQL>select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1219831
SQL>alter database datafile 5 offline;
Database altered.
SQL>select file#,name,checkpoint_change# from v$datafile;
FILE# |
NAME |
CHECKPOINT_CHANGE# |
1 |
D:\ORACLE\ORADATA\DBA\SYSTEM01.DBF |
1,194,854 |
2 |
D:\ORACLE\ORADATA\DBA\UNDOTBS01.DBF |
1,194,854 |
3 |
D:\ORACLE\ORADATA\DBA\SYSAUX01.DBF |
1,194,854 |
4 |
D:\ORACLE\ORADATA\DBA\USERS01.DBF |
1,194,854 |
5 |
D:\ORACLE\ORADATA\DBA\TEST01.DBF |
1,203,343 |
SQL>select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1219882
SQL>alter database datafile 5 online;
Error at line 1
ORA-01113: 文件 5 需要介質(zhì)恢復(fù)
ORA-01110: 數(shù)據(jù)文件 5: 'D:\ORACLE\ORADATA\DBA\TEST01.DBF'
SQL>recover datafile 5;
完成介質(zhì)恢復(fù)
SQL>alter database datafile 5 online;
Database altered.
SQL>select file#,name,checkpoint_change# from v$datafile;
FILE# |
NAME |
CHECKPOINT_CHANGE# |
1 |
D:\ORACLE\ORADATA\DBA\SYSTEM01.DBF |
1,194,854 |
2 |
D:\ORACLE\ORADATA\DBA\UNDOTBS01.DBF |
1,194,854 |
3 |
D:\ORACLE\ORADATA\DBA\SYSAUX01.DBF |
1,194,854 |
4 |
D:\ORACLE\ORADATA\DBA\USERS01.DBF |
1,194,854 |
5 |
D:\ORACLE\ORADATA\DBA\TEST01.DBF |
1,219,929 |
SQL>select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1220043