溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ORACLE之重建控制文件

發(fā)布時(shí)間:2020-07-11 04:11:55 來(lái)源:網(wǎng)絡(luò) 閱讀:18627 作者:舞動(dòng)夢(mèng)靈 欄目:數(shù)據(jù)庫(kù)

這里上傳圖片一直失敗,想要查看詳細(xì)信息和截圖的可以下載附件


首先看一下控制文件的理解:

控制文件是一個(gè)二進(jìn)制文件,用于記錄數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)。一個(gè)控制文件只屬于一個(gè)數(shù)據(jù)庫(kù)。創(chuàng)建數(shù)據(jù)庫(kù)時(shí),創(chuàng)建控制文件。當(dāng)數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)改變的時(shí)候,Oracle會(huì)更新控制文件,不能手動(dòng)修改內(nèi)容。


控制文件內(nèi)容有:數(shù)據(jù)庫(kù)名、數(shù)據(jù)庫(kù)創(chuàng)建的時(shí)間戳、數(shù)據(jù)文件的名字和位置、redo log (聯(lián)機(jī)重做日志文件)的名字和位置、表空間信息、當(dāng)前日志的序列號(hào)、checkpoint 信息、最新的 RMAN備份信息、歸檔日志信息

當(dāng)這些信息更改或者變動(dòng)時(shí),oracle數(shù)據(jù)庫(kù)會(huì)自動(dòng)把最新信息更新到controlfile文件里面。

啟動(dòng)數(shù)據(jù)庫(kù)時(shí),Oracle從初始化參數(shù)文件(pfile/spfile)中獲得控制文件的名字及位置,打開(kāi)控制文件,然后從控制文件中讀取數(shù)據(jù)文件和聯(lián)機(jī)日志文件的信息,最后打開(kāi)數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)運(yùn)行時(shí),Oracle會(huì)修改控制文件,所以,一旦控制文件損壞,數(shù)據(jù)庫(kù)將不能正常運(yùn)行。


創(chuàng)建控制文件有幾個(gè)前提和幾個(gè)區(qū)別:

前提:

1.如果是RAC下,則需要關(guān)閉群集:

alter system set cluster_database=FALSE scope=spfile sid='*';

否則恢復(fù)的時(shí)候會(huì)報(bào)錯(cuò);

2.數(shù)據(jù)庫(kù)在mount或者OPEN狀態(tài)下,才能夠重建。

區(qū)別:

重建控制文件有兩種1.resetlogs恢復(fù)和noresetlogs恢復(fù)方式

下面還是著手恢復(fù)步驟:


重建控制文件,

備份方式

Sql>alter  database backup  controlfile to trace  as ‘/u01/controlfile.trcd’;

創(chuàng)建controlfile備份文件到本地

alter database backup controlfile to  '+UNDO/ORCL/control';

這個(gè)是備份控制文件到ASM管理存儲(chǔ)里面

如果不知道當(dāng)前控制文件在哪里

查看位置:select * from v$controlfile;


首先,庫(kù)能夠進(jìn)入mount狀態(tài)或者處于OPEN狀態(tài):

SQL>startup mount;   或者直接open狀態(tài)

SQL> alter database backup controlfile to trace as '/u01/controlfile.trc';

進(jìn)入/u01/下面

然后編輯這個(gè)控制文件

里面包含兩部分恢復(fù)腳本

一個(gè)就是使用norestlogs和另外一個(gè)是使用resetlogs恢復(fù)的腳本:

內(nèi)容就不詳細(xì)全部列出來(lái)了:

標(biāo)識(shí)Set #1.NORESETLOGS  case的是使用noresetlogs恢復(fù)的

標(biāo)識(shí)Set #1.RESETLOGS  case的是使用resetlogs恢復(fù)的

內(nèi)容如下:

第一個(gè)是noresetlogs恢復(fù)的腳本

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE"ORCL" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 192

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

    MAXINSTANCES 32

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1'+UNDO/orcl/onlinelog/group_1.257.912261307'  SIZE 50M BLOCKSIZE 512,

  GROUP 2'+UNDO/orcl/onlinelog/group_2.258.912261307'  SIZE 50M BLOCKSIZE 512,

  GROUP 3'+UNDO/orcl/onlinelog/group_3.259.912261453'  SIZE 50M BLOCKSIZE 512,

  GROUP 4'+UNDO/orcl/onlinelog/group_4.260.912261453'  SIZE 50M BLOCKSIZE 512

DATAFILE

 '+DATA/orcl/datafile/system.256.912261237',

 '+DATA/orcl/datafile/sysaux.257.912261239',

 '+DATA/orcl/datafile/undotbs1.258.912261239',

 '+DATA/orcl/datafile/users.259.912261239',

 '+DATA/orcl/datafile/undotbs2.261.912261395'

CHARACTER SET UTF8

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON');

RECOVER DATABASE

ALTER SYSTEM ARCHIVE LOG ALL;

ALTER DATABASE OPEN;

ALTER TABLESPACE TEMP ADD TEMPFILE'+DATA/orcl/tempfile/temp.260.912261313'

     SIZE 33554432 REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

下面這就是一個(gè)resetlog恢復(fù)的腳本:

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE"ORCL" RESETLOGS  ARCHIVELOG

    MAXLOGFILES 192

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

    MAXINSTANCES 32

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1'+UNDO/orcl/onlinelog/group_1.257.912261307'  SIZE 50M BLOCKSIZE 512,

  GROUP 2'+UNDO/orcl/onlinelog/group_2.258.912261307'  SIZE 50M BLOCKSIZE 512

DATAFILE

 '+DATA/orcl/datafile/system.256.912261237',

 '+DATA/orcl/datafile/sysaux.257.912261239',

 '+DATA/orcl/datafile/undotbs1.258.912261239',

  '+DATA/orcl/datafile/users.259.912261239',

 '+DATA/orcl/datafile/undotbs2.261.912261395'

CHARACTER SET UTF8

;

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON');

RECOVER DATABASE USING BACKUP CONTROLFILE

ALTER DATABASE ADD LOGFILE THREAD 2

  GROUP 3'+UNDO/orcl/onlinelog/group_3.259.912261453' SIZE 50M BLOCKSIZE 512 REUSE,

  GROUP 4'+UNDO/orcl/onlinelog/group_4.260.912261453' SIZE 50M BLOCKSIZE 512 REUSE;

ALTER DATABASE OPEN RESETLOGS;

ALTER TABLESPACE TEMP ADD TEMPFILE'+DATA/orcl/tempfile/temp.260.912261313'

     SIZE 33554432 REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;


好了,下面開(kāi)始停庫(kù)恢復(fù):

啟動(dòng)到nomount狀態(tài)下:

Startup  nomount

直接在nomount狀態(tài)下復(fù)制粘貼下面這段腳本:

CREATE CONTROLFILE REUSE DATABASE"ORCL" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 192

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

    MAXINSTANCES 32

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1'+UNDO/orcl/onlinelog/group_1.257.912261307'  SIZE 50M BLOCKSIZE 512,

  GROUP 2'+UNDO/orcl/onlinelog/group_2.258.912261307'  SIZE 50M BLOCKSIZE 512,

  GROUP 3'+UNDO/orcl/onlinelog/group_3.259.912261453'  SIZE 50M BLOCKSIZE 512,

  GROUP 4 '+UNDO/orcl/onlinelog/group_4.260.912261453' SIZE 50M BLOCKSIZE 512

DATAFILE

 '+DATA/orcl/datafile/system.256.912261237',

 '+DATA/orcl/datafile/sysaux.257.912261239',

 '+DATA/orcl/datafile/undotbs1.258.912261239',

 '+DATA/orcl/datafile/users.259.912261239',

 '+DATA/orcl/datafile/undotbs2.261.912261395'

CHARACTER SET UTF8;

好了

現(xiàn)在控制文件創(chuàng)建好了;如果有報(bào)錯(cuò),查看是不是RAC狀態(tài)下沒(méi)有關(guān)閉集群

查看當(dāng)前狀態(tài):已經(jīng)到了MOUNTED狀態(tài)下了

執(zhí)行后面的:

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','YES');

在后面的

RECOVERY DATABASE就不用執(zhí)行了,因?yàn)橐呀?jīng)有數(shù)據(jù)文件了。

這里僅僅只是控制文件沒(méi)有而已

直接ALTER DATABASE OPEN;

成功啟動(dòng)數(shù)據(jù)庫(kù)

最后執(zhí)行以下TEM表空間

ALTER TABLESPACE TEMP ADD TEMPFILE'+DATA/orcl/tempfile/temp.260.912261313'

     SIZE33554432  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;


resetlogs方式重建controlfile

數(shù)據(jù)文件在,但是日志文件沒(méi)有是可以用這個(gè)方式回復(fù)

啟動(dòng)到nomount狀態(tài)下:

Startup  nomount

直接在nomount狀態(tài)下復(fù)制粘貼下面這段腳本:

CREATE CONTROLFILE REUSE DATABASE"ORCL" RESETLOGS  ARCHIVELOG

    MAXLOGFILES 192

    MAXLOGMEMBERS 3

    MAXDATAFILES 1024

    MAXINSTANCES 32

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1'+UNDO/orcl/onlinelog/group_1.257.912261307'  SIZE 50M BLOCKSIZE 512,

  GROUP 2'+UNDO/orcl/onlinelog/group_2.258.912261307'  SIZE 50M BLOCKSIZE 512

DATAFILE

 '+DATA/orcl/datafile/system.256.912261237',

 '+DATA/orcl/datafile/sysaux.257.912261239',

 '+DATA/orcl/datafile/undotbs1.258.912261239',

  '+DATA/orcl/datafile/users.259.912261239',

 '+DATA/orcl/datafile/undotbs2.261.912261395'

CHARACTER SET UTF8;

好了

查看當(dāng)前狀態(tài):已經(jīng)到了MOUNTED狀態(tài)下了

執(zhí)行后面的:

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','YES');

這里因?yàn)槭怯胷esetlogs恢復(fù)的所以啟動(dòng)數(shù)據(jù)庫(kù)的時(shí)候也要resetlogs

ALTER DATABASE OPEN resetlogs;

成功啟動(dòng)數(shù)據(jù)庫(kù)

最后執(zhí)行以下TEM表空間

ALTER TABLESPACE TEMP ADD TEMPFILE'+DATA/orcl/tempfile/temp.260.912261313'

     SIZE33554432  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

Ok這個(gè)也恢復(fù)成功了。


總結(jié):

兩種恢復(fù)方式基本一樣,只有在啟動(dòng)數(shù)據(jù)庫(kù)的時(shí)候有差別,可以根據(jù)數(shù)據(jù)庫(kù)當(dāng)時(shí)情況具體操作。

但是一般情況下不可能出現(xiàn)控制文件丟失。而且控制文件最少要備份兩份以上放在不同的位置。



                                                                                          如有不足或缺漏請(qǐng)一起討論,共同進(jìn)步

附件:http://down.51cto.com/data/2367810
向AI問(wèn)一下細(xì)節(jié)

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

AI