Oracle 控制文件管理

 

  控制文件是一個很小的二進制文件(10MB左右),含有數據庫結構信息,包括數據文件和日誌文件信息。控制文件在數據庫建立時被自動建立,並在數據庫發生物理變數時更新。控制文件被不斷更新,在任什麼時候候都要保證控制文件可用,不然數據庫將沒法啓動或者使用。linux

 

  1 控制文件包含的主要信息以下:數據庫

  數據庫名稱和SID標識;安全

  數據文件和日誌文件列表;session

  數據庫建立的時間戳;oracle

  表空間信息;app

  當前重作日誌文件序列號;測試

  歸檔日誌信息;3d

  檢查點信息;日誌

  回滾段的起始與結束;blog

  備份數據文件信息;

 

  控制文件包含了如此多的重要信息,須要保護並及時備份控制文件,以便它被損壞或者磁盤介質損貨時,可以及時恢復。目前保護控制文件的主要策略爲多路複用控制文件與備份控制文件。

 

  2 查看目前系統的控制文件信息,主要是查看相關的字典視圖

  v$controlfile  包含全部控制文件的名稱和狀態信息

  

 

  v$controlfile_record_section 包含控制文件中各個記錄文檔段的信息

  

  

  v$parameter 包含了系統全部初始化參數,能夠查詢到control_files的信息

   

 

  3 控制文件的多路複用

  爲了提升數據庫的安全性,至少要爲數據庫創建兩個控制文件,並且這兩個文件最好分別放在不一樣的磁盤中,這樣能夠避免產生因爲某個磁盤故障而沒法啓動數據庫的危險,該管理策略稱爲多路複用控制文件。當多路複用控制文件某個磁盤發生故障致使其包含的控制文件損壞,數據庫將被關閉或者發生異常,此時能夠用另外一磁盤中保存的控制文件來恢復被損壞的控制位文件,而後再重啓數據庫,達到保護控制文件的目的。

  數據庫創建時,通常會默認建立兩個控制文件,咱們能夠手動的再建立多個控制文件且不要與默認的放在同一個磁盤中,首先咱們能夠修改control_files參數來增長控制文件。

  3.1 更改CONTROL_FILES

alter system set control_files = '/usr/oracle/app/oradata/orcl/control01.ctl','/usr/oracle/app/flash_recovery_area/orcl/control02.ctl','/home/oracle/ControlFiles/control03.ctl','/home/oracle/ControlFiles/control04.ctl'
scope=spfile;

   

 

  上面的代碼中,前3個控制文件已經建立好,第4個文件是用戶將要手動添加的,可是目前尚未建立該文件,建立該文件前須要關閉數據庫,而後將第1個複製過去便可;

 

  3.2 複製控制文件

  其實添加控制文件就是將以前可用的控制文件複製過去,重命名便可,首先咱們須要關閉數據庫,而後將/usr/oracle/app/oradata/orcl/control01.ctl 複製爲/home/oracle/ControlFiles/control04.ctl便可

  

  

  複製完以後,再重啓數據庫,重啓以後查詢v$control_files;

  

 

  到此咱們控制文件多路複用的操做完成,過程當中須要注意的就是,必須先關閉數據庫才能把可用的控制文件複製過去,若是沒有關閉就複製過去,在重啓的時候會報錯原控制文件與新增的不一致的錯誤: 

