DM8 基於時間點的恢復
在生產環境中,當我們誤操作刪除了重要資料時,可以使用閃回查詢來找回原來的資料,但當表被刪除或者資料庫沒有開啟閃回功能時,則無法使用閃回來獲取原有的表資料;此時我們可以使用基於歸檔日誌的時間點的恢復(不完全恢復)來達到恢復資料或恢復表的目的。
本章介紹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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mongodb 基於oplog的時間點恢復MongoDB
- 7.5 使用binary log 做基於時間點的恢復
- 備份與恢復:Polardb資料庫資料基於時間點恢復資料庫
- ORACLE資料庫基於時間點的不完全恢復Oracle資料庫
- PostgreSQL 時間點恢復SQL
- 基於percona xtrabackup之innobackupex實現基於時間點資料庫恢復資料庫
- 2.MongoDB 4.2副本集環境基於時間點的恢復MongoDB
- mongodb異機做時間點恢復(基於時間範圍查詢匯出oplog)MongoDB
- MySQL binlog基於時間點恢復資料失敗是什麼鬼?MySql
- 1.MongoDB 2.7主從複製(master –> slave)環境基於時間點的恢復MongoDBAST
- 堅如磐石:TiDB 基於時間點的恢復(PiTR)特性最佳化之路丨6.5 新特性解析TiDB
- mongodb使用備份後的oplog做時間點恢復MongoDB
- PostgreSQL啟動恢復期間,恢復到的時間線的確定SQL
- 基於 Vuex 的時移操作(撤回/恢復)實現Vue
- 《PostgreSQL 指南:內幕探索》之基礎備份與時間點恢復(上)SQL
- win10恢復到上一個時間節點的方法Win10
- 使用NineData構建任意時間點(PITR)資料恢復能力資料恢復
- oracle基於SCN增量恢復Oracle
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- win10恢復到上一個時間節點的檔案還在嗎Win10
- PostgreSQL12中實現增量備份與任意時間點恢復SQL
- DM7使用DMRMAN恢復資料庫到指定時間點/LSN資料庫
- 基於GTID恢復誤篡改資料
- Prometheus 告警恢復時,怎麼獲取恢復時的值?Prometheus
- MySQL備份與恢復——基於MyDumper/MyLoader 邏輯備份恢復MySql
- 【DATAGUARD】Oracle 通過Dataguard指定恢復時間用於找回丟失資料Oracle
- 教你一招,告警恢復時如何拿到恢復時的值?
- MySQL備份與恢復——基於OUTFILE /LOAD DATA 邏輯備份恢復MySql
- 通過事務日誌恢復SqlServer資料庫到一個特定的時間點SQLServer資料庫
- postgreSQL 恢復至故障點 精準恢復SQL
- 教你一招,告警恢復時如何拿到恢復時的值? 合
- 大事務導致資料庫恢復時間長資料庫
- 聊聊基於docker部署的mysql如何進行資料恢復DockerMySql資料恢復
- 基於Redo Log和Undo Log的MySQL崩潰恢復流程MySql
- 高效管理 Elasticsearch 中基於時間的索引Elasticsearch索引
- Oracle RMAN 表空間恢復Oracle
- 基於percona xtrabackup 2.4.14的增量備份恢復還原mysql 5.6MySql
- (Les16 執行資料庫恢復)-表空間恢復資料庫