Oracle閃回詳解

来源:http://www.cnblogs.com/rangle/archive/2017/12/14/8039282.html
-Advertisement-
Play Games

Oracle 9i 開始支持閃回,Oracle10g開始全面支持閃回功能,Oracle11g有所完善,為大家快速的恢複數據,查詢歷史數據提供了很大的便捷方法。 本文主要對Oracle常用閃回使用做些詳細介紹,其中對於不常用的事務和版本閃回,這裡就不做介紹 一、Oracle閃回概述 二、Oracle閃 ...


Oracle 9i 開始支持閃回,Oracle10g開始全面支持閃回功能,Oracle11g有所完善,為大家快速的恢複數據,查詢歷史數據提供了很大的便捷方法。

本文主要對Oracle常用閃回使用做些詳細介紹,其中對於不常用的事務和版本閃回,這裡就不做介紹

一、Oracle閃回概述

閃回級別 閃回場景 閃回技術 對象依賴   影響數據
資料庫 表截斷、邏輯錯誤、其他多表意外事件 閃回DATABASE 閃回日誌、undo
DROP 刪除表 閃回DROP 回收站(recyclebin)
更新、刪除、插入記錄 閃回TABLE 還原數據,undo
查詢 當前數據和歷史數據對比 閃回QUERY 還原數據,undo
版本查詢 比較行版本 閃回Version Query 還原數據,undo
事務查詢 比較 閃回Transaction Query 還原數據,undo
歸檔 DDL、DML 閃回Archive 歸檔日誌
         

 

 

 

 

 

 

 

  

 

 二、Oracle閃回使用詳解

1、閃回開啟
(1)開啟閃回必要條件
a.開啟歸檔日誌

SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/U01/app/oracle/oradata/testdb/arch
Oldest online log sequence 844
Next log sequence to archive 846
Current log sequence 846

##如未開啟,在mount狀態執行alter database archivelog;

b.設置合理的閃回區

db_recovery_file_dest:指定閃回恢復區的位置
db_recovery_file_dest_size:指定閃回恢復區的可用空間大小
db_flashback_retention_target:指定資料庫可以回退的時間,單位為分鐘,預設1440分鐘(1天),實際取決於閃回區大小
(2)檢查是否開啟閃回

SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO

(3)開啟閃回

a.開啟歸檔

mount狀態:alter database archivelog;

b.設置閃回區

SQL> alter system set db_recovery_file_dest='/home/U01/app/oracle/fast_recovery_area' scope=both;
System altered.
SQL> alter system set db_recovery_file_dest_size=60G scope=both;
System altered.
SQL> alter system set db_flashback_retention_target=4320 scope=both;
System altered.    

c.開啟flashback (10g在mount開啟)

SQL> alter database flashback on;
Database altered.

(4)確定閃回開啟

SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES    

(5)關閉閃回

SQL> alter database flashback off;
Database altered.

2、閃回使用

(1)閃回查詢
閃回查詢主要是根據Undo表空間數據進行多版本查詢,針對v$和x$動態性能視圖無效,但對DBA_、ALL_、USER_是有效的
a.閃回查詢
允許用戶查詢過去某個時間點的數據,用以重構由於意外刪除或更改的數據,數據不會變化。

SQL> select * from scott.dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> delete from scott.dept where deptno=40;
1 row deleted.
SQL> commit;
Commit complete.
SQL> select * from scott.dept as of timestamp sysdate-10/1440;

DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> select * from scott.dept as of timestamp to_timestamp('2017-12-14 16:20:00','yyyy-mm-dd hh24:mi:ss');

DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

SQL> select * from scott.dept as of scn 16801523;

DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

b.閃回版本查詢

用於查詢行級資料庫隨時間變化的方法

c.閃回事務查詢
用於提供查看事務級別資料庫變化的方法

(2)閃回表(update/insert/delete)
閃回表就是對錶的數據做回退,回退到之前的某個時間點,其利用的是undo的歷史數據,與undo_retention設置有關,預設是14400分鐘(1天)
同樣,sys用戶表空間不支持閃回表,要想表閃回,需要允許表啟動行遷移(row movement)
閃回表示例:

SQL> flashback table scott.dept to timestamp to_timestamp('2017-12-14 16:20:00','yyyy-mm-dd hh24:mi:ss');
flashback table scott.dept to timestamp to_timestamp('2017-12-14 16:20:00','yyyy-mm-dd hh24:mi:ss')
ERROR at line 1:
ORA-08189: cannot flashback the table because row movement is not enabled

SQL> select row_movement from dba_tables where table_name='DEPT' and owner='SCOTT';
ROW_MOVE
--------
DISABLED
SQL> alter table scott.dept enable row movement;
Table altered.

SQL> flashback table scott.dept to timestamp to_timestamp('2017-12-14 16:20:00','yyyy-mm-dd hh24:mi:ss');
Flashback complete.
SQL> select * from scott.dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON    
SQL> alter table scott.dept disable row movement;
Table altered.

(3)閃回DROP(drop table)

當一個表被drop掉,表會被放入recyclebin回收站,可通過回收站做表的閃回。表上的索引、約束等同樣會被恢復
不支持sys/system用戶表空間對象,可通過alter system set recyclebin=off;關閉回收站功能
閃回DROP示例:

SQL> select * from t ;

ID NAME
---------- ---------------------------------------
1
2
3
4
30

SQL> drop table t;

Table dropped.

SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T BIN$YEh2QcvZdJLgUxyAgQpnVQ==$0 TABLE 2017-12-14:15:02:06
SQL> flashback table t to before drop;

Flashback complete.

SQL> select * from t;

ID NAME
---------- -------------------------------------
1
2
3
4
30    

備註:即使不開始flashback,只要開啟了recyclebin,那麼就可以閃回DROP表。

但如果連續覆蓋,就需要指定恢復的表名,如果已經存在表,則需要恢復重命名。

SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T BIN$YEh2QcvddJLgUxyAgQpnVQ==$0 TABLE 2017-12-14:15:07:54
T BIN$YEh2QcvcdJLgUxyAgQpnVQ==$0 TABLE 2017-12-14:15:07:27
SQL> flashback table "BIN$YEh2QcvcdJLgUxyAgQpnVQ==$0" to before drop ;
Flashback complete.
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T BIN$YEh2QcvddJLgUxyAgQpnVQ==$0 TABLE 2017-12-14:15:07:54
SQL> flashback table t to before drop rename to tt;
Flashback complete.

(4)閃回資料庫(truncate/多表數據變更)

資料庫閃回必須在mounted狀態下進行,基於快照的可以再open下進行閃回庫
閃回資料庫主要是將資料庫還原值過去的某個時間點或SCN,用於資料庫出現邏輯錯誤時,需要open database resetlogs
a.全庫閃回
資料庫閃回示例

SQL> select * from scott.EMP;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 20
7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30
7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30
7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450 10
7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 20
7839 KING PRESIDENT 1981-11-17 00:00:00 5000 10
7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30
7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100 20
7900 JAMES CLERK 7698 1981-12-03 00:00:00 950 30
7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000 20
7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300 10

14 rows selected.

SQL> truncate table scott.EMP;

Table truncated.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 9.4067E+10 bytes
Fixed Size 2263936 bytes
Variable Size 9395242112 bytes
Database Buffers 8.4557E+10 bytes
Redo Buffers 112766976 bytes
Database mounted.
SQL> flashback database to timestamp to_timestamp('2017-12-14 14:12:46','yyyy-mm-dd HH24:MI:SS');

Flashback complete.
SQL> alter database open resetlogs;

Database altered.

SQL> select * from scott.emp;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30
7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 20
7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30
7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30
7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450 10
7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 20
7839 KING PRESIDENT 1981-11-17 00:00:00 5000 10
7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30
7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100 20
7900 JAMES CLERK 7698 1981-12-03 00:00:00 950 30
7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000 20
7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300 10

14 rows selected.

b.快照閃回


(5)閃回歸檔(增加、修改、重命名、刪除表的列、truncate表、修改表的約束、以及修改分區表的分區規範)

 

3、閃回註意事項
(1)資料庫閃回需要在mounted下進行,並且open時需要使用resetlogs
(2)閃回DROP只能用於非系統表空間和本地管理的表空間,外鍵約束無法恢復,對方覆蓋、重命名需註意
(3)表DROP,對應的物化視圖會被徹底刪除,物化視圖不會存放在recyclebin里
(4)閃回表,如果在做過dml,然後進行了表結構修改、truncate等DDL操作,新增/刪除結構無法做閃回
(5)閃回歸檔,必須在assm管理tablespace和undo auto管理下進行
(6)註意閃回區管理,防止磁碟爆滿,閃回區空間不足等

三、備註
1、相關數據字典
V$FLASHBACK_DATABASE_LOG ##查看資料庫可閃回的時間點/SCN等信息
V$flashback_database_stat ##查看閃回日誌空間記錄信息
2、常用查詢語句
(1)查看資料庫狀態

SQL> select NAME,OPEN_MODE ,DATABASE_ROLE,CURRENT_SCN,FLASHBACK_ON from v$database;

NAME OPEN_MODE DATABASE_ROLE CURRENT_SCN FLASHBACK_ON
------------- -------------------- ---------------- ----------- ------------------
TESTDB READ WRITE PRIMARY 16812246 YES

(2)獲取當前資料庫的系統時間和SCN

 

SQL> select to_char(systimestamp,'yyyy-mm-dd HH24:MI:SS') as sysdt , dbms_flashback.get_system_change_number scn from dual;