ORA-00214: control file '/usr/oracle/app/oradata/orcl/control01.ctl' version
7136 inconsistent with file '/home/oracle/ControlFiles/control04.ctl' version
7133

 

  4 建立控制文件

  當數據庫全部的控制文件都丟失或者損壞,惟一補救方法就是手動建立一個新的控制文件。建立的語法以下:

  create controlfile

  reuse database db_name

  logfile

  group 1 redofiles_list1

  group 2 redofiles_list2

  group 3 redofiles_list3

  ...

  datafile

  datafile1

  datafile2

  datafile3

  ...

  maxlogfiles max_value1

  maxlogmembers max_value2

  maxinstances max_value3

  maxdatafiles max_value4

  noresetlogs|resetlogs

  archivelog|noarchivelog;

 

  db_name: 數據名稱,一般是orcl

  redofiles_list: 重作日誌組中的重作日誌文件列表;

  datafile1: 數據文件路徑;

  max_value1: 最大的重作日誌文件數,這是一個永久性參數,一旦設置就不能修改,若是想要修改只有重建控制文件;

 

  4.1 建立過程

  建立以前要先對數據文件與重作日誌文件備份,由於建立過程當中可能會引發某些異常致使數據文件與日誌文件損壞。

  查看日誌文件,v$logfile

  

  查看數據文件

  

 

  根據上面的查詢能夠獲得文件所在的路勁,而後備份日誌文件與數據文件,備份以前必定先關閉數據庫,否則會卡死或者出現異常狀況。進入到數據文件與日誌文件所在目錄,測試系統正好這兩個文件都在一個文件夾下,直接使用 cp 命令把它們備份到其餘磁盤的文件夾下便可:

  

 

  備份完以後,將數據啓動到nomount狀態,即啓動但不加載數據庫,由於加載數據庫時實例將會打開控制文件,沒法達到建立新控制文件的效果。

  數據庫啓動到nomount狀態以後,執行create controlfile 命令

create controlfile
reuse database "orcl"
logfile
group 1 '/usr/oracle/app/oradata/orcl/redo01.log',
group 2 '/usr/oracle/app/oradata/orcl/redo02.log',
group 3 '/usr/oracle/app/oradata/orcl/redo03.log'
datafile
'/usr/oracle/app/oradata/orcl/system01.dbf',
'/usr/oracle/app/oradata/orcl/sysaux01.dbf',
'/usr/oracle/app/oradata/orcl/undotbs01.dbf',
'/usr/oracle/app/oradata/orcl/users01.dbf',
'/usr/oracle/app/oradata/orcl/CTRR_DATA.dbf'

maxlogfiles 50
maxlogmembers 4
maxinstances 6
maxdatafiles 200
noresetlogs
noarchivelog;

 

  執行建立命令以後,新的控制文件仍是被存放在原來的文件下,能夠嘗試備份而後將以前的控制文件刪掉,會發現原來的文件下名字同樣的控制文件又出現了,編輯SPFILE 文件中的初始化參數 CONTROL_FILES,使其指向新建的控制文件:

alter system set control_files = '/usr/oracle/app/oradata/orcl/control01.ctl','/usr/oracle/app/flash_recovery_area/orcl/control02.ctl'
scope=spfile;

 

  5 備份恢復控制文件

  5.1 備份控制文件

  直接將當前可用的任意一個多路複用下的控制文件複製到你想要備份的路勁便可;

  咱們能夠將控制文件備份成一個可讀的數據文件,而後就能夠查看裏面的具體內容;

  alter database backup controlfile to trace; --備份成可讀的文本文件,此方法備份以後,能夠查看控制文件的具體內容,首先使用語句:

  select tracefile from v$process where addr in (select paddr from v$session where sid in (select sid from v$mystat)); 能夠獲取到備份以後的文件路勁與名稱:

  

  

  獲得路徑以後,咱們能夠在linux去查看備份文件的具體內容:

  

  

  將其拷貝出來,主要內容就是建立控制文件的語法:

  

 

  

 

  5.2 恢復控制文件

  當控制文件所在磁盤損壞,只須要在初始化文件中從新設置control_files參數的值,使它指向備份的控制文件,就能夠重啓數據庫,可是要保證control_files下對應的路勁下全部的控制文件版本一致才行,否則會報錯誤;

  若是是控制文件自己損壞,咱們能夠將備份文件複製到對應的目錄下,而後重啓數據庫便可。

相關文章
相關標籤/搜索