oracle 還原點
正常還原點
建立正常還原點是給一個SCN或指定時間點指定一個還原點名稱。因此,還原點實際上可以看作是SCN的標記或別名。在執行任何操作之前你可能想要撤消該操作,你可以建立一個正常還原點。控制檔案會儲存還原點名稱與SCN,建立還原點可以消除提前記錄SCN或在使用閃回時需要判斷正確的SCN操作。
如果使用閃回或按時間點恢復,那麼你可以使用還原點名稱來代夫時間表示式或SCN。下面的命令支援使用還原點:
1.RMAN中的recover database與flashback database命令
2.SQL中的flashback table語句
正常的還原點是輕量級的。控制檔案可以維護上千個正常還原點而不會影響資料庫效能。正常還原點如果不手動刪除,當執行恢復不再需要它們時會從控制檔案中將其刪除。
下面舉例說明:
1.建立正常還原點
SQL> create restore point insert_point; Restore point created. SQL> set long 200 SQL> set linesize 200 SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#, 2 GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZE 3 FROM V$RESTORE_POINT; NAME SCN TIME DATABASE_INCARNATION# GUA STORAGE_SIZE -------------------- ---------- --------------------------------------------------------------------------- --------------------- --- ------------ INSERT_POINT 1187948 23-APR-15 05.18.21.000000000 PM 3 NO 0 SQL> alter system checkpoint; System altered. SQL> alter system switch logfile; System altered. SQL> select current_scn,to_char(scn_to_timestamp(current_scn),'yyyy-mm-dd hh24:mi:ss') from v$database; CURRENT_SCN TO_CHAR(SCN_TO_TIME ----------- ------------------- 1187983 2015-04-23 17:18:59
2.新建立一個表test:
SQL> create table test as select * from dba_objects; Table created. SQL> select current_scn,to_char(scn_to_timestamp(current_scn),'yyyy-mm-dd hh24:mi:ss') from v$database; CURRENT_SCN TO_CHAR(SCN_TO_TIME ----------- ------------------- 1188096 2015-04-23 17:20:20
3.將資料庫閃回到建立正常還原點的時間點
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 188313600 bytes Fixed Size 1363496 bytes Variable Size 150995416 bytes Database Buffers 33554432 bytes Redo Buffers 2400256 bytes Database mounted. SQL> flashback database to scn 1187983; Flashback complete. SQL> alter database open read only; Database altered.
4.檢查表test是否存在,因為表test是在建立還原點之後所建立,當將資料庫閃回到還原點後表test也就不存了:
SQL> select count(*) from test; select count(*) from test * ERROR at line 1: ORA-00942: table or view does not exist
受保護還原點
像正常還原點一樣,受保護的還原點也是恢復操作中所指定SCN的一個別名。唯一的區別是受保護的還原點除了顯式刪除之外是不會從控制檔案中刪除的。通常來說,使用正常還原點執行的命令也可以使用受保護還原點來作為SCN的別名,除了另有說明之外,使用正常還原點與受保護還原點的使用方法是一樣的
即使生成閃回日誌被禁用,受保護還原點確保你能使用閃回資料庫將資料檔案恢復到還原點SCN所對應的狀態。如果啟用閃回日誌,那麼受保護的還原點會強制保留將資料庫閃回到在最早建立的受保護還原點後的任意SCN所需要的閃回日誌。因此,如果啟用了閃回日誌,可以將資料庫閃回到受保護還原點後的任意SCN而不只是單個SCN。如果禁用了閃回日誌,那麼在執行flashback database命令時不能直接指定受保護還原點與當前時間之間的SCN。然後可以先閃回到受保護還原點再恢復到受保護還原點與當前時間之前的SCN。
閃回資料庫的命令是flashback database to PIT,PIT可以是SCN、時間或還原點,顧名思義,就是將整個資料庫回退到指定的一個時間點,實際上是資料庫不完全恢復的另一種方式。真正的不完全恢復需要消耗的時間與資料庫的大小有密切聯絡,資料庫越龐大,需要的時間就越多。
閃回資料庫技術改變了這個窘境,其處理問題方式可以著重於如何將相對較短的時間內發生的變更去除,而不是如何還原足夠舊的備份(很花時間了),再利用歸檔日誌前滾至指定時間。.
閃回資料庫需要使用兩種日誌:閃回日誌和重做日誌。其中重做日誌已為大家所知,而閃回日誌就像是重做日誌的反作用力,閃回日誌的記載正好與重做日誌的記載相反。比如,邏輯上重做日誌記錄insert命令的重做記錄,閃回日誌就記錄delete命令的重做記錄(當然實際上沒那麼簡單)。在發起閃回操作時,只要根據寫入閃回日誌的相反順序,即後寫先讀的順序,將閃回記錄從閃回日誌讀出並執行其記錄的變更就能夠將資料庫在時間軸上倒推。
閃回日誌的儲存路徑一定是快速恢復區的子目錄,儲存的期限則由引數db_flashback_ retention_target控制(單位為分鐘),凡是超出儲存期限的閃回日誌將會在快速恢復區空間緊張的時候被自動刪除。比如,指定資料庫保留兩天的閃回日誌和歸檔日誌:
SQL> alter system set db_flashback_retention_target=2880; System altered.
使用v$database.FLASHBACK_ON可以檢視閃回日誌是否已啟用,現在是“NO”,表示尚未啟用:
SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ NO
在確保啟用了歸檔模式之後,使用以下命令可以啟用閃回日誌,即閃回資料庫功能:
SQL> alter database flashback on; Database altered.
從此,在快速恢復區的flashback子目錄下將會出現副檔名為.flb的檔案,它們就是閃回日誌。
SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES
閃回資料庫命令的語法很簡單:在進入MOUNT狀態後執行flashback database to scn …或flashback database to timestamp …。
受保護還原點與儲存快照
在實踐中,受保護還原點可以替代儲存快照。儲存快照通常被用來在執行危險操作之前來保護資料庫,比如大範圍的資料庫更新或應用打補丁或升級。相對於建立快照或複製一個資料庫進行測試操作來說,你可以在主庫或物理備庫中建立一個受保護還原點。
閃回資料庫與受保護還原點日誌
閃回資料庫日誌與受保護還原點呼叫改變之前的資料檔案塊映象,flashback database命令可以使用這些映象來將資料檔案還原到之前的狀態。正常閃回日誌與受保護還原點日誌最主要的差別是當閃回區出現空間壓力時是否這些日誌會被刪除。這種差異會影響日誌的空間使用和資料庫效能。你的恢復目錄部分決定了是否啟用閃回日誌或者還原點,或都兩者都使用。當單獨或一起使用這些功能時對空間使用和效能的影響是需要考慮的。
受保護還原點與閃回區空間之關的系
當建立,保留,覆蓋與刪除閃回區中的閃回日誌時存在以下規則:
1.如果閃回區有足夠空間,那麼當需要滿足閃回保留目標時生成閃回日誌。
2.如果閃回日誌過舊不再滿足閃回保留目標,那麼可以重用這些閃回日誌。
3.如果資料庫必須建立閃回日誌並且閃回區已經被使用完或者沒有磁碟空間,那麼舊的閃回日誌會被重用。重用舊的閃回日誌會縮短閃回資料庫視窗。如果因為空間壓力問題有過多的閃回日誌被重用,那麼閃回保留目標可能不會被滿足。
4.如果閃回區填滿,那麼概括閃回區規則當閃回區要為其它檔案提供空間時會自動刪除歸檔重做日誌來回收空間。在這種情況下,flashback database命令需要使用的重做日誌的任何閃回日誌也會被刪除。概括閃回區規則,當出現以下情況下檔案使用的空間會被回收。
a.檔案被報告為過期並且閃回資料庫不需要該檔案。例如該檔案保留的時間超過了db_flashback_retention_target引數設定
b.檔案已經備份磁帶
5.如果為了滿足受保護還原點閃回區中沒有檔案滿足刪除條件。因為,閃回日誌和其它為了滿足受保護還原點的其它檔案,額外的為了滿足備份保留策略所需要的檔案都可能會造成閃回區被填滿。
當建立受保護還原點可以考慮不完全啟動閃回日誌,但需要監控閃回區的可用空間。如果為了滿足你的保留策略和受保護還原點,閃回區中沒有滿足刪除條件的檔案,如果遇到磁碟空間被填滿的情況時,資料庫會執行刪除。
禁用閃回日誌與受保護還原點
假設在資料庫禁用閃回日誌的情況下建立了受保護還原點。在這種情況下,在受保護還原點建立時第一次被修改的資料檔案塊,資料庫會將被修改前的資料塊映象儲存在閃回日誌中。因此閃回日誌保留了每一個被修改的資料塊在建立受保護還原點時的內容。後面對相同資料塊的修改將不會被捕獲除非在資料塊最後被之前之前又建立了一個受保護還原點。
這種記錄日誌方法有以下重要的結果:
1.flashback database可以透過使用資料塊映象重新構造在建立受保護還原點時資料檔案中的內容。
2.對於反覆修改相同的資料,相比對正常的閃回日誌受保護還原點所要使用的空間更少,因為每一個被修改的資料塊只會被記錄一次。應用程式有較少插入操作可能從節省磁碟空間中受益。當應用程式有大量插入或批次插入操作時這種優勢就沒有了。受保護還原點的日誌開鎖在禁用閃回日誌時是很小的。
假如你的主要目標是要能將資料庫恢復到受保護還原點所建立的時間點,那麼在這種情況下,禁用閃回日誌而只使用受保護還原點更有效。例如假設要對資料庫執行升級,可以在啟動升級之前建立一個受保護還原點,如果升級失敗,那麼可以執行flashback database來恢復資料庫。
啟用閃回日誌與受保護還原點
如果啟用閃回日誌並定義一個或多個受保護還原點,那麼資料庫會執行正常的閃回日誌操作。在這種情況下,閃回區將會保留將資料庫恢復到受保護還原點與當前時間之間任何時間點所需要的所有閃回日誌。閃回日誌如果滿足受保護還原點的要求在出現空間壓力時是不會被刪除的。啟用閃回日誌會佔用一些效能開銷。依賴於資料庫的工作負載,可能會對閃回區造成極大的空間壓力。因此應該要監控閃回區的空間使用情況。
使用閃回資料庫與受保護還原點的條件
為了能成功執行閃回資料庫和受保護還原點操作,必須首先設定一些關鍵的資料庫選項。在啟用閃回資料庫之前進行以下資料庫設定:
1.你的資料庫必須執行在archivelog模式下,因為閃回資料庫需要使用歸檔重做日誌。
2.必須設定了閃回區,因為閃回日誌只能儲存在閃回區中。
3.對於RAC資料庫,閃回區必須是叢集檔案系統或ASM
為了使用受保護還原點,資料庫必須滿足compatible引數必須設定為10.2.0或更高版本。但在使用正常還原點之前沒有任何特定要求。
下面是舉例來說明:
在啟用閃回日誌的情況下,建立受保護還原點
1.建立受保護還原點
SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES SQL> select current_scn,to_char(scn_to_timestamp(current_scn),'yyyy-mm-dd hh24:mi:ss') from v$database; CURRENT_SCN TO_CHAR(SCN_TO_TIME ----------- ------------------- 1187919 2015-04-23 17:17:26 SQL> create restore point create_point guarantee flashback database; Restore point created. SQL> set long 200 SQL> set linesize 200 SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#, 2 GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZE 3 FROM V$RESTORE_POINT; NAME SCN TIME DATABASE_INCARNATION# GUA STORAGE_SIZE -------------------- ---------- --------------------------------------------------------------------------- --------------------- --- ------------ CREATE_POINT 1187948 23-APR-15 05.18.21.000000000 PM 3 YES 52428800 SQL> alter system checkpoint; System altered. SQL> alter system switch logfile; System altered. SQL> select current_scn,to_char(scn_to_timestamp(current_scn),'yyyy-mm-dd hh24:mi:ss') from v$database; CURRENT_SCN TO_CHAR(SCN_TO_TIME ----------- ------------------- 1187983 2015-04-23 17:18:59
2.新建表test
SQL> create table test as select * from dba_objects; Table created. SQL> select current_scn,to_char(scn_to_timestamp(current_scn),'yyyy-mm-dd hh24:mi:ss') from v$database; CURRENT_SCN TO_CHAR(SCN_TO_TIME ----------- ------------------- 1188096 2015-04-23 17:20:20
因為我們啟用了閃回日誌,所以可以將資料庫閃回到受保護還原點(create_point)SCN:1187948與當前時間2015-04-23 17:20:20 SCN:1188096之間的任意SCN所對應的狀態。那麼我們將資料庫閃回到SCN為1187983,這時表test是還沒有建立的。
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 188313600 bytes Fixed Size 1363496 bytes Variable Size 150995416 bytes Database Buffers 33554432 bytes Redo Buffers 2400256 bytes Database mounted. SQL> flashback database to scn 1187983; Flashback complete. SQL> alter database open read only; Database altered. SQL> select count(*) from test; select count(*) from test * ERROR at line 1: ORA-00942: table or view does not exist
在確認之前不要以resetlogs選項open資料庫,這樣可以多次執行閃回資料庫操作,也可以撤消閃回資料庫操作,下面是撤消閃回資料庫操作是透過執行完全恢復來實現的:
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 188313600 bytes Fixed Size 1363496 bytes Variable Size 150995416 bytes Database Buffers 33554432 bytes Redo Buffers 2400256 bytes Database mounted. SQL> recover database; Media recovery complete. SQL> alter database open; Database altered. SQL> select count(*) from test; COUNT(*) ---------- 86741
下面我們在禁用閃回日誌的情況下執行閃回資料庫操作:
1.禁用閃回日誌並建立受保護還原點
SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES SQL> alter database flashback off; Database altered. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 188313600 bytes Fixed Size 1363496 bytes Variable Size 150995416 bytes Database Buffers 33554432 bytes Redo Buffers 2400256 bytes Database mounted. SQL> create restore point delete_point guarantee flashback database; Restore point created. SQL> alter database open; Database altered. SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ RESTORE POINT ONLY SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#, 2 GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZE 3 FROM V$RESTORE_POINT; NAME SCN TIME DATABASE_INCARNATION# GUA STORAGE_SIZE -------------------- ---------- --------------------------------------------------------------------------- --------------------- --- ------------ DELETE_POINT 1192464 23-APR-15 07.36.16.000000000 PM 3 YES 52428800 SQL> alter system switch logfile; System altered. SQL> alter system checkpoint; System altered. SQL> select current_scn,to_char(scn_to_timestamp(current_scn),'yyyy-mm-dd hh24:mi:ss') from v$database; CURRENT_SCN TO_CHAR(SCN_TO_TIME ----------- ------------------- 1192860 2015-04-23 19:37:51
2.刪除表test
SQL> delete from test; 86743 rows deleted. SQL> commit; Commit complete. SQL> select count(*) from test; COUNT(*) ---------- 0 SQL> select current_scn,to_char(scn_to_timestamp(current_scn),'yyyy-mm-dd hh24:mi:ss') from v$database; CURRENT_SCN TO_CHAR(SCN_TO_TIME ----------- ------------------- 1193268 2015-04-23 19:38:57
現在我們來測試看在禁用閃回日誌的情況下能不能將資料庫閃回到受保護還原點(delete_point)scn:1192464與當前時間SCN:1193268之間的任意SCN,這裡我們閃回到SCN:1192860,這裡表test的記錄還沒有被刪除
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 188313600 bytes Fixed Size 1363496 bytes Variable Size 150995416 bytes Database Buffers 33554432 bytes Redo Buffers 2400256 bytes Database mounted. SQL> flashback database to scn 1192860; flashback database to scn 1192860 * ERROR at line 1: ORA-38726: Flashback database logging is not on.
錯誤提示已經說明了沒有閃回日誌,所以不能將資料庫閃回到受保護還原點與當前時間之間的任意SCN。
下面將表test閃回到受保護還原點SCN:1192464
SQL> flashback database to restore point delete_point; Flashback complete. SQL> alter database open read only; Database altered. SQL> select count(*) from test; COUNT(*) ---------- 86743
從執行結果可知,已經恢復到受保護還原點所對應的狀態,表test的資料恢復回來了。
從上面的執行結果可以看到在沒有啟用閃回日誌的情況可以將資料庫閃回到受保護還原點。如果要想在沒有啟用閃回日誌的情況下將資料庫閃回到受保護還原點與當前時間點之間的SCN:1192860,可以先將資料庫閃加到受保護還原點,再執行恢復將資料庫恢復到SCN:1192860。
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 188313600 bytes Fixed Size 1363496 bytes Variable Size 150995416 bytes Database Buffers 33554432 bytes Redo Buffers 2400256 bytes Database mounted. SQL> flashback database to restore point delete_point; Flashback complete. SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss'; Session altered.
因為SCN:1192860,對應的時間就是2015-04-23 19:37:51,這裡如果直接用SCN:1192860執行恢復會報以下錯誤 :
SQL> recover database until scn 1192860; ORA-00277: illegal option to the UNTIL recovery flag SCN SQL> recover database until time '2015-04-23 19:37:51'; Media recovery complete. SQL> alter database open read only; Database altered. SQL> select count(*) from test; COUNT(*) ---------- 86743
從執行結果可知,已經恢復到受保護還原點所對應的狀態,表test的資料恢復回來了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-1593476/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【PDB】pdb閃回,Oracle還原點Oracle
- 「Oracle」Oracle 資料庫備份還原Oracle資料庫
- win10怎麼使用還原點還原系統_win10使用還原點還原系統的步驟Win10
- oracle 還原 .dmp 格式備份檔案Oracle
- Oracle匯出資料庫與還原Oracle資料庫
- Oracle資料庫備份還原詳解XKUSOracle資料庫
- Oracle 11g用impdp還原資料庫Oracle資料庫
- NBU異機還原oracle,使用者不同問題Oracle
- JavaScript單擊變色再次點選還原JavaScript
- 重灌系統感悟之設定系統還原點
- 雲音樂曙光埋點:還原資料理想國
- oracle 12c中CDB和PDB的備份還原實驗Oracle
- 「最新」冰點還原精靈Deep Freeze for mac(系統保護軟體)完全版 「系統還原工具」Mac
- PowerShell在 Windows 10/11 中啟用系統保護和建立還原點。使用 PowerShell 將Windows10/11計算機還原到上一個還原點 備註:server 無效 無此功能Windows計算機Server
- 冰點還原精靈:Deep Freeze for mac 中文完全版Mac
- win10安裝visual studio 2015卡在建立還原點Win10
- Oracle RMAN還原測試錯誤ORA-19571 ORA-19600 ORA-19601Oracle
- DM7使用dmrestore執行指定時間點或LSN還原REST
- Vue混淆與還原Vue
- Linux時間還原Linux
- 【TUNE_ORACLE】Oracle檢查點(二)檢查點效能Oracle
- 移動端模擬hover:按鈕點選變色之後還原
- Win10系統如何安裝冰點還原精靈【圖文】Win10
- win10如何還原_win10還原系統的步驟Win10
- 備份還原剪下板
- 將 SQL Server 資料庫還原到某個時點(完整恢復模式)SQLServer資料庫模式
- Oracle DG 日常點檢Oracle
- Oracle RAC新增節點Oracle
- 【TUNE_ORACLE】Oracle檢查點(一)檢查點(Checkpoint)概念介紹Oracle
- 還原系統win10的方法 win10怎麼還原系統Win10
- 原創:oracle 事務總結Oracle
- 原創:oracle 儲存過程Oracle儲存過程
- 【ORACLE】Oracle常用SQL及重點功能說明OracleSQL
- Ubuntu18.04 點選啟動器圖示視窗最小化和還原Ubuntu
- 原來git還可以起死回生!Git
- SVN庫匯出與還原
- CatFly【彙編程式碼還原】
- nuget 包是如何還原的
- MongoDB 邏輯還原工具mongorestoreMongoDBREST