1、Flashback Database(利用閃回日志恢復)
網站建設哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網頁設計、網站建設、微信開發(fā)、微信小程序開發(fā)、集團企業(yè)網站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了甘南免費建站歡迎大家使用!
Oracle Flashback Database特性允許通過SQL語句Flashback Database語句,讓數據庫前滾到當前的前一個時間點或者SCN,而不需要做時間點的恢復。閃回數據庫可以迅速將數據庫回到誤操作或人為錯誤的前一個時間點,如Word中的"撤消"操作,可以不利用備份就快速的實現(xiàn)基于時間點的恢復。Oracle通過創(chuàng)建新的Flashback Logs(閃回日志),記錄數據庫的閃回操作。如果希望能閃回數據庫,需要設置如下參數:DB_RECOVER_FILE_DEST日志的存放位置,DB_RECOVER_FILE_DEST_SIZE恢復區(qū)的大小。在創(chuàng)建數據庫的時候,Oracle將自動創(chuàng)建恢復區(qū),但默認是關閉的,需要執(zhí)行alter database flashback on命令。
例:執(zhí)行Flashback Database命令格式。
SQLflashback database to time to_timestamp(xxx);
SQLflashback database to scn xxx
2、Flashback Table(利用UNDO保留信息恢復)
Oracle Flashback Table特性允許利用Flashback Table語句,確保閃回到表的前一個時間點。與Oracle 9i中的Flashback Query相似,利用回滾段信息來恢復一個或一些表到以前的一個時間點(一個快照)。要注意的是,F(xiàn)lashback Table不等于Flashback Query,F(xiàn)lashback Query僅僅是查詢以前的一個快照點而已,并不改變當前表的狀態(tài),而Flashback Table將改變當前表及附屬對象一起回到以前的時間點。
語法:
flashback table tablename to timestamp xxx或
flashback table tablename to scn xxx
注意:如果需要閃回一個表,需要以下條件:
需要有flashback any table的系統(tǒng)權限或者是該表的flashback對象權限;
需要有該表的select,insert,delete,alter權限;
必須保證該表row movement。
例:執(zhí)行將test表閃回到2011年5月7日下午3點。
SQLflashback table test to timestamp to_timestamp(’2011-05-07 15:00:00’,’yyyy-mm-dd hh24:mi:ss’);
3、Flashback Drop(利用回收站功能恢復)
注:由于目前的環(huán)境為了實現(xiàn)OGG的DDL同步,關閉了回收站功能,故這個功能不可用。
4、Flash Version Query(利用UNDO保留信息恢復)
Oracle Flashback Version Query特性,利用保存的回滾信息,可以看到特定的表在時間段內的任何修改,如電影的回放一樣,可以了解表在該期間的任何變化。Flashback version query一樣依賴于AUM,提供了一個查看行改變的功能,能找到所有已經提交了的行的記錄,分析出過去時間都執(zhí)行了什么操作。Flashback version query采用VERSIONS BETWEEN語句來進行查詢,常用的方法:
·VERSIONS_SCN - 系統(tǒng)改變號
·VERSIONS_TIMESTAMP - 時間
例如:在test表中,時間1插入一條記錄,時間2刪除了這條記錄,對于時間3執(zhí)行select * from test當然查詢不到這條記錄,只能看到該表最后的提交記錄。這時如果利用Flash Table或者是Flash Query,只能看到過去的某一時間點的一個快照,而利用Flashback Version Query,能夠把時間1、時間2的操作給記錄下來,并詳細的查詢出對表進行的任何操作。
基于SCN的閃回查詢:
SQL select count(*) from lm_mtrp_syn_channelinfo as of scn 708000000;
COUNT(*)
----------
21
基于時間段的閃回查詢:
SQLselect versions_starttime,versions_endtime, versions_xid,versions_operation,id
from test versions
between timestamp minvalue and maxvalue
order by versions_starttime;
5,Flashback Transaction Query(利用UNDO保留信息恢復)
Oracle Flashback Transaction Query特性確保檢查數據庫的任何改變在一個事務級別,可以利用此功能進行診斷問題、性能分析和審計事務。它其實是Flashback Version Query查詢的一個擴充,F(xiàn)lashback Version Query說明了可以審計一段時間內表的所有改變,但是也僅僅是能發(fā)現(xiàn)問題,對于錯誤的事務,沒有好的處理辦法。而Flashback Transaction Query提供了從FLASHBACK_TRANSACTION_QUERY視圖中獲得事務的歷史以及Undo_sql(回滾事務對應的sql語句),也就是說審計一個事務到底做了什么,甚至可以回滾一個已經提交的事務。
例:Flashback Transaction Query的操作實例。
(1)在test表中刪除記錄,獲得事務的標識XID,然后提交。
SQLdelete from test where id=2;
SQLselect xid from v$transaction;
XID
----------------
04001200AE010000
SQLcommit;
在測試中方便起見,在事務沒有提交的時候,獲得事務的XID為04001F0035000000。實際情況下,不可能去跟蹤每個事務,想要獲得已提交事務的XID,就必須通過上面的Flashback Version Query。
(2)進行Flashback Transaction Query
SQLselect * from FLASHBACK_TRANSACTION_QUERY
where xid=’04001F0035000000’;
UNDO_SQL
insert into "FLASHTEST"."TEST"("ID") values (’2’);
注意:這個刪除語句對應的是1個Insert語句,如果想回滾這個事務,執(zhí)行這個Insert語句即可。
可以看到,F(xiàn)lashback Transaction Query主要用于審計一個事務,并可以回滾一個已經提交的事務。如果確定出錯的事務是最后一個事務,我們利用Flashback Table或者Flashback Query就可以解決問題。但是,如果執(zhí)行了一個錯誤的事務之后,又執(zhí)行了一系列正確的事務,那么上面的方法就無能為力,利用Flashback Transaction Query可以查看或回滾這個錯誤的事務。
另:ORACLE 11G還多了一個閃回數據歸檔的功能,即可將UNDO的信息進行歸檔,這個功能對于一些比較重要的表,
1,只需要執(zhí)行以下個腳本即可。
2,查看utl_file_dir設置
3, 可以通過命令行修改此參數,也可以通過修改pfile文件設置此參數。
4,該參數為靜態(tài)參數,需重啟數據庫后生效,創(chuàng)建LOGMNR數據字典。
5,添加需要分析的歸檔日志。
6,開始日志挖掘,分析日志。
7,查看日志信息,就可以了。
可按以下步驟配置閃回數據庫:(確保數據庫處于ARCHIVELOG 模式。)
1. 配置快速恢復區(qū)。
2. 使用初始化參數DB_FLASHBACK_RETENTION_TARGET 設置保留目標??芍付?/p>
一個上限(以分鐘為單位),指示數據庫能夠閃回到多長時間以前。本示例使用
了 2880 分鐘,相當于兩天。此參數只是一個目標,并不提供任何保證。閃回時間
間隔取決于快速恢復區(qū)中保留的閃回數據量的大小。
3. 使用以下命令啟用閃回數據庫:
ALTER DATABASE FLASHBACK ON;
必須先配置數據庫以進行歸檔,且必須在 MOUNT EXCLUSIVE 模式下啟動數據庫
后,才能發(fā)出此命令來啟用閃回數據庫。
可以使用以下查詢來確定是否已啟用閃回數據庫:
SELECT flashback_on FROM v$database;
可以使用ALTER DATABASE FLASHBACK OFF 命令禁用閃回數據庫。這樣,會自動刪
除所有現(xiàn)有的閃回數據庫日志。
注:僅當在獨占模式下裝載(而不是打開)數據庫時才能啟用閃回數據庫。
1.確認當前模式
SYS AS SYSDBA on 29-MAR-05 select flashback_on from v$database;
FLA
---
NO
2.檢查/修改恢復區(qū)設置
SYS AS SYSDBA on 29-MAR-05 show parameter db_recovery_file_dest
NAME TYPEVALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_deststring /u01/app/oracle/flash_recovery_areadb_recovery_file_dest_size big integer 10G
SYS AS SYSDBA on 29-MAR-05 alter system set db_recovery_file_dest='/u01/app/oracle/flash_recovery_area';
SYS AS SYSDBA on 29-MAR-05 alter system set db_recovery_file_dest_size=15G;
3.檢查/修改閃回時間設置
SYS AS SYSDBA on 29-MAR-05 show parameter db_flashback_retention_target
NAME TYPEVALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_targetinteger 60
SYS AS SYSDBA on 29-MAR-05 alter system set db_flashback_retention_target=1440;--分鐘
System altered.
如何設置flash recovery area
(1).db_recovery_file_dest:指定閃回恢復區(qū)的位置
(2).db_recovery_file_dest_size:指定閃回恢復區(qū)的可用空間大小
(3).db_flashback_retention_target:指定數據庫可以回退的時間,單位為分鐘,默認1440分鐘,也就是一天。當然,實際上可回退的時間還決定于閃回恢復區(qū)的大小,因為里面保存了回退所需要的 flash log。所以這個參數要和db_recovery_file_dest_size配合修改。
alter system set db_flashback_retention_target=1440;
alter system set db_recovery_file_dest='/u01/app/oracle/flash_recovery_area';
alter system set db_recovery_size=15G;
4.重新啟動數據庫到Mount狀態(tài)
啟動flashback database選項。
SYS AS SYSDBA on 29-MAR-05 shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS AS SYSDBA on 29-MAR-05 startup mount exclusive;
ORACLE instance started.
Total System Global Area 314572800 bytes
Fixed Size 1301704 bytes
Variable Size 261890872 bytes
Database Buffers 50331648 bytes
Redo Buffers1048576 bytes
Database mounted.
SYS AS SYSDBA on 29-MAR-05 alter database flashback on;
Database altered.
SYS AS SYSDBA on 29-MAR-05 alter database open;
Database altered.
數據恢復方法是利用oracle提供的閃回方法進行數據恢復,適用于delete刪除(一條記錄)方式:
首先需要知道是什么時間進行的刪除操作,如果不能確定具體時間點則選擇盡量準確的刪除數據前的時間。然后利用
select * from 表名 as of timestamp to_timestamp('刪除時間點','yyyy-mm-dd hh24:mi:ss')
語句可以找回刪除的數據。利用
insert into 表名 (select * from 表名 as of timestamp to_timestamp('刪除時間點','yyyy-mm-dd hh24:mi:ss'));
語句就可以將恢復出來的數據插入原表中(注意要保證主鍵不重復)。
另一種方法可以通過閃回整個表來恢復誤刪除的數據,但僅適用于表結構沒有發(fā)生改變且用戶有flash any table權限的情況下,語句如下:
·alter table 表名 enable row movement
本文標題:oracle數據如何閃回,數據庫表閃回命令
本文地址:http://jinyejixie.com/article10/hojpdo.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網站、品牌網站制作、動態(tài)網站、定制網站、網站收錄、做網站
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)