oracle資料庫完全恢複和不完全恢複以及執行使用者管理輩分恢複,oracle使用者管理
比較完全恢複和不完全恢複:
一、完全恢複:將資料庫恢複到當前最新狀態,包括直至請求恢複時進行的所有已提交的資料更改
二、不完全恢複:將資料庫恢複到請求恢複操作之前指定的過去時間點
一、完全恢複過程
下面的步驟說明了執行完全恢複期間要採取的操作:
1. 通過備份還原損壞或丟失的檔案。
2. 根據需要應用增量備份、歸檔重做記錄檔和聯機重做記錄檔中的更改。將重做日誌更改應用於資料檔案,直到到達當前聯機日誌,並且重新輸入了最新的交易處理。在整個過程中會產生還原塊。這稱為前滾或快取恢複。
3. 此時,還原的資料檔案中包含已提交和未認可的變更。
4. 還原塊用於回退任何未認可的變更。有時也稱為交易處理恢複。
5. 此時,資料檔案處於已恢複狀態,且與資料庫中的其它資料檔案一致。
二、不完全恢複過程:
不完全恢複或資料庫時間點恢複使用備份來產生非目前的版本的資料庫。也就是說,不會應用最新備份之後產生的所有重做記錄。僅當絕對必要時才執行此類恢複。要執行不完全恢複,需要:
復原點之前產生的所有資料檔案的有效離線或聯機備份
從備份時間到指定恢復的所有歸檔日誌
下面列出了執行不完全恢複的過程:
1.從備份還原資料檔案:如果還原點目標並不很新,則使用的備份可能也不是最新的。這需要使用 OS 命令或 RMAN RESTORE 命令來複製檔案。
2.使用 RECOVER 命令:從歸檔重做記錄檔應用重做,根據需要包括儘可能多的資料以達到還原點目標。
3.恢複以後的狀態:此時,資料檔案包含一些已提交的交易處理和未提交的交易處理,因為重做可以包含未提交的資料。
4.使用 ALTER DATABASE OPEN 命令:應用還原塊之前資料庫已開啟。這是為了提供更高的可用性。
5.應用還原資料:應用重做時,同時會應用支援還原資料檔案的重做。這樣,還原可以應用於資料檔案,以便還原任何未提交的交易處理。這是接下來要完成的操作。
6.過程完成:此時,資料檔案已恢複到所選擇的時間點。
如果必須執行恢複且發現包含交易處理的歸檔日誌丟失,其中的交易處理是在還原所用的備份的建立時間與目標恢複 SCN 之間發生的,則時間點恢複是唯一的選擇。沒有丟失的日誌,則沒有該期間內對資料檔案進行更新的記錄。唯一的選擇就是從還原備份的時間點恢複資料庫,直到未損壞的歸檔日誌系列所允許的時間點,然後使用 RESETLOGS 選項開啟資料庫。丟失的重做記錄檔中的或之後的所有更改都將丟失。
備份和恢複的使用類型:
Database Backup和恢複的類型包括:
使用者管理的:不使用 RMAN。
--使用 OS 命令移動檔案 --DBA 需要手動維護備份活動記錄
伺服器管理的:使用 RMAN
1.執行使用者管理的Database Backup
可以使用 OS 命令建立資料檔案的副本,從而備份資料庫。操作過程取決於資料庫是否處於 ARCHIVELOG 模式。如果是,則通過在複製資料表空間的資料檔案之前將每個資料表空間置於備份模式,可以使資料庫處於開啟且可用狀態。否則,在複製資料檔案之前必須先關閉資料庫。
1)手動備份 NOARCHIVELOG 資料庫:
通過關閉資料庫並將所有資料檔案和控制檔案複製到備份目錄,可以對 NOARCHIVELOG 資料庫進行一致的整體Database Backup。由於檔案複製操作是使用 OS 命令完成的,因此必須先關閉資料庫。這會將資料庫置於一致狀態。
SQL> SHUTDOWN IMMEDIATE
$ cp $ORACLE_BASE/ORCL/datafile/*.dbf /u02/backup/datafile
--將資料檔案複製到備份位置
$ cp $ORACLE_BASE/ORCL/controlfile/*.ctl /u02/backup/controlfile --將控制檔案複製到備份位置
SQL> STARTUP
2)手動備份 ARCHIVELOG 資料庫
如果資料庫處於 ARCHIVELOG 模式下,則複製檔案前不一定必須關閉資料庫。最終會得到不一致備份,但應用重做資料後會使其恢複到一致狀態。
啟動備份模式:
複製資料檔案之前,必須將每個資料檔案都置於備份模式。請使用 ALTER TABLESPACE 和 ALTER DATABASE 命令的 BEGIN BACKUP 子句來執行此操作。以下是每個命令的文法:
ALTER TABLESPACE <tablespace> BEGIN BACKUP;
--ALTER TABLESPACE 命令僅影響屬於該資料表空間的那些資料檔案。
ALTER DATABASE BEGIN BACKUP;
--ALTER DATABASE 影響資料庫中的所有資料檔案。
結束備份模式:
使資料檔案退出備份模式非常重要。關閉資料庫時,不能有任何資料檔案處於備份模式。如果嘗試關閉處於該狀態的資料庫,將收到錯誤。此外,由於備份模式會導致產生額外的重做資料,因此會給系統帶來額外的負載。如果您不主動備份資料檔案,則沒有理由使任何資料檔案處於備份模式。
具體操作:
備份資料檔案:
SQL> select file_name, tablespace_name from dba_data_files;
--查看所有資料檔案位置及資料表空間
SQL> ALTER TABLESPACE users BEGIN BACKUP;
--將資料表空間置於備份模式
$ cp $ORACLE_HOME/oradata/orcl/users*.dbf /u02/backup/datafile
--將該資料表空間的資料檔案複製到備份位置
SQL> ALTER TABLESPACE users END BACKUP;
--使該資料表空間退出備份模式
備份控制檔案的方式包括:
(1).建立為映像副本,寫入到指定名稱的檔案:
SQL> ALTER DATABASE BACKUP CONTROLFILE TO
'/u01/backup/controlfile.bak';
Database altered.
(2).產生重新建立控制檔案的指令碼,寫入到追蹤檔案:
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
Database altered.
--重建控制檔案的指令碼在$ORACLE_BASE/diag/rdbms/prod/PROD/trace
查看剛產生指令檔,會發現裡面會有兩種建立控制檔案的方式:
NORESETLOGS ARCHIVELOG,表示記錄檔等完好,重啟資料庫是不用resetlog;
RESETLOGS ARCHIVELOG;記錄檔損壞丟失,不能執行完全恢複,將日誌組號清零;
2.執行使用者管理的資料庫恢複
1)執行使用者管理的資料庫完全恢複
使用者管理的資料庫完全恢複:
將資料庫恢複到最新的 SCN
可以一次處理整個資料庫,也可以一次處理一個資料檔案或資料表空間 需要當前控制檔案 需要有待恢複的所有檔案的備份 需要到目前為止的所有歸檔日誌
V$RECOVER_FILE:查看哪些檔案需要介質恢複
V$RECOVERY_LOG:查看執行恢複需要哪些歸檔日誌
在某些情況下,屬於 SYSTEM 資料表空間的檔案受到損壞時,執行個體將自動關閉。當某些資料檔案有問題時,即使執行個體保持運行狀態,您也可以判定使資料庫保持運行狀態沒有任何意義;受影響的資料庫物件太多了。在這種情況下,請關閉資料庫執行恢複。
如果資料庫仍處於開啟狀態,則可以查詢 V$RECOVER_FILE 視圖瞭解哪些資料檔案需要恢複,並查詢 V$RECOVERY_LOG 瞭解需要哪些歸檔日誌。這會指示您需要從備份中還原哪些檔案(如果有)。
然後關閉資料庫。調查介質故障,確定問題原因。修複該問題,以便可以從備份中還原檔案。
例如,您可能需要更換磁碟機。
現在,可使用 RECOVER 命令來執行恢複。將恢複範圍限制在所需範圍,如資料檔案或資料表空間。如果需要,可恢複整個資料庫。隨後,開啟資料庫。
SQL> SELECT file#, error FROM v$recover_file;
--確定需要恢複的資料檔案
SQL> SELECT archive_name FROM v$recovery_log;
--確定完成恢複所需的歸檔記錄檔
確定與恢複相關的檔案
如果資料庫仍處於開啟狀態,請按下面的說明查詢檔案。否則,請嘗試啟動執行個體,並裝載資料庫發出查詢。
為了確定哪些資料檔案需要恢複,查詢 V$RECOVER_FILE 視圖。ERROR 列指明檔案需要恢複的原因。如果此列具備 OFFLINE NORMAL 以外的任何值,則需要恢複。
要查看所有受影響的資料檔案和資料表空間的概況,可以在此查詢中加入 V$DATAFILE 和 V$TABLESPACE。
下面是一個樣本:
SELECT r.FILE# ,d.NAME df_name ,t.NAME tbsp_name, d.STATUS ,r.ERROR ,r.CHANGE# ,r.TIME
FROM V$RECOVER_FILE r, V$DATAFILE d, V$TABLESPACE t
WHERE t.TS# = d.TS#
AND d.FILE# = r.FILE#;
這可指示受損的程度,協助您確定 RECOVER 命令的對象。
V$RECOVERY_LOG 視圖顯示執行恢複所需的歸檔記錄檔。如果列表顯示某些檔案已移出預設歸檔日誌位置,則必須將它們還原到某個位置,再執行恢複。
記錄這些查詢的結果後,關閉資料庫。
還原與恢複相關的檔案
確定了需要哪些資料檔案和歸檔記錄檔後,將它們還原到相應的磁碟位置。通過從備份位置複製資料檔案,可以還原該資料檔案,如以下樣本所示:
$ cp /disk2/backup/datafile/survey01.dbf $ORACLE_BASE/oradata/ORCL/datafile/survey01.dbf
如果恢複需要任何歸檔日誌,檢查這些日誌是否仍位于歸檔日誌的預設磁碟位置。這些日誌可能不在預設位置,
例如,已將它們移至磁帶或其它磁碟機。如果日誌已被移動,則需將它們還原到預設歸檔日誌位置或臨時位置。如果預設位置(由 LOG_ARCHIVE_DEST_1 初始化參數指定)中有足夠的可用空間,在該位置還原日誌。否則,可以將日誌置於某個其它磁碟位置。還原時,可指定該備用位置來尋找歸檔記錄檔。
如果需要移動資料檔案,則必須將這一情況記錄在控制檔案中。通過執行 ALTER DATABASE RENAME FILE 命令,可以完成此操作,如下例所示:
SQL> ALTER DATABASE RENAME FILE
'/u01/app/oracle/oradata/ORCL/datafile/survey01.dbf' TO
'/newdisk/ORCL/datafile/survey01.dbf';
--須先啟動執行個體並裝載資料庫,然後才能執行 ALTER DATABASE RENAME FILE 命令。
載資料庫並使所有資料檔案聯機(如果尚未執行此操作)。通過查詢 V$DATAFILE 視圖,可以檢查每個資料檔案的狀態。可使用如下命令使資料檔案聯機:
SQL> ALTER DATABASE DATAFILE '/newdisk/ORCL/datafile/survey01.dbf' ONLINE;
應用重做資料
此時,資料檔案已還原到過去的某個時間點。歸檔記錄檔也已還原到其預設位置或某個其它位置(僅用於此恢複)。已準備就緒,可執行真正的恢複步驟,這意味著已應用重做且資料檔案已恢複到最新 SCN。
使用 SQL*Plus RECOVER 命令執行此操作。
如果沒有指定 AUTOMATIC 選項,則系統會提示您指定要應用的每個重做記錄檔。這樣可以提高對恢複過程的控制。通常,AUTOMATIC 用於完全恢複。
如果歸檔記錄檔已還原到資料庫預設位置以外的某個磁碟位置,則必須指定 FROM 子句。提供儲存這些檔案的目錄,恢複過程將在該目錄中尋找檔案。
最後,開啟資料庫。此時已完全恢複。
SQL> RECOVER AUTOMATIC FROM '/u01/arch_temp' DATABASE;
--使用 RECOVER 命令應用重做資料
SQL> ALTER DATABASE OPEN; --開啟資料庫
對開啟的資料庫執行完全恢複
如果在資料庫開啟時出現介質故障,則資料庫將繼續運行。嘗試向其中的資料檔案寫入資料時,資料檔案將自動離線。對這些資料檔案進行查詢不會導致其離線,但是會向發出查詢的使用者返回錯誤。
與恢複關閉的資料庫類似,首先需要查詢需恢複的檔案和歸檔日誌。然後,使包含受損資料檔案的所有資料表空間離線。可使用如下命令完成該操作:
SQL> ALTER TABLESPACE survey OFFLINE TEMPORARY;
使用 TEMPORARY 選項會導致 Oracle 對所有屬於資料表空間的聯機資料檔案執行檢查點操作。經過檢查點操作的資料檔案在重新聯機後不需要進行恢複,因為對於可能會影響它們的任何交易處理的最新 SCN 而言,它們是最新的。儘管在此命令運行時資料檔案必須可用,但此選項更符合需要。問題可能是臨時的,可以在不產生錯誤的情況下使資料表空間聯機。
檢查介質以確定問題原因。可使用 DBVERIFY 公用程式來執行此操作。如果檔案被永久損壞,按前面就恢複關閉資料庫所述的內容進行還原和恢複。還原和恢複步驟完成後,應使所有資料表空間重新聯機。
2.執行使用者管理的不完全恢複
在以下情況下,可將資料庫恢複到過去的時間點:
希望資料庫處於出現使用者錯誤或管理錯誤之前的狀態。
資料庫包含損壞的塊。
由於缺少某些重做記錄檔,因此無法對資料庫執行完全恢複。
您希望建立一個測試資料庫,該資料庫處於過去某個時間的狀態。
丟失了資料檔案和一個或多個未歸檔重做記錄檔
可通過以下方式指明何時停止應用重做資料:
1).指定停止的時間
SQL> RECOVER DATABASE UNTIL
TIME '2005-12-14:12:10:03';
2).
指定停止的 SCN
SQL> recover database until change1487389;
3).在執行恢複時發出 CANCEL 命令
SQL> RECOVER DATABASE UNTIL CANCEL;
執行使用者管理的不完全恢複
使用以下命令執行不完全恢複:
RECOVER [AUTOMATIC] DATABASE option
下面是選項的含義:
AUTOMATIC:自動應用歸檔和重做記錄檔
option: UNTIL TIME 'YYYY-MM-DD:HH24:MI:SS'
UNTIL CANCEL
UNTIL CHANGE <integer>
USING BACKUP CONTROLFILE
基於取消的不完全恢複
基於取消的不完全恢複與對關閉資料庫執行的完全恢複非常相似。差異在於執行 RECOVER 命令的方式;指定 UNTIL CANCEL 子句。此子句將導致恢複過程提示您確認要應用的每個重做記錄檔的建議名稱。因此,在進行恢複過程中,系統會提示您確認已歸檔或聯機的重做記錄檔名,而且對於每個檔案名稱,您可以接受它,也可以更改它。到達要讓恢複停止的時間點時,請輸入 CANCEL,而不要接受檔案名稱。這將停止恢複。
完成此操作後,必須使用 RESETLOGS 選項開啟資料庫。由於資料庫當前正在執行另一執行個體化操作,因此需要重設重做記錄序號。
開啟該資料庫後,檢查預警日誌中的訊息。通過這種方式,可以獲知恢複是否已成功。要在恢複過程中自動應用重做記錄檔,可以使用 SQL*Plus SET AUTORECOVERY ON 命令,在恢複提示符下輸入 AUTO,或者使用 RECOVER AUTOMATIC 命令。
基於時間和更改的不完全恢複
基於時間和更改的不完全恢複與基於取消的恢複類似,區別在於使用不同標準來指定停止恢複的時間。基於時間的恢複使用在 RECOVER 命令的命令列中指定的時間來獲知何時停止。基於更改的恢複使用在命令列中指定的 SCN。
與所有的不完全恢複一樣,之後必須使用 RESETLOGS 選項開啟資料庫。
執行使用者管理的不完全恢複:步驟
1.關閉資料庫。
2.還原資料檔案。
3.裝載資料庫。
4.恢複資料庫。
5.使用 RESETLOGS 選項開啟資料庫。 resetlogs 將記錄檔的SCN號強制置位1;
執行 ALTER DATABASE OPEN RESETLOGS 開啟資料庫。
-----------------------------------------------------------------------------------------------------
oracle資料庫執行不完全恢複時,資料庫處於什狀態?
mout狀態,完了之後在open
oracle 中不完全資料庫恢複的問題
好久沒玩了,也不知道說的對不對。說說自己的理解,互相學習學習。
1.為什麼需要全部控制檔案的備份檔案,只靠全部資料檔案恢複資料表空間不行嗎?
下面是一個假設的例子
上午9點,資料庫正常,備份資料庫
上午10點,錯誤刪除了一個資料表空間
上午11點,發現錯誤刪除了,需要恢複
這裡 9點的時候,控制檔案中,記錄了你每個資料檔案的資訊。
10點的時候,誤刪了資料表空間,導致一個或多個資料檔案,被刪除掉,同時 控制檔案中,不再記錄該檔案的資訊。
11點的時候,你要恢複那個誤刪的資料表空間,那就必須要 定位到9點的那個時候的控制檔案。 因為9點的時候,控制檔案中記錄了 每個資料表空間,由多少個資料檔案組成,以及資料檔案都叫啥名字.
如果你只有一堆資料檔案的話,Oracle 沒法自動的識別這些檔案,原來是屬於哪一個資料表空間的。
2.假如該例子不完全資料庫恢複之後,那麼是恢複到資料庫之前的一個時間,盡然這樣的話,那麼的用來恢
複的控制檔案和資料檔案的SCN是往後推移的,那是不是記錄檔和系統改變的SCN是往前的呢?SCN是否
可以往前。 或者是我對不完全資料庫恢複還沒有理解,請大家幫我解決下!!
SCN = SYSTEM CHANGE NUMBER
就是當資料庫 COMMIT 之後,這個 SCN 會不斷地從小到大遞增。
還是前面那個例子
上午9點,資料庫正常,備份資料庫 假如這個時候資料庫 SCN = 500
上午10點,錯誤刪除了一個資料表空間 假如這個時候資料庫 SCN = 600
上午11點,發現錯誤刪除了,需要恢複 假如這個時候資料庫 SCN = 700
那麼上面的這種情況下,你需要把資料庫恢複到刪除資料表空間的前一個 SCN 之前, 也就是 SCN = 599 的情況下。