Oracle控制檔案的備份、恢複以及多工

來源:互聯網
上載者:User

前言 

    今天給大家帶來有關Oracle控制檔案的技術分享。不積跬步無以至千裡,不積小流無以成江海。Oracle技術博大精深,以我一個人的力量,那無異於蜉蝣於天地,滄海之一粟。在此,筆者拋磚引玉,希望讀者能夠與我形成良好的互動,之間共同進步。閑言少敘,書歸正傳,馬上開始今天的討論話題。

Oracle 備份恢複概念 
 
一、控制檔案概要描述
      既然今天的主題是控制檔案,那麼首先我先帶大家來簡要回顧一下控制檔案的相關知識點。控制檔案在預設情況下,一般和資料檔案以及記錄檔等位於同一個目錄(當然,不放在這裡也是沒有問題的……看個人喜好),具體查看的sql語句是:
      SYS@ENMOEDU > select name from v$controlfile;
     
      NAME
      ------------------------------
      /u01/app/oracle/oradata/ENMOEDU/control01.ctl
      /u01/app/oracle/fast_recovery_area/ENMOEDU/control02.ctl
      從這裡就已經清晰的看到我控制檔案的路徑以及名稱了,還有,細心的讀者應該發現了,我是一個很小心謹慎的人,所以呢,我的控制檔案是兩份。這樣做的好處是,萬一我其中的一個控制檔案被誤刪了或者損壞了,我還有另外一個控制檔案保證我資料庫的正常運行以及啟動(不小心把多工技術給提前引入了……稍後會有更詳細的配置以及解析)。
      控制檔案的作用我想就毋庸贅言了吧?上至九十老嫗,下到五歲孩童,對於控制檔案的重要性都能如數家珍般的娓娓道來。控制檔案中有資料庫以及線上重做日誌的位置以及眾多重要的資訊,丟失或者損壞控制檔案,資料庫將無法正常啟動和運行。既然控制檔案這麼重要,那麼我們該怎麼對它進行備份和恢複呢?
 
二、控制檔案的備份與恢複
      (1)基於使用者管理的備份和恢複
     
      首先進入Oracle的trace目錄
      [oracle@ENMOEDU trace]$ cd /u01/app/oracle/diag/rdbms/enmoedu/ENMOEDU/trace
     
      用tail命令來開啟alert_ENMOEDU.log檔案
      [oracle@ENMOEDU trace]$ tail -100f alert_ENMOEDU.log
     
      此時開啟另一視窗,執行如下命令
      SYS@ENMOEDU > alter database backup controlfile to trace;
      Database altered.
     
      我們可以在alert.ENMOEDU.log看到如下資訊
      Mon Mar 10 15:22:20 2014
      alter database backup controlfile to trace
      Backup controlfile written to trace file /u01/app/oracle/diag/rdbms/enmoedu/ENMOEDU/trace/ENMOEDU_ora_18205.trc
      Completed: alter database backup controlfile to trace
     
      根據上述資訊,我們去查看提示的檔案
      [oracle@ENMOEDU ~]$ cat /u01/app/oracle/diag/rdbms/enmoedu/ENMOEDU/trace/ENMOEDU_ora_18205.trc
     
      在浩如煙海的資訊中,我們可以找到建立控制檔案的命令
      CREATE CONTROLFILE REUSE DATABASE "ENMOEDU" RESETLOGS  ARCHIVELOG
              MAXLOGFILES 16
              MAXLOGMEMBERS 3
              MAXDATAFILES 100
              MAXINSTANCES 8
              MAXLOGHISTORY 292
        LOGFILE
            GROUP 1 '/u01/app/oracle/oradata/ENMOEDU/redo01.log'  SIZE 50M BLOCKSIZE 512,
            GROUP 2 '/u01/app/oracle/oradata/ENMOEDU/redo02.log'  SIZE 50M BLOCKSIZE 512,
            GROUP 3 '/u01/app/oracle/oradata/ENMOEDU/redo03.log'  SIZE 50M BLOCKSIZE 512
        -- STANDBY LOGFILE
        DATAFILE
            '/u01/app/oracle/oradata/ENMOEDU/system01.dbf',
            '/u01/app/oracle/oradata/ENMOEDU/sysaux01.dbf',
            '/u01/app/oracle/oradata/ENMOEDU/undotbs01.dbf',
            '/u01/app/oracle/oradata/ENMOEDU/users01.dbf',
            '/u01/app/oracle/oradata/ENMOEDU/example01.dbf',
            '/u01/app/oracle/oradata/ENMOEDU/test01.dbf',
            '/u01/app/oracle/oradata/ENMOEDU/test02.dbf'
        CHARACTER SET AL32UTF8;
     
      稍後我們就可以用這些命令來建立控制檔案了。下面來類比控制檔案丟失和損壞的實驗環境:
      [root@ENMOEDU ~]# rm -rf /u01/app/oracle/oradata/ENMOEDU/control01.ctl
      [root@ENMOEDU ~]# rm -rf /u01/app/oracle/fast_recovery_area/ENMOEDU/control02.ctl
     
      筆者將兩個控制檔案都刪除了,很徹底~然後嘗試啟動資料庫。
      [oracle@ENMOEDU ~]$ sqlplus / as sysdba
        SQL*Plus: Release 11.2.0.3.0 Production on Mon Mar 10 15:47:54 2014
        Copyright (c) 1982, 2011, Oracle.  All rights reserved.
        Connected to an idle instance.
        SYS@ENMOEDU > startup
        ORACLE instance started.
 
      Total System Global Area  422670336 bytes
        Fixed Size                  1345380 bytes
        Variable Size            352323740 bytes
        Database Buffers          62914560 bytes
        Redo Buffers                6086656 bytes
        ORA-00205: error in identifying control file, check alert log for more info
       
        可以看出,資料庫已經無法正常啟動了。那麼我們就將資料庫啟動到nomount狀態下進行恢複。
        SYS@ENMOEDU > shutdown abort
        ORACLE instance shut down.
        SYS@ENMOEDU > startup nomount
        ORACLE instance started.
 
      Total System Global Area  422670336 bytes
        Fixed Size                  1345380 bytes
        Variable Size            352323740 bytes
        Database Buffers          62914560 bytes
        Redo Buffers                6086656 bytes
      SYS@ENMOEDU > CREATE CONTROLFILE REUSE DATABASE "ENMOEDU" RESETLOGS  ARCHIVELOG
          2                MAXLOGFILES 16
          3                MAXLOGMEMBERS 3
          4                MAXDATAFILES 100
          5                MAXINSTANCES 8
          6                MAXLOGHISTORY 292
          7        LOGFILE
          8            GROUP 1 '/u01/app/oracle/oradata/ENMOEDU/redo01.log'  SIZE 50M BLOCKSIZE 512,
          9            GROUP 2 '/u01/app/oracle/oradata/ENMOEDU/redo02.log'  SIZE 50M BLOCKSIZE 512,
          10            GROUP 3 '/u01/app/oracle/oradata/ENMOEDU/redo03.log'  SIZE 50M BLOCKSIZE 512
          11        -- STANDBY LOGFILE
          12        DATAFILE
          13              '/u01/app/oracle/oradata/ENMOEDU/system01.dbf',
          14              '/u01/app/oracle/oradata/ENMOEDU/sysaux01.dbf',
          15              '/u01/app/oracle/oradata/ENMOEDU/undotbs01.dbf',
          16              '/u01/app/oracle/oradata/ENMOEDU/users01.dbf',
          17              '/u01/app/oracle/oradata/ENMOEDU/example01.dbf',
          18              '/u01/app/oracle/oradata/ENMOEDU/test01.dbf',
          19              '/u01/app/oracle/oradata/ENMOEDU/test02.dbf'
          20        CHARACTER SET AL32UTF8;
 
      Control file created.
       
      嘗試開啟資料庫
        SYS@ENMOEDU > alter database open
          2  ;
        alter database open
        *
        ERROR at line 1:
        ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

       
      提示錯誤。按照提示來開啟資料庫:
        SYS@ENMOEDU > alter database open resetlogs;
 
      Database altered.

        數���庫已經正常啟動了。
     
      上述情況屬於非常樂觀且極易恢複的類比實驗現場,但是在實際情況中,環境卻險要惡劣的多。往往控制檔案丟失後,使用者還會進行大量的操作,比如建立資料表空間等等,這些使得控制檔案的恢複要困難許多。路漫漫其修遠兮,吾將上下而求索,我對待技術的渴望永無止境。下面我就給大家介紹一下如何在備份的控制檔案過久的情況下恢複控制檔案。
      首先,我們先備份一下我們的控制檔案。由於我採用了多工,所以看起來是不是應該把兩個控制檔案都備份一下呢?按照國際慣例,一般作者向讀者發出類似這種疑問句的時候,答案往往是否定的。但是,我作為一個走位忽上忽下意識飄忽不定的技術人員,所以,答案,仍然是不需要備份兩份。由於兩份控制檔案是一模一樣的,所以備份一份即可,只需記得在恢複的時候注意檔案名稱字。
   
      備份控制檔案。在本文中,將控制檔案備份到Oracle的家目錄下,給控制檔案一種家的溫暖。
      [oracle@ENMOEDU ENMOEDU]$ cp control01.ctl ~
 
    建立資料表空間和檔案,從而使現在的控制檔案和備份檔案產生差異。
      SYS@ENMOEDU > create tablespace 我 datafile '/u01/app/oracle/oradata/ENMOEDU/我01.dbf' size 100m;
 
    Tablespace created.
 
      查看一下當前線上日誌的status,並切換日誌,產生歸檔。
      SYS@ENMOEDU > select group#,status from v$log;
 

      GROUP# STATUS
      ---------- ----------------
          1 CURRENT
          2 INACTIVE
          3 INACTIVE
 

      SYS@ENMOEDU > alter system archive log current;
 

      System altered.
 

      SYS@ENMOEDU > select group#,status from v$log;
 

      GROUP# STATUS
      ---------- ----------------
          1 ACTIVE
          2 CURRENT
          3 INACTIVE
 

      SYS@ENMOEDU > alter system archive log current;
 

      System altered.
 

      SYS@ENMOEDU > select group#,status from v$log;
 

      GROUP# STATUS
      ---------- ----------------
          1 ACTIVE
          2 ACTIVE
          3 CURRENT
 

      SYS@ENMOEDU > alter system archive log current;
 
 
      System altered.
 

      SYS@ENMOEDU > select group#,status from v$log;
 

      GROUP# STATUS
      ---------- ----------------
          1 CURRENT
          2 ACTIVE
          3 ACTIVE
 

      SYS@ENMOEDU > alter system archive log current;
 

      System altered.
 

      SYS@ENMOEDU > select group#,status from v$log;
 

      GROUP# STATUS
      ---------- ----------------
          1 ACTIVE
          2 CURRENT
          3 INACTIVE
 

      SYS@ENMOEDU > alter system archive log current;
 

      System altered.
 

      SYS@ENMOEDU > select group#,status from v$log;
 

      GROUP# STATUS
        ---------- ----------------
          1 INACTIVE
          2 ACTIVE
          3 CURRENT
 

        SYS@ENMOEDU > alter system archive log current;
 

        System altered.
 

        SYS@ENMOEDU > select group#,status from v$log;
 

        GROUP# STATUS
          ---------- ----------------
          1 CURRENT
          2 INACTIVE
          3 ACTIVE
 

        SYS@ENMOEDU > alter system archive log current;
 

        System altered.
 

        SYS@ENMOEDU > select group#,status from v$log;
 

      GROUP# STATUS
        ---------- ----------------
          1 ACTIVE
          2 CURRENT
          3 INACTIVE
 

      SYS@ENMOEDU > alter system archive log current;
 

      System altered.
 

      SYS@ENMOEDU > select group#,status from v$log;
 

      GROUP# STATUS
        ---------- ----------------
          1 ACTIVE
          2 ACTIVE
          3 CURRENT

  • 1
  • 2
  • 3
  • 4
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.