DM8 基於時間點的恢復

LEVEL7發表於2021-06-07

在生產環境中,當我們誤操作刪除了重要資料時,可以使用閃回查詢來找回原來的資料,但當表被刪除或者資料庫沒有開啟閃回功能時,則無法使用閃回來獲取原有的表資料;此時我們可以使用基於歸檔日誌的時間點的恢復(不完全恢復)來達到恢復資料或恢復表的目的。

本章介紹DM8資料庫如何使用歸檔日誌檔案將資料庫恢復到指定時間點的狀態。

本章內容已在如下環境上測試:

作業系統:Red Hat Enterprise Linux Server release 7.9 (Maipo)

資料庫版本:DM Database Server 64 V8-1-2-18-21.05.27-140496-10013-ENT

1)     完全備份資料庫

資料庫故障還原的前提是要有備份檔案,這裡建立一個原始的資料庫備份檔案,可以使用DMRMAN離線備份檔案,也可以是聯機備份檔案。這裡以聯機備份為例(在聯機備份之前,需要保證資料庫已開啟並配置歸檔)。使用SYSDBA使用者登入資料庫,執行如下語句備份資料庫。

SQL> backup database full backupset '/dmbak/db_full_bak_210607';

2)     製造資料,增量備份資料庫

建立test使用者,並在test使用者下建立表t_table並插入資料,增量備份資料庫。

SQL> create user test IDENTIFIED by dameng123 DEFAULT TABLESPACE main;

SQL> create table test.t_table as select * from SYSOBJECTS;

SQL> select count(*) from test.t_table;

 

COUNT(*)           

--------------------

672

 

SQL> backup database increment with backupdir '/dmbak' backupset '/dmbak/db_increment_bak_210607';

3)     製造資料,生成歸檔日誌

建立表t1並插入資料,此過程生成歸檔日誌。

SQL> CREATE TABLE T1(C1 VARCHAR(20),C2 VARCHAR(20));

SQL> INSERT INTO T1 SELECT LEVEL,LEVEL+1 FROM DUAL CONNECT BY LEVEL<=10000;

SQL> COMMIT;

SQL> select count(*) from t1;

 

COUNT(*)           

--------------------

10000

4)     模擬故障,刪除表

模擬故障,刪除SYSDBA使用者下表t1。並記錄下刪除表時的系統時間。

SQL> drop table t1;

SQL> select sysdate;

 

SYSDATE           

-------------------

2021-06-07 17:58:19

5)     使用備份和歸檔日誌將資料庫恢復到指定時間點

t1 表被刪除,要想找回此表的資料,只能將資料庫恢復到表刪除的前一刻。恢復步驟參考如下:

A.     使用備份檔案還原資料庫

執行如下命令停止資料庫:

DmServiceDMSERVER stop

使用步驟2的備份檔案將資料庫還原到備份時狀態:

RMAN> restore database '/dmdata/DAMENG/dm.ini' from backupset '/dmbak/db_increment_bak_210607' with backupdir '/dmbak';

B.     使用歸檔日誌將資料庫恢復到指定時間點

檢視歸檔檔案的 DB_MAGIC:

dmrachk ARCH_FIL=ARCHIVE_LOCAL1_0x3E500F77[0]_2021-06-07_17-56-20.log

rachk V8

/*******************************************************************/

歸檔檔案ARCHIVE_LOCAL1_0x3E500F77[0]_2021-06-07_17-56-20.log明細.

version        : 0x7006

status         : INACTIVE

enc_flag       : FALSE

n_rpkgs        : 40

pmnt_magic     : 2001336632

db_magic       : 1045434231

src_db_magic   : 1045434231

arch_lsn       : 31165

arch_seq       : 4248

clsn           : 32925

next_seq       : 4287

g_next_seq     : 4287

file len       : 718848

file free      : 718848

dsc seqno      : 0

dsc node       : 1

create time    : 2021-06-07 17:59:46.000000

close time     : 2021-06-07 17:59:46.335166

/*******************************************************************/

 

概要(節點[0]):

總計: 1 個檔案

正確: 1 個檔案

錯誤: 0 個檔案

重複: 0 個檔案

 

the rachk tool running cost 0.374 ms

執行如下命令,指定with archivedir引數使用歸檔恢復,並指定until time引數將資料庫還原到刪除表之前的時間,由步驟4得知,我們大概在2021-06-07 17:58:19之前的時間刪除了表資料,這裡將資料庫恢復到2021-06-07 17:58:17的時間(時間越精確越好,無法精確的情況下預估)。

RMAN> recover database '/dmdata/DAMENG/dm.ini' with archivedir '/dmarch' use db_magic 1045434231 until time '2021-06-07 17:58:17';

C.     更新資料庫魔數

執行如下命令更新資料庫魔數db_magic資訊。

RMAN> recover database '/dmdata/DAMENG/dm.ini' update db_magic;

此時,資料庫恢復完成。

執行DmServiceDMSERVER start啟動資料庫,連線資料庫查詢SYSDBA使用者下t1表資料,可以看到t1表已恢復。

DmServiceDMSERVER start

SQL> select count(*) from t1;

 

COUNT(*)           

--------------------

10000

總結:

Ø    使用RECOVER命令恢復資料庫時,可以是基於備份集的恢復,也可以是使用本地歸檔日誌的恢復。基於時間點的恢復是使用本地歸檔日誌恢復的方式之一。

Ø    除了指定時間點,還可以通過指定LSN進行恢復。DM中每條REDO日誌記錄都對應一個唯一的LSN值,指定LSN值以後,資料庫將會精準的恢復到產生這個LSN時間點的狀態。基於LSN的恢復是使用UNTIL LSN 引數恢復到指定的LSN時間點的狀態。

Ø    基於時間點或LSN的恢復都是不完全恢復,基於歸檔日誌恢復到最新狀態為完全恢復。

Ø    在實際生產環境中,如果只是刪除某張表或資料,建議將資料庫還原到另一臺機器(目標資料庫)上,然後拷貝生產環境歸檔日誌將目標資料庫恢復到指定的時間點,以在不影響生成環境的情況下找回表資料,降低對生成環境的影響。

Ø    在多次故障恢復時,可以多次指定use db_magic引數多次恢復資料庫,直到恢復到最新狀態。

Ø    在使用歸檔恢復時需要注意保證歸檔日誌檔案的連續性,如果資料庫在中間關閉了歸檔後又重新開啟歸檔,或者歸檔日誌檔案丟失等原因造成了歸檔日誌不連續,將無法恢復資料庫到最新狀態。


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

相關文章