您好,登錄后才能下訂單哦!
6、非歸檔情況Offline處理
上面的一系列討論,都是在歸檔文件模式下進行的實驗。如果在非歸檔情況下,我們面對的問題是不同的。
首先,非歸檔模式下,表空間可以進行normal offline操作。
SQL> alter database noarchivelog;
Database altered.
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 22
Current log sequence 24
創建表空間,查看文件狀態的。
SQL> create tablespace testtbs datafile size 10m extent management local uniform. size 1m segment space management auto;
Tablespace created
SQL> alter tablespace testtbs add datafile size 20m autoextend on;
Tablespace altered
SQL> select tablespace_name, status from dba_tablespaces where tablespace_name='TESTTBS';
TABLESPACE_NAME STATUS
------------------------------ ---------
TESTTBS ONLINE
SQL> select file_name, status, online_status from dba_data_files where tablespace_name='TESTTBS';
FILE_NAME STATUS ONLINE_STATUS
-------------------- --------- -------------
/u01/app/oradata/ORA AVAILABLE ONLINE
11G/datafile/o1_mf_t
esttbs_94hsw8oo_.dbf
/u01/app/oradata/ORA AVAILABLE ONLINE
11G/datafile/o1_mf_t
esttbs_94hswx27_.dbf
正常Offline Tablespace。
SQL> alter tablespace testtbs offline normal;
Tablespace altered
SQL> select tablespace_name, status from dba_tablespaces where tablespace_name='TESTTBS';
TABLESPACE_NAME STATUS
------------------------------ ---------
TESTTBS OFFLINE
SQL> select file_name, status, online_status from dba_data_files where tablespace_name='TESTTBS';
FILE_NAME STATUS ONLINE_STATUS
-------------------- --------- -------------
/u01/app/oradata/ORA AVAILABLE OFFLINE
11G/datafile/o1_mf_t
esttbs_94hsw8oo_.dbf
/u01/app/oradata/ORA AVAILABLE OFFLINE
11G/datafile/o1_mf_t
esttbs_94hswx27_.dbf
SQL> alter tablespace testtbs online;
Tablespace altered
在非歸檔模式下,單獨對數據文件進行offline是不允許的。
SQL> alter database datafile '/u01/app/oradata/ORA11G/datafile/o1_mf_testtbs_94hsw8oo_.dbf' offline;
alter database datafile '/u01/app/oradata/ORA11G/datafile/o1_mf_testtbs_94hsw8oo_.dbf' offline
ORA-01145: 除非啟用了介質恢復, 否則不允許立即脫機
試想一下,這個過程是可以理解的。Oracle認為:如果你將文件進行offline,與表空間不一致。那么,一旦文件online的時候,一定是需要進行recover來“追”上表空間中其他文件。這個過程就是需要連續的redo log來進行apply動作。
在非歸檔模式下,連續的操作redo log file是不容易拿到的。從Oracle理論上,也就認為說不可能拿到的。所以,這個時候,Oracle索性禁止這種操作行為。
那么,是不是非歸檔模式下,就不允許進行單獨文件的offline了呢?不是的,只要你“允諾”說不會再回來。
通過后臺,我們刪除了數據文件。
--刪除掉數據文件
[oracle@SimpleLinux ~]$ rm /u01/app/oradata/ORA11G/datafile/o1_mf_testtbs_94hswx27_.dbf
[oracle@SimpleLinux ~]$
SQL> alter system checkpoint;
alter system checkpoint
此時,數據庫發現故障,實例終止。注意:不同版本Oracle在這個問題上行為有一些差異。CKPT將實例終止。
Sun Sep 29 16:59:08 2013
Beginning global checkpoint up to RBA [0x18.ad3e.10], SCN: 1062240
Errors in file /u01/app/diag/rdbms/ora11g/ora11g/trace/ora11g_ckpt_27311.trc:
ORA-01242: data file suffered media failure: database in NOARCHIVELOG mode
ORA-01116: error in opening database file 7
ORA-01110: data file 7: '/u01/app/oradata/ORA11G/datafile/o1_mf_testtbs_94hswx27_.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
Errors in file /u01/app/diag/rdbms/ora11g/ora11g/trace/ora11g_ckpt_27311.trc:
ORA-01242: data file suffered media failure: database in NOARCHIVELOG mode
ORA-01116: error in opening database file 7
ORA-01110: data file 7: '/u01/app/oradata/ORA11G/datafile/o1_mf_testtbs_94hswx27_.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
Sun Sep 29 16:59:08 2013
System state dump requested by (instance=1, sid=27311 (CKPT)), summary=[abnormal instance termination].
System State dumped to trace file /u01/app/diag/rdbms/ora11g/ora11g/trace/ora11g_diag_27299.trc
CKPT (ospid: 27311): terminating the instance due to error 1242
Dumping diagnostic data in directory=[cdmp_20130929165908], requested by (instance=1, sid=27311 (CKPT)), summary=[abnormal instance termination].
Instance terminated by CKPT, pid = 27311
--數據庫終止
[oracle@SimpleLinux ~]$ ps -ef | grep pmon
oracle 27487 27404 0 17:00 pts/2 00:00:00 grep pmon
[oracle@SimpleLinux ~]$
我們將數據庫啟動到mount狀態,之后可以offline drop文件。
--啟動到mount狀態。
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup mount
ORACLE instance started.
Total System Global Area 376635392 bytes
Fixed Size 1345072 bytes
Variable Size 306186704 bytes
Database Buffers 62914560 bytes
Redo Buffers 6189056 bytes
Database mounted.
SQL> select file#, status, recover, fuzzy, CHECKPOINT_CHANGE# from v$datafile_header;
FILE# STATUS RECOVER FUZZY CHECKPOINT_CHANGE#
---------- ------- ------- ----- ------------------
1 ONLINE NO YES 1062240
2 ONLINE NO YES 1062240
3 ONLINE NO YES 1062240
4 ONLINE NO YES 1062240
5 ONLINE NO YES 1062240
6 ONLINE NO YES 1062240
7 ONLINE 0
7 rows selected
--直接offline不允許
SQL> alter database datafile 7 offline;
alter database datafile 7 offline
ORA-01145: 除非啟用了介質恢復, 否則不允許立即脫機
--未打開情況下,表空間狀態不明確
SQL> alter tablespace testtbs offline;
alter tablespace testtbs offline
ORA-01109: 數據庫未打開
--Offline Drop
SQL> alter database datafile 7 offline drop;
Database altered
SQL> alter database open;
Database altered
SQL> drop tablespace testtbs;
Tablespace dropped
顧名思義,Offline Drop就是永久性的刪除這個對象,也就不需要了。更不要提到重新回歸online。
7、結論
最后,我們來總結一下Offline三種參數的情況。
offline normal:是最常用的場景,也是最不容易出問題的場景。Offline Normal的時候,Oracle會在表空間內部進行Check Point動作,保證表空間內部各個文件頭上面的SCN一致,也就是數據一致。如果存在數據文件不能前推SCN,如已經Offline,的情況,offline normal失效報錯。
offline temporary:比Normal要求略松的一種關閉模式。Temporary模式下,Oracle依然會去“嘗試”統一表空間內部文件頭的SCN號。如果數據文件可以統一,就進行Check Point動作,如果文件不能統一,操作也不會報錯,只是將其狀態標記為不一致。Temporary模式下Offline的表空間Online的時候,那些“有問題”的不一致文件,是需要進行media recovey的。沒有問題,打入check point的數據文件,就不需要進行恢復動作。
offline immediate:最松的一種offline模式。Immediate模式下,Oracle不會進行check point動作,無論有無問題的Datafile,都會被設置為需要Recover過程。在重新online的時候,表空間就需要進行重新的全表空media recover。
在日常選擇上,我們傾向嚴格的原則。因為非Normal方式的offline,都需要借助外部的redo log進行media recover動作。選擇的順序是normal,temporary和immediate。
Oracle表空間的Offline動作,是我們非常常用的一種日常維護操作手段。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。