Oracle 重建控制文件一例


環境:OEL 5.7 + Oracle 10.2.0.5
背景:在Oracle的運維過程中,時常會遇到一些場景是需要重建控制文件才可以解決的。本文的場景可以通過復制控制文件到新路徑,運行一段時間后,再用老的控制文件啟動數據庫重現。

1.當前故障現象

在使用舊的控制文件啟動數據庫時,報錯ORA-01122、ORA-01110、ORA-01207:
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  599785472 bytes
Fixed Size                  2098112 bytes
Variable Size             218106944 bytes
Database Buffers          373293056 bytes
Redo Buffers                6287360 bytes
Database mounted.
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/oradata/cxywdb/system01.dbf'
ORA-01207: file is more recent than control file - old control file

2.分析故障原因

根據報錯信息查找MOS文檔: - ORA-1122, ORA-1110, ORA-1207 while open the database after crash (文檔 ID 283927.1)

延伸思考一下,為什么會這樣?
主要錯誤是ORA-01207,利用oerr工具看到Oralce對這個錯誤的詳細描述是:

01207, 00000, "file is more recent than control file - old control file"
// *Cause:  The control file change sequence number in the data file is 
//         greater than the number in the control file. This implies that
//         the wrong control file is being used. Note that repeatedly causing
//         this error can make it stop happening without correcting the real
//         problem. Every attempt to open the database will advance the
//         control file change sequence number until it is great enough.
// *Action: Use the current control file or do backup control file recovery to 
//         make the control file current. Be sure to follow all restrictions 
//         on doing a backup control file recovery.

一般遇到這種情況,當前的控制文件肯定是找不到了。那么就得考慮重建控制文件來解決,MOS給出的建議也是重建控制文件。

3.重建控制文件

重建控制文件的核心步驟: **3.1 備份控制文件到trace**
startup mount
alter database backup controlfile to trace;
oradebug setmypid
oradebug tracefile_name

3.2 啟動數據庫到nomount狀態

shutdown abort
startup nomount;

3.3 確認重建控制文件的語句

vi control.sql
CREATE CONTROLFILE REUSE DATABASE "CXYWDB" NORESETLOGS FORCE LOGGING ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 5 '/oradata2/cxywdb/redo11.log'  SIZE 50M,
  GROUP 6 '/oradata2/cxywdb/redo12.log'  SIZE 50M,
  GROUP 7 '/oradata2/cxywdb/redo13.log'  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  '/oradata/cxywdb/system01.dbf',
  '/oradata/cxywdb/undotbs01.dbf',
  '/oradata/cxywdb/sysaux01.dbf',
  '/oradata/cxywdb/users01.dbf',
  '/oradata/cxywdb/alfred01.dbf',
  '/oradata/cxywdb/alfred02.dbf',
  '/oradata/cxywdb/alfred03.dbf',
  '/oradata/cxywdb/alfred04.dbf',
  '/oradata/cxywdb/alfred05.dbf',
  '/oradata/cxywdb/dbs_i_alfred01.dbf'
CHARACTER SET ZHS16GBK
;

3.4 恢復並打開數據庫

SQL> recover database;
Media recovery complete.
SQL> alter database open;
Database altered.

附:實際解決過程如下:

SQL> shutdown abort     
ORACLE instance shut down.
SQL> startup mount

ORACLE instance started.

Total System Global Area  599785472 bytes
Fixed Size                  2098112 bytes
Variable Size             218106944 bytes
Database Buffers          373293056 bytes
Redo Buffers                6287360 bytes
Database mounted.
SQL> alter database backup controlfile to trace;

Database altered.

SQL> oradebug setmypid
Statement processed.
SQL> oradebug tracefile_name
/s01/oracle/admin/cxywdb/udump/cxywdb_ora_3983.trc
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup nomount;
ORACLE instance started.

Total System Global Area  599785472 bytes
Fixed Size                  2098112 bytes
Variable Size             218106944 bytes
Database Buffers          373293056 bytes
Redo Buffers                6287360 bytes
SQL> @control

Control file created.
SQL> select status from v$instance;

STATUS
------------
MOUNTED

SQL> recover database;
Media recovery complete.
SQL> alter database open;

Database altered.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM