gdufo

           

          oracle控制文件的管理

          oracle數據庫通過控制文件保持數據庫的完整性,一旦控制文件被破壞數據庫將無法啟動,因此建議采用多路控制文件或者備份控制文件的方法。
          控制文件是數據庫建立的時候自動生成的二進制文件,只能通過實例進行修改,如果手動修改的話會造成控制文件與物理信息不符合,從而導致數據庫不能正常工作。

          控制文件主要包括下面內容:

          1.控制文件所屬數據庫的名字,一個控制文件只能屬一個數據庫

          2.數據庫創建時間

          3.數據文件的名稱,位置,聯機,脫機狀態信息

          4.所有表空間信息

          5.當前日志序列號

          6.最近檢查點信息

          其中,數據庫名稱,標識和創建時間在數據庫創建時寫入;數據文件和重做日志名稱和位置在增加,重命名或者刪除的時候更新;表空間信息在增加或者刪除表空間的時候進行更新。

          在初始化參數文件中control_files參數主要來描述控制文件的文件名跟物理路徑,如下所示:

          control_files=("d:\oracle\oradata\oradb\control01.ctl")

          該參數只設置一個,也可以設置多個,如下所示:

          control_files=('d:\oracle\oradata\oradb\control01.ctl',

                                'd:\oracle\oradata\oradb\control02.ctl',

                                'd:oracle\oradata\oradb\control03.ctl')

          這個方法叫做多路控制文件,oracle可以利用這個方法恢復被破壞的控制文件,oracle最多允許設置8個多路控制文件。

          必須所有的多路控制文件都完整正確數據庫才能正常啟動,只要丟失一個或者一個內容不正確數據庫就不能順利啟動。

          對控制文件的管理原則:

          1.明確控制文件的名稱和存儲路徑

          參數設置錯誤將無法打開數據庫,數據庫打開以后,實例將同時寫入所有的控制文件但是只會讀取第一個控制文件的內容。

          2.為數據庫創建多路控制文件

          a.多路控制文件內容必須完全一樣,oracle實例同時將內容寫入到control_files變量所設置的控制文件中。

          b.初始化參數control_files中列出的第一個文件是數據庫運行期間唯一可讀取的控制文件。

          c.創建,恢復和備份控制文件必須在數據庫關閉的狀態下運行,這樣才能保證操作過程中控制文件不被修改。

          d.數據庫運行期間如果一個控制文件變為不可用,那么實例將不再運行,應該終止這個實例,并對破壞的控制文件進行修復。

          3.將多路控制文件放在不同的硬盤上

          4.采用操作系統鏡像方式備份控制文件

          5.手工方式備份控制文件

          應該及時備份特別是發生了如下的操作的時候:

          添加刪除重命名數據文件

          添加刪除表空間,改變表空間讀寫狀態

          添加刪除重做日志文件

          如果手工備份不及時的話,就會產生備份的控制文件與正在使用的控制文件不一致,那么利用備份的控制文件啟動數據庫時會破壞數據庫的一致性完整性,甚至不能啟動數據庫,因此手工備份控制文件要注意及時備份。
          創建多路控制文件
          利用spfile文件創建多路控制文件

          (spfile以二進制文本形式存在,不能用vi等編輯器對其中參數進行修改。文件格式為spfileSID.ora。如果要對spfile文件進行修改,可以采用SQL語言)

          1.利用SYS帳號登陸SQL*PLUS,查詢一下控制文件信息視圖

          SQL>select name from v$controlfile;
          結果顯示為:

          NAME
          ----------------------------------
          d:\oracle\oradata\oradb\control01.ctl

          d:\oracle\oradata\oradb\control02.ctl

          d:\oracle\oradata\oradb\control03.ctl

          這里列出了控制文件的名稱以及位置

          2.更改spfile中控制文件的信息:(增加了一個新的控制文件)

          SQL>alter system set control_files=

          'd:\oracle\oradata\oradb\control01.ctl',

          'd:\oracle\oradata\oradb\control02.ctl',

          'd:\oracle\oradata\oradb\control03.ctl',

          'd:\oracle\oradata\oradb\control04.ctl'

          scope=spfile

          結果顯示為:

          系統已經更改。

          (第二步的操作需要注意的是:進行這些操作,必須是在DB啟動的時候,否則會彈出“ORACLE not available”錯誤。)

          3.關閉數據庫

          4.在操作系統中將已有的控制文件復制,修改名稱保存到剛才增加控制文件的指定位置。(這步必須做的,否則數據庫無法啟動)

          5.重新啟動控制文件,使控制文件改變生效。

          6.還可以使用pfile的方法來修改控制文件,使用create pfile from spfile;來生成pfile,然后使用vi等編輯器編譯pfile,先手工拷貝控制文件修改相應的名稱,然后把新的控制文件的路徑增加到pfile中,使用pfile啟動數據庫,然后使用pfile創建spfile即可.
          管理控制文件
          備份控制文件

          SQL> alter database backup controlfile to ‘d:\20080326.ctl’

          SQL> alter database backup controlfile to trace;(備份創建控制文件的腳本)

          # 具體文件名請看<background_dump_dest>/alert_<SID>.log文件里有詳細說明。例如在/opt/app/oracle/diag/rdbms/orcl/orcl/trace/目錄下。

          alter database backup controlfile to trace
          Mon Nov 23 10:27:56 2009
          ALTER DATABASE BACKUP CONTROLFILE TO TRACE
          Backup controlfile written to trace file /opt/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4169.trc

          數據庫已更改。

          然后從這個備份的位置直接把文件拷貝回之前的目錄覆蓋就好了。

           

          刪除控制文件(刪除某一路的控制文件)

           

          spfile文件

          1.利用SYS帳號登陸SQL*PLUS,查詢一下控制文件信息視圖

          SQL>select name from v$controlfile;

          結果顯示為:

          NAME
          ----------------------------------

          d:oracle\oradata\oradb\control01.ctl

          d:oracle\oradata\oradb\control02.ctl

          d:oracle\oradata\oradb\control03.ctl

          d:oracle\oradata\oradb\control04.ctl

          這里列出了控制文件的名稱以及位置

          2.更改spfile中控制文件的信息,刪除一個新的控制文件
          SQL>alter system set control_files=
          'd:oracle\oradata\oradb\control01.ctl',
          'd:oracle\oradata\oradb\control02.ctl',
          'd:oracle\oradata\oradb\control03.ctl',
          scope=spfile
          結果顯示為:
          系統已經更改。

          3.關閉數據庫
          4.在操作系統中刪除控制文件
          5.重新啟動數據庫,使控制文件生效

          posted on 2009-11-19 09:24 gdufo 閱讀(163) 評論(0)  編輯  收藏 所屬分類: Database (oracle, sqlser,MYSQL)

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Hibernate

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 湖北省| 拉萨市| 泰兴市| 泾源县| 深水埗区| 鹿泉市| 天峻县| 安乡县| 台东市| 太和县| 北流市| 体育| 金堂县| 六盘水市| 安泽县| 海晏县| 云阳县| 图们市| 襄垣县| 民乐县| 安图县| 丁青县| 文昌市| 科尔| 绍兴市| 邻水| 汾西县| 贵溪市| 江安县| 湟源县| 鄂尔多斯市| 盐亭县| 石屏县| 阳曲县| 密云县| 陇南市| 隆德县| 盐亭县| 曲阜市| 永安市| 宣武区|