oracle閃回特性算法
目錄結構sql
1、說明
1.一、相關視圖介紹
1.2 oracle閃回特性經常使用的有
1.3 oracle閃回特性經常使用的有
1.四、閃回表的注意事項
1.五、建立測試數據
1.六、閃回表數據庫
2、Using Oracle Flashback Query (SELECT AS OF)
2.一、Using Oracle Flashback Query (SELECT AS OF)
2.二、閃回查詢語法
2.三、閃回查詢的例子session
3、Oracle Flashback Version Query
3.一、說明
3.二、語法
3.三、使用閃回版本查詢和閃回查詢恢復數據(閃回到插入數據前的狀態)oracle
4、Using Oracle Flashback Transaction Query
4.一、閃回事務查詢說明
4.二、語法
4.三、閃回版本查詢和閃回事務查詢聯合應用恢復表修改的事務 app
5、閃回drop
5.1 閃回drop說明
5.2 oracle的recycle bin是什麼
5.3 查詢recycle bin中的對象
5.4 清除recycle bin中的對象
5.5 從recycle bin中恢復表
5.6 從回收站中恢復表依賴的對象ide
6、閃回數據庫
6.1 數據庫閃回說明
6.2 開啓數據庫閃回功能
6.3 數據庫閃回的例子
6.四、查詢閃回狀態oop
1、說明
1.1 相關視圖介紹
dba_recyclebin 顯示數據庫裏面回收站的信息
owner 對象的屬主
object_name 回收站裏對象名字
original_name 對象最初的名字
operation 對象執行的操做
drop- 對象被刪除
truncate-對象被截斷
注意oracle僅僅支持恢復drop的對象,不支持執行truncate的的對象。
type ■ TABLE
■ NORMAL INDEX
■ BITMAP INDEX
■ NESTED TABLE
■ LOB
■ LOB INDEX
■ DOMAIN INDEX
■ IOT TOP INDEX
■ IOT OVERFLOW SEGMENT
■ IOT MAPPING TABLE
■ TRIGGER
■ CONSTRAINT
■ Table Partition
■ Table Composite Partition
■ Index Partition
■ Index Composite Partition
■ LOB Partition
■ LOB Composite Partitio
ts_name 表示對象屬於哪一個表空間
createtime 建立對象時的timestamp
droptime 刪除對象時的timstamp
DROPSCN 對象被移動到回收站時事務的scn號
PARTITION_NAME 被drop的分區名
CAN_UNDROP 代表該對象是否能夠被undrop
CAN_PURGE 代表該對象是否能被清除
RELATED 父對象的對象號
BASE_OBJECT 基本對象的對象號
PURGE_OBJECT 被清除對象的對象號
SPACE 該對象使用多少個數據塊測試
flashback_transaction_query xid 事務的標識id start_scn 事務啓動的system change number start_timestamp 事務啓動的時間截 commit_scn 事務提交的system change number;null表示活動的事務 commit_timestamp 事務提交的時間截;null表示活動的事務 logon_user 哪一個登陸用戶發起的事務 undo_change# undo的系統改變號1或者更高 operation 事務執行的dml操做,D=delete,I=insert,u=update table_name DML操做應用的表 table_owner dml操做應用表的屬主 row_id dml操做修改的rowid undo_sql sql到undo上的撤銷操做。 1.2 oracle閃回特性經常使用的有 flashback drop,flashback query,flashback versions query,flashback transaction,flashback table,flashback database; 1.三、閃回表的說明 • 使用閃回表,可將一個或多個表還原到特定時間點,而不須要還原備份。 • 將從還原表空間檢索數據來執行閃回表操做。 • 您須要具備對特定表的 FLASHBACK ANY TABLE 或FLASHBACK 對象權限。 • 須要對要閃回的表具備 SELECT、INSERT、DELETE、和 ALTER 權限。 • 必須對要執行閃回操做的表啓用行移動 1.四、閃回表的注意事項 • FLASHBACK TABLE 命令做爲單個事務處理執行,要求獲取 DML 排它鎖。 • 不閃回統計信息。 • 保留當前索引和從屬對象。 • 閃回表操做: – 不能對系統表執行 – 不能跨 DDL 操做 – 會生成還原和重作數據 1.五、建立測試數據
SQL> create tablespace zx datafile size 10m;spa
Tablespace created.
SQL> create temporary tablespace ts_zx tempfile size 10m;
Tablespace created.
SQL> create user zx identified by dhhz default tablespace zx temporary tablespace ts_zx;
User created.
SQL> grant connect,resource to zx;
Grant succeeded.
SQL> grant connect,resource,select any dictionary to zx;
Grant succeeded.
1.六、閃回表(閃回表中delete的數據)
一、閃回表的說明及特性
一、閃回表容許咱們將數據表恢復到過去的某個時間點或者scn
二、自動恢復相關屬性、如索引、觸發器、約束
三、flashback table 不能將表恢復到改變表結構的ddl操做以前。
2 閃回表的語法
alter table table_name enable row movement;
flashback table table_name to timestamp|scn <timestamp|scn>
3 閃回的例子1
SQL> show user;
USER 爲 "SYSTEM"
SQL> create table test as select user_id,username from dba_users;
表已建立。
SQL> select count(*) from test;
36
SQL> select dbms_flashback.get_system_change_number from dual;
4110238
SQL> delete from test;
已刪除36行。
SQL> commit;
提交完成。
SQL> alter table test enable row movement;
表已更改。
SQL> flashback table test to scn 4110238;
閃回完成。
SQL> select count(*) from test;
36
SQL>
2、Using Oracle Flashback Query (SELECT AS OF)
2.一、oracle 閃回查詢的說明
一、閃回查詢依賴undo段,經過scn或者時間截檢索修改以前的數據。insert into new_table select from old_table as of scn|timstamp xxx;操做恢復以前的數據。
二、閃回查詢容許在數據庫中直接檢索以前的數據。語法爲select from t as of scn xxx;
2.二、閃回查詢語法
一、as of scn (timestamp) 經過指定scn或者timestamp能夠對錶、視圖、物化視圖進行falshback query;
二、恢復表數據的方法
經過create table new_t as select × from old_t where 1=2;建立一個新表 而後insert into new_t select × from old_t as of scn|timestamp xxx 恢復表
開啓表的行遷移功能,而後閃回表的某個scn或者時間點
alter table old_t enable row movement;
flashback table old_t to scn|timestamp to_timestamp('2011-05-04 12:00:00','YYYY-MM-DD HH24:MI:SS')
2.3 閃回查詢的例子
一、建立測試表
SQL> create table t_1 as select username,user_id from dba_users where rownum<=8;
Table created.
SQL> select * from t_1;
USERNAME USER_ID
ZX 87
SYS 0
SYSTEM 5
ZX1 86
TEST 84
T1_USER 85
OUTLN 9
MGMT_VIEW 73
二、獲取當前時間
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
2020-05-17 20:08:12
三、刪除表
SQL> delete from t_1;
8 rows deleted.
SQL> commit;
Commit complete.
四、查詢刪除前的數據
SQL> select * from t_1 as of timestamp to_timestamp('2020-05-17 20:08:12','yyyy-mm-dd hh24:mi:ss');
USERNAME USER_ID
ZX 87
SYS 0
SYSTEM 5
ZX1 86
TEST 84
T1_USER 85
OUTLN 9
MGMT_VIEW 73
五、恢復表數據
方式1建立新表
SQL> create table new_t_1 as select * from t_1 where 1=2;
Table created.
SQL> insert into new_t_1 select * from t_1 as of timestamp to_timestamp('2020-05-17 20:08:12','yyyy-mm-dd hh24:mi:ss');
8 rows created.
SQL> select * from new_t_1;
USERNAME USER_ID
ZX 87
SYS 0
SYSTEM 5
ZX1 86
TEST 84
T1_USER 85
OUTLN 9
MGMT_VIEW 73
8 rows selected.
方式2閃回原表
SQL> select count(*) from t_1;
0
SQL> alter table t_1 enable row movement;
Table altered.
SQL> flashback table t_1 to timestamp to_timestamp('2020-05-17 20:08:12','yyyy-mm-dd hh24:mi:ss');
Flashback complete.
SQL> select * from t_1;
USERNAME USER_ID
ZX 87
SYS 0
SYSTEM 5
ZX1 86
TEST 84
T1_USER 85
OUTLN 9
MGMT_VIEW 73
8 rows selected.
3、Oracle Flashback Version Query
3.一、說明
閃回版本查詢 閃回版本查詢是指oracle能夠針對特定的對象來查詢某一特定時間段內該對象變化的全部狀況。 閃回版本查詢同閃回查詢,閃回表同樣,都是使用undo段的數據,即數據變動前的鏡像。 當undo數據段被覆蓋,則沒法進行閃回。 閃回版本查詢返回的僞列 1 versions_startscn 行版本被建立的scn和時間截 versions_starttime 2 versions_endscn 該行版本過時的時間截和scn。 versions_endtime 3 versions_xid 表示建立該行版本的事務id 4 versions_operation 表示事務執行的、I表示插入、D表示刪除、U表示更新
3.二、語法
閃回版本查詢語法
select versions_xid,versions_startscn,versions_endscn,versions_operation,表列 from <schema.table_name> versions between scn <minimum_scn> and <maximum_scn>
select versions_xid,versions_startscn,versions_endscn,versions_operation,表列 from <schema.table_name> versions between timestamp to_timestamp('start_timestamp') and to_timestamp('end_timestamp')
3.三、使用閃回版本查詢和閃回查詢恢復數據(閃回到插入數據前的狀態)
一、建立測試表
SQL> create table t_2 as select user_id,username from dba_users where rownum<=14;
Table created.
SQL> select * from t_2;
USER_ID USERNAME
87 ZX 0 SYS 5 SYSTEM 86 ZX1 84 TEST 85 T1_USER 9 OUTLN 73 MGMT_VIEW 74 FLOWS_FILES 57 MDSYS 53 ORDSYS
USER_ID USERNAME
42 EXFSYS 30 DBSNMP 32 WMSYS
14 rows selected.
二、執行刪除操做
SQL> delete from t_2 where user_id=0;
1 row deleted.
SQL> commit;
Commit complete.
SQL> select * from t_2;
USER_ID USERNAME
87 ZX 5 SYSTEM 86 ZX1 84 TEST 85 T1_USER 9 OUTLN 73 MGMT_VIEW 74 FLOWS_FILES 57 MDSYS 53 ORDSYS 42 EXFSYS
USER_ID USERNAME
30 DBSNMP 32 WMSYS
13 rows selected.
三、執行插入操做
SQL> insert into t_2 values(100,'zx2');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t_2;
USER_ID USERNAME
87 ZX 5 SYSTEM 86 ZX1 84 TEST 85 T1_USER 9 OUTLN 73 MGMT_VIEW 74 FLOWS_FILES 57 MDSYS 53 ORDSYS 42 EXFSYS
USER_ID USERNAME
30 DBSNMP 32 WMSYS 100 zx2
14 rows selected.
四、執行閃回版本查詢
SQL> select versions_xid,versions_startscn,versions_endscn,versions_operation,user_id,username from t_2 versions between scn minvalue and maxvalue;
VERSIONS_XID VERSIONS_STARTSCN VERSIONS_ENDSCN V USER_ID USERNAME
0600120093040000 2692968 D 0 SYS
87 ZX
2692968 0 SYS
5 SYSTEM
86 ZX1
84 TEST
85 T1_USER
9 OUTLN
73 MGMT_VIEW
74 FLOWS_FILES
57 MDSYS
53 ORDSYS
42 EXFSYS
30 DBSNMP
32 WMSYS
08000400CC030000 2693052 I 100 zx2
16 rows selected.
五、利用閃回查詢查詢插入前
SQL> select * from t_2 as of scn 2692968;
USER_ID USERNAME
87 ZX 5 SYSTEM 86 ZX1 84 TEST 85 T1_USER 9 OUTLN 73 MGMT_VIEW 74 FLOWS_FILES 57 MDSYS 53 ORDSYS 42 EXFSYS 30 DBSNMP 32 WMSYS
13 rows selected.
SQL> alter table t_2 enable row movement;
Table altered.
SQL> flashback table t_2 to scn 2692968;
Flashback complete.
SQL> select * from t_2;
USER_ID USERNAME
87 ZX 5 SYSTEM 86 ZX1 84 TEST 85 T1_USER 9 OUTLN 73 MGMT_VIEW 74 FLOWS_FILES 57 MDSYS 53 ORDSYS 42 EXFSYS 30 DBSNMP 32 WMSYS
13 rows selected.
4、Using Oracle Flashback Transaction Query
4.一、閃回事務查詢說明
1 閃回事務查詢是針對於某一事務進行閃回,屬於事務級別,閃回版本查詢是針對某一時間段內提交記錄的變化進行閃回,屬於記錄級別。
2 使用Flashback Transaction Query能夠檢索一個給定事務或者全部事務的原數據和歷史數據。
2 閃回事務查詢經過查詢數據字典視圖 flashback_transaction_query來檢索特色事務的信息
3 字典視圖flashback_transaction_query中的列undo_sql是和執行事務相反的邏輯dml,經過undo_sql恢復特定的事務。
4 使用的先決條件
--Flashback Transaction Query須要確保數據庫的兼容性在10.0之上。
--alter database add supplemental log data
--alter database add supplemental log data(primary key) columns;
--grant execute on dbms_flashback to user;
--grant select any transaction to hr;
4.二、語法
select xid,start_scn,commit_scn,operation,logon_user,undo_sql from flashback_transaction_query where xid='#xid'(xid經過閃回版本查詢獲取)
select xid,start_scn,commit_scn,operation,logon_user,undo_sql from flashback_transaction_query where xid in(select versions_xid from t versions between scn minvalue and maxvalue);
4.三、閃回版本查詢和閃回事務查詢聯合應用恢復表修改的事務
一、建立測試表
SQL> conn zx/dhhz
Connected.
SQL> create table t as select username,user_id from dba_users where rownum<=5;
Table created.
SQL> select * from t;
USERNAME USER_ID
ZX 87
SYS 0
SYSTEM 5
ZX1 86
TEST 84
二、sys用戶下執行以下語句
alter database add supplemental log data;
alter database add supplemental log data(primary key) columns;
grant execute on dbms_flashback to zx;
grant select any transaction to zx;
三、執行以下dml語句
先執行刪除
SQL> delete from t where user_id=87 or user_ID=86;
已刪除2行。
SQL> commit;
提交完成。
SQL> select * from t;
USERNAME USER_ID
SYS 0
SYSTEM 5
TEST 84
在執行更新操做
SQL> update t set user_id=100 where user_id=84;
已更新 1 行。
SQL> commit;
提交完成。
SQL> select * from t;
USERNAME USER_ID
SYS 0
SYSTEM 5
TEST 100
最後執行插入操做
SQL> insert into t values('zx2',101);
已建立 1 行。
SQL> commit;
提交完成。
SQL> select * from t;
USERNAME USER_ID
SYS 0
SYSTEM 5
TEST 100
zx2 101
三、執行閃回版本查詢
在sys用戶下執行
select versions_startscn,versions_endscn,versions_xid,versions_operation,username,user_id from zx.t versions between scn minvalue and maxvalue;
或者在表屬主用戶下執行
select versions_startscn,versions_endscn,versions_xid,versions_operation,username,user_id from t versions between scn minvalue and maxvalue;
SQL> select versions_startscn,versions_endscn,versions_xid,versions_operation,username,user_id from t versions between scn minvalue and maxvalue;
VERSIONS_STARTSCN VERSIONS_ENDSCN VERSIONS_XID V USERNAME USER_ID
2682673 02002000B7030000 U TEST 100 2682601 01001500DB020000 D ZX1 86 2682601 01001500DB020000 D ZX 87 2682601 ZX 87 SYS 0 SYSTEM 5 2682601 ZX1 86 2682673 TEST 84 2682715 03000C00B2030000 I zx2 101
9 rows selected.
四、執行閃回事務查詢
select xid,start_scn,commit_scn,operation,logon_user,undo_sql from flashback_transaction_query where xid in(select versions_xid from t versions between scn minvalue and maxvalue);
SQL> select xid,start_scn,commit_scn,operation,logon_user,undo_sql from flashback_transaction_query where xid in(select versions_xid from t versions between scn minvalue and maxvalue);
XXID START_SCN COMMIT_SCN OPERATION LOGON_US UNDO_SQL
02002000B7030000 2682668 2682673 UPDATE ZX update "ZX"."T" set "USER_ID" = '84' where ROWID = 'AAAVXqAAIAAAACDAAE';
02002000B7030000 2682668 2682673 BEGIN ZX
03000C00B2030000 2682709 2682715 INSERT ZX delete from "ZX"."T" where ROWID = 'AAAVXqAAIAAAACGAAA';
03000C00B2030000 2682709 2682715 BEGIN ZX
01001500DB020000 2682596 2682601 DELETE ZX insert into "ZX"."T"("USERNAME","USER_ID") values ('ZX1','86');
1001500DB020000 2682596 2682601 DELETE ZX insert into "ZX"."T"("USERNAME","USER_ID") values ('ZX','87');
01001500DB020000 2682596 2682601 BEGIN ZX
五、執行undo_sql撤銷delete的事務修改
SQL> insert into "ZX"."T"("USERNAME","USER_ID") values ('ZX1','86');
insert into "ZX"."T"("USERNAME","USER_ID") values ('ZX','87');
1 row created.
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t;
USERNAME USER_ID
SYS 0
SYSTEM 5
TEST 100
zx2 101
ZX1 86
ZX 87
6 rows selected.
五 閃回drop對象
5.1 閃回drop說明
當drop一個表,數據庫不會當即移除該表的空間,重命名該表並放置該表和其相關對象到recycle bin,用戶能夠從recycle bin中恢復該表,該功能
被稱爲flashback drop
5.2 oracle的recycle bin是什麼
一、recycle bin 其實是一個包含drop對象的數據字典表。
二、以drop的表及相關對象如索引、約束、嵌套表、仍舊佔用空間,除非用戶從回收站中清除或者drop的時候後指定purge關鍵字
三、每個用戶均可以認爲有本身的回收站,而且只能夠在回收站中訪問本身有權限的對象,除了sysdba權限的用戶。用戶能夠經過
select * from recyclebin;訪問回收站中的對象。
四、當drop表後,表和其相關對象被放置到回收站中,系統會自動爲其生成一個名字。主要是爲了不以下兩點,
一、用戶drop了一個表,而後從新建立了一個相同的表,以後又從新建立了它。
二、爲了防止兩個用戶有相同的表,又同時丟棄了它。
五、回收站中自動生成名字格式以下: BIN$unique_id$version
unique_id 包含26個字符的惟一標識。
version 數據庫的版本號
六、Enabling and Disabling the Recycle Bin
一、當recycle bin開啓,drop表和其相關的對象就會被放入回收站。
二、當recycle bin禁止,drop表和其相關的對象不會放入回收站。
三、禁止回收站不會影響已經放入回收站中的對象。
四、recycle bin 默認是開啓的
五、更改recyclebin的初始化參數不是動態的。須要重啓數據庫
六、禁止recycle bin
alter session set recyclebin = OFF;
alter system set recyclebin = OFF scope=spfile;
七、開啓recycle bin中
ALTER SESSION SET recyclebin = ON;
ALTER SYSTEM SET recyclebin = ON SCOPE = SPFILE;
語法:
FLASHBACK TABLE <table_name> TO BEFORE DROP [RENAME TO <new_name>];
5.3 查詢recycle bin中的對象
1 經過視圖查詢全部回收站中的對象dba_recyclebin(注意比recyclebin視圖多owner字段)
col original_name for a10;
set linesize 400
SQL> select owner,object_name,original_name,operation,ts_name,createtime,droptime,space from dba_recyclebin;
OWNER OBJECT_NAME ORIGINAL_N OPERATION TS_NAME CREATETIME DROPTIME SPACE
SYS BIN$LqtH6lHHSfW3cJSHmi6hHw==$0 T DROP CS 2017-03-17:17:19:29 2017-10-15:15:50:14 8
SCOTT BIN$3nneKue8QvGu7xWahLU6bQ==$0 BONUS DROP USERS 2013-10-09:19:08:36 2017-07-03:18:44:09 0
SYS BIN$DOATFaa7QZyA2P0/R6ptVQ==$0 IDX_ZX3_ID DROP CS_INDEX 2017-06-17:14:27:20 2017-09-10:21:14:44 8
SYS BIN$uG5Ig3cgRRGza99p1c0cRA==$0 ZX3 DROP CS 2017-06-17:11:49:49 2017-09-10:21:14:44 8
SYS BIN$5E2ar/LWR96M0HtwFM/xQw==$0 ZX3 DROP CS 2017-09-10:21:14:51 2017-09-14:20:05:08 8
SYS BIN$8uUxSd1TRbO15dE+XvJLpg==$0 PK_ID DROP CS 2017-09-14:22:06:14 2017-09-14:22:10:27 256
SYS BIN$AO0VCG1oSR6PtgtmnlwVCA==$0 ZX3 DROP CS 2017-09-14:22:06:14 2017-09-14:22:10:27 256
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
T BIN$LqtH6lHHSfW3cJSHmi6hHw==$0 TABLE 2017-10-15:15:50:14
ZX3 BIN$AO0VCG1oSR6PtgtmnlwVCA==$0 TABLE 2017-09-14:22:10:27
ZX3 BIN$5E2ar/LWR96M0HtwFM/xQw==$0 TABLE 2017-09-14:20:05:08
ZX3 BIN$uG5Ig3cgRRGza99p1c0cRA==$0 TABLE 2017-09-10:21:14:44
2 查詢每一個用戶回收站中的對象(視圖user_recyclebin或者同名recyclebin)
SQL> select object_name,original_name,operation,ts_name,createtime,droptime,space from recyclebin;
OBJECT_NAME ORIGINAL_N OPERATION TS_NAME CREATETIME DROPTIME SPACE
BIN$LqtH6lHHSfW3cJSHmi6hHw==$0 T DROP CS 2017-03-17:17:19:29 2017-10-15:15:50:14 8
BIN$DOATFaa7QZyA2P0/R6ptVQ==$0 IDX_ZX3_ID DROP CS_INDEX 2017-06-17:14:27:20 2017-09-10:21:14:44 8
BIN$uG5Ig3cgRRGza99p1c0cRA==$0 ZX3 DROP CS 2017-06-17:11:49:49 2017-09-10:21:14:44 8
BIN$5E2ar/LWR96M0HtwFM/xQw==$0 ZX3 DROP CS 2017-09-10:21:14:51 2017-09-14:20:05:08 8
BIN$8uUxSd1TRbO15dE+XvJLpg==$0 PK_ID DROP CS 2017-09-14:22:06:14 2017-09-14:22:10:27 256
BIN$AO0VCG1oSR6PtgtmnlwVCA==$0 ZX3 DROP CS 2017-09-14:22:06:14 2017-09-14:22:10:27 256
5.4 清除recycle bin中的對象
一、使用purge語句清除回收站中的對象和其相關對象並釋放存儲空間。不過須要有對對象進行處理的權限。
二、使用purge清除對象時候可使用回收站中的BIN$unique_id$version或者使用original_name名字。
SQL> purge table T;
表已清除。
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
ZX3 BIN$AO0VCG1oSR6PtgtmnlwVCA==$0 TABLE 2017-09-14:22:10:27
ZX3 BIN$5E2ar/LWR96M0HtwFM/xQw==$0 TABLE 2017-09-14:20:05:08
ZX3 BIN$uG5Ig3cgRRGza99p1c0cRA==$0 TABLE 2017-09-10:21:14:44
SQL> purge table "BIN$AO0VCG1oSR6PtgtmnlwVCA==$0";
表已清除。
三、清空回收站中該用戶本身的全部對象。若是用戶有sysdba權限則清空整個回收站中的內容。
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
BONUS BIN$3nneKue8QvGu7xWahLU6bQ==$0 TABLE 2017-07-03:18:44:09
SQL> purge recyclebin;
回收站已清空。
五、清除回收站內來自於某個表空間或者某個表空間中屬於某個用戶的全部對象
--purge tablespace CS;
--PURGE TABLESPACE CS USER SYS;
SQL> select owner,object_name,original_name,operation,ts_name,createtime,droptime,space from dba_recyclebin where type='TABLE';
OWNER OBJECT_NAME ORIGINAL_N OPERATION TS_NAME CREATETIME DROPTIME
SYS BIN$uG5Ig3cgRRGza99p1c0cRA==$0 ZX3 DROP CS 2017-06-17:11:49:49 2017-09-10:21:14:44
SYS BIN$5E2ar/LWR96M0HtwFM/xQw==$0 ZX3 DROP CS 2017-09-10:21:14:51 2017-09-14:20:05:08
SQL> purge tablespace CS;
表空間已清除。
5.5 從recycle bin中恢復表
恢復語句
一、使用flashback table ... to before drop 語句恢復recycle bin 中的對象。能夠指定BIN$unique_id$version名字或者original_name名字
二、rename to 子句容許用戶在恢復drop表時指定新的名字。
三、recyclebin中的name能夠同過dba_recyclebin or user_recyclebin中查詢到。
恢復的例子1 調用flashback table "BIN$unique_name" to before drop;
SQL> select count(*) from zx1;
1000000
SQL> drop table zx1;
表已刪除。
SQL> commit;
提交完成。
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
ZX1 BIN$jJEAEswtQZeDDoMRTrzv7g==$0 TABLE 2017-10-20:21:20:36
SQL> flashback table "BIN$jJEAEswtQZeDDoMRTrzv7g==$0" to before drop;
閃回完成。
SQL> select count(*) from zx1;
1000000
恢復的例子2 調用flashback table table_name to before drop
SQL> select owner,table_name from dba_tables where tablespace_name='CS';
OWNER TABLE_NAME
SYS ZX1
SYS ZX2
SCOTT ZX3
ZX DE
ZX SO
SQL> drop table zx2;
表已刪除。
SQL> commit;
提交完成。
SQL> flashback table zx2 to before drop;
閃回完成。
SQL> select count(*) from zx2;
1
恢復的例子3 調用flashback table "BIN$unique_name$version" to before drop rename to new_name;
SQL> select owner,table_name from dba_tables where tablespace_name='CS';
OWNER TABLE_NAME
SYS ZX1
SYS ZX2
ZX DE
ZX SO
SCOTT ZX3
SQL> drop table zx2;
表已刪除。
SQL> commit;
提交完成。
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
ZX2 BIN$BpVtfUThQZ6e4xd6mV3d5Q==$0 TABLE 2017-10-20:21:27:18
SQL> flashback table "BIN$BpVtfUThQZ6e4xd6mV3d5Q==$0" to before drop rename to zx2_new;
閃回完成。
SQL> select owner,table_name from dba_tables where tablespace_name='CS';
OWNER TABLE_NAME
ZX SO
ZX DE
SYS ZX1
SYS ZX2_NEW
SCOTT ZX3
5.六、從回收站中恢復表依賴的對象
一、從回收站中恢復了drop的表,依賴該表的對象索引不會自動變回最初的original_name,而是依舊在回收站中保留系統生成的名字。
二、必須手動重命名依賴的對象爲original names
三、恢復依賴對象前須先恢復表。
四、恢復依賴對象的例子(語句爲alter index "BIN$unique_name$version" rename to index_name;
SQL> create table zx1(id int) tablespace cs;
表已建立。
SQL> begin
2 for i in 1 .. 100 loop
3 insert into zx1 values(i);
4 end loop;
5 end;
6 /
PL/SQL 過程已成功完成。
SQL> select count(*) from zx1;
100
SQL> create unique index pk_id_zx1 on zx1(id);
索引已建立。
SQL> select index_name,index_type from dba_indexes where table_name='ZX1';
INDEX_NAME INDEX_TYPE
PK_ID_ZX1 NORMAL
SQL>
SQL> drop table zx1;
表已刪除。
SQL> commit;
提交完成。
SQL> select object_name,original_name,type from recyclebin;
OBJECT_NAME ORIGINAL_N TYPE
BIN$49qibaCKSDeeSeYN+1EJOw==$0 PK_ID_ZX1 INDEX
BIN$9h+CmvENQnmPxSkNfFX8yg==$0 ZX1 TABLE
SQL> flashback table "BIN$9h+CmvENQnmPxSkNfFX8yg==$0" to before drop;
閃回完成。
SQL> select index_name from dba_indexes where table_name='ZX1';
BIN$49qibaCKSDeeSeYN+1EJOw==$0
SQL> alter index "BIN$49qibaCKSDeeSeYN+1EJOw==$0" rename to pk_id_zx1;
索引已更改。
SQL>
6、閃回數據庫
6.1 數據庫閃回說明
1 閃回數據庫前,須要數據庫配置閃回區
2 數據庫閃回功能默認是關閉的。須要在mount下發起以下命令啓用。alter database flashback on;
3 數據庫啓用閃回功能後數據庫會按期將發生變化的數據庫的前鏡像寫入閃回日誌文件中。
4 閃回數據庫的日誌文件由RecoVery WRiter的新過程寫入。
5 如下狀況下不能使用閃回數據庫操做:
– 控制文件已還原或已從新建立。
– 表空間已刪除。
– 數據文件的大小已被減少。
6 使用 TO BEFORE RESETLOGS 子句閃回至上一RESETLOGS 操做前的那一刻
6.2 開啓數據庫閃回功能
SQL> select dbid,name,flashback_on,current_scn from v$database;
DBID NAME FLASHBACK_ON CURRENT_SCN
1346236889 CS NO 4068082
提交完成。
SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup mount;
ORACLE 例程已經啓動。
Total System Global Area 4175568896 bytes
Fixed Size 2287832 bytes
Variable Size 2332034856 bytes
Database Buffers 1828716544 bytes
Redo Buffers 12529664 bytes
數據庫裝載完畢。
SQL> alter database flashback on;
alter database flashback on
*
第 1 行出現錯誤:
ORA-38706: 沒法啓用 FLASHBACK DATABASE 事件記錄。
ORA-38709: 還沒有啓用恢復區。
SQL> alter system set db_recovery_file_dest_size=2G;
系統已更改。
SQL> alter system set db_recovery_file_dest='D:\app\recoveryarea';
系統已更改。
SQL> alter database flashback on;
數據庫已更改。
SQL> alter database open;
數據庫已更改。
SQL> select open_mode from v$database;
READ WRITE
SQL> select dbid,name,flashback_on,current_scn from v$database;
DBID NAME FLASHBACK_ON CURRENT_SCN
1346236889 CS YES 4068605
6.3 數據庫閃回的例子
SQL> alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';
會話已更改。
SQL> select sysdate from dual;
2017-10-15 19:59:40
SQL> truncate table new_t;
表被截斷。
SQL> select sysdate from dual;
2017-10-15 20:00:14
SQL> startup force mount;
ORACLE 例程已經啓動。
Total System Global Area 4175568896 bytes
Fixed Size 2287832 bytes
Variable Size 2332034856 bytes
Database Buffers 1828716544 bytes
Redo Buffers 12529664 bytes
數據庫裝載完畢。
SQL> flashback database to timestamp to_timestamp ('2017-10-15 19:59:40','yyyy-mm-dd hh24:mi:ss');
閃回完成。
SQL> alter database open resetlogs;
數據庫已更改。
SQL>
SQL> select * from new_t;
USERNAME USER_ID
PIG 88
CAT 89
DOG 86
PERFSTAT 95
SYS 0
SYSTEM 5
SCOTT 83
NSR 94
ZX 85
OUTLN 9
MGMT_VIEW 73
USERNAME USER_ID
FLOWS_FILES 74
MDSYS 57
ORDSYS 53
EXFSYS 42
已選擇15行。
flashback database to timestamp to_timestamp ('2017-10-15 19:59:40','yyyy-mm-dd hh24:mi:ss')
Flashback Restore Start
Flashback Restore Complete
Flashback Media Recovery Start
started logmerger process
Parallel Media Recovery started with 4 slaves
Sun Oct 15 20:04:11 2017
Recovery of Online Redo Log: Thread 1 Group 1 Seq 319 Reading mem 0
Mem# 0: D:\DATA\CS\REDO01.LOG
Incomplete Recovery applied until change 4069311 time 10/15/2017 19:59:58
Sun Oct 15 20:04:13 2017
Flashback Media Recovery Complete
Completed: flashback database to timestamp to_timestamp ('2017-10-15 19:59:40','yyyy-mm-dd hh24:mi:ss')
6.四、查詢閃回狀態
要針對保留目標監視容量:
• 查看快速恢復區的磁盤限額:
SELECT estimated_flashback_size,flashback_size,FROM V$FLASHBACK_DATABASE_LOG;
FLASHBACK_SIZE 給出了閃回數據的當前字節大小
STIMATED_FLASHBACK_SIZE 使用先前記錄的閃回數據,可估計快速恢復區中閃回日誌須要多少磁盤空間才能知足當前閃回保留目標
• 肯定當前閃回窗口:
SELECT oldest_flashback_scn,oldest_flashback_time FROM V$FLASHBACK_DATABASE_LOG;
OLDEST_FLASHBACK_SCN 和 OLDEST_FLASHBACK_TIME 顯示了數據庫可閃回到的近似最低 SCN 和時間。V$DATABASE 中的 CURRENT_SCN 給出了當前數據庫 SCN
• 監視閃回數據庫日誌中的日誌記錄:
SELECT begin_time, end_time, flashback_data, db_data, redo_data,estimated_flashback_size AS EST_FB_SZE FROM V$FLASHBACK_DATABASE_STAT;
閃回區查詢
查詢 V$RECOVERY_FILE_DEST 可查看與快速恢復區相關的信息。列說明以下:
• NAME :快速恢復區的名稱,指示位置字符串
• SPACE_LIMIT :在 DB_RECOVERY_FILE_DEST_SIZE 參數中指定的磁盤限制
• SPACE_USED :快速恢復區文件使用的空間(字節)
• SPACE_RECLAIMABLE :經過刪除過期文件、冗餘文件和其它空間管理算法肯定的
低優先級文件,可回收的空間量
• NUMBER_OF_FILES :文件數量
SQL> SELECT name, space_limit AS quota,
2 space_used AS used,
3 space_reclaimable AS reclaimable,
4 number_of_files AS files
5 FROM v$recovery_file_dest ;
NAME QUOTA USED RECLAIMABLE FILES
/u01/flash_recovery_area 5368707120 2507809104 203386880 226