Ⅰ 什麼是閃回技術啊主要內容有哪些啊
為了使oracle資料庫從任何邏輯誤操作中迅速恢復,Oracle 資料庫10g 提供了一系列人為錯誤更正技術,稱為閃回。閃回從根本上改變了數據恢復。過去,資料庫在幾分鍾內就可能損壞,但需要幾小時才能恢復。利用閃回技術,更正錯誤的時間與錯誤發生時間幾乎相同。而且它非常易用,使用一條短命令便可恢復整個資料庫,而不必執行復雜的程序。閃回技術提供了一個 sql 界面,能夠快速分析和修復人為錯誤。閃回技術為本地數據損壞提供了細粒度外部分析和修復,如當錯誤刪除客戶訂單時。閃回技術還支持修復更多廣泛的損壞,同時快速避免長時間停機,如當本月的所有客戶訂單都被刪除時。閃回技術是 Oracle 資料庫獨有的特性,支持各級恢復,包括行、事務、表、表空間和資料庫范圍。
1 閃回查詢
在Oracle 9i之前,如果用戶錯誤操作數據後,除了不完全恢復外,沒有好的解決辦法。Oracle 9i中提供閃回查詢,由一個新的包DBMS_FLASH來實現。用戶使用閃回查詢可以及時取得誤操作DML(Delete、Update、Insert)前某一時間點資料庫的映像視圖,用戶可以利用系統時間或系統改變號(SCN:System Change Number)來指定這個只讀視圖,並可以針對錯誤進行相應的恢復措施。閃回查詢功能完全依賴於自動回滾段管理(AUM),對於Drop等誤操作不能恢復。閃回特性可應用在以下方面:
(1)自我維護過程中的修復:當一些重要的記錄被意外刪除,用戶可以向後移動到一個時間點,查看丟失的行並把它們重新插入現在的表內恢復。
(2)恢復Email和聲音Email:當用戶意外刪除了Email或者聲音信息時,可以通過移回到固定時間點來恢復刪除。
(3)賬號平衡狀況:可以查看以前的歷史數據。如銀行外幣管理中用於記錄特定時間的匯率。在以前,匯率變更被記錄在一個歷史表中,現在就可以通過閃回功能進行查詢。
(4)用於趨勢分析的決策支持系統:決策支持系統和聯機分析應用必須執行一個長時間的事務。使用閃回查詢,這些應用可以對歷史數據執行分析和建模。例如,特定產品如礦泉水隨季節變化需求情況的變化。
2 閃回版本查詢
閃回版本查詢提供了一種查看行級資料庫變化的方法。它是 SQL 的擴展,支持以特定時間間隔檢索所有不同版本的行。例如:
Select * from EMPLOYEE versions between 『2:00 PM』 and 『3:00 PM』 where …
該語句顯示出今天下午 2 點至 3 點之間該行的各版本,每個版本都由不同的事務所更改。使用 DBA 可指出數據何時、如何被更改的,並追溯到用戶、應用程序或事務。這使得 DBA 可以跟蹤資料庫中的邏輯破壞並加以更正。它還讓應用開發人員能夠對其代碼進行調試。
3 閃回事務查詢
閃回事務查詢提供了一種查看事務級資料庫變化的方法。它是 SQL 的擴展,能夠看到事務帶來的所有變化。例如:
Select * from DBA_TRANSACTION_QUERY where xid = 『000200030000002D』;
該語句顯示出該事務引起的結果性變化。此外,返回補充 SQL 語句,並用於撤消由事務引起的各行變化。使用精密工具(如 DBA),應用開發人員可以精確地診斷和更正資料庫或應用中的邏輯問題。
4 閃回資料庫
要將 Oracle 資料庫恢復到以前的時間點,傳統方法是進行時間點恢復。然而,時間點恢復需要用數小時甚至幾天的時間,因為它需要從備份中恢復整個資料庫,並恰好恢復到資料庫發生錯誤前的時間點。由於資料庫的大小不斷增長,因此需要用數小時甚至幾天的時間才能恢復整個資料庫。 閃回資料庫是進行時間點恢復的新戰略。它能夠快速將 Oracle 資料庫恢復到以前的時間,以正確更正由於邏輯數據損壞或用戶錯誤而引起的任何問題。閃回日誌可用於捕獲舊版本的變化塊。一種方法是不間斷備份或存儲快照。當需要執行恢復時,可快速重放閃回日誌,以將資料庫恢復到錯誤前的時間點,並且只恢復改變的塊。這一過程非常快,可將恢復時間從數小時縮短至幾分鍾。此外,它還非常易用。通過發出以下簡單的命令,可將資料庫恢復到 2:05 PM。
FLASHBACK DATABASE to 『2:05 PM』;
它的使用不要求進行磁帶恢復,沒有冗長的停機時間,沒有復雜的恢復過程。您還可以使用閃回,然後以只讀方式打開資料庫,並檢查其內容。如果您確定閃回過遠或不足,您可以重新發出閃回命令,以找到資料庫損壞前的正確時間點。閃回同時與 Data Guard 相集成,因此您可以一起閃回生產和待機資料庫(參見以下數據保護部分)。
閃回資料庫就像是為資料庫安裝了一個倒回或撤消按鈕。
5 閃回表
使用該特性,可以確保資料庫表能夠被恢復到之前的某一個時間點上。注意,該功能與最早的Oracle 9i中的Flashback Query不同,Flashback Query僅是得到了表在之前某個時間點上的快照而已,並不改變當前表的狀態;而Falshback Table卻能夠將表及附屬對象一起回到以前的某個時間點。該功能基於撤銷數據(undodata)。
6 閃回刪除
無意丟棄或刪除資料庫是人們經常會犯的錯誤。經常聽到 Oracle 支持人員說:「在我刪除那個表時,我以為我已經連接到了測試資料庫。」用戶已認識到他們錯了,但已經太晚了,沒有辦法輕松恢復被刪除的表及其索引、約束和觸發器。對象一旦被刪除就永遠被刪除了。如果真是重要的表或其它對象(如索引、分區或集簇),DBA 不得不執行時間點恢復,但這非常耗時,而且會導致丟失最近的事務。 閃回刪除針對刪除 Oracle 資料庫 10g 中的對象提供了一個安全網路。當用戶刪除一個表,Oracle 會將它放到垃圾箱中。垃圾箱中的對象一直會保留,直到用戶決定永久刪除它們或包含該本的表空間不足。垃圾箱是一個虛擬容器,用於存放所有被刪除的對象。用戶可以查看垃圾箱,「撤消」被刪除的表及其相關的對象。例如,可以發出以下命令來「撤消」雇員信息表及其所有相關對象。
FLASHBACK TABLE employee BEFORE DROP;
閃回刪除就像是為一個表及其相關對象安裝了一個撤消按鈕。
Ⅱ 怎麼利用閃回資料庫特性恢復failover 後的dataguard 環境
-----主庫defer 日誌傳輸
alter system set log_archive_dest_2=defer;
---enable 日誌傳輸:
alter system set log_archive_dest_2=enable;
-----備庫(mount)配置 flashback database:
STANDBY DATABASE: Stop redo apply, configure flashback retention,
start flashback database, open the database and start redo apply (Is active DG).
---檢查備庫是否啟用flashback database:
select flashback_on from v$database;
注意這里需要確認下備庫打開模式: mount?readonly with apply?
在11g 環境下備庫可能啟用了 ADG 特性 備庫日誌處於實時應用,資料庫模式為 readonly with apply
這時需要重啟資料庫到mount狀態修改flashback database 模式;
如果備庫處於mount 狀態,可以先取消日誌apply ,直接打開閃回資料庫特性;
---取消備庫日誌應用:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
---需要配置一下兩個參數來打開flashback database 特性:
ALTER SYSTEM SET db_recover_file_dest='/lixora/lixora/lixora/';
ALTER SYSTEM SET db_recover_file_dest_size=100G;
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=240; ---4hours
ALTER DATABASE FLASHBACK ON;
--手工創建還原點(該步驟沒有測試過):
Creating Restore point in Physical Standby:
CREATE RESTORE POINT before_damage GUARANTEE FLASHBACK DATABASE
-------備庫failover to primary db 應急切換步驟:
(註:模擬主庫由於故障無法正常switchover,需要執行failover,強制備庫->pridb並接管業務)
1.備庫:
由於是failover,所以理解主庫這時候已經無法正常使用,只需備庫切換至pridb
【前提主庫還是可用的:可選】查詢沒有應用的日誌:
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;
該語句取得當前資料庫各線程已歸檔文件最大序號,如果primary 與standby 最大序號不相同,
必須將多出的序號對應的歸檔文件復制到待轉換的standby伺服器。
Cp過來並register
ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1'
停止應用恢復模式
alter database recover managed standby database finish;
or
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
轉換standbydb為primary db
alter database commit to switchover to primary;
重啟資料庫,恢復正常業務
alter database open;
資料庫角色查看:
select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE
---------- ----------------
OPEN PRIMARY
------恢復failover 的備庫:
C. Using SQL*PLUS
Step 1 Determine the Standby Became Primary SCN.
Step 2 Flashback the Failed Primary Database.
Step 3 Convert to physical standby database.
Step 4 Restart Redo Transport.
Step 5 Start Redo Apply.
Step 1 Determine the SCN at which the old standby database became the primary database.
SQL> SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) FROM V$DATABASE;
Step 2 Flashback the Failed Primary Database to SCN standby_became_primary_scn.
SQL> SHUTDOWN IMMEDIATE;
SQL> startup mount
SQL> FLASHBACK DATABASE TO SCN ;
Step 3 Convert the database to a physical standby database and Restart database in mount stage.
SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
Step 4 Restart Redo Transport to the New Physical Standby Database.
1. If you have not set the remote archive destination on current primary then set remote archive destination:
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 = 'SERVICE=lixora VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=lixora' SCOPE=BOTH;
2. Enable the destination
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
3. Perform a log switch to ensure that standby database begins receiving redo data from the new primary database
SQL> ALTER SYSTEM SWITCH LOGFILE;
SQL> SELECT DEST_ID, STATUS, ERROR FROM V$ARCHIVE_DEST WHERE DEST_ID=2;
Ⅲ 如何在多租戶環境下使用資料庫的閃回功能
利用閃回恢復數據必須要開啟歸檔
一、閃回查詢
語法:select * from 表名 as of timestamp
to_timestamp('2016-08-01 01:00:00','yyyy-mm-dd hh24:mi:ss');
二、閃回表
語法:
alter table 表名 enable row movement; 允許行移動
flashback table 表名 to timestamp to_timestamp('2016-08-01
01:00:00','yyyy-mm-dd hh24:mi:ss');
三、閃回刪除
使用回收站(recyclebin)閃回刪除的表
四、閃回資料庫
(1)確認資料庫處於archive log模式且資料庫開啟閃回功能;
(2)Flashback Database 實際是對資料庫的一個不完全恢復操作,因為需要關閉資料庫重啟到mount狀態
方式一:通過時間戳閃回
語法:flashback database to timestamp to_timestamp('2016-08-02 21:12:46','yyyy-mm-dd
HH24:MI:SS');
方式二:通過SCN閃回
語法:flashback database to scn 13081009;
執行完flashback database之後,oracle提供了兩種方式修復資料庫
1、通過alter database open
resetlogs打開資料庫。當然,指定的scn或者timestamp之後產生的數據統統丟失
2、先執行alter database open
read only以read-only模式打開資料庫,確認數據無誤後,再以resetlogs的方式打開資料庫
五、閃回數據歸檔
(1)創建閃回表空間
(2)創建閃回歸檔
語法:create flashback archive [default] name tablespace tbs_name quoto 10g retention 1 year
(3)開啟表的閃回歸檔
語法:alter table tb_name flashback archie;
ps:開啟了閃回的表,不能drop,允許truncate。
六、創建還原點
(1)創建保證還原點
create restore point point_name grarantee flashback database;
(2)還原
restore point point_name;
Ⅳ oracle 怎樣利用閃回功能恢復數據
1,只需要執行以下個腳本即可。
7,查看日誌信息,就可以了。
Ⅳ Oracle 使用Flashback方式數據恢復,但是表中有CLOB欄位,提示:快照舊了
使用閃回資料庫,閃回後以read only模式打開,導出該表,然後重啟資料庫,做recover,打開,再導入;
使用基於時間點的恢復,和1差不多;
如果是11g版本以上,考慮以後用閃回數據歸檔。
Ⅵ oracle閃回閃回一般多久的表
利用閃回恢復數據必須要開啟歸檔
一、閃回查詢
語法:select * from 表名 as of timestamp
to_timestamp('2016-08-01 01:00:00','-mm-dd hh24:mi:ss');
二、閃回表
語法:
alter table 表名 enable row movement; 允許行移動
flashback table 表名 to timestamp to_timestamp('2016-08-01
01:00:00','-mm-dd hh24:mi:ss');
三、閃回刪除
使用回收站(recyclebin)閃回刪除的表
四、閃回資料庫
(1)確認資料庫處於archive log模式且資料庫開啟閃回功能;
(2)Flashback Database 實際是對資料庫的一個不完全恢復操作,因為需要關閉資料庫重啟到mount狀態
方式一:通過時間戳閃回
語法:flashback database to timestamp to_timestamp('2016-08-02 21:12:46','-mm-dd
HH24:MI:SS');
方式二:通過SCN閃回
語法:flashback database to scn 13081009;
執行完flashback database之後,oracle提供了兩種方式修復資料庫
1、通過alter database open
resetlogs打開資料庫。當然,指定的scn或者timestamp之後產生的數據統統丟失
2、先執行alter database open
read only以read-only模式打開資料庫,確認數據無誤後,再以resetlogs的方式打開資料庫
五、閃回數據歸檔
(1)創建閃回表空間
(2)創建閃回歸檔
語法:create flashback archive [default] name tablespace tbs_name quoto 10g retention 1 year
(3)開啟表的閃回歸檔
語法:alter table tb_name flashback archie;
ps:開啟了閃回的表,不能drop,允許truncate。
六、創建還原點
(1)創建保證還原點
create restore point point_name grarantee flashback database;
(2)還原
restore point point_name;
Ⅶ alter system set DB_RECOVERY_FILE_DEST_SIZE=10g 這個語句是不是及時生效的 還需不需要重啟資料庫
DB_RECOVERY_FILE_DEST_SIZE這個是session級的命令,不用重啟;
Ⅷ 求教Oracle11g中的閃回技術
1、Flashback Database(利用閃回日誌恢復)
Oracle Flashback Database特性允許通過SQL語句Flashback Database語句,讓資料庫前滾到當前的前一個時間點或者SCN,而不需要做時間點的恢復。閃回資料庫可以迅速將資料庫回到誤操作或人為錯誤的前一個時間點,如Word中的"撤消"操作,可以不利用備份就快速的實現基於時間點的恢復。Oracle通過創建新的Flashback Logs(閃回日誌),記錄資料庫的閃回操作。如果希望能閃回資料庫,需要設置如下參數:DB_RECOVER_FILE_DEST日誌的存放位置,DB_RECOVER_FILE_DEST_SIZE恢復區的大小。在創建資料庫的時候,Oracle將自動創建恢復區,但默認是關閉的,需要執行alter database flashback on命令。
例:執行Flashback Database命令格式。
SQL>flashback database to time to_timestamp(xxx);
SQL>flashback database to scn xxx
2、Flashback Table(利用UNDO保留信息恢復)
Oracle Flashback Table特性允許利用Flashback Table語句,確保閃回到表的前一個時間點。與Oracle 9i中的Flashback Query相似,利用回滾段信息來恢復一個或一些表到以前的一個時間點(一個快照)。要注意的是,Flashback Table不等於Flashback Query,Flashback Query僅僅是查詢以前的一個快照點而已,並不改變當前表的狀態,而Flashback Table將改變當前表及附屬對象一起回到以前的時間點。
語法:
flashback table tablename to timestamp xxx或
flashback table tablename to scn xxx
注意:如果需要閃回一個表,需要以下條件:
需要有flashback any table的系統許可權或者是該表的flashback對象許可權;
需要有該表的select,insert,delete,alter許可權;
必須保證該表row movement。
例:執行將test表閃回到2011年5月7日下午3點。
SQL>flashback table test to timestamp to_timestamp(』2011-05-07 15:00:00』,』yyyy-mm-dd hh24:mi:ss』);
3、Flashback Drop(利用回收站功能恢復)
註:由於目前的環境為了實現OGG的DDL同步,關閉了回收站功能,故這個功能不可用。
4、Flash Version Query(利用UNDO保留信息恢復)
Oracle Flashback Version Query特性,利用保存的回滾信息,可以看到特定的表在時間段內的任何修改,如電影的回放一樣,可以了解表在該期間的任何變化。Flashback version query一樣依賴於AUM,提供了一個查看行改變的功能,能找到所有已經提交了的行的記錄,分析出過去時間都執行了什麼操作。Flashback version query採用VERSIONS BETWEEN語句來進行查詢,常用的方法:
·VERSIONS_SCN - 系統改變號
·VERSIONS_TIMESTAMP - 時間
例如:在test表中,時間1插入一條記錄,時間2刪除了這條記錄,對於時間3執行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
基於時間段的閃回查詢:
SQL>select 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查詢的一個擴充,Flashback Version Query說明了可以審計一段時間內表的所有改變,但是也僅僅是能發現問題,對於錯誤的事務,沒有好的處理辦法。而Flashback Transaction Query提供了從FLASHBACK_TRANSACTION_QUERY視圖中獲得事務的歷史以及Undo_sql(回滾事務對應的sql語句),也就是說審計一個事務到底做了什麼,甚至可以回滾一個已經提交的事務。
例:Flashback Transaction Query的操作實例。
(1)在test表中刪除記錄,獲得事務的標識XID,然後提交。
SQL>delete from test where id=2;
SQL>select xid from v$transaction;
XID
----------------
04001200AE010000
SQL>commit;
在測試中方便起見,在事務沒有提交的時候,獲得事務的XID為04001F0035000000。實際情況下,不可能去跟蹤每個事務,想要獲得已提交事務的XID,就必須通過上面的Flashback Version Query。
(2)進行Flashback Transaction Query
SQL>select * from FLASHBACK_TRANSACTION_QUERY
where xid=』04001F0035000000』;
UNDO_SQL
insert into "FLASHTEST"."TEST"("ID") values (』2』);
注意:這個刪除語句對應的是1個Insert語句,如果想回滾這個事務,執行這個Insert語句即可。
可以看到,Flashback Transaction Query主要用於審計一個事務,並可以回滾一個已經提交的事務。如果確定出錯的事務是最後一個事務,我們利用Flashback Table或者Flashback Query就可以解決問題。但是,如果執行了一個錯誤的事務之後,又執行了一系列正確的事務,那麼上面的方法就無能為力,利用Flashback Transaction Query可以查看或回滾這個錯誤的事務。
另:ORACLE 11G還多了一個閃回數據歸檔的功能,即可將UNDO的信息進行歸檔,這個功能對於一些比較重要的表,
Ⅸ Oracle閃回默認是關閉的,為什麼在資料庫打開後不能啟用閃回功能
要在oracle資料庫處於mount狀態的時候才能啟用或者關閉archivelog功能。
先
startup monut;
再
alter database archivelog;
然後
alter database open;