1. 程式人生 > >rman數據庫恢復;關鍵/非重要文件、影像副本、控制文件、還原點、非歸檔、增量、新數據庫、災難性回復

rman數據庫恢復;關鍵/非重要文件、影像副本、控制文件、還原點、非歸檔、增量、新數據庫、災難性回復

mod sse nom 恢復文件 增量 ase control def 裝載

運行全然恢復:在 ARCHIVELOG 模式下 丟失了系統重要數據文件:

假設某個數據文件丟失或損壞。且該文件屬於 SYSTEM 或 UNDO 表空間,請運行下面步驟:

1.
實例可能會也可能不會自己主動關閉。
2.假設未自己主動關閉。請使用 SHUTDOWN ABORT 關閉實例。


3.
裝載數據庫。
4.
還原並恢復缺失的數據文件。

5.打開數據庫。

1.歸檔模式丟失非重要數據文件 全然恢復

第一種方法:

shutdown abort;

startup mount;

alter database create datafile ‘/home/oracle/test.dbf‘ as ‘/home/oracle/test.dbf‘;

recover datafile;

另外一種方法:

create tablespace test datafile ‘/home/oracle/test.dbf‘ size 10m;

rman target /

backup datafile 5;

rm test.dbf

sq> alter database datafile 5 offline;

restore datafile 5;

recover datafile 5;

sq> alter database datafile 5 online;

select FILE#,STATUS from v$datafile;

2. 歸檔模式丟失重要數據文件 全然恢復

利用備份,同上另外一種方法。

--------------------------------------------------------------------------------------------------------------
恢復映像副本:
RMAN> recover copy of database with tag ‘daily_inc‘;

RMAN> backup incremental level 1 for recover of copy
with tag ‘daily_inc‘ database;

RECOVER BACKUP
第 1 天 無 創建映像副本
第 2 天 無 創建 1 級增量備份
第 3 天和以後 依據增量備份恢復副本 創建 1 級增量備份


恢復映像副本:演示樣例
假設每天都執行以上命令,則能夠隨時獲得全部數據庫數據文件的連續更新的映像副本。


圖表顯示了每次執行所發生的操作。請註意,這樣的算法須要一段準備期間;到第 3 天後策略才會起作用。

第 1 天
RECOVER 命令沒有運行不論什麽操作。尚不存在要恢復的映像副本。BACKUP 命令可用於創建映像副本。

第 2 天
RECOVER 命令仍沒有運行不論什麽操作。由於尚不存在增量備份。

由於已在第 1 天創建了基準映像副本,BACKUP 命令會創建增量備份。


第 3 天
RECOVER 命令將增量備份中的更改應用於映像副本。

BACKUP 命令將運行還有一個增量備份,該備份將在第 4 天用於恢復映像副本,依此進行循環。

運行到映像副本的高速切換
運行下面步驟

能夠使用數據文件的映像副本進行高速恢復:

1.使數據文件脫機。


2.使用 SWITCH TO ...COPY 命令指向這些文件的映像副本。

3.恢復數據文件。


4.使數據文件聯機。


此時,數據庫是可用的,且數據文件已恢復。可是,假設您希望將數據文件放回其原始位置。請繼續運行下面步驟:


5.使用 BACKUP AS COPY 命令在原始位置創建數據文件的映像副本。

6.使數據文件脫機。

7.使用 SWITCH TO COPY 命令切換到在步驟 5 中創建的副本。

8.恢復數據文件。

9.使數據文件聯機。
能夠使用此命令來恢復數據文件、表空間、暫時文件或整個數據庫。

切換到的目標文件必須為映像副本。

3. 映像副本的高速切換

backup as copy datafile 6;

rm a.dbf

sqlalter database datafile 6 offline;

rman >switch datafile ‘/home/oracle/test.dbf‘ to copy;

recover datafile 6;

--回復後數據文件的路徑和名稱為 ‘/home/oracle/test.dbf‘。

alter database datafile 4 online;

select FILE#,STATUS from v$datafile;

select file_name from dba_data_files;

backup as copy datafile 4 format ‘/u01/app/oracle/oradata/orcln/users01.dbf‘;

alter database datafile 4 offline;

switch datafile ‘ /home/oracle/backup/db_data_D-ORCL_I-4115975543_TS-TEST_FNO-6_38otbf5q.bak‘ to copy;

switch datafile 4 to copy;

recover datafile 4;

alter database datafile 4 online;

select file_name from dba_data_files;

-----------------------------------------------------------------------------------------------------------------

4. set newname 改名字

backup as copy datafile 6;

list copy of datafile 6;

select FILE#,STATUS from v$datafile;

run{

allocate channel c1 device type disk;

sql "alter database datafile 6 offline";

set newname for datafile ‘/home/oracle/test.dbf‘ to ‘/home/oracle/test_new.dbf‘;

restore datafile 6;

switch datafile all;

recover datafile 6;

sql "alter database datafile 6 online";

}


--------------------------------------------------------------------------------------------------------------
從自己主動備份還原控制文件:

