Oracle 控制文件管理
?
控制文件是一個很小的二進制文件(10MB左右),含有數據庫結構信息,包括數據文件和日志文件信息。控制文件在數據庫創建時被自動創建,并在數據庫發生物理變數時更新。控制文件被不斷更新,在任何時候都要保證控制文件可用,否則數據庫將無法啟動或者使用。
?
1 控制文件包含的主要信息如下:
數據庫名稱和SID標識;
數據文件和日志文件列表;
數據庫創建的時間戳;
表空間信息;
當前重做日志文件序列號;
歸檔日志信息;
檢查點信息;
回滾段的起始與結束;
備份數據文件信息;
?
控制文件包含了如此多的重要信息,需要保護并及時備份控制文件,以便它被損壞或者磁盤介質損貨時,能夠及時恢復。目前保護控制文件的主要策略為多路復用控制文件與備份控制文件。
?
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下對應的路勁下所有的控制文件版本一致才行,不然會報錯誤;
如果是控制文件本身損壞,我們可以將備份文件復制到對應的目錄下,然后重啟數據庫即可。
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/Latiny/p/6703141.html
總結
以上是生活随笔為你收集整理的Oracle 控制文件管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: No module named ‘lig
- 下一篇: pytorch实现NS方程求解-基础PI