10g閃回總結
10g閃回總結
[@more@]10g閃回總結
Oracle從9i就有了閃回這個新功能,在Oracle 10g中這個功能被大大增強。在Oracle 9i中只是以閃回查詢的形式檢視某一時間點上的資料,就是某一時刻的資料的快照,而不是在兩個時間點之間的被更改資料的執行狀態的表示,在Oracle 10g中就提供了這樣的功能。
優點
閃回應該說是一個技術革新,比傳統意義上的恢復更快更加簡單方便。傳統意義上的恢復需要還原資料庫和資料檔案,而這些資料檔案則是在前一階段備份而來的。然後在透過資料庫日值在資料檔案上的前滾來實現資料的每一次改變。這樣的過程相對而言是比較慢的。而閃回透過事務或者行的改變來構架閃回,只有資料的改變的前像和後像被儲存。
閃回技術應用的範圍
閃回技術恢復在Oracle 10g上提供了三個級別的恢復。我們可以根據不同的應用來實現不同的級別的資料庫恢復實現。
資料庫級
n Drop user (Flashback Database)
n Truncate table (Flashback Database)
n Batch job : partial change (Flashback Database)
表級
n Drop table (flashback drop)
n Update with wrong where clause (Flashback table)
n Compare current data against the data at some time in the past (Flashback Query)
事務級
Batch job runs twice, but you are unsure of the objects affected (Flashback Query)
需要的許可權
由於需要使用不同的閃回版本則是需要不同的許可權:
n Flashback Database:
– SYSDBA database connection
n Flashback Table or Flashback Versions Query:
– FLASHBACK ANY TABLE
– Appropriate object privileges
n Flashback Transaction Query:
– SELECT ANY TRANSACTION
閃回資料庫
這個功能是非常強大的,在上面也介紹了,當發生錯誤使用drop user,刪除使用者這樣的錯誤的時候,是必須使用資料庫閃回來進行恢復的,這項功能能夠使得快速將你的資料庫返回到以前某個時間點上的狀態,從而恢復你的資料庫。能夠使用這個功能實現邏輯資料實效的錯誤,在這裡需要解釋的是,在閃回恢復和通常的日誌恢復的不同。
閃回恢復是將你現在的資料庫回退到以前的某個時間點,主要目的是為了解決資料庫上人為的邏輯錯誤,注意這是邏輯錯誤,意義就是說,是由於人為的錯誤,而發現的相對比較早,在閃回恢復的時間期限內。
而日誌恢復則是將資料庫還原到以前的某個時間點(實在你需要恢復的時間點之前的時間點),這裡的根據你恢復的不同而還原,如果是隻是恢復資料檔案,只是需要還原這個資料檔案。使用歸檔和聯機日誌檔案將你的資料庫應用到當前或者以前的某個時間點。主要目的是為了恢復物理上的錯誤。
閃回恢復資料庫之所以說要比普通意義上的恢復快的原因就是因為,在閃回恢復資料庫是沒有還原這一說的。
閃回資料庫也是透過應用日誌來恢復資料庫,只不過不是使用重做日誌,而是使用的是閃回日誌。
機制
由圖上可以看到,閃回資料庫使用的是一個新的日誌:閃回資料庫日誌,Oracle資料庫伺服器定期在閃回資料庫日誌資料塊的前像寫入到日誌檔案中去。當進行閃回資料庫恢復的時候,日誌上的前像將被回滾應用在資料庫的資料檔案中。閃回資料庫日誌是被自動管理和新增到恢復區域的。當閃回資料庫被開啟的時候,會有一個新的恢復寫程式RVWR被開啟。
啟動配置閃回資料庫
1、 配置flash 恢復區域
2、 設定引數db_flashback_retention_target
這個引數的單位是分鐘。指定的是一個資料庫可以使用閃回恢復的時間,這個時間越長,需要的閃回恢復區域就月大。
SQL> show parameter flashback NAME TYPE VALUE ------------------------ ------------ -------------- db_flashback_retention_target integer 1440 SQL> |
3、使用ALTER DATABASE FLASHBACK ON;將資料庫啟動為閃回資料庫狀態。
ALTER DATABASE FLASHBACK ON; |
這裡需要注意的是資料庫需要是在archivelog模式之下啟動閃回資料庫,並使用MOUNT EXCLUSIVE模式下執行的。
開啟閃回資料庫以後可以透過查詢檢視v$database的列flashback_on來檢視閃回資料庫是否開啟。
SQL> select FLASHBACK_ON from v$database; FLASHBACK_ON ------------------ YES |
例項:
SQL> startup mount ORACLE 例程已經啟動。 Total System Global Area 83886080 bytes Fixed Size 1247420 bytes Variable Size 67110724 bytes Database Buffers 12582912 bytes Redo Buffers 2945024 bytes 資料庫裝載完畢。 SQL> alter database flashback on; 資料庫已更改。 SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES SQL> alter database open; 資料庫已更改。 SQL> |
關閉閃回資料庫
關閉閃回資料庫狀態需要使用命令:
ALTER DATABASE FLASHBACK OFF; |
SQL> select FLASHBACK_ON from v$database; FLASHBACK_ON ------------------ NO |
閃回資料庫
閃回資料庫由三種方式進行,一種是使用OEM的UI操作,二種是使用RMAN進行。三是使用SQL PLUS來實現。OEM在這裡就不介紹了。
使用RMAN
將資料庫恢復到一個時間點
RMAN> FLASHBACK DATABASE 2> TO TIME = TO_DATE 3> ('2002-12-10 16:00:00', 4> 'YYYY-MM-DD HH24:MI:SS'); |
將資料庫閃回恢復到一個SCN
RMAN> FLASHBACK DATABASE TO SCN=23565; |
指定一個redo日誌的SEQUENCE和THREAD號,作為閃回恢復的上限。這個功能是RMAN特有的。
RMAN> FLASHBACK DATABASE 2> TO SEQUENCE=223 THREAD=1; |
使用SQL*Plus
將資料庫恢復到一個時間點
SQL> FLASHBACK DATABASE 2 TO TIMESTAMP(SYSDATE-1/24); |
將資料庫閃回恢復到一個SCN
SQL> FLASHBACK DATABASE TO SCN 53943; |
閃回資料庫例項:
SQL> conn test/test Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 Connected as test SQL> select table_name from user_tables; TABLE_NAME ------------------------------ SQL> select dbms_flashback.get_system_change_number from dual; GET_SYSTEM_CHANGE_NUMBER ------------------------ 609755 SQL> create table t as select * from all_objects where rownum < 11; Table created SQL> select dbms_flashback.get_system_change_number from dual; GET_SYSTEM_CHANGE_NUMBER ------------------------ 609841 SQL> select table_name from user_tables; TABLE_NAME ------------------------------ T SQL> 現在資料庫中有一個表t,然後進行恢復。 SQL> archive log list 資料庫日誌模式 存檔模式 自動存檔 啟用 存檔終點 USE_DB_RECOVERY_FILE_DEST 最早的聯機日誌序列 2 下一個存檔日誌序列 4 當前日誌序列 4 SQL> flashback database to scn 609755 2 ; flashback database to scn 609755 * 第 1 行出現錯誤: ORA-38757: 要閃回資料庫, 資料庫必須已裝載但不能開啟。 SQL> conn /as sysdba 已連線。 SQL> show user USER 為 "SYS" SQL> shutdown immediate 資料庫已經關閉。 已經解除安裝資料庫。 ORACLE 例程已經關閉。 SQL> startup mount ORA-32004: obsolete and/or deprecated parameter(s) specified ORACLE 例程已經啟動。 Total System Global Area 83886080 bytes Fixed Size 1247420 bytes Variable Size 71305028 bytes Database Buffers 8388608 bytes Redo Buffers 2945024 bytes 資料庫裝載完畢。 SQL> flashback database to scn 609755; 閃回完成。 SQL> alter database open; alter database open * 第 1 行出現錯誤: ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項 SQL> alter database open resetlogs; 資料庫已更改。 SQL> conn test/test 已連線。 SQL> select table_name from user_tables; 未選定行 |
查詢閃回資料庫的狀態
Oracle提供了三個檢視有關於閃回資料庫的
v$flashback_database_log
v$flashback_database_logfile
v$flashback_database_stat
排除某個表空間出閃回恢復資料庫
使用命令將某個表空間排除出閃回資料庫恢復。
ALTER TABLESPACE |
並可以透過查詢檢視v$tablespace的flashback_on來檢視錶空間的狀態。
需要注意的問題
在以下的情況下是不能使用閃回資料庫的:
n 控制檔案被還原或者重新新增
n 表空間被刪除
n 一個資料檔案被收縮
Resetlogs和閃回(這個似乎容易出錯。我做的時候就出現ORA-600的錯誤,後來解決辦法就是重建控制檔案恢復的。至今不知道為什麼,以後有機會好好檢查一下。)
每一次使用FLASHBACK DATABASE閃回資料庫的時候,需要使用resetlogs開啟資料庫。假如在使用resetlogs開啟資料庫的時候,發現有錯誤的時候。只需要簡單執行FLASHBACK DATABASE TO BEFORE RESETLOGS命令就能夠將資料庫安裝並恢復到前像的(incarnation)最後的SCN。
SQL> shutdown immediate 資料庫已經關閉。 已經解除安裝資料庫。 ORACLE 例程已經關閉。 SQL> startup mount ORA-32004: obsolete and/or deprecated parameter(s) specified ORACLE 例程已經啟動。 Total System Global Area 83886080 bytes Fixed Size 1247420 bytes Variable Size 67110724 bytes Database Buffers 12582912 bytes Redo Buffers 2945024 bytes 資料庫裝載完畢。 SQL> flashback database to before resetlogs; 閃回完成。 這個地方正常恢復,從後來的恢復的資料庫上看也是恢復了資料。 SQL> alter database open; alter database open * 第 1 行出現錯誤: ORA-00600: 內部錯誤程式碼, 引數: [kcvcrv_fb_inc_mismatch], [0], [556264], [598815894], [0], [609776], [598877589], [] 但是這裡為什麼出現內部錯誤。 因為沒有metalink帳號,也沒有深究,在這裡存檔,以後檢視 隨後使用重建控制檔案的重建日誌檔案來恢復資料庫。 SQL> select status from v$instance; STATUS ------------ MOUNTED SQL> shutdown immediate; ORA-01109: 資料庫未開啟 已經解除安裝資料庫。 ORACLE 例程已經關閉。 SQL> startup ORA-32004: obsolete and/or deprecated parameter(s) specified ORACLE 例程已經啟動。 Total System Global Area 83886080 bytes Fixed Size 1247420 bytes Variable Size 67110724 bytes Database Buffers 12582912 bytes Redo Buffers 2945024 bytes 資料庫裝載完畢。 ORA-00600: 內部錯誤程式碼, 引數: [kcvcrv_fb_inc_mismatch], [0], [556264], [598815894], [0], [609776], [598877589], [] SQL> alter database backup controlfile to trace; 在mount狀態下執行的這個語句。 資料庫已更改。 SQL> shutdown immediate; ORA-01109: 資料庫未開啟 已經解除安裝資料庫。 ORACLE 例程已經關閉。 SQL> STARTUP NOMOUNT ORA-32004: obsolete and/or deprecated parameter(s) specified ORACLE 例程已經啟動。 Total System Global Area 83886080 bytes Fixed Size 1247420 bytes Variable Size 67110724 bytes Database Buffers 12582912 bytes Redo Buffers 2945024 bytes SQL> CREATE CONTROLFILE REUSE DATABASE "ORA10" RESETLOGS ARCHIVELOG 2 MAXLOGFILES 16 3 MAXLOGMEMBERS 3 4 MAXDATAFILES 100 5 MAXINSTANCES 8 6 MAXLOGHISTORY 292 7 LOGFILE 8 GROUP 1 'E:ORACLEORADATAORA10REDO01.LOG' SIZE 10000K, 9 GROUP 2 'E:ORACLEORADATAORA10REDO02.LOG' SIZE 10000K, 10 GROUP 3 'E:ORACLEORADATAORA10REDO03.LOG' SIZE 10000K 11 -- STANDBY LOGFILE 12 DATAFILE 13 'E:ORACLEORADATAORA10SYSTEM01.DBF', 14 'E:ORACLEORADATAORA10UNDOTBS01.DBF', 15 'E:ORACLEORADATAORA10SYSAUX01.DBF', 16 'E:ORACLEORADATAORA10USERS01.DBF' 17 CHARACTER SET ZHS16GBK 18 ; 控制檔案已建立。 SQL> -- Commands to re-create incarnation table SQL> -- Below log names MUST be changed to existing filenames on SQL> -- disk. Any one log file from each branch can be used to SQL> -- re-create incarnation records. SQL> -- ALTER DATABASE REGISTER LOGFILE 'E:ORACLEFLASH_RECOVERY_AREAORA10ARC HIVELOG2006_08_19O1_MF_1_1_%U_.ARC'; SQL> -- ALTER DATABASE REGISTER LOGFILE 'E:ORACLEFLASH_RECOVERY_AREAORA10ARC HIVELOG2006_08_19O1_MF_1_1_%U_.ARC'; SQL> -- ALTER DATABASE REGISTER LOGFILE 'E:ORACLEFLASH_RECOVERY_AREAORA10ARC HIVELOG2006_08_19O1_MF_1_1_%U_.ARC'; SQL> -- Recovery is required if any of the datafiles are restored backups, SQL> -- or if the last shutdown was not normal or immediate. SQL> RECOVER DATABASE USING BACKUP CONTROLFILE ORA-00279: ?? 609775 (? 08/19/2006 10:40:41 ??) ???? 1 ???? ORA-00289: ??: E:ORACLEFLASH_RECOVERY_AREAORA10ARCHIVELOG2006_08_19O1_MF_1_4_%U_.ARC ORA-00280: ?? 609775 (???? 1) ??? #4 ? 指定日誌: { -- Database can now be opened zeroing the online logs. ORA-00308: ???????? '--' ORA-27041: ?????? OSD-04002: ???????????? O/S-Error: (OS 2) ?????????????????????? 指定日誌: { ALTER DATABASE OPEN RESETLOGS; ORA-00308: ???????? 'ALTER' ORA-27041: ?????? OSD-04002: ???????????? O/S-Error: (OS 2) ?????????????????????? 指定日誌: { -- Commands to add tempfiles to temporary tablespaces. ORA-00308: ???????? '--' ORA-27041: ?????? OSD-04002: ???????????? O/S-Error: (OS 2) ?????????????????????? 指定日誌: { -- Online tempfiles have complete space information. ORA-00308: ???????? '--' ORA-27041: ?????? OSD-04002: ???????????? O/S-Error: (OS 2) ?????????????????????? 指定日誌: { -- Other tempfiles may require adjustment. ORA-00308: ???????? '--' ORA-27041: ?????? OSD-04002: ???????????? O/S-Error: (OS 2) ?????????????????????? 指定日誌: { ALTER TABLESPACE TEMP ADD TEMPFILE 'E:ORACLEORADATAORA10TEMP01.DBF' REUSE; ORA-00308: ???????? 'ALTER' ORA-27041: ?????? OSD-04002: ???????????? O/S-Error: (OS 2) ?????????????????????? 指定日誌: { -- End of tempfile additions. ORA-00308: ???????? '--' ORA-27041: ?????? OSD-04002: ???????????? O/S-Error: (OS 2) ?????????????????????? 指定日誌: { -- ORA-00308: ???????? '--' ORA-27041: ?????? OSD-04002: ???????????? O/S-Error: (OS 2) ?????????????????????? 指定日誌: { 已應用的日誌。 完成介質恢復。 SQL> ALTER DATABASE OPEN RESETLOGS; 資料庫已更改。 SQL> -- Commands to add tempfiles to temporary tablespaces. SQL> -- Online tempfiles have complete space information. SQL> -- Other tempfiles may require adjustment. SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'E:ORACLEORADATAORA10TEMP01.DBF' REU SE; 表空間已更改。 SQL> 這時候資料庫正常的。 |
閃回版本查詢
閃回版本查詢就是指能夠在資料庫上查詢某一時間點或者使用者指定的特定的SCN的版本資料。在查詢的時候,需要使用versions子句來使用在兩個時間點之間的所有版本。透過閃回提取的是行的歷史,這裡的行的歷史是事務行的改變。所有隻是查詢已經提交的行,沒有提交的行版本並不會被查詢。
偽列
VERSIONS_OPERATION
VERSIONS_XID
VERSIONS_ENDTIME
VERSIONS_ENDSCN
VERSIONS_STARTTIME
VERSIONS_STARTSCN
SELECT [Pseudocolumns]… FROM … VERSIONS BETWEEN {SCN|TIMESTAMP {expr|MINVALUE} AND {expr|MAXVALUE}} [AS OF {SCN|TIMESTAMP expr}] WHERE [Pseudocolumns…]… |
需要注意的問題
VERSIONS子句不能用於以下情況的查詢:
n 外部表
n 臨時表
n Fixed表
n 檢視
VERSIONS子句不能跨DDL查詢,意思就是在使用VERSIONS子句的時候,如果對這個表有DDL操作的時候,只能檢視DDL之後的資訊。當段被收縮操作的時候也是被排除出去的。
例項:
SQL> create table rates (currency varchar2(4) not null,rate number(15,10)); Table created SQL> insert into rates values('euro',1.1012); 1 row inserted SQL> update rates set rate = 1.1014; 1 row updated SQL> commit; Commit complete SQL> update rates set rate = 1.1013; 1 row updated SQL> commit; Commit complete SQL> delete rates; 1 row deleted< |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/222350/viewspace-907897/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE 10G中閃回彙總Oracle 10g
- oracke閃回技術總結
- FlashBack總結之閃回資料庫與閃回刪除資料庫
- Oracle閃回查詢,閃回版本查詢與閃回事務查詢的使用區別總結Oracle
- Oracle 10G 新特性——閃回表Oracle 10g
- oralce 10g閃回學習(一)
- Oracle Database 10g新特性-閃回表OracleDatabase
- Oracle 10g的閃回查詢概述Oracle 10g
- 10g新特性——閃回版本查詢
- 關於oracle閃回資料歸檔的總結Oracle
- 閃回表、閃回查詢
- Oracle Database 10g新特性-閃回版本查詢OracleDatabase
- 【Flashback】10G的新特性“閃回表”清除方法
- 使用 Oracle Database 10g中的閃回表特性OracleDatabase
- Oracle9i,.10g 閃回查詢(flashback)Oracle
- 閃回(關於閃回查詢)
- 閃回刪除、閃回查詢
- 閃回技術二:閃回表
- 【閃回特性之閃回查詢】使用閃回查詢(select as of)
- 閃回(關於閃回資料庫)資料庫
- 基本閃回查詢和閃回表
- 閃回技術一:閃回查詢
- 【聽海日誌】之Oracle 10g閃回資料庫Oracle 10g資料庫
- 10g閃回區和歸檔目錄的關係
- DM7閃回與閃回查詢
- 閃回查詢之閃回版本查詢
- 閃回查詢之閃回表查詢
- (f)--閃回恢復區---實踐2---閃回表(閃回DML部分資料會用到閃回查詢)
- oracle閃回Oracle
- oracle 閃回Oracle
- Oracle9i Flashback Query 閃回查詢總結 --- (通過SCN恢復)Oracle
- Oracle閃回技術之閃回資料庫Oracle資料庫
- 教你如何成為Oracle 10g OCP - 第十四章 閃回Oracle 10g
- 閃回資料庫測試之二 :通過read only檢視閃回的結果資料庫
- [閃回特性之閃回版本查詢]Flashback Version Query
- Oracle Flashback 閃回查詢功能操作範例(9i and 10g)Oracle
- 10g裡的閃回表命令-- 表的刪除和恢復
- 10g關閉歸檔/啟用閃回恢復區歸檔