ORACLE控制檔案一致性【weber出品】

來源:互聯網
上載者:User

標籤:des   style   blog   color   java   ar   for   檔案   資料   

一、首先控制檔案有什麼作用呢?

控制檔案記錄了如下資訊:
1、資料庫的建立時間
2、資料檔案的位置
3、記錄檔的位置

作用是指導資料庫 找到資料檔案,記錄檔並將資料庫啟動到 open 狀態。

與其用文字來描述,不如我們來看看control_file裡面有些什麼好了。然後在一一分析:

SQL> show parameter control_fileNAME                     TYPE     VALUE------------------------------------ ----------- ------------------------------control_file_record_keep_time         integer     7control_files                 string     /u01/app/oracle/oradata/orcl/c                         ontrol01.ctl, /u01/app/oracle/                         oradata/orcl/control02.ctl, /u                         01/app/oracle/oradata/orcl/con                         trol03.ctl

可以看出來control_file的位置在 /u01/app/oracle/oradata/orcl/這目錄下。

SQL> alter database backup controlfile to trace;

我們到這個目錄去:/u01/app/oracle/admin/orcl/udump

[[email protected] udump]$ ls -ltotal 192-rw-r----- 1 oracle oinstall   854 Sep 15 11:46 orcl_ora_10453.trc-rw-r----- 1 oracle oinstall 12332 Sep 17 20:02 orcl_ora_14205.trc-rw-r----- 1 oracle oinstall   705 Sep 16 14:59 orcl_ora_21120.trc-rw-r----- 1 oracle oinstall   726 Sep 16 14:59 orcl_ora_21124.trc-rw-r----- 1 oracle oinstall   855 Sep 15 11:49 orcl_ora_23699.trc-rw-r----- 1 oracle oinstall   855 Sep 16 21:38 orcl_ora_23743.trc

找到一個時間是今天的以.trc結尾的檔案。用vi來開啟它。

CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  NOARCHIVELOG    MAXLOGFILES 16    MAXLOGMEMBERS 3    MAXDATAFILES 100    MAXINSTANCES 8    MAXLOGHISTORY 292LOGFILE  GROUP 1 ‘/u01/app/oracle/oradata/orcl/redo01.log‘  SIZE 50M,  GROUP 2 ‘/u01/app/oracle/oradata/orcl/redo02.log‘  SIZE 50M,  GROUP 3 ‘/u01/app/oracle/oradata/orcl/redo03.log‘  SIZE 50M-- STANDBY LOGFILEDATAFILE  ‘/u01/app/oracle/oradata/orcl/system01.dbf‘,  ‘/u01/app/oracle/oradata/orcl/undotbs01.dbf‘,  ‘/u01/app/oracle/oradata/orcl/sysaux01.dbf‘,  ‘/u01/app/oracle/oradata/orcl/users01.dbf‘,  ‘/u01/app/oracle/oradata/orcl/example01.dbf‘CHARACTER SET AL32UTF8

可以看到裡面記錄著資料檔案和記錄檔的存放位置。

 

二、控制檔案有三個,三個控制檔案都是一模一樣的。這是用來冗餘備份,如果其中一個壞了,可以用另外的一個給重新覆蓋。我們接下來類比一個環境。我們把其中一個控制檔案給破幹掉:

[[email protected] orcl]$ lscontrol01.ctl  control03.ctl  redo01.log  redo03.log    system01.dbf  undotbs01.dbfcontrol02.ctl  example01.dbf  redo02.log  sysaux01.dbf  temp01.dbf    users01.dbf[[email protected] orcl]$ mv control03.ctl ./control03.ctl.bak[[email protected] orcl]$ lscontrol01.ctl  control03.ctl.bak  redo01.log  redo03.log    system01.dbf  undotbs01.dbfcontrol02.ctl  example01.dbf      redo02.log  sysaux01.dbf  temp01.dbf    users01.dbf

然後我們登入啟動一下:

SQL> startupORACLE instance started.Total System Global Area  608174080 bytesFixed Size            1275128 bytesVariable Size          222300936 bytesDatabase Buffers      381681664 bytesRedo Buffers            2916352 bytesORA-00205: error in identifying control file, check alert log for more info

我們開啟警示檔案看看:

