閃回表是一種能夠恢複表或設置表到過去某個特定的時間點而又不需要進行不完全恢複的閃回技術。
使用閃回表時,所有的相關對象都能得到恢複。
Oracle11g flashback table 特性:
1、在線操作;
2、恢複到指定時間點或SCN的任何數據;
3、自動恢複相關屬性、如索引、觸發器等;
4、滿足分布式的一緻性;
5、滿足數據一緻性,所有相關對象将自動一緻;
6、閃回表技術是基于回滾數據(undodata)來實現的,因此,要想閃回表到過去的某個時間上,必須确保與回滾表空間有關的參數設置合理。
閃回表語法:
FLASHBACK TABLE [SCHEMA.] <TABLE_NAME> TO {BEFORE DROP [RENAME TO TABLE] | [SCN | TIMESTAMP] expr [RNABLE | DISABLE] TRIGGERS}
實例:
SQL>delete from test where id=7766; SQL>commit; 進行恢複 SQL>alter table test enable row movement; SQL>flashback table test to timestamp to_timestamp('2019-03-1015:33:30','yyyyy-mm-dd hh24:mi:ss')
局限性:FLASHBACK TABLE 命令作為單獨一個事務執行,獲取DML鎖,統計信息不會閃回;當前索引及依賴對象被維護; 閃回表有如下特性:
1) 不能對系統表做閃回操作;
2) 在執行DDL操作後不能做閃回操作;
3) 閃回操作命令寫入alert日志文件;
4) 閃回操作會産生undo 和redo數據;
注意 SYS 用戶不支持閃回,Flashback Table 也是使用 UNDO tablespace 的内容來實現對數據的回退。
注意:如果想要對表進行 flashback,必須允許表的 row movement.
Alter table table _name row movement;
要 查 看 某 表 是 否 啟 用 row movement , 可 以 到 user _tables 中 查 詢 ( 或all_tables,dba_tables),
例如:
SQL> select row _movement from user_tables where table_name='EMP';
要啟用或禁止某表 row movement,可以通過下列語句:
--啟用
SQL> ALTER TABLE emp ENABLE ROW MOVEMENT;
--禁止
SQL> ALTER TABLE table _name DISABLE ROW MOVEMENT;
實例:
1、基礎環境準備
SQL> create table C (id number(2)); SQL> insert into C values(1); SQL> insert into C values(2); SQL> commit; SQL> select * from c; SQL> alter session set nls _date_format="yyyy-mm-dd hh24:mi:ss"; SQL> select sysdate from dual; SQL> select current _scn from v$database;
2、删除數據
SQL> delete from C; SQL> commit; SQL> alter table c enable row movement;
3、恢複數據
SQL> flashback table c to scn 55714263; SQL> select * from C;
總結
Flashback table 命令支持同時操作多個表,表名中間以逗号分隔即可,如果你執行一條flashback table 命令時同時指定了多個表,要記住單個 flashback table 是在同一個事務中,因此這些表的恢複操作要麼都成功,要麼都失敗。
後面會分享更多關于devops和DBA方面内容,感興趣的朋友可以關注下!!
,