聊聊Oracle表空間Offline的三種引數(下)

路途中的人2012發表於2018-03-12

 

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動作。選擇的順序是normaltemporaryimmediate

 

Oracle表空間的Offline動作,是我們非常常用的一種日常維護操作手段。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29067253/viewspace-2151760/,如需轉載,請註明出處,否則將追究法律責任。

相關文章