[[email protected] bdump]$ pwd/u01/app/oracle/admin/orcl/bdumpvi 查看一下:alert_orcl.logWed Sep 17 20:34:18 CST 2014ORA-00210: cannot open the specified control fileORA-00202: control file: ‘/u01/app/oracle/oradata/orcl/control03.ctl‘ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directory

很明顯的說是打不開,廢話,肯定打不開,我都給幹掉了你找得到才怪了。

這個是有我給大家指出兩條解決思路:

方法一:修改spfile,不是說spfile裡面記錄著參數檔案的位置嘛,而且肯定是記錄著3條位置,那麼我們就把其中第三個控制檔案幹掉

過程:

建立一個pfile,因為spfile是二進位檔案,不可以修改
SQL> create pfile=‘/u01/pfile.ora‘ from spfile;File created.

然後編輯一下參數檔案pfile:

[[email protected] dbs]$ cd /u01[[email protected]-oracle u01]$ lsoracle  pfile.ora[[email protected]-oracle u01]$ vi pfile.ora*.control_files=tl‘,‘/u01/oracle/oradata/orcl/control02.ctl‘,‘/u01/oracle/oradata/orcl/control03.ctlorcl.__db_cache_size=176160768orcl.__java_pool_size=4194304orcl.__large_pool_size=4194304orcl.__shared_pool_size=92274688orcl.__streams_pool_size=0*.audit_file_dest=‘/u01/oracle/admin/orcl/adump‘*.background_dump_dest=‘/u01/oracle/admin/orcl/bdump‘*.compatible=‘10.2.0.1.0‘*.control_files=‘/u01/oracle/oradata/orcl/control02.ctl‘,‘/u01/oracle/oradata/orcl/control01.ctl‘ ----亮點在這裡,原先是有01,02,03個控制檔案,我給刪了就可以讓資料庫啟動的時候不去找第三個,丟了就丟了吧。*.core_dump_dest=‘/u01/oracle/admin/orcl/cdump‘*.db_block_size=8192*.db_domain=‘‘*.db_file_multiblock_read_count=16*.db_name=‘orcl‘*.db_recovery_file_dest=‘/u01/oracle/flash_recovery_area‘*.db_recovery_file_dest_size=2147483648*.dispatchers=‘(PROTOCOL=TCP) (SERVICE=orclXDB)‘*.job_queue_processes=10*.open_cursors=300*.pga_aggregate_target=93323264*.processes=150*.remote_login_passwordfile=‘EXCLUSIVE‘*.sga_target=279969792*.undo_management=‘AUTO‘*.undo_tablespace=‘UNDOTBS1‘*.user_dump_dest=‘/u01/oracle/admin/orcl/udump‘

重新建立一下就好spfile了:

SQL> create spfile from pfile=‘/u01/pfile.ora‘;File created.SQL> startup;ORACLE instance started.Total System Global Area  281018368 bytesFixed Size                  2020192 bytesVariable Size             100666528 bytesDatabase Buffers          176160768 bytesRedo Buffers                2170880 bytesDatabase mounted.
Database opened.
--看到沒有,資料庫只用2個控制檔案也是可以啟動的。SQL> show parameter controlNAME TYPE VALUE------------------------------------ ----------- ------------------------------control_file_record_keep_time integer 7control_files string /u01/oracle/oradata/orcl/contr ol02.ctl, /u01/oracle/oradata/ orcl/control01.ctl

 

方法二:不是說3個控制檔案都一模一樣的嘛,那為何不拷貝後重新命名不就可以了呢

過程:

[[email protected] orcl]$ cp control01.ctl control03.ctl[[email protected] orcl]$ lscontrol01.ctl  control03.ctl.bak  redo02.log    system01.dbf   users01.dbfcontrol02.ctl  example01.dbf      redo03.log    temp01.dbfcontrol03.ctl  redo01.log         sysaux01.dbf  undotbs01.dbf

啟動一下:

SQL> show parameter control_fileNAME                     TYPE     VALUE------------------------------------ ----------- ------------------------------control_file_record_keep_time         integer     7control_files                 string     /u01/app/oracle/oradata/orcl/c                         ontrol01.ctl, /u01/app/oracle/                         oradata/orcl/control02.ctl, /u                         01/app/oracle/oradata/orcl/con                         trol03.ctl

  還是一樣可以。

ORACLE控制檔案一致性【weber出品】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.