Nologging對恢復的影響(二)
Nologging在提高效能的同時,會給恢復帶來一定的影響。下面透過兩個案例來說明它是怎麼影響恢復的。
第二個案例要驗證在先備份資料檔案,再發生nologging操作的情況下,是否可以完全恢復資料。
[@more@]1. 建表
CREATE TABLE SUK.PLOGGING
( A NUMBER,
B NUMBER
)
PARTITION BY LIST (A)
(PARTITION P1 VALUES (1) TABLESPACE SUK ,
PARTITION P2 VALUES (2) TABLESPACE SUK ) ;
CREATE TABLE SUK.PNOLOGGING
( C NUMBER,
D NUMBER
)
PARTITION BY LIST (C)
(PARTITION P1 VALUES (1) TABLESPACE SUK ,
PARTITION P2 VALUES (2) TABLESPACE SUK ) ;
2. 用普通的方式寫入資料
SQL> insert into plogging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> insert into pnologging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> commit;
Commit complete
3. 此時備份表所在的表空間
RMAN> backup tablespace suk;
啟動 backup 於 21-11月-10
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 啟動全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集中的資料檔案
輸入資料檔案 fno=00007 name=E:ORACLEPRODUCT10.2.0ORADATASUK.DBF
通道 ORA_DISK_1: 正在啟動段 1 於 21-11月-10
通道 ORA_DISK_1: 已完成段 1 於 21-11月-10
段控制程式碼=E:ORACLEPRODUCT10.2.0DB_1DATABASEDLTJFGA_1_1 標記=TAG20101121T2224
10 註釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:07
完成 backup 於 21-11月-10
4. 繼續往表寫資料,其他一個用nologging方式寫
SQL> insert into plogging select 1,1 from dba_tables;
963 rows inserted
SQL> insert /*+ append */ into pnologging select 1,1 from dba_tables;
963 rows inserted
SQL> commit;
Commit complete
5. 再次用普通方式往表寫資料
SQL> insert into plogging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> insert into pnologging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> commit;
Commit complete
SQL> delete from test where rownum<=99;
99 rows deleted
SQL> commit;
Commit complete
SQL> select count(1) from test;
COUNT(1)
----------
8901
SQL> select count(1) from plogging;
COUNT(1)
----------
21963
SQL> select count(1) from pnologging;
COUNT(1)
----------
21963
6. 此時模擬資料庫還原恢復
RMAN> restore tablespace suk;
啟動 restore 於 21-11月-10
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
通道 ORA_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00007恢復到E:ORACLEPRODUCT10.2.0ORADATASUK.DBF
通道 ORA_DISK_1: 正在讀取備份段 E:ORACLEPRODUCT10.2.0DB_1DATABASEDLTJFGA_
1_1
通道 ORA_DISK_1: 已恢復備份段 1
段控制程式碼 = E:ORACLEPRODUCT10.2.0DB_1DATABASEDLTJFGA_1_1 標記 = TAG20101121T
222410
通道 ORA_DISK_1: 恢復完成, 用時: 00:00:08
完成 restore 於 21-11月-10
RMAN> recover tablespace suk;
啟動 recover 於 21-11月-10
使用通道 ORA_DISK_1
正在開始介質的恢復
介質恢復完成, 用時: 00:00:02
完成 recover 於 21-11月-10
RMAN> alter database open;
7. 驗證資料
SQL> select count(1) from test;
COUNT(1)
----------
8901
SQL> select count(1) from plogging;
COUNT(1)
----------
21963
SQL> select count(1) from pnologging;
select count(1) from pnologging
ORA-01578: ORACLE 資料塊損壞 (檔案號 7, 塊號 3186)
ORA-01110: 資料檔案 7: 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF'
ORA-26040: 資料塊是使用 NOLOGGING 選項載入的
SQL> select count(1) from pnologging partition(p1);
select count(1) from pnologging partition(p1)
ORA-01578: ORACLE 資料塊損壞 (檔案號 7, 塊號 3186)
ORA-01110: 資料檔案 7: 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF'
ORA-26040: 資料塊是使用 NOLOGGING 選項載入的
SQL> select count(1) from pnologging partition(p2);
COUNT(1)
----------
10500
可以,沒有發生過nologging操作的表都可以完全恢復,發生過nologging的表的資料不能完全恢復。
結論:
如果備份後再發生nologging操作,則
1. 產生nologging操作的表不能被完全恢復。
2. nologging操作只會影響與之發生聯絡的表,不會影響其他表。
3. 如果表是非分割槽表,則會影響全表。如果nologging影響的表是分割槽表,nologging操作只會影響受該操作影響的資料對應的分割槽,而不影響其他分割槽。
例如T有兩個分割槽P1和P2,在備份後對T發生了nologging操作,但隻影響了P1的資料,則恢復時,可以正常訪問P2的資料,而訪問P1時會報錯。
4. 即使nologging操作後的操作都是logging方式,也不能恢復後面的資料 。
5. nologging雖然可以提高效能,但是可能會造成資料無法恢復,因此使用這一特性時要非常謹慎。一般在如下情況下才建議使用:
1) 臨時表
2) 中間表
3) 資料可輕易重新生成的表
4) 建立索引
第二個案例要驗證在先備份資料檔案,再發生nologging操作的情況下,是否可以完全恢復資料。
[@more@]1. 建表
CREATE TABLE SUK.PLOGGING
( A NUMBER,
B NUMBER
)
PARTITION BY LIST (A)
(PARTITION P1 VALUES (1) TABLESPACE SUK ,
PARTITION P2 VALUES (2) TABLESPACE SUK ) ;
CREATE TABLE SUK.PNOLOGGING
( C NUMBER,
D NUMBER
)
PARTITION BY LIST (C)
(PARTITION P1 VALUES (1) TABLESPACE SUK ,
PARTITION P2 VALUES (2) TABLESPACE SUK ) ;
2. 用普通的方式寫入資料
SQL> insert into plogging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> insert into pnologging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> commit;
Commit complete
3. 此時備份表所在的表空間
RMAN> backup tablespace suk;
啟動 backup 於 21-11月-10
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 啟動全部資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集中的資料檔案
輸入資料檔案 fno=00007 name=E:ORACLEPRODUCT10.2.0ORADATASUK.DBF
通道 ORA_DISK_1: 正在啟動段 1 於 21-11月-10
通道 ORA_DISK_1: 已完成段 1 於 21-11月-10
段控制程式碼=E:ORACLEPRODUCT10.2.0DB_1DATABASEDLTJFGA_1_1 標記=TAG20101121T2224
10 註釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:07
完成 backup 於 21-11月-10
4. 繼續往表寫資料,其他一個用nologging方式寫
SQL> insert into plogging select 1,1 from dba_tables;
963 rows inserted
SQL> insert /*+ append */ into pnologging select 1,1 from dba_tables;
963 rows inserted
SQL> commit;
Commit complete
5. 再次用普通方式往表寫資料
SQL> insert into plogging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> insert into pnologging select mod(rownum,2)+1,mod(rownum,2)+1 from dba_objects;
10500 rows inserted
SQL> commit;
Commit complete
SQL> delete from test where rownum<=99;
99 rows deleted
SQL> commit;
Commit complete
SQL> select count(1) from test;
COUNT(1)
----------
8901
SQL> select count(1) from plogging;
COUNT(1)
----------
21963
SQL> select count(1) from pnologging;
COUNT(1)
----------
21963
6. 此時模擬資料庫還原恢復
RMAN> restore tablespace suk;
啟動 restore 於 21-11月-10
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
通道 ORA_DISK_1: 正在開始恢復資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集恢復的資料檔案
正將資料檔案00007恢復到E:ORACLEPRODUCT10.2.0ORADATASUK.DBF
通道 ORA_DISK_1: 正在讀取備份段 E:ORACLEPRODUCT10.2.0DB_1DATABASEDLTJFGA_
1_1
通道 ORA_DISK_1: 已恢復備份段 1
段控制程式碼 = E:ORACLEPRODUCT10.2.0DB_1DATABASEDLTJFGA_1_1 標記 = TAG20101121T
222410
通道 ORA_DISK_1: 恢復完成, 用時: 00:00:08
完成 restore 於 21-11月-10
RMAN> recover tablespace suk;
啟動 recover 於 21-11月-10
使用通道 ORA_DISK_1
正在開始介質的恢復
介質恢復完成, 用時: 00:00:02
完成 recover 於 21-11月-10
RMAN> alter database open;
7. 驗證資料
SQL> select count(1) from test;
COUNT(1)
----------
8901
SQL> select count(1) from plogging;
COUNT(1)
----------
21963
SQL> select count(1) from pnologging;
select count(1) from pnologging
ORA-01578: ORACLE 資料塊損壞 (檔案號 7, 塊號 3186)
ORA-01110: 資料檔案 7: 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF'
ORA-26040: 資料塊是使用 NOLOGGING 選項載入的
SQL> select count(1) from pnologging partition(p1);
select count(1) from pnologging partition(p1)
ORA-01578: ORACLE 資料塊損壞 (檔案號 7, 塊號 3186)
ORA-01110: 資料檔案 7: 'E:ORACLEPRODUCT10.2.0ORADATASUK.DBF'
ORA-26040: 資料塊是使用 NOLOGGING 選項載入的
SQL> select count(1) from pnologging partition(p2);
COUNT(1)
----------
10500
可以,沒有發生過nologging操作的表都可以完全恢復,發生過nologging的表的資料不能完全恢復。
結論:
如果備份後再發生nologging操作,則
1. 產生nologging操作的表不能被完全恢復。
2. nologging操作只會影響與之發生聯絡的表,不會影響其他表。
3. 如果表是非分割槽表,則會影響全表。如果nologging影響的表是分割槽表,nologging操作只會影響受該操作影響的資料對應的分割槽,而不影響其他分割槽。
例如T有兩個分割槽P1和P2,在備份後對T發生了nologging操作,但隻影響了P1的資料,則恢復時,可以正常訪問P2的資料,而訪問P1時會報錯。
4. 即使nologging操作後的操作都是logging方式,也不能恢復後面的資料 。
5. nologging雖然可以提高效能,但是可能會造成資料無法恢復,因此使用這一特性時要非常謹慎。一般在如下情況下才建議使用:
1) 臨時表
2) 中間表
3) 資料可輕易重新生成的表
4) 建立索引
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-1041839/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Nologging對恢復的影響(一)
- 一次rman恢復引起的nologging問題模擬
- mac恢復出廠設定方法介紹 mac恢復出廠設定對電腦有什麼影響Mac
- TrendForce:DRAM廠陸續恢復生產,預估對第二季總DRAM位元產出影響低於1%
- 探索webpack熱更新對程式碼打包結果的影響(二)Web
- 【硬碟資料恢復】加電有異響的硬碟資料恢復硬碟資料恢復
- 【DATAGUARD】Oracle Dataguard nologging 塊修復Oracle
- 語言對思維的影響
- unusable index對DML/QUERY的影響Index
- 網線的分類與對網速的影響 網線對網速影響大嗎?
- 浮動的盒子對img的影響
- INDEX建立方式對SQL的影響IndexSQL
- 關於OPcache對Swoole影響的理解opcache
- 來電對播放音樂的影響
- python:super()對多繼承的影響Python繼承
- DB2 HADR對效能的影響DB2
- 【NetApp資料恢復案例】針對NetApp誤刪除資料的恢復APP資料恢復
- windows server許可權對tomcat的影響WindowsServerTomcat
- 虛擬記憶體對 OI 的影響記憶體
- VideaHealth:人工智慧對牙科的真正影響Idea人工智慧
- 網路延遲對事務的影響
- JVM 引數調整對 sortx 的影響JVM
- Mavrck:COVID-19對創作者的影響VR
- cluster factor對執行計劃的影響
- 淺談疫情對消費金融的影響
- namespace對axis解析xml請求的影響namespaceXML
- 終端環境對go程式的影響?Go
- margin為負值對佈局的影響
- Sailthru:Facebook醜聞對人們的影響AI
- 修改系統時間對oracle的影響Oracle
- 99恢復二叉樹二叉樹
- SqlServer備份和恢復(二)SQLServer
- SQLServer異常故障恢復(二)SQLServer
- MySQL alter 新增列對dml影響MySql
- 海外伺服器對SEO影響?伺服器
- 與控制檔案有關的恢復(二)
- Cirium:資料揭示新冠肺炎對中國航空業的影響及對全球航空旅遊增長的影響
- 主動寫入流對@ResponseBody註解的影響