Nologging對恢復的影響(一)

space6212發表於2019-06-26
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. 對其中一個表用普通方式寫入資料,另一個表用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


4. 此時備份表所在的表空間

RMAN> backup tablespace suk;

啟動 backup 於 21-11月-10
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=135 devtype=DISK
通道 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_1DATABASECLTJEFM_1_1 標記=TAG20101121T2206
46 註釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:07
完成 backup 於 21-11月-10

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<=1000;

1000 rows deleted

SQL> commit;

Commit complete

SQL> select count(1) from test;

COUNT(1)
----------
9000

SQL> select count(1) from plogging;

COUNT(1)
----------
21963

SQL> select count(1) from pnologging;

COUNT(1)
----------
21963


6. 此時模擬資料庫故障,恢復表空間suk

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_1DATABASECLTJEFM_
1_1
通道 ORA_DISK_1: 已恢復備份段 1
段控制程式碼 = E:ORACLEPRODUCT10.2.0DB_1DATABASECLTJEFM_1_1 標記 = TAG20101121T
220646
通道 ORA_DISK_1: 恢復完成, 用時: 00:00:07
完成 restore 於 21-11月-10

RMAN> recover tablespace suk;

啟動 recover 於 21-11月-10
使用通道 ORA_DISK_1

正在開始介質的恢復
介質恢復完成, 用時: 00:00:04


7. 驗證資料

SQL> select count(1) from test;

COUNT(1)
----------
9000


SQL> select count(1) from plogging;

COUNT(1)
----------
21963

SQL> select count(1) from pnologging;

COUNT(1)
----------
21963


資料已經得到完全恢復。


結論:

一個表,發生nologging操作後再備份,且後續無nologging操作,則基於nologging後的備份可以完全恢復該表的資料。

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

相關文章