溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ORACLE數(shù)據(jù)庫文件丟失后的恢復測試

發(fā)布時間:2020-06-29 05:24:01 來源:網(wǎng)絡 閱讀:947 作者:三國冷 欄目:數(shù)據(jù)庫

一、測試環(huán)境

數(shù)據(jù)庫版本是11GR2,在做完一份完全備份之后,關(guān)機,做一份快照,每一次開機之后都執(zhí)行數(shù)次alter system switch logfile以產(chǎn)生歸檔日志。

之后的測試都是基于這么一個完全備份來恢復。

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/%F';

backup incremental level 0 format '/backup/%T_%f' database;

 

二、數(shù)據(jù)文件丟失的測試

2.1丟失所有數(shù)據(jù)文件的測試

  1.啟動數(shù)據(jù)庫至mount狀態(tài)

  startup mount;

2.啟動RMAN

[oracle@mycentos orcl]$ rman target /

3.還原數(shù)據(jù)庫

RMAN>restore database;

4.恢復數(shù)據(jù)庫

RMAN>recover database;

 

恢復完成之后,查看各個文件的狀態(tài)是否正常。

select file_name,file_id,status from dba_data_files;

--查看臨時表空間文件

select status,enabled, name, bytes/1024/1024 file_size

from v$tempfile;

select file_name from dba_temp_files;

 

2.2丟失單個數(shù)據(jù)文件的測試

2.2.1非關(guān)鍵數(shù)據(jù)文件丟失

  以丟失數(shù)據(jù)文件/u01/app/oracle/oradata/orcl/users01.dbf為例,當數(shù)據(jù)庫處于未崩潰狀態(tài)時

  1)alter database datafile'/u01/app/oracle/oradata/orcl/users01.dbf' offline;

  2)RMAN 模式下restore/recover數(shù)據(jù)文件

  restore datafile '/u01/app/oracle/oradata/orcl/users01.dbf';

  recover datafile '/u01/app/oracle/oradata/orcl/users01.dbf'

  3)數(shù)據(jù)文件上線

  alter database datafile'/u01/app/oracle/oradata/orcl/users01.dbf' online;

當數(shù)據(jù)庫因意外而崩潰時:

[oracle@mycentos ~]$ sqlplus /nolog

SQL> conn /as sysdba

SQL> startup;

ORA-01157: cannot identify/lock data file 4 - see DBWR trace file

ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'

--可以直接先啟動至mount狀態(tài)

啟動RMAN:

  restore datafile '/u01/app/oracle/oradata/orcl/users01.dbf';

  recover datafile '/u01/app/oracle/oradata/orcl/users01.dbf'

  alter database datafile'/u01/app/oracle/oradata/orcl/users01.dbf' online;

  alter database open;

非關(guān)鍵數(shù)據(jù)文件丟失后,先使數(shù)據(jù)文件處于offline狀態(tài),在恢復數(shù)據(jù)文件之后,再將其轉(zhuǎn)成online狀態(tài)。

 


2.2.2關(guān)鍵數(shù)據(jù)文件丟失

[oracle@mycentos orcl]$ rm system01.dbf;

關(guān)閉數(shù)據(jù)庫后,過程與崩潰后恢復數(shù)據(jù)非關(guān)鍵數(shù)據(jù)文件的過程一樣。

 

三、日志文件丟失的測試

  當前的配置是所有的group都只有一個成員,在group1中新增一個成員,使其變成2個成員,其他group仍然只有一個成員。

 

3.1丟失inactive日志文件的恢復測試

  刪除第二個日志組,并且模擬數(shù)據(jù)庫崩潰

  在未關(guān)機狀態(tài)下,數(shù)據(jù)庫能繼續(xù)運行,但是日志文件中會有告警信息。

    shutdown abort;

    startup mount;

    alter database clear unarchived logfile group 2; #此命令會重建第二組日志文件

    alter database open;


  刪除第一組日志的一個成員:

    rm redo01.log

    shutdown abort;

    startup;

  數(shù)據(jù)庫可以正常打開。redo01.log的狀態(tài)變成了INVALID.

  使用alter database clear unarchived logfile group 1;重建日志文件


3.2丟失CURRENT日志文件的恢復測試

  當?shù)谝唤M為CURRENT或actives時,刪除第一組日志的一個成員,數(shù)據(jù)庫可以正常打開。

  第三組為CURRENT,并且只有一個成員時,刪除第三組的日志。

  startup 命令報錯,并且在執(zhí)行clear unarchived logfile時會報

  ORA-01624: log 3 needed for crash recovery of instance orcl (thread 1)的錯誤。

  alter database open;#會報ORA-00313的錯誤

  因此需要用其他方式來打開數(shù)據(jù)庫:

