聊聊Oracle表空間Offline的三種引數(中)
上篇(http://space.itpub.net/17203031/viewspace-773628)中,我們討論了offline表空間問題、特點和用途,以及第一個offline引數normal。本篇我們繼續討論其他引數情況。
4、歸檔模式下Temporary Offline操作
Offline Normal是一種比較理想的情況。在很多時候,Offline一個Tablespace的時候,有其他因素需要考慮。比如,在offline操作的時候,此時如果有正在進行的對錶空間物件的DDL和DML操作,offline可能是會受到影響。
此外,如果一個表空間中有資料檔案已經被Offline過了,我們正常是不能夠進行offline normal的。此時,我們就需要使用temporary。
我們首先將表空間online處理,之後將其中一個資料檔案offline。注意:這個操作是在Archivelog模式下才能進行。
SQL> alter tablespace testtbs online;
Tablespace altered
SQL> alter database datafile '/u01/app/oradata/ORA11G/datafile/o1_mf_testtbs_94hpygrx_.dbf' offline;
Database altered
之後,觀察表空間和檔案狀態。我們發現被offline的資料檔案狀態為Recover。
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 RECOVER
11G/datafile/o1_mf_t
esttbs_94hpygrx_.dbf
/u01/app/oradata/ORA AVAILABLE ONLINE
11G/datafile/o1_mf_t
esttbs_94hq0dgm_.dbf
注意,Oracle維持資料檔案一致性,是一個動態一致性的過程。如果某一個檔案或者物件臨時性的退出了這個一致性機制,就表示這個檔案或者物件已經不一致。經過時間不論長短,如果該物件希望迴歸到原有的一致性體系裡面,就需要進行Recover。Oracle進行Recover手段就是連續的redo log檔案列。
這裡,我們看到的檔案recover狀態,就表明如果需要這個檔案回到Online狀態,需要進行Recover。
回到我們的Offline主題。此時,Online狀態表空間下的幾個檔案狀態是不一致的。
SQL> alter tablespace testtbs offline normal;
alter tablespace testtbs offline normal
ORA-01191: 檔案 6 已離線 - 無法進行正常離線
ORA-01110: 資料檔案 6: '/u01/app/oradata/ORA11G/datafile/o1_mf_testtbs_94hpygrx_.dbf'
SQL> create table mm tablespace testtbs as select * from dba_objects where 1=0;
Table created
正常normal offline已經不能成功了。我們此時可以使用temporary引數。
SQL> alter tablespace testtbs offline temporary;
Tablespace altered
--Alert Log中的日誌資訊
Sun Sep 29 16:02:34 2013
alter tablespace testtbs offline temporary
Completed: alter tablespace testtbs offline temporary
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 RECOVER
11G/datafile/o1_mf_t
esttbs_94hpygrx_.dbf
/u01/app/oradata/ORA AVAILABLE OFFLINE
11G/datafile/o1_mf_t
esttbs_94hq0dgm_.dbf
我們使用temporary引數,實現了Offline。但是對於那個提前進行offline的資料檔案,狀態依然是recover。猜想,Temporary Offline的過程是一種不一致的關閉。
試圖v$datafile和v$datafile_header分別反映了控制檔案和資料檔案頭中檔案SCN號的記錄。在offline normal的時候,我們看到了各個檔案的一致性。在進行offline normal的時候,Oracle是打入了一個check point(內部),來同步各個檔案的檔案頭SCN。
在使用Temporary的時候,檢視狀態如何呢?
SQL> select file#, status, recover, fuzzy, CHECKPOINT_CHANGE# from v$datafile_header;
FILE# STATUS RECOVER FUZZY CHECKPOINT_CHANGE#
---------- ------- ------- ----- ------------------
1 ONLINE NO YES 1054312
2 ONLINE NO YES 1054312
3 ONLINE NO YES 1054312
4 ONLINE NO YES 1054312
5 ONLINE NO YES 1054312
6 OFFLINE YES YES 1058660
7 OFFLINE NO NO 1058696
7 rows selected
SQL> select file#, CHECKPOINT_CHANGE#, OFFLINE_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# OFFLINE_CHANGE#
---------- ------------------ ---------------
1 1054312 787896
2 1054312 787896
3 1054312 787896
4 1054312 787896
5 1054312 819012
6 1058660 1058506
7 1058696 1058506
7 rows selected
控制檔案和檔案頭上面兩個檔案的SCN編號不相同,說明在一個表空間內部檔案的SCN號是不一致的。
說明:在Temporary Offline的時候,一些“有問題”的資料檔案和“沒問題”的資料檔案狀態是可以不一樣的。“沒問題”的資料檔案之間SCN號是一致。
如果此時要求Online表空間,會報錯。
SQL> alter tablespace testtbs online;
alter tablespace testtbs online
ORA-01113: 檔案 6 需要介質恢復
ORA-01110: 資料檔案 6: '/u01/app/oradata/ORA11G/datafile/o1_mf_testtbs_94hpygrx_.dbf'
在online的時候,Oracle一定會去online一個“一致”的表空間。此時,它會發現表空間內部SCN的不一致。根據提示,我們需要手工進行檔案恢復。
--進行media recovery過程
SQL> recover datafile 6;
Media recovery complete.
SQL> alter tablespace testtbs online;
Tablespace altered
online成功了。在alert log中,我們看到了進行media recovery中使用的redo log apply乃至archived redo log apply過程。注意一點:此時我們只恢復了datafile 6。
Sun Sep 29 16:07:22 2013
ALTER DATABASE RECOVER datafile 6
Media Recovery Start
Serial Media Recovery started
Recovery of Online Redo Log: Thread 1 Group 3 Seq 24 Reading mem 0
Mem# 0: /u01/app/oradata/ORA11G/onlinelog/o1_mf_3_92t73782_.log
Mem# 1: /u01/app/fast_recovery_area/ORA11G/onlinelog/o1_mf_3_92t737fj_.log
Media Recovery Complete (ora11g)
Completed: ALTER DATABASE RECOVER datafile 6
Sun Sep 29 16:07:36 2013
alter tablespace testtbs online
Completed: alter tablespace testtbs online
Temporary Offline的特點是:在進行Offline的時候,依然會對錶空間內檔案進行同步Check Point打入動作。與Normal不同的是,如果某個或者某些檔案因為種種原因,不能打入check point來同步SCN,Offline動作時可以繼續的。Temporary只保證一部分檔案一致即可。
在Temporary Offline表空間進行Online的時候,Oracle會檢查表空間內檔案的SCN一致性。注意:這個時候,Oracle只認可表空間一個SCN號加入到現有資料庫中,如果內部不一致,會拒絕online操作。
如果被拒絕online,我們只需要(注意是隻需要)將原來那些問題檔案進行recover就可以了。recover中使用Redo Log進行前推動作,將問題檔案推到和表空間其他檔案一致就可以了。
最後在online,就沒有問題了。
注意:即使是使用Temporary Offline,但是check point動作依然是存在,只是變成非強制性動作了。如果表空間檔案中沒有“問題兒童”,即使使用了Temporary Offline命令,效果和Normal沒有區別。而且,在online的時候,也不需要進行recover過程。
下面我們討論Immediate引數方法,它較Temporary更加直接。
5、歸檔模式下Immediate引數
我們先還原現場為Online,依然是將資料檔案6進行offline動作。
SQL> alter tablespace testtbs online;
Tablespace altered
SQL> alter database datafile '/u01/app/oradata/ORA11G/datafile/o1_mf_testtbs_94hpygrx_.dbf' offline;
Database altered
--嘗試正常關閉失敗
SQL> alter tablespace testtbs offline normal;
alter tablespace testtbs offline normal
ORA-01191: 檔案 6 已離線 - 無法進行正常離線
ORA-01110: 資料檔案 6: '/u01/app/oradata/ORA11G/datafile/o1_mf_testtbs_94hpygrx_.dbf'
我們此處使用offline immediate操作。
--立即offline
SQL> alter tablespace testtbs offline immediate;
Tablespace altered
SQL> select file#, CHECKPOINT_CHANGE#, OFFLINE_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# OFFLINE_CHANGE#
---------- ------------------ ---------------
1 1059725 787896
2 1059725 787896
3 1059725 787896
4 1059725 787896
5 1059725 819012
6 1059634 1059175
7 1059725 1059175
7 rows selected
SQL> select file#, status, recover, fuzzy, CHECKPOINT_CHANGE# from v$datafile_header;
FILE# STATUS RECOVER FUZZY CHECKPOINT_CHANGE#
---------- ------- ------- ----- ------------------
1 ONLINE NO YES 1059725
2 ONLINE NO YES 1059725
3 ONLINE NO YES 1059725
4 ONLINE NO YES 1059725
5 ONLINE NO YES 1059725
6 OFFLINE YES YES 1059634
7 OFFLINE YES YES 1059725
7 rows selected
和Temporary相似的內容方面是,問題資料檔案存在的情況下,表空間依然可以進行Offline操作。但是區別是,Oracle在immediate引數情況下,就不會給任何資料檔案進行check point統一SCN動作了。
這種方法類似於shutdown abort。無論檔案是不是有問題,Oracle都不進行檢查和統一動作。
還有個細節需要全域性注意,就是v$datafile_header中的recover列。在normal引數的時候,這個列是不顯示的,也就是表示這個問題不需要關注和理睬。在Tempory模式下,只有那些“問題”檔案才會被標註為YES,也就是需要進行Recover。其他沒問題的檔案狀態為NO,也就是不需要進行recover。上面的實驗也證明了這點。
而immediate引數情況下,所有檔案狀態都是YES,表示無論好壞,都要進行recover。
下面嘗試online動作。
SQL> alter tablespace testtbs online;
alter tablespace testtbs online
*
ERROR at line 1:
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6:
'/u01/app/oradata/ORA11G/datafile/o1_mf_testtbs_94hpygrx_.dbf'
Online動作失敗,需要進行恢復。
SQL> recover datafile 6;
Media recovery complete.
--依然不行,需要將所有的檔案都recover一遍。
SQL> alter tablespace testtbs online;
alter tablespace testtbs online
*
ERROR at line 1:
ORA-01113: file 7 needs media recovery
ORA-01110: data file 7:
'/u01/app/oradata/ORA11G/datafile/o1_mf_testtbs_94hq0dgm_.dbf'
索性直接恢復表空間好了。
SQL> recover tablespace testtbs
Media recovery complete.
--Online動作
SQL> alter tablespace testtbs online;
Tablespace altered.
Normal、Temporary和Immediate是三個依次使用,嚴格級別逐層下降的引數方法。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29067253/viewspace-2151759/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 聊聊Oracle表空間Offline的三種引數(上)Oracle
- 聊聊Oracle表空間Offline的三種引數(下)Oracle
- 表空間OFFLINE的3種選項。
- Oracle表空間Oracle
- oracle 表空間Oracle
- oracle表空間的整理Oracle
- 表空間與資料檔案的offline和online操作
- 增加oracle表空間Oracle
- oracle temp 表空間Oracle
- oracle 表移動表空間Oracle
- Oracle表移動表空間Oracle
- Oracle 批量建表空間Oracle
- Oracle清理SYSAUX表空間OracleUX
- Oracle的表空間quota詳解Oracle
- Oracle OCP(47):表空間的建立Oracle
- Oracle Temp 表空間切換Oracle
- Oracle 表空間增加檔案Oracle
- Oracle OCP(49):表空間管理Oracle
- Oracle表空間收縮方案Oracle
- Oracle RMAN 表空間恢復Oracle
- 淺談mysql中各種表空間(tablespaces)的概念MySql
- Oracle中表空間、表、索引的遷移Oracle索引
- oracle中undo表空間丟失處理方法Oracle
- Oracle新建使用者、表空間、表Oracle
- oracle建立臨時表空間和資料表空間以及刪除Oracle
- oracle臨時表空間相關Oracle
- oracle sql 表空間利用率OracleSQL
- 【Oracle 恢復表空間】 實驗Oracle
- 【TABLESPACE】Oracle表空間最佳實踐Oracle
- 剛體在三維空間的旋轉-幾種表達方式
- MySQL 中的共享表空間與獨立表空間如何選擇MySql
- 聊聊Go工作空間Go
- oracle 建立表空間和使用者Oracle
- Oracle建立表空間和使用者Oracle
- Oracle中新建表空間、使用者Oracle
- ORACLE線上切換undo表空間Oracle
- oracle表空間增長趨勢分析Oracle
- Oracle OCP(46):表空間、段、區、塊Oracle