控制文件及其創(chuàng)建
?
??? 今天來(lái)學(xué)習(xí)一下Oracle中一個(gè)比較重要的文件類(lèi)型——控制文件。控制文件主要用于記錄Oracle實(shí)例中的各個(gè)系統(tǒng)信息,例如數(shù)據(jù)文件、日志、名稱(chēng)、版本、檢查點(diǎn)SCN等信息,對(duì)于數(shù)據(jù)庫(kù)的還原、以及一致性控制都有很重要的作用。
?
一、控制文件
?
??? 控制文件是一個(gè)小型的二進(jìn)制文件,可以記錄數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)。包括:
?
??? * 數(shù)據(jù)庫(kù)名稱(chēng)
??? * 數(shù)據(jù)文件和聯(lián)機(jī)重做日志文件的名稱(chēng)和位置
??? * 數(shù)據(jù)庫(kù)創(chuàng)建的時(shí)標(biāo)
??? * 當(dāng)前日志的序號(hào)
??? * 檢驗(yàn)點(diǎn)信息
?
??? 一般Oracle數(shù)據(jù)庫(kù)創(chuàng)建時(shí)都會(huì)創(chuàng)建至少兩個(gè)或兩個(gè)以上的控制文件。
?
二、控制文件的標(biāo)準(zhǔn)
?
??? 1、控制文件的文件名
?
??? 由CONTROL_FILES參數(shù)來(lái)指定控制文件名。
??? 若沒(méi)有指定該參數(shù),則生成默認(rèn)文件名,默認(rèn)文件名在各個(gè)操作系統(tǒng)中各不相同
?
??? 2、控制文件的復(fù)用
?
??? 一般不同的控制文件都存放在不同的磁盤(pán),當(dāng)某個(gè)磁盤(pán)損壞時(shí)可以通過(guò)在其他磁盤(pán)上的控制文件進(jìn)行復(fù)用,不需要任何的介質(zhì)恢復(fù)。
?
??? * 找到CONTROL_FILES參數(shù)列出所有文件名,將相應(yīng)內(nèi)容寫(xiě)入所有控制文件
??? * CONTROL_FILES中列出的第一個(gè)文件是Oracle數(shù)據(jù)庫(kù)運(yùn)行期間唯一可以讀取的文件
??? * 數(shù)據(jù)庫(kù)運(yùn)行期間,任何控制文件變?yōu)椴豢捎茫瑒t實(shí)例不能繼續(xù)運(yùn)行
?
??? 3、備份控制文件
?
??? 進(jìn)行以下數(shù)據(jù)庫(kù)物理結(jié)構(gòu)改變之后,需要備份控制文件
?
??? * 添加、取消或重命名數(shù)據(jù)文件
??? * 添加或撤銷(xiāo)表空間,或更改表空間讀寫(xiě)狀態(tài)
??? * 添加或取消重做日志文件
?
??? 4、控制文件大小管理
?
??? MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXINSTANCES參數(shù)控制
?
?
三、創(chuàng)建控制文件
?
??? 1、創(chuàng)建初始化控制文件
?
??? CONTROL_FILES = (/u01/oracle/prod/control01.ctl,
???????????????????? /u02/oracle/prod/control02.ctl,
???????????????????? /u03/oracle/prod/control03.ctl)
?
??? 注:若已經(jīng)存在與指定名同名的文件,則在CREATE DATABASE語(yǔ)句中指定CONTROLFILE REUSE子句。而且新控制文件與原先控制文件的SIZE必須相同。
?
??? 2、創(chuàng)建額外副本、重命名和重定位控制文件
?
??? ① 關(guān)閉數(shù)據(jù)庫(kù)
??? ② 在操作系統(tǒng)中復(fù)制、修改原控制文件
??? ③ 修改CONTROL_FILES,添加或修改新的控制文件名
??? ④ 重新啟動(dòng)數(shù)據(jù)庫(kù)
?
??? 3、創(chuàng)建新的控制文件
?
??? 以下情況可能會(huì)需要重新創(chuàng)建新的控制文件:
?
??? * 數(shù)據(jù)庫(kù)所有控制文件都收到永久性損壞,且無(wú)任何備份
??? * 希望修改數(shù)據(jù)庫(kù)參數(shù)的永久性設(shè)置,例如:SID、MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXINSTANCES等參數(shù)
?
??? 4、創(chuàng)建語(yǔ)句示例
?
??? 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 語(yǔ)句可能會(huì)損壞數(shù)據(jù)文件和聯(lián)機(jī)重做日志文件,省略文件名會(huì)引起文件中數(shù)據(jù)的丟失,或失去訪問(wèn)完整數(shù)據(jù)庫(kù)的能力,所以在使用這條語(yǔ)句時(shí)需要特別小心。
?
??? 5、創(chuàng)建步驟(嚴(yán)格遵守)
?
??? ① 制作包括數(shù)據(jù)庫(kù)所有數(shù)據(jù)文件和聯(lián)機(jī)重做日志文件的列表,可以使用以下SQL列出清單
??????? selectmemberfrom v$logfile; --聯(lián)機(jī)重做日志文件
??????? select
name
from
v$datafile;
--
數(shù)據(jù)文件
??????? select
value
from
v$parameter
where
name
=
'control_files'
;
--
控制文件
??? ② 關(guān)閉數(shù)據(jù)庫(kù)(IMMEDIATE、ABORT)
??? ③ 備份數(shù)據(jù)庫(kù)的所有數(shù)據(jù)文件和聯(lián)機(jī)重做日志文件
??? ④ 啟動(dòng)一個(gè)新的實(shí)例,但不要裝載和打開(kāi)數(shù)據(jù)庫(kù)(NOMOUNT)
??? ⑤ 使用CREATE CONTROLFILE語(yǔ)句創(chuàng)建一個(gè)新的控制文件
??????? 注:若重命名數(shù)據(jù)庫(kù),或聯(lián)機(jī)重做日志文件丟失,可使用RESETLOGS子句
??? ⑥ 在離線存儲(chǔ)設(shè)備上存儲(chǔ)新的控制文件備份
??? ⑦ 編輯CONTROL_FILES初始化參數(shù),若重命名數(shù)據(jù)庫(kù),則編輯DB_NAME參數(shù)
??? ⑧ 進(jìn)行數(shù)據(jù)庫(kù)恢復(fù)(如果需要的話
)
??????? 注:若指定RESETLOGS,則需要加入U(xiǎn)SING BACKUP CONTROL FILE來(lái)恢復(fù)數(shù)據(jù)庫(kù)
??? ⑨ 打開(kāi)數(shù)據(jù)庫(kù)(ALTER DATABASE OPEN;)
???
?
?