RMAN> STARTUP NOMOUNT;

RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;

RMAN> ALTER DATABASE MOUNT;

RMAN> RECOVER DATABASE;

RMAN> ALTER DATABASE OPEN RESETLOGS;

7. 丟失控制文件,參數文件 --數據庫必須在nomount狀態

查看文件信息:

SQL>select name from v$controlfile;

SQL>show parameter spfile;

SQL> select name from v$datafile;

配置控制文件自己主動備份恢復控制文件

rman target /

connected to target database: ORCL (DBID=1353286769)

RMAN>show all;

RMAN>CONFIGURE CONTROLFILE AUTOBACKUP ON;

數據庫全備份:

RMAN>backup as compressed backupset full database;

刪除,參數文件。控制文件,數據文件

rm /opt/oracle/oradata/orcl/control01.ctl

rm /opt/oracle/flash_recovery_area/orcl/control02.ctl

rm /opt/oracle/oradata/orcl/control03.ctl

rm /opt/oracle/product/11.2.2/dbs/spfileorcl.ora

rm /opt/oracle/oradata/orcl/system01.dbf

rm /opt/oracle/oradata/orcl/sysaux01.dbf

rm /opt/oracle/oradata/orcl/undotbs01.dbf

rm /opt/oracle/oradata/orcl/users01.dbf

rm /home/oracle/tbs_ctl01.dbf

rman target /

RMAN> set dbid 1353286769 --假設備份在

startup nomount --盡管沒有參數文件可是也能夠啟動實例

恢復參數文件:

restore spfile from ‘/data/backup/ctl_c-1353286769-20131102-04.bak‘;

/* 從高速恢復區恢復參數文件:

run {

restore spfile from autobackup

recovery area = ‘flash recovery area destination‘

db_name = ‘db_name‘;

}

*/

查看是否有須要改的參數:主要看文件位置

SQL> create pfile from spfile;

恢復控制文件:

restore controlfile to ‘/opt/oracle/oradata/orcl/control01.ctl‘ from ‘/data/backup/ctl_c-1353286769-20131102-04.bak‘;

恢復數據文件:

RMAN> shutdown immediate

RMAN> startup mount

RMAN> restore database;

RMAN> recover database;

RMAN> alter database open;

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of alter db command at 11/02/2013 12:10:46

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

RMAN> alter database open resetlogs;


--------------------------------------------------------------------------------------------------------------
使用增量備份恢復處於 NOARCHIVELOG 模式的數據庫:

STARTUP FORCE NOMOUNT;

RESTORE CONTROLFILE;

ALTER DATABASE MOUNT;

RESTORE DATABASE;

RECOVER DATABASE NOREDO;

ALTER DATABASE OPEN RESETLOGS;

8. 使用增量備份恢復處於NOARCHIVELOG 模式的數據庫

1) 撤銷數據庫archivelog模式

SQL>shutdown immediate;

SQL>startup mount;

SQL>alter database noarchivelog;

SQL>alter database open;

SQL>archive log list;

2) 創建測試用表及數據

conn zhuxy/zhuxy

create table c (id number);

insert into c values(1);

commit;

3) 在noarchivelog模式下,0級備份

RMAN> run{

shutdown immediate;

startup mount;

backup as backupset incremental level 0 database;

alter database open;

}

4) 在noarchivelog模式下,1級備份

insert into c values(2);

commit;

RMAN> run{

shutdown immediate;

startup mount;

backup as backupset incremental level 1 database;

alter database open;

}

6) 刪除全部日誌文件, 某些數據文件

7) 運行恢復

rman target /

RMAN>startup mount;

--運行全庫的還原

RMAN> restore database;

-- 使用noredo子句進行恢復

RMAN> recover database noredo;

--恢復完畢,resetlogs方式打開數據庫,完畢全部文件丟失的恢復

RMAN> alter database open resetlogs;

8)驗證在測試前(增量備份前)插入的數據

select * from c;

6.非歸檔丟失文件

不全然恢復: SCN, 時間,還原點,或日誌序列號

1確定目標還原點:SCN時間、還原點或日誌序列號。

2設置 NLS 環境變量。

3裝載數據庫。

4使用 SET UNTIL、RESTORE 和 RECOVER 命令準備並執行 RUN 塊。

5RESETLOGS 打開數據庫。

-----不全然恢復之--基於時間的恢復

1) 準備環境:RMAN全庫備份

RMAN> backup as compressed backupset full database;

2) 準備環境:測試表及數據

alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss‘;

create table d (c date);

insert into d values(sysdate);

commit;

create table ff (c date);

insert into ff values(sysdate);

commit;

啟動到mount模式,進行基於時間的恢復

shutdown immediate;

startup mount;

run

{sql ‘alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"‘;

set until time = ‘ 2014-03-30 00:39:34‘;

restore database;

recover database;

alter database open resetlogs;

}

時間也能夠這麽寫:

set until time="to_date(‘2013-11-01 15:29:34‘,‘yyyy-mm-dd hh24:mi:ss‘)";

-----還原點:

