中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

ORACLE數據庫文件丟失后的恢復測試

發布時間:2020-06-29 05:24:01 來源:網絡 閱讀:954 作者:三國冷 欄目:數據庫

一、測試環境

數據庫版本是11GR2,在做完一份完全備份之后,關機,做一份快照,每一次開機之后都執行數次alter system switch logfile以產生歸檔日志。

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

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

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

 

二、數據文件丟失的測試

2.1丟失所有數據文件的測試

  1.啟動數據庫至mount狀態

  startup mount;

2.啟動RMAN

[oracle@mycentos orcl]$ rman target /

3.還原數據庫

RMAN>restore database;

4.恢復數據庫

RMAN>recover database;

 

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

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丟失單個數據文件的測試

2.2.1非關鍵數據文件丟失

  以丟失數據文件/u01/app/oracle/oradata/orcl/users01.dbf為例,當數據庫處于未崩潰狀態時

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

  2)RMAN 模式下restore/recover數據文件

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

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

  3)數據文件上線

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

當數據庫因意外而崩潰時:

[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狀態

啟動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;

非關鍵數據文件丟失后,先使數據文件處于offline狀態,在恢復數據文件之后,再將其轉成online狀態。

 


2.2.2關鍵數據文件丟失

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

關閉數據庫后,過程與崩潰后恢復數據非關鍵數據文件的過程一樣

 

三、日志文件丟失的測試

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

 

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

  刪除第二個日志組,并且模擬數據庫崩潰

  在未關機狀態下,數據庫能繼續運行,但是日志文件中會有告警信息。

    shutdown abort;

    startup mount;

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

    alter database open;


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

    rm redo01.log

    shutdown abort;

    startup;

  數據庫可以正常打開。redo01.log的狀態變成了INVALID.

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


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

  當第一組為CURRENT或actives時,刪除第一組日志的一個成員,數據庫可以正常打開。

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

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

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

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

  因此需要用其他方式來打開數據庫:

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

  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丟失歸檔日志文件,并且需要恢復數據庫

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

3.4丟失所有聯機重做日志文件的測試

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

 

 

四、丟失控制文件的測試

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

在數據庫關閉的情況下,將副本復制成已刪除的控制文件的名字,能正常打開數據庫。

4.2 控制文件所有成員丟失,模擬數據庫崩潰

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

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;#數據不會丟失

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

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


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

在刪除控制文件之前,獲取控制文件的創建語句:

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)中的語句獲取創建語句,也可以根據實際情況重建控制文件。

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

恢復的過程如下:

1)startup nomount;

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

3)之后執行:

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;#數據不會丟失

    重建臨時表空間

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


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

在數據庫崩潰之后:

1)啟動數據庫至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)還原數據文件

  RMAN>restore database;

4)執行不完全恢復:

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

    SQL>shutdown abort;

    SQL>startup mount;

    SQL> recover database using backup controlfile until cancel;

  因為日志文件、歸檔日志文件都已經被刪除,所以選擇cancel不執行恢復。

    SQL> alter database open resetlogs;

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

 

 

六、總結

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

 

 

 

 

 

 

 

 

 

 


向AI問一下細節

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

AI

班戈县| 梧州市| 九龙城区| 永州市| 贵定县| 观塘区| 通渭县| 龙江县| 白山市| 揭东县| 乌海市| 杂多县| 远安县| 乌拉特前旗| 红河县| 伊春市| 房山区| 原阳县| 深州市| 汤阴县| 兴文县| 惠州市| 大理市| 本溪| 庐江县| 新疆| 古交市| 通道| 涪陵区| 安西县| 波密县| 台南县| 嘉峪关市| 柞水县| 邓州市| 叙永县| 巴南区| 墨脱县| 含山县| 唐海县| 枞阳县|