Oracle备份恢复之闪回技术
生活随笔
收集整理的這篇文章主要介紹了
Oracle备份恢复之闪回技术
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作者:IT邦德
中國DBA聯盟(ACDU)成員,目前從事DBA及程序編程
(Web\java\Python)工作,主要服務于生產制造
現擁有 Oracle 11g OCP/OCM、
Mysql、Oceanbase(OBCA)認證
分布式TBase\TDSQL數據庫、國產達夢數據庫以及紅帽子認證
從業8年DBA工作,在數據庫領域有豐富的經驗
B站主播Oracle、Mysql、PG實戰課程,請搜索:jeames007擅長Oracle數據庫運維開發,備份恢復,安裝遷移,性能優化、故障應急處理等。
1.閃回查詢
原理:用戶恢復刪除的數據,利用的是undo表空間的數據,閃回查詢過去的某一個時間點或SCN的數據信息。SYS@PROD> conn scott/tiger SCOTT@PROD> create table t_fb_query1 as select * from dept; SCOTT@PROD> select * from t_fb_query1;DEPTNO DNAME LOC ---------- -------------- -------------10 ACCOUNTING NEW YORK20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTON SCOTT@PROD> set time on 14:30:49 SCOTT@PROD> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; ##也可以更改當前會話的時間格式: alter session set nls_date_format='yyyy-mm-dd hh24:miss'; select sysdate from dual; 2021-09-11 10:02:15 ##查詢當前SCN 14:31:58 SYS@PROD> select current_scn from v$database;CURRENT_SCN -----------1070729模擬刪除10號部門的數據 14:33:25 SCOTT@PROD> delete t_fb_query1 where deptno=10; 14:33:53 SCOTT@PROD> select * from t_fb_query1;DEPTNO DNAME LOC ---------- -------------- -------------20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTON語法:select * from 表名 as of timestamp/SCN;select * from t_fb_query1 as of timestamp to_timestamp('2021-09-11 10:02:15','yyyy-mm-dd hh24:mi:ss');DEPTNO DNAME LOC ---------- -------------- -------------10 ACCOUNTING NEW YORK20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTON##利用SCN查詢 14:35:31 SCOTT@PROD> select * from t_fb_query1 as of SCN 1070729;DEPTNO DNAME LOC ---------- -------------- -------------10 ACCOUNTING NEW YORK20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTON##插入閃回的數據 insert into scott.t_fb_query1 select * from scott.t_fb_query1 as of timestamp to_timestamp('2021-09-11 10:02:15','yyyy-mm-dd hh24:mi:ss') minus select * from scott.t_fb_query1;2.閃回表
原理:利用的是Undo表空間的undo數據,閃回表到某個時間點或某個SCN ##連接SCOTT用戶創建業務表: conn scott/tiger create table fb_1 (id number); insert into fb_1 values(10); commit;alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; select sysdate from dual;##查看此時的時間或者SCN: 時間: select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; 2021-09-11 10:17:27 SCN:conn / as sysdba select current_scn from v$database; CURRENT_SCN -----------1071438##執行數據刪除操作: delete from scott.fb_1; commit;##閃回表到數據刪除之前開啟被閃回表的行遷移: 14:42:45 SYS@PROD> alter table scott.fb_1 enable row movement;閃回查詢確認數據: select * from scott.fb_1 as of scn 1071438;執行閃回,可以執行多次閃回操作: flashback table scott.fb_1 to scn 1071438;或者 flashback table scott.fb_1 to timestamp to_timestamp('2021-09-11 10:17:27','yyyy-mm-dd hh24:mi:ss');驗證數據: SYS@PROD> select * from scott.fb_1;ID ----------10 ##關閉行遷移 SYS@PROD> alter table scott.fb_1 disable row movement;3.閃回數據庫
##設置閃回區 conn / as sysdba show parameter recover alter system set db_recovery_file_dest_size=4G; alter system set db_recovery_file_dest='/u01/app/oracle/fast_recovery_area';##開啟歸檔模式 查看歸檔模式 archive log list; 開歸檔 conn / as sysdba shutdown immediate startup mount alter database archivelog; alter database open;##開啟閃回及閃回日志保留數據的時間 目的:生成閃回日志 conn / as sysdba驗證是否開啟了閃回 select flashback_on from v$database; 開啟閃回 alter database flashback on; 如果為yes表示開啟 閃回日志保留兩天的數據,默認是一天(1440) alter system set db_flashback_retention_target=2880;SYS@PROD> show parameter retention_target##模擬業務及誤操作 連接scott用戶: conn scott/tiger 創建業務表: create table fbdb_scn as select * from emp; select count(*) from fbdb_scn;COUNT(*) ----------14 反饋回14條記錄查詢當前的SCN或時間: conn / as sysdba SCN:select current_scn from v$database; CURRENT_SCN -----------1065436 時間:select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; TO_CHAR(SYSDATE,'YY ------------------- 2021-09-11 07:16:45刪除fbdb_scn的信息: delete from scott.fbdb_scn; commit; SYS@PROD> drop user scott cascade;閃回數據庫到業務表有14條記錄的狀態: 關閉數據庫: shutdown immediate 啟動到Mount狀態: startup mount 閃回數據庫: SYS@PROD> flashback database to SCN 1065436; 或者 flashback database to timestamp to_timestamp('2021-09-11 07:16:45','yyyy-mm-dd hh24:mi:ss');以只讀方式打開數據庫,可以先驗證是否是我們想要閃回的狀態: alter database open read only; conn scott/tiger select count(*) from fbdb_scn; 如果反饋是14條記錄那么說明閃回成功, 如果不是14條記錄,那么我們可以繼續重復前兩個步驟進行閃回, 直到是我們想要的狀態。重新關閉數據庫: conn / as sysdba shutdown immediate startup mount alter database open resetlogs; 注:為不可逆操作SYS@PROD> select GROUP#,SEQUENCE#,MEMBERS,STATUS from v$log;GROUP# SEQUENCE# MEMBERS STATUS ---------- ---------- ---------- ----------------1 1 1 CURRENT2 0 1 UNUSED3 0 1 UNUSEDSYS@PROD> alter system switch logfile;
其他閃回技術請參考博客
https://blog.csdn.net/weixin_41645135/article/details/115053035
本文如有錯誤或不完善的地方請大家多多指正,留言或 QQ 皆可,
您的批評指正是我寫作的最大動力!
總結
以上是生活随笔為你收集整理的Oracle备份恢复之闪回技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【poj3070】Fibonacci
- 下一篇: GPU 与CPU的作用协调,工作流程、G