select count(*) from copy_emp;

創建還原點:

create restore point before_delete;

delete from copy_emp where ID >=10;

commit;

alter table copy_emp enable row movement;

flashback table copy_emp to restore point b;

--------------------------------------------------------------------------------------------------------------
將數據庫還原到新主機:

為了還原數據庫。請在還原主機上運行下面步驟:

1.配置 ORACLE_SID 環境變量。

2.啟動 RMAN 並在 NOCATALOG 模式下連接到目標實例。

3.設置數據庫標識符 (DBID)。

4.在 NOMOUNT 模式下啟動實例。
5.
從備份集中還原server參數文件。

6.關閉實例。


7.
編輯還原的初始化參數文件。
8.
在 NOMOUNT 模式下啟動實例
9.創建 RUN 塊以運行下列任務:

--還原控制文件
--
裝載數據庫

10.創建 RMAN 恢復腳本以還原和恢復數據庫。

11.運行 RMAN 腳本。

12.使用 RESETLOGS 選項打開數據庫。

9 利用備份將數據庫還原到新主機:目標庫須要有oracle軟件

1)準備工作

源庫數據庫全備及控制文件自己主動備份,當然也包含參數文件

RMAN> backup as backupset database;

2)拷貝RMAN備份文件到目標庫

能夠用scp

3)配置目標庫

目標庫環境變量設置

export ORACLE_SID=new_orcl

啟動rmannomount狀態,設置dbid(即源庫dbid)

$ rman target /

RMAN> set dbid 1357901988

RMAN> startup nomount; --沒有參數文件。會報錯,可是能夠啟動實例

4)恢復參數文件

RMAN> restore spfile to pfile ‘‘ from ‘‘;

編輯pfile參數文件:文件位置。數據庫實例名..,創建對應的文件夾

5) 啟動數據庫到nomount模式

SQL> create spfile from pfile;

SQL> startup nomount;

6)還原控制文件

$ rman target /

RMAN> restore controlfile to ‘‘ from ‘‘;

RMAN> alter database mount;

7) 還原數據文件

run{

SET NEWNAME FOR DATAFILE 1 TO ‘/u01/app/oracle/oradata/orcl/system01.dbf‘;

SET NEWNAME FOR DATAFILE 2 TO ‘/u01/app/oracle/oradata/orcl/sysaux01.dbf‘;

SET NEWNAME FOR DATAFILE 3 TO ‘/u01/app/oracle/oradata/orcl/undotbs01.dbf‘;

SET NEWNAME FOR DATAFILE 4 TO ‘/u01/app/oracle/oradata/orcl/users01.dbf‘;

SET NEWNAME FOR DATAFILE 5 TO ‘/u01/app/oracle/oradata/orcl/example01.dbf‘;

SET NEWNAME FOR DATAFILE 6 TO ‘/u01/app/oracle/oradata/orcl/test.dbf‘;

RESTORE DATABASE;

SWITCH DATAFILE ALL;

RECOVER DATABASE;}

--rename日誌文件

run{

SQL "ALTER DATABASE RENAME FILE ‘‘/u01/app/oracle/oradata/ENMOEDU/redo01.log‘‘ TO

‘‘/u01/app/oracle/oradata/orcl/redo01.log‘‘ ";

SQL "ALTER DATABASE RENAME FILE ‘‘/u01/app/oracle/oradata/ENMOEDU/redo02.log‘‘ TO

‘‘/u01/app/oracle/oradata/orcl/redo02.log‘‘ ";

SQL "ALTER DATABASE RENAME FILE ‘‘/u01/app/oracle/oradata/ENMOEDU/redo03.log‘‘ TO

‘‘/u01/app/oracle/oradata/orcl/redo03.log‘‘ ";

}

RMAN> alter database open resetlogs;

8)暫時文件位置不正確

SQL> select file_name from dba_temp_files;

SQL>create temporary tablespace tempa tempfile

‘/u01/app/oracle/oradata/orcl/tempa01.dbf‘ size 10m reuse autoextend on maxsize 200m;

SQL>alter database default temporary tablespace tempa;

SQL>drop tablespace temp;

SQL>select file_name from dba_temp_files;

:這個測試改變了實例名


--------------------------------------------------------------------------------------------------------------
運行災難恢復 :

災難意味著丟失了整個目標數據庫、恢復文件夾數據庫、全部當前控制文件、全部聯機重做日誌文件和全部參數文件。


災難恢復包含還原和恢復目標數據庫。


備份集的最低要求:

1.數據文件的備份
2.
對應的歸檔重做日誌文件
3.
至少一個控制文件自己主動備份

基本過程:
1.
還原server參數文件的自己主動備份。

2.啟動目標數據庫實例。

3.從自己主動備份還原控制文件。

4.裝載數據庫。

5.還原數據文件。

6.恢復數據文件。

7.使用 RESETLOGS 選項打開數據庫。


rman數據庫恢復;關鍵/非重要文件、影像副本、控制文件、還原點、非歸檔、增量、新數據庫、災難性回復