闪回的用途与实战(闪回表,闪回删除,闪回重名删除,闪回版本查询)
閃回可以做的操作有如下幾種類型:
1、當數據錯誤刪除,并且提交時(flashback table)
2、當錯誤刪除了一張表drop table(flashback drop)
3、通過閃回獲取表的歷史記錄(flashback version query)
4、當錯誤地執行了一個事務,并且提交了(flashback transaction query)
5、將整個數據庫進行恢復。
使用閃回條件:
1、切換到管理員上。
假設開始登錄的用戶名和密碼是MISPS
如果是連接遠程的,連接sqlplus的方式是:
sqlplus MISPS/MISPS@ip:1521/nmcdb.nmc.gov.cn as sysdba;(此時用戶名為MISPS,密碼為MISPS,nmcdb.nmc.gov.cn為servicename)。
?執行下面的命令切換到管理員:
conn / as sysdba;
2、查詢undo表空間(undo是一個表空間,這個表空間對應著很多物理上的存儲文件,這些文件中記錄了所有的操作日志,閃回就是通過undo這個表空間里的日志來做的)
查看表空里的參數
show parameters undo;
結果為:
注意:undo_retention這個參數表示的是閃回的時間限制,其后面的value表示900秒。表示超過2個G的數據,在過了900秒之后不可以回復了。在900秒之內可以恢復!
將900秒改成20分鐘的命令:?alter system set undo_retention=1200 scope=both;
scope的取值:1、memory(在當前的會話中有效),2.spfile(在配置文件修改,不修改當前會話),3.both(既修改當前會話也修改配置文件)
3閃回表概念:
閃回表,實際上是將表中的數據快速恢復到過去的一個是焦點或者系統改變號SCN上。實際表的閃回,需要使用到與撤銷表空間相關的undo信息,通過
show parameter undo命令可以了解這些信息。
用戶對表數據的修改操作,都記錄在撤銷表空間中,這為表的閃回提供了數據恢復的基礎。例如,修改某個操作在提交后被記錄在撤銷表空間,保留時間
為900秒,用戶可以在這900秒的時間內對表進行閃回操作,從而將表中的數據恢復到修改之前的狀態。
執行表的閃回,需要有flashback any table的權限。
4、授予MISPS用戶閃回表的權限
?grant flashback any table to MISPS;
這時候MISPS就可以執行閃回表的相關操作了。
5、這時候回到MISPS用下:conn MISPS/MISPS
6、閃回表的語法:
FLASHBACK TABLE [schema.]<table_name>
TO?
{[BEFORE DROP [RENAME TO table]]?
[SCN|TIMESTAMP]expr
[ENABLE|DISABLE]TRIGGERS}
schema:模式名,一般為用戶名
TO TIMESTAMP:系統郵戳,包含年、月、日、時、分、秒。
TO SCN:系統改變好(system change number,對應修改時的時間)
ENABLE TRIGGERS:表示觸發器恢復以后為enable狀態,而默認為disable狀態。
TO BEFORE DROP:表示恢復到刪除之前。
RENAME TO table:表示更換表名。
7、通過時間獲取SCN
select timestamp_to_scn(sysdate) from dual;
8、單獨創建一張表,來做實驗
create table flashback_table
(fid number,
fname varchar(20))
插入3條數據insert into flashback_table values(1,'tom'):
查詢一下結果:
select * from flashback_table;
10、記錄當前的SCN
select timestamp_to_scn(sysdate) from dual;
11、刪除一條數據:delete from flashback_table where fid=2;
執行:commit
12、現在的業務是fid=2的數據刪除錯了,要把它改回來,這時候使用的命令為,這時候就要執行閃回操作。
給出一個錯誤案例:flashback table flashback_table to scn 8029021
錯誤原因:
select rowid,fid,fname from flashback_table;
注意:這里的rowid表示的是在硬盤上的位置。錯誤原因的是Oracle將fid為1和3的數據進行了優化,現在給它的rowid變成連續的了,也就是說在AAASP4AAHAAAAaFAAA和AAASP4AAHAAAAaFAAC之間沒有位置了:
默認是不能夠移動rowid的,所以出現了上面的錯誤,所以下面進行配置的修改:開啟行移動功能。
語句為:alter table flashback_table enable row movement;
再執行閃回操作:flashback table flashback_table to scn 8029021
select rowid,fid,fname from flashback_table;
這時發現刪除的數據再次恢復了。
注意:
1、需要flashback any table的權限
2、開啟行移動功能
3、如何獲取回退的scn/時間?
4、系統表不能被閃回(管理員的表不能被閃回)
5、數字字典不能被閃回。不能跨越DDL操作。
----------------------------------------------------------------------------------------------------------------------------------
二、閃回刪除(drop)
實際上從系統的回收站中的將已刪除的對象,回復到刪除之前的狀態。
系統的回收站只對普通用有用。
---關于Oracle系統回收站。(講解一個案例)
1、刪除一個表
首先查詢當前用戶下有哪些表
select * from tab;
刪除表:
查看系統回收站
?show recyclebin;
這時候發現了drop掉的表在recyclebin中發現了。
查看當前是哪個用戶:show user;
因為用戶MISPS為普通用戶所以才有回收站,如果是管理員,就沒有回收站:
徹底刪除一張表的方式是:drop table T_USER_L purge;purge參數表示徹底刪除。
清空回收站的方式:purge recyclebin;
執行閃回刪除,?flashback table T_USERS_L to before drop;
select * from tab;
發現表恢復了。
?
方式二:通過回收站中的名字閃回刪除。
1、刪除表:?drop table T_USERS_L;
2、查看回收站的名字:show recyclebin;
通過回收站的名字返回:?flashback table "BIN$hIr1xeS0RY2sls0cyMHE3g==$0"to before drop;
?
--閃回重名的對象
執行閃回刪除,這時候恢復的是最后刪除的那個次表
flashback table test to before drop;
如果在此執行閃回表,這時候將出現錯誤,這時候要對刪除的表進行重命名:
查看返回的表:select * from tab;
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
閃回版本查詢(側重點查詢)
《未完待續》
?
?
總結
以上是生活随笔為你收集整理的闪回的用途与实战(闪回表,闪回删除,闪回重名删除,闪回版本查询)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 法国第5共和国宪法所确立的一种中央政府体
- 下一篇: 部队退伍回来医疗保险怎么续