轉載-表空間和資料檔案offline的影響分析
簡單的說,offline datafile不做檢查點,online的時候需要恢復
而offline tablespace做檢查點(注意這裡指normal),online的時候不需要恢復
表空間offline
將表空間離線的語法中有三個子句可選,如下:
ALTER TABLESPACE tablespace_name OFFLINE [NORMAL,TEMPORARRY,IMMEDIATE]。
現在對這三個子句的作用及對資料庫的影響做個比較。
【NORMAL 】
如果用NORMAL子句則會使表空間所屬的資料檔案的塊的內容在系統全域性區裡的資料重新整理到檔案中,因此當你再次將表空間聯機時不需要恢復表空間裡的資料檔案。這也是預設子句。
【IMMEDIATE】
如果你在語句中指定IMMEDIATE,則資料庫不確定會對錶空間所屬資料檔案進行檢查點,這時就會造成離線檔案與資料庫不一致,所以當你需要將其聯機時,就需要進行恢復操作。
【TEMPORARY】
如果在語法中指定TEMPORARY 子句,則資料庫會執行檢查點程式,會對離線表空間中的資料檔案進行同步。但資料庫不能確定會對所有資料檔案進行。所以當你將表空間聯機時,有可能會需要進行恢復。
比較以下三種狀態對資料字典的影響
RMAN.DBF 檔案offline
users 表空間offline
最後一次,users 表空間offline immediate
sys@FOX> alter database datafile 'D:\ORACLE\ORADATA\FOX\RMAN.DBF' offline;
Database altered.
--dump控制檔案
sys@FOX> ALTER SESSION SET EVENTS 'immediate trace name controlf level 3';
Session altered.
--dump資料檔案
sys@FOX> ALTER SESSION SET EVENTS 'immediate trace name file_hdrs level 2';
Session altered.
sys@FOX> select substr(name, 1, 40) dname, CHECKPOINT_CHANGE#,LAST_CHANGE# ,OFFLINE_CHANGE#,status from v$datafile;
DNAME CHECKPOINT_CHANGE# LAST_CHANGE# OFFLINE_CHANGE# STATUS
---------------------------------------- ------------------ ------------ --------------- -------
D:\ORACLE\ORADATA\FOX\SYSTEM01.DBF 2460183058 2460066227 SYSTEM
D:\ORACLE\ORADATA\FOX\UNDOTBS01.DBF 2460183058 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\INDX01.DBF 2460183058 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\USERS01.DBF 2460183058 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\DEMO01.DBF 2460183058 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\RMAN.DBF 2460183058 2460183439 2460066227 RECOVER
6 rows selected.
sys@FOX> select substr(name, 1, 40) dname, CHECKPOINT_CHANGE#,LAST_CHANGE# ,OFFLINE_CHANGE#,creation_change#,status from
v$datafile;
DNAME CHECKPOINT_CHANGE# LAST_CHANGE# OFFLINE_CHANGE# CREATION_CHANGE# STATUS
---------------------------------------- ------------------ ------------ --------------- ---------------- -------
D:\ORACLE\ORADATA\FOX\SYSTEM01.DBF 2460183058 2460066227 5 SYSTEM
D:\ORACLE\ORADATA\FOX\UNDOTBS01.DBF 2460183058 2460066227 5042 ONLINE
D:\ORACLE\ORADATA\FOX\INDX01.DBF 2460183058 2460066227 6491 ONLINE
D:\ORACLE\ORADATA\FOX\USERS01.DBF 2460183058 2460066227 6529 ONLINE
D:\ORACLE\ORADATA\FOX\DEMO01.DBF 2460183058 2460066227 483025 ONLINE
D:\ORACLE\ORADATA\FOX\RMAN.DBF 2460183058 2460183439 2460066227 1899464 RECOVER
6 rows selected.
從dump的cf檔案可以看到檔案8的 Stop scn: 0x0000.92a36b8f
sys@FOX> select to_number('92a36b8f','xxxxxxxx') from dual;
TO_NUMBER('92A36B8F','XXXXXXXX')
--------------------------------
2460183439
就是last_change#
sys@FOX> alter tablespace users offline;
Tablespace altered.
sys@FOX> select name,SCNBAS from ts$;
NAME SCNBAS
-------------------------------------------------- ----------
SYSTEM 0
UNDOTBS1 0
TEMP 0
INDX 0
TOOLS 0
USERS 2460183864
DEMO 0
TEST 0
RMAN 0
sys@FOX> select substr(name, 1, 40) dname, CHECKPOINT_CHANGE#,LAST_CHANGE# ,OFFLINE_CHANGE#,status from v$datafile;
DNAME CHECKPOINT_CHANGE# LAST_CHANGE# OFFLINE_CHANGE# STATUS
---------------------------------------- ------------------ ------------ --------------- -------
D:\ORACLE\ORADATA\FOX\SYSTEM01.DBF 2460183058 2460066227 SYSTEM
D:\ORACLE\ORADATA\FOX\UNDOTBS01.DBF 2460183058 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\INDX01.DBF 2460183058 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\USERS01.DBF 2460183864 2460183864 2460066227 OFFLINE
D:\ORACLE\ORADATA\FOX\DEMO01.DBF 2460183058 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\RMAN.DBF 2460183058 2460183439 2460066227 RECOVER
6 rows selected.
sys@FOX> select substr(name,1,40) dname, recover, fuzzy, checkpoint_change#,CHECKPOINT_COUNT from v$datafile_header;
DNAME REC FUZ CHECKPOINT_CHANGE# CHECKPOINT_COUNT
---------------------------------------- --- --- ------------------ ----------------
D:\ORACLE\ORADATA\FOX\SYSTEM01.DBF NO YES 2460183058 1708
D:\ORACLE\ORADATA\FOX\UNDOTBS01.DBF NO YES 2460183058 1701
D:\ORACLE\ORADATA\FOX\INDX01.DBF NO YES 2460183058 1692
0 0
D:\ORACLE\ORADATA\FOX\DEMO01.DBF NO YES 2460183058 1661
D:\ORACLE\ORADATA\FOX\RMAN.DBF YES YES 2460183058 1637
6 rows selected.
tablespace offline normal時,生成了一個ts$.SCNBAS(離線scn),對應於每個資料檔案的結束SCN,基於ts$.SCNBAS(離線scn)能夠直接online
同時可以看到users表空間對應的checkpoint_change#=last_change#
會影響CONTROLFILE_CHANGE#
再來看offline immediate
沒有生成離線scn。也會影響CONTROLFILE_CHANGE#
sys@FOX> alter tablespace users offline immediate;
Tablespace altered.
sys@FOX> select name,SCNBAS from ts$;
NAME SCNBAS
-------------------------------------------------- ----------
SYSTEM 0
UNDOTBS1 0
TEMP 0
INDX 0
TOOLS 0
USERS 0
DEMO 0
TEST 0
RMAN 0
TESTING_LMT_ASSM 0
TEST_TBS 0
UNDOTBS2 0
TBS_2K 0
T_S 6455446
T_1 0
TEST1 0
TESTING_LMT_MSSM 0
TBS_TEST 0
18 rows selected.
同時可以看到last_change#>checkpoint_change#,這兩個就是檔案恢復的終點和起點
sys@FOX> select substr(name, 1, 40) dname, CHECKPOINT_CHANGE#,LAST_CHANGE# ,OFFLINE_CHANGE#,status from v$datafile;
DNAME CHECKPOINT_CHANGE# LAST_CHANGE# OFFLINE_CHANGE# STATUS
---------------------------------------- ------------------ ------------ --------------- -------
D:\ORACLE\ORADATA\FOX\SYSTEM01.DBF 2460183058 2460066227 SYSTEM
D:\ORACLE\ORADATA\FOX\UNDOTBS01.DBF 2460183058 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\INDX01.DBF 2460183058 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\USERS01.DBF 2460184060 2460184084 2460183864 RECOVER
D:\ORACLE\ORADATA\FOX\DEMO01.DBF 2460183058 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\RMAN.DBF 2460183058 2460183439 2460066227 RECOVER
6 rows selected.
sys@FOX> select substr(name,1,40) dname, recover, fuzzy, checkpoint_change#,CHECKPOINT_COUNT from v$datafile_header;
DNAME REC FUZ CHECKPOINT_CHANGE# CHECKPOINT_COUNT
---------------------------------------- --- --- ------------------ ----------------
D:\ORACLE\ORADATA\FOX\SYSTEM01.DBF NO YES 2460183058 1708
D:\ORACLE\ORADATA\FOX\UNDOTBS01.DBF NO YES 2460183058 1701
D:\ORACLE\ORADATA\FOX\INDX01.DBF NO YES 2460183058 1692
D:\ORACLE\ORADATA\FOX\USERS01.DBF YES YES 2460184060 1703
D:\ORACLE\ORADATA\FOX\DEMO01.DBF NO YES 2460183058 1661
D:\ORACLE\ORADATA\FOX\RMAN.DBF YES YES 2460183058 1637
6 rows selected.
sys@FOX> recover tablespace users;
Media recovery complete.
sys@FOX> select substr(name, 1, 40) dname, CHECKPOINT_CHANGE#,LAST_CHANGE# ,OFFLINE_CHANGE#,status from v$datafile;
DNAME CHECKPOINT_CHANGE# LAST_CHANGE# OFFLINE_CHANGE# STATUS
---------------------------------------- ------------------ ------------ --------------- -------
D:\ORACLE\ORADATA\FOX\SYSTEM01.DBF 2460183058 2460066227 SYSTEM
D:\ORACLE\ORADATA\FOX\UNDOTBS01.DBF 2460183058 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\INDX01.DBF 2460183058 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\USERS01.DBF 2460184084 2460184084 2460183864 OFFLINE
D:\ORACLE\ORADATA\FOX\DEMO01.DBF 2460183058 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\RMAN.DBF 2460183058 2460183439 2460066227 RECOVER
6 rows selected.
sys@FOX> select substr(name,1,40) dname, recover, fuzzy, checkpoint_change#,CHECKPOINT_COUNT from v$datafile_header;
DNAME REC FUZ CHECKPOINT_CHANGE# CHECKPOINT_COUNT
---------------------------------------- --- --- ------------------ ----------------
D:\ORACLE\ORADATA\FOX\SYSTEM01.DBF NO YES 2460183058 1708
D:\ORACLE\ORADATA\FOX\UNDOTBS01.DBF NO YES 2460183058 1701
D:\ORACLE\ORADATA\FOX\INDX01.DBF NO YES 2460183058 1692
D:\ORACLE\ORADATA\FOX\USERS01.DBF NO NO 2460184084 1704
D:\ORACLE\ORADATA\FOX\DEMO01.DBF NO YES 2460183058 1661
D:\ORACLE\ORADATA\FOX\RMAN.DBF YES YES 2460183058 1637
6 rows selected.
sys@FOX> alter tablespace users online;
Tablespace altered.
最後再看一下read only狀態
也會生成離線scn,同時users表空間對應的checkpoint_change#=last_change#
會影響CONTROLFILE_CHANGE#
sys@FOX> alter tablespace USERS read only;
Tablespace altered.
sys@FOX> select name,SCNBAS from ts$;
NAME SCNBAS
-------------------------------------------------- ----------
SYSTEM 0
UNDOTBS1 0
TEMP 0
INDX 0
TOOLS 0
USERS 2460184528
DEMO 0
TEST 0
RMAN 0
TESTING_LMT_ASSM 0
TEST_TBS 0
UNDOTBS2 0
TBS_2K 0
T_S 6455446
T_1 0
TEST1 0
TESTING_LMT_MSSM 0
TBS_TEST 0
18 rows selected.
sys@FOX> select substr(name,1,40) dname, recover, fuzzy, checkpoint_change#,CHECKPOINT_COUNT from v$datafile_header;
DNAME REC FUZ CHECKPOINT_CHANGE# CHECKPOINT_COUNT
---------------------------------------- --- --- ------------------ ----------------
D:\ORACLE\ORADATA\FOX\SYSTEM01.DBF NO YES 2460184522 1710
D:\ORACLE\ORADATA\FOX\UNDOTBS01.DBF NO YES 2460184522 1703
D:\ORACLE\ORADATA\FOX\INDX01.DBF NO YES 2460184522 1694
D:\ORACLE\ORADATA\FOX\USERS01.DBF NO NO 2460184528 1708
D:\ORACLE\ORADATA\FOX\DEMO01.DBF NO YES 2460184522 1663
D:\ORACLE\ORADATA\FOX\RMAN.DBF YES YES 2460183058 1637
6 rows selected.
sys@FOX> select substr(name, 1, 40) dname, CHECKPOINT_CHANGE#,LAST_CHANGE# ,OFFLINE_CHANGE#,status from v$datafile;
DNAME CHECKPOINT_CHANGE# LAST_CHANGE# OFFLINE_CHANGE# STATUS
---------------------------------------- ------------------ ------------ --------------- -------
D:\ORACLE\ORADATA\FOX\SYSTEM01.DBF 2460184522 2460066227 SYSTEM
D:\ORACLE\ORADATA\FOX\UNDOTBS01.DBF 2460184522 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\INDX01.DBF 2460184522 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\USERS01.DBF 2460184528 2460184528 2460183864 ONLINE
D:\ORACLE\ORADATA\FOX\DEMO01.DBF 2460184522 2460066227 ONLINE
D:\ORACLE\ORADATA\FOX\RMAN.DBF 2460183058 2460183439 2460066227 RECOVER
6 rows selected.
sys@FOX> select substr(name,1,40) dname, recover, fuzzy, checkpoint_change#,CHECKPOINT_COUNT from v$datafile_header;
DNAME REC FUZ CHECKPOINT_CHANGE# CHECKPOINT_COUNT
---------------------------------------- --- --- ------------------ ----------------
D:\ORACLE\ORADATA\FOX\SYSTEM01.DBF NO YES 2460184522 1710
D:\ORACLE\ORADATA\FOX\UNDOTBS01.DBF NO YES 2460184522 1703
D:\ORACLE\ORADATA\FOX\INDX01.DBF NO YES 2460184522 1694
D:\ORACLE\ORADATA\FOX\USERS01.DBF NO NO 2460184528 1708
D:\ORACLE\ORADATA\FOX\DEMO01.DBF NO YES 2460184522 1663
D:\ORACLE\ORADATA\FOX\RMAN.DBF YES YES 2460183058 1637
6 rows selected.
sys@FOX> select checkpoint_change#,CONTROLFILE_CHANGE#,resetlogs_change# from v$database;
CHECKPOINT_CHANGE# CONTROLFILE_CHANGE# RESETLOGS_CHANGE#
------------------ ------------------- -----------------
2460184522 2460184528 2460066228
sys@FOX> alter system checkpoint;
System altered.
sys@FOX> select checkpoint_change#,CONTROLFILE_CHANGE#,resetlogs_change# from v$database;
CHECKPOINT_CHANGE# CONTROLFILE_CHANGE# RESETLOGS_CHANGE#
------------------ ------------------- -----------------
2460184615 2460184615 2460066228
sys@FOX> select substr(name,1,40) dname, recover, fuzzy, checkpoint_change#,CHECKPOINT_COUNT from v$datafile_header;
DNAME REC FUZ CHECKPOINT_CHANGE# CHECKPOINT_COUNT
---------------------------------------- --- --- ------------------ ----------------
D:\ORACLE\ORADATA\FOX\SYSTEM01.DBF NO YES 2460184615 1711
D:\ORACLE\ORADATA\FOX\UNDOTBS01.DBF NO YES 2460184615 1704
D:\ORACLE\ORADATA\FOX\INDX01.DBF NO YES 2460184615 1695
D:\ORACLE\ORADATA\FOX\USERS01.DBF NO NO 2460184528 1708
D:\ORACLE\ORADATA\FOX\DEMO01.DBF NO YES 2460184615 1664
D:\ORACLE\ORADATA\FOX\RMAN.DBF YES YES 2460183058 1637
6 rows selected.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11088128/viewspace-692430/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 表空間OFFLINE和資料檔案OFFLINE的區別
- Data Guard 主端OFFLINE資料檔案和表空間
- 表空間offline,資料檔案offline 的區別(ZT)
- 表空間與資料檔案的offline和online操作
- 資料檔案、表空間offline用法及區別
- online/offline 表空間和資料檔案需謹慎!
- 表空間和資料檔案的管理
- 表空間和資料檔案管理
- 表空間&資料檔案和控制檔案(zt)
- ASM時的OFM特性對影的建資料檔名的影響及為SYSTEM表空間的資料檔案使用別名ASM
- 重新命名資料檔案和表空間
- 移動資料檔案、系統表空間檔案、臨時表空間檔案
- (個人)Oracle 表空間資料檔案遷移(轉)Oracle
- 刪除表空間和表空間包含的檔案
- 資料檔案,表空間的移動
- 表空間新增資料檔案的疑惑
- oracle基礎管理——表空間和資料檔案Oracle
- Oracle 表空間與資料檔案Oracle
- oracle 資料檔案表空間管理Oracle
- MySQL innodb共享表空間新增表空間資料檔案方法MySql
- 表空間中有資料也可以壓縮表空間(資料檔案)大小
- Oracle 表空間和資料檔案遇到的坑 (轉載於 微信公眾號 JieKeXu DBA之路)Oracle
- 臨時資料檔案 offline 對於匯入匯出的影響
- oracle 回收表空間的資料檔案大小Oracle
- 錯誤新增表空間的資料檔案
- 達夢資料庫之初始化頁大小對於表及表空間的影響分析資料庫
- 基礎知識5——表空間和資料檔案
- 9.管理表空間和資料檔案(筆記)筆記
- 檢視Oracle資料庫表空間大小,是否需要增加表空間的資料檔案Oracle資料庫
- 表空間和資料檔案的離線是分開的
- SYSAUX表空間滿對資料庫的影響以及解決措施UX資料庫
- oracle 表空間 資料檔案 筆記Oracle筆記
- 表空間資料檔案故障處理
- 線上遷移表空間資料檔案
- Oracle 表空間資料檔案遷移Oracle
- Oracle資料庫表空間的資料檔案大小上限。Oracle資料庫
- 新建的表空間(或資料檔案)丟失以及控制檔案丟失,有新建表空間(或資料檔案)前的控制文
- oracle誤刪除表空間的資料檔案Oracle