控制文件及其創建
?
??? 今天來學習一下Oracle中一個比較重要的文件類型——控制文件??刂莆募饕糜谟涗汷racle實例中的各個系統信息,例如數據文件、日志、名稱、版本、檢查點SCN等信息,對于數據庫的還原、以及一致性控制都有很重要的作用。
?
一、控制文件
?
??? 控制文件是一個小型的二進制文件,可以記錄數據庫的物理結構。包括:
?
??? * 數據庫名稱
??? * 數據文件和聯機重做日志文件的名稱和位置
??? * 數據庫創建的時標
??? * 當前日志的序號
??? * 檢驗點信息
?
??? 一般Oracle數據庫創建時都會創建至少兩個或兩個以上的控制文件。
?
二、控制文件的標準
?
??? 1、控制文件的文件名
?
??? 由CONTROL_FILES參數來指定控制文件名。
??? 若沒有指定該參數,則生成默認文件名,默認文件名在各個操作系統中各不相同
?
??? 2、控制文件的復用
?
??? 一般不同的控制文件都存放在不同的磁盤,當某個磁盤損壞時可以通過在其他磁盤上的控制文件進行復用,不需要任何的介質恢復。
?
??? * 找到CONTROL_FILES參數列出所有文件名,將相應內容寫入所有控制文件
??? * CONTROL_FILES中列出的第一個文件是Oracle數據庫運行期間唯一可以讀取的文件
??? * 數據庫運行期間,任何控制文件變為不可用,則實例不能繼續運行
?
??? 3、備份控制文件
?
??? 進行以下數據庫物理結構改變之后,需要備份控制文件
?
??? * 添加、取消或重命名數據文件
??? * 添加或撤銷表空間,或更改表空間讀寫狀態
??? * 添加或取消重做日志文件
?
??? 4、控制文件大小管理
?
??? MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXINSTANCES參數控制
?
?
三、創建控制文件
?
??? 1、創建初始化控制文件
?
??? CONTROL_FILES = (/u01/oracle/prod/control01.ctl,
???????????????????? /u02/oracle/prod/control02.ctl,
???????????????????? /u03/oracle/prod/control03.ctl)
?
??? 注:若已經存在與指定名同名的文件,則在CREATE DATABASE語句中指定CONTROLFILE REUSE子句。而且新控制文件與原先控制文件的SIZE必須相同。
?
??? 2、創建額外副本、重命名和重定位控制文件
?
??? ① 關閉數據庫
??? ② 在操作系統中復制、修改原控制文件
??? ③ 修改CONTROL_FILES,添加或修改新的控制文件名
??? ④ 重新啟動數據庫
?
??? 3、創建新的控制文件
?
??? 以下情況可能會需要重新創建新的控制文件:
?
??? * 數據庫所有控制文件都收到永久性損壞,且無任何備份
??? * 希望修改數據庫參數的永久性設置,例如:SID、MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXINSTANCES等參數
?
??? 4、創建語句示例
?
??? CREATE CONTROLFILE
??? SET DATABASE prod
??? LOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log',
???????????????????? '/u01/oracle/prod/redo01_02.log'),
??????????? GROUP 2 ('/u01/oracle/prod/redo02_01.log',
???????????????????? '/u01/oracle/prod/redo02_02.log'),
??????????? GROUP 3 ('/u01/oracle/prod/redo03_01.log',
???????????????????? '/u01/oracle/prod/redo03_02.log')
??? NORESETLOGS
??? DATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,
???????????? '/u01/oracle/prod/rbs01.dbf' SIZE 5M,
???????????? '/u01/oracle/prod/users01.dbf' SIZE 5M,
???????????? '/u01/oracle/prod/temp01.dbf' SIZE 5M
??? MAXLOGFILES 50
??? MAXLOGMEMBERS 3
??? MAXDATAFILES 200
??? MAXINSTANCES 6
??? ARCHIVELOG;
?
??? 注:CREATE CONTROLFILE 語句可能會損壞數據文件和聯機重做日志文件,省略文件名會引起文件中數據的丟失,或失去訪問完整數據庫的能力,所以在使用這條語句時需要特別小心。
?
??? 5、創建步驟(嚴格遵守)
?
??? ① 制作包括數據庫所有數據文件和聯機重做日志文件的列表,可以使用以下SQL列出清單
??????? selectmemberfrom v$logfile; --聯機重做日志文件
??????? select
name
from
v$datafile;
--
數據文件
??????? select
value
from
v$parameter
where
name
=
'control_files'
;
--
控制文件
??? ② 關閉數據庫(IMMEDIATE、ABORT)
??? ③ 備份數據庫的所有數據文件和聯機重做日志文件
??? ④ 啟動一個新的實例,但不要裝載和打開數據庫(NOMOUNT)
??? ⑤ 使用CREATE CONTROLFILE語句創建一個新的控制文件
??????? 注:若重命名數據庫,或聯機重做日志文件丟失,可使用RESETLOGS子句
??? ⑥ 在離線存儲設備上存儲新的控制文件備份
??? ⑦ 編輯CONTROL_FILES初始化參數,若重命名數據庫,則編輯DB_NAME參數
??? ⑧ 進行數據庫恢復(如果需要的話
)
??????? 注:若指定RESETLOGS,則需要加入USING BACKUP CONTROL FILE來恢復數據庫
??? ⑨ 打開數據庫(ALTER DATABASE OPEN;)
???
?
?