方法一:使用不完全恢復:

  RMAN>RESTORE DATABASE;

  RMAN>RECOVER DATABASE UNTIL TIME 'SYSDATE-5/1440';#具體的時間可以看歸檔日志的生成時間

  SQL>alter database open resetlogs;

方法二:直接使用不完全恢復,不用RMAN。

  SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;

  SQL>shutdown abort;

  SQL>startup mount;

  SQL> recover database until cancel;

  SQL> alter database open resetlogs;


3.3丟失歸檔日志文件,并且需要恢復數(shù)據(jù)庫

使用RMAN不完全恢復至某一個時間點。

3.4丟失所有聯(lián)機重做日志文件的測試

參照丟3.2失CURRENT日志文件的恢復測試

 

 

四、丟失控制文件的測試

4.1當控制文件有多個副本時,刪除其中一個控制文件,模擬數(shù)據(jù)庫崩潰的情況。

在數(shù)據(jù)庫關(guān)閉的情況下,將副本復制成已刪除的控制文件的名字,能正常打開數(shù)據(jù)庫。

4.2 控制文件所有成員丟失,模擬數(shù)據(jù)庫崩潰

4.2.1 有備份控制文件的情況下,使用備份的控制文件恢復數(shù)據(jù)庫。

SQL>startup nomount;

RMAN>set dbid 1443678834#可以查看備份的控制文件獲得DBID

RMAN>restore controlfile from '/backup/c-1443678834-20160723-00';

SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;

SQL>shutdown abort;

  SQL>startup mount;

  SQL> recover database using backup controlfile until cancel;

    #輸入AUTO,應用歸檔日志后,再輸入一遍recover database .......,輸入online redo的路徑+名稱

  SQL> alter database open resetlogs;#數(shù)據(jù)不會丟失

  #有需要的話要重建臨時表空間

  #ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf' SIZE 1G;


4.2.2 沒有備份的控制文件,則需要重建控制文件。

在刪除控制文件之前,獲取控制文件的創(chuàng)建語句:

1)alter database backup controlfile to trace as '/home/oracle/crontol_trace.trc';

2)從/home/oracle/crontol_trace.trc文件中獲得如下語句:

CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 4 '/u01/app/oracle/oradata/orcl/redo_04.log'  SIZE 50M BLOCKSIZE 512

DATAFILE

  '/u01/app/oracle/oradata/orcl/system01.dbf',

  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',

  '/u01/app/oracle/oradata/orcl/undotbs01.dbf',

  '/u01/app/oracle/oradata/orcl/users01.dbf',

  '/u01/app/oracle/oradata/orcl/test_01.dbf',

  '/u01/app/oracle/oradata/orcl/test_02.dbf'

CHARACTER SET ZHS16GBK;

如果沒有使用1)中的語句獲取創(chuàng)建語句,也可以根據(jù)實際情況重建控制文件。

刪除所有的控制文件,并且模擬數(shù)據(jù)庫崩潰。

恢復的過程如下:

1)startup nomount;

2)執(zhí)行創(chuàng)建控制文件的語句,直接復制語句或放在腳本里均可。

3)之后執(zhí)行:

SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;

SQL>shutdown abort;

  SQL>startup mount;

  SQL> recover database using backup controlfile until cancel;

    #輸入AUTO,應用歸檔日志后,再輸入一遍recover database .......,輸入online redo的路徑+名稱

  SQL> alter database open resetlogs;#數(shù)據(jù)不會丟失

    重建臨時表空間

    ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf' SIZE 1G;


五、在只有一份備份的情況下,其余文件均丟失后,打開數(shù)據(jù)庫

在數(shù)據(jù)庫崩潰之后:

1)啟動數(shù)據(jù)庫至nomount,開啟RMAN并設置dbid

SQL>startup nomount;

RMAN>set dbid 1443678834

2)還原控制文件

RMAN>restore controlfile from '/backup/c-1443678834-20160723-00';

SQL>alter database mount;

3)還原數(shù)據(jù)文件

  RMAN>restore database;

4)執(zhí)行不完全恢復:

    SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;

    SQL>shutdown abort;

    SQL>startup mount;

    SQL> recover database using backup controlfile until cancel;

  因為日志文件、歸檔日志文件都已經(jīng)被刪除,所以選擇cancel不執(zhí)行恢復。

    SQL> alter database open resetlogs;

  之后檢查各文件是否正常。

 

 

六、總結(jié)

從模擬在線日志文件、控制文件丟失的過程中可以發(fā)現(xiàn),當這些文件有副本時,可以很快地打開數(shù)據(jù)庫,從而降低恢復數(shù)據(jù)庫的難度。

 

 

 

 

 

 

 

 

 

 


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI