標籤:
恢複階段
1、損壞或丟失檔案從備份中還原
2、從歸檔和線上記錄檔必要的被應用來改變資料,復原塊也在這時產生,這個稱為前滾或恢複緩衝
3、資料庫可能包含提交、不提交的改變資料
4、復原塊被使用於任何未提交的資料被復原,這個稱為復原或事務恢複
5、資料庫現在為恢複狀態
無開啟歸檔模式恢複
A、好處:
執行簡單,出錯率低
恢復就是還原所有的檔案花費的時間
B、不利:
資料丟失,必須手工應用
整個資料庫被還原到關閉備份的最後一個時間點
帶有重做記錄檔的備份非歸檔的恢複
SQL>SHUTDOWN ABORT
還原資料:
UNIX: cp /BACKUP/* /databases/db01/ORADATA
NT: copy d:\disk1\backup\*.* d:\disk1\data\
複製完成,開啟執行個體
CONN /AS SYSDBA
STARTUP
不帶有重做記錄檔的備份非歸檔的恢複
關閉資料庫
shutdown immediate
還原資料檔案和控制檔案
資料檔案的恢複 cp /db01/backup/*dbf /ORADATA/*
控制檔案恢複 cp /db01/backup/*.ctl /ORADTA
沒有備份線上日誌,無法應用線上日誌
recover database until cancel
SQL> shutdown immediate;資料庫已經關閉。已經卸載資料庫。ORACLE 常式已經關閉。SQL> startup mount;ORACLE 常式已經啟動。Total System Global Area 612368384 bytesFixed Size 1250428 bytesVariable Size 239078276 bytesDatabase Buffers 364904448 bytesRedo Buffers 7135232 bytes資料庫裝載完畢。SQL> alter database open;alter database open*第 1 行出現錯誤:ORA-00338: 日誌 1 (用於線程 1) 比控制檔案更新ORA-00312: 聯機日誌 1 線程 1: ‘D:\ORADATA\ORCL\REDO01.LOG‘SQL> recover database until cancel;完成介質恢複。SQL> alter database open;alter database open*第 1 行出現錯誤:ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項SQL> alter database open restlogs;alter database open restlogs *第 1 行出現錯誤:ORA-02288: 無效的 OPEN 模式SQL> alter database open resetlogs;資料庫已更改。
查看資料字典-哪個檔案需要恢複
V$RECOVER_FILE決定哪個檔案需要恢複V$ARCHIVED_LOG羅列全部的歸檔日誌V$RECOVERY_LOG羅列全部歸檔日誌需要恢複的SQL> create tablespace tbs datafile ‘/u01/test01.dbf‘ size 100M;資料表空間已建立。#在歸檔模式下alter DATABASE datafile ‘/u01/test01.dbf‘ offline;#不在歸檔下alter DATABASE datafile ‘/u01/test01.dbf‘ offline DROP ;SQL> select * from v$recover_file;FILE# ONLINE ONLINE_STA ERROR CHANGE# TIME---------- ---------- ---------- ---------- ---------- ---------------5 OFFLINE OFFLINE 1093567 05-4月 -15ERROR列有兩種可能為NULL錯誤為止如果恢複不需要OFFLINE NORMALCHANGE#列返回SCN從恢複開始例子闡述:歸檔模式下SQL> alter system switch logfile;系統已更改。SQL> alter system switch logfile;系統已更改。SQL> alter system switch logfile;系統已更改。我只有3組日誌組,最舊的會被替換掉。在查看v$recovery_logSQL> select * from v$recovery_log; THREAD# SEQUENCE# TIME ARCHIVE_NAME---------- ---------- -------------- ------------------------------ 1 3 02-4月 -15 D:\FLASH_RECOVERY_AREA\ORCL\AR CHIVELOG\2015_04_06\O1_MF_1_3_ BL4WZX0Z_.ARC說明:v$log之前sequence=3的已經被替換了,只能在歸檔在恢複SQL> alter database datafile 7 online;alter database datafile 7 online*第 1 行出現錯誤:ORA-01113: 檔案 7 需要介質恢複ORA-01110: 資料檔案 7: ‘D:\ORADATA\ORCL\GULL01.DBF‘SQL> recover datafile 7;ORA-00279: 更改 1129093 (在 04/02/2015 21:26:50 產生) 對於線程 1 是必需的ORA-00289: 建議:D:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2015_04_06\O1_MF_1_3_%U_.ARCORA-00280: 更改 1129093 (用於線程 1) 在序列 #3 中指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}auto已應用的日誌。完成介質恢複。SQL> alter database datafile 7 online;資料庫已更改。備忘說明:也可以使用 直接使用recover automatic datafile 7;再次把歸檔備份的另外的目錄下,可以採用指定歸檔檔案的位置恢複SQL> recover automatic datafile 7;ORA-00279: 更改 1143303 (在 04/06/2015 20:11:52 產生) 對於線程 1 是必需的ORA-00289: 建議:D:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2015_04_06\O1_MF_1_6_%U_.ARCORA-00280: 更改 1143303 (用於線程 1) 在序列 #6 中ORA-00278: 此恢複不再需要記錄檔‘D:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2015_04_06\O1_MF_1_6_BL4Y290Z_.ARC‘ORA-00308: 無法開啟歸檔日誌‘D:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2015_04_06\O1_MF_1_6_BL4Y290Z_.ARC‘ORA-27041: 無法開啟檔案OSD-04002: 無法開啟檔案O/S-Error: (OS 2) 系統找不到指定的檔案。指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}filenameORA-00308: 無法開啟歸檔日誌 ‘filename‘ORA-27041: 無法開啟檔案OSD-04002: 無法開啟檔案O/S-Error: (OS 2) 系統找不到指定的檔案。指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}D:\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\O1_MF_1_6_BL4Y290Z_.ARC已應用的日誌。完成介質恢複。SQL>
可以通過v$datafile_header的checkpoint_change#到v$archived_log.FIRST_CHANGE#和next_change#,確定需要恢複那些歸檔
RECOVER 命令的使用
A、在mount狀態下
recover [AUTOMATIC] database或recover [AUTOMATIC] datafile ‘/u01/test01.dbf‘;
B、資料庫開啟下的恢複
recover [AUTOMATIC] tablespace users或recover [AUTOMATIC] datafile 3;
AUTOMATIC自動應用歸檔日誌和重做記錄檔,不使用AUTOMATIC只會應用重做日誌
更改普通資料檔案(不是系統用的)的目錄
SQL> alter database datafile 7 offline;資料庫已更改。SQL> alter database rename file ‘D:\ORADATA\ORCL\GULL01.DBF‘ to ‘D:\ORADATA\GULL01.DBF‘ 2 ;作業系統中拷貝檔案的指定的目錄SQL> recover datafile 7;完成介質恢複。SQL> alter database datafile 7 online;資料庫已更改。
系統檔案的恢複
在使用過程無法使系統資料檔案離線
SQL> alter database datafile 1 offline;alter database datafile 1 offline*第 1 行出現錯誤:ORA-01541: 系統資料表空間無法離線; 如有必要請關閉
需要更改系統檔案system的路徑,只能在mount狀態下進行。
SQL> shutdown immediate;資料庫已經關閉。已經卸載資料庫。ORACLE 常式已經關閉。作業系統資料檔案拷貝SQL> startup mount;ORACLE 常式已經啟動。Total System Global Area 612368384 bytesFixed Size 1250428 bytesVariable Size 234883972 bytesDatabase Buffers 369098752 bytesRedo Buffers 7135232 bytes資料庫裝載完畢。SQL> alter database datafile 1 offline;資料庫已更改。SQL> alter database rename file ‘D:\ORADATA\ORCL\SYSTEM01.DBF‘ to ‘D:\ORADATA\SYSTEM01.DBF‘;資料庫已更改。SQL> alter database datafile 1 oNline;資料庫已更改。SQL> alter database open;資料庫已更改。SQL>
資料檔案丟失無備份的恢複資料檔案
如資料庫關閉狀態下,資料庫MOUNT狀態下,使資料檔案(無備份)OFFLINE,開啟資料庫,使用者只能使用這個資料表空間。
如資料庫在開啟狀態,立即把對應的資料表空間offline狀態
SQL> alter TABLESPACE GULL OFFLINE IMMEDIATE;資料表空間已更改。SQL> select * from v$recover_file; FILE# ONLINE ONLINE_ ERROR CHANGE# TIME---------- ------- ------- -------------------- ---------- -------------- 7 OFFLINE OFFLINE FILE NOT FOUND 0 8 OFFLINE OFFLINE 1147508 06-4月 -15SQL> alter database create datafile ‘D:\ORADATA\GULL01.DBF‘;資料庫已更改。SQL> select * from v$recover_file; FILE# ONLINE ONLINE_ ERROR CHANGE# TIME---------- ------- ------- -------------------- ---------- -------------- 7 OFFLINE OFFLINE UNKNOWN ERROR 579936 03-3月 -15 8 OFFLINE OFFLINE 1147508 06-4月 -15歸檔檔案需要都在才能恢複SQL> recover automatic tablespace gull;資料表空間線上alter tablespace gull online;
唯讀資料表空間的恢複
1、備份之前的資料表空間是read-only,現在還是read-only。
這樣恢複不需要任何的redo log
SQL> alter tablespace gull read only;資料表空間已更改。把資料表空間的資料檔案gull01備份SQL> alter system switch logfile;系統已更改。SQL> alter system switch logfile;系統已更改。SQL> alter system switch logfile;系統已更改。把之前備份的gull01直接替換不需要做任何恢複就可以使用
2、資料表空間現在是read-wirte,備份是通過read-only,需要應用redo和歸檔
SQL> create tablespace gull datafile ‘d:\oradata\gull01.dbf‘ size 20M;資料表空間已建立。SQL> alter tablespace gull read only;資料表空間已更改。備份資料檔案gull01SQL> alter tablespace gull read write;資料表空間已更改。SQL> conn gull/oracle已串連。SQL> create table test0408 as select *from dba_objects;表已建立。SQL> alter system checkpoint;系統已更改。SQL> alter system checkpoint;系統已更改。SQL> alter system checkpoint;系統已更改。SQL> alter system switch;alter system switch *第 1 行出現錯誤:ORA-01900: 需要 LOGFILE 關鍵字SQL> alter system switch logfile;系統已更改。SQL> alter system switch logfile;系統已更改。SQL> alter system switch logfile;系統已更改。SQL> alter database datafile 7 online;alter database datafile 7 online*第 1 行出現錯誤:ORA-01113: 檔案 7 需要介質恢複ORA-01110: 資料檔案 7: ‘D:\ORADATA\GULL01.DBF‘SQL> recover automatic datafile 7;完成介質恢複。SQL> alter database datafile 7 online;資料庫已更改。SQL> select count(*) from test0408; COUNT(*)---------- 50365SQL>
3、現在為read-only,之前為read-write
先要把對應的檔案改為offline,在恢複
SQL> create table test040801 as select *from dba_objects;表已建立。SQL> alter tablespace gull read only;資料表空間已更改。SQL> create table test040802 as select *from dba_objects;create table test040802 as select *from dba_objects *第 1 行出現錯誤:ORA-01647: 資料表空間 ‘GULL‘ 是唯讀, 無法在其中分配空間SQL> alter tablespace gull read write;alter tablespace gull read write*第 1 行出現錯誤:ORA-01122: 資料庫檔案 7 驗證失敗ORA-01110: 資料檔案 7: ‘D:\ORADATA\GULL01.DBF‘ORA-01208: 資料檔案是舊的版本 - 不能訪問目前的版本SQL> recover datafile 7;ORA-00283: 恢複會話因錯誤而取消ORA-01124: 無法恢複資料檔案 7 - 檔案在使用中或在恢複中ORA-01110: 資料檔案 7: ‘D:\ORADATA\GULL01.DBF‘SQL> alter database datafile 7 offline;資料庫已更改。SQL> recover automatic datafile 7;完成介質恢複。SQL> alter tablespace gull read write;alter tablespace gull read write*第 1 行出現錯誤:ORA-01135: DML/query 訪問的檔案 7 處於離線狀態ORA-01110: 資料檔案 7: ‘D:\ORADATA\GULL01.DBF‘SQL> alter database datafile 7 online;資料庫已更改。SQL> alter tablespace gull read write;資料表空間已更改。SQL> select count(*) from test040801; COUNT(*)---------- 50366SQL>
完全恢複-介質恢複