SYSDT SCN
------------------- ----------
2017-12-14 14:28:33 16813234

(3)查看資料庫可恢復的時間點

SQL> select * from V$FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE
-------------------- ------------------- ---------------- -------------- ------------------------
16801523 2017-12-14 11:35:05 4320 104857600 244113408

(4)查看閃回日誌空間情況

SQL> select * from V$flashback_database_stat;
BEGIN_TIME END_TIME FLASHBACK_DATA DB_DATA REDO_DATA ESTIMATED_FLASHBACK_SIZE
------------------- ------------------- -------------- ---------- ---------- ------------------------
2017-12-14 14:34:53 2017-12-14 14:56:43 1703936 9977856 1487872 0    

(5)SCN和timestamp裝換關係查詢

select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss')from sys.smon_scn_time;

(6)閃回語句

a.閃回資料庫
  FLASHBACK DATABASE TO TIMESTAMP to_timestamp('2017-12-14 14:28:33','yyyy-mm-dd HH24:MI:SS');;
  flashback database to scn 16813234;
b.閃回DROP
其中table_name可以是刪除表名稱,也可以是別名
  flashback table table_name to before drop;
  flashback table table_name to before drop rename to table_name_new;
c.閃回表
  flashback table table_name to scn scn_number;
  flashback table table_name to timestamp to_timestamp('2017-12-14 14:28:33','yyyy-mm-dd hh24:mi:ss');
d.閃回查詢
  select * from table_name as of timestamp to_timestamp('2017-12-14 14:28:33','yyyy-mm-dd hh24:mi:ss');
  select * from scott.dept as of scn 16801523;

(7)閃回空間爆滿問題處理

請參照我之前的微博:http://blog.itpub.net/27067062/viewspace-2129130/

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 .首先登錄搜狗輸入法Linux官網https://pinyin.sogou.com/linux/?r=pinyin,下載64bit輸入法安裝包。2.打開終端,輸入命令先安裝一個叫Gdebi輔助工具,命令如下:正常情況下終端會提醒你按(Y/N)來決定是否真的安裝,我們輸入“Y”,然後按回車鍵繼續。 ...
  • //先要理解這四個概念,這是一個提交代碼的流動軌跡:1.工作區(編輯器)-經過add到2- 2.暫存區 (緩存)- 經過commit3-3.本地倉庫 (本地項目)-經過 push4-4.遠程倉庫 (線上項目 ) //拉取遠程(這裡預設擁有項目許可權)$ git clone <項目地址> //拉取遠程分 ...
  • 一、解壓文件到當前目錄 命令:tar -zxvf mysql....tar.gz 二、移動解壓完成的文件夾到目標目錄並更名mysql 命令:mv mysql-版本號 /usr/local/mysql 添加系統mysql組和mysql用戶 添加系統mysql組 sudo groupadd mysql ...
  • 花了3個晚上,把這個章節看完,受益匪淺。 1. 最有用的應該是與中斷相關的錯誤,優先排查中斷優先順序設置。 2. 堆棧溢出檢查,可能用到,一般先把堆棧設置的足夠大,只要沒有溢出就是好事,溢出了,掌握了棧溢出鉤子函數排錯很方便。 3. 相關的問題應該儘量不會出現,畢竟只要需要列印調試信息的情況下才使用, ...
  • 1.mongodb下載地址https://www.mongodb.com/download-center#community 2.安裝 3.在D:\MongoDB目錄下創建db和log兩個文件夾,並創建環境變數,如下圖所 4.以超級管理員的身份打開cmd,以auth的方式註冊服務sc create ...
  • 我們知道Redis支持五種數據類型, 分別是字元串、哈希表(map)、列表(list)、集合(set)和有序集合,和Java的集合框架類似,不同數據類型的數據結構實也是不一樣的。 1.Redis中的redisObject對象 Redis是使用C編寫的,內部實現了一個struct結構體redisObj ...
  • 由於資料庫伺服器崩潰,造成了無法進入系統進行資料庫備份,只能把oracle相關文件拷貝出來。對於拷貝出來的文件在測試機上進行一次不完全恢復,具體流程如下所示: 1、安裝oracle 10g服務端並創建一個與要進行恢復的資料庫相同名稱的實例(db_name,sid,字元集一樣,因為在創建控制文件時,會 ...
  • 簡介 資料庫快照,正如其名稱所示那樣,是資料庫在某一時間點的視圖。快照設計最開始的目的是為了報表服務。比如我需要出2011的資產負債表,這需要數據保持在2011年12月31日零點時的狀態,則利用快照可以實現這一點。快照還可以和鏡像結合來達到讀寫分離的目的。下麵我們來看什麼是快照。 什麼是快照 資料庫 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...