控制文件和重做日誌文件

控制文件是一個二進制文件,包含了關於數據庫物理結構的重要信息,包括數據庫的名稱,相關的數據文件和重做日誌文件的名稱
和位置,當前的日誌序列號等內容.

創建複合控制文件(oracle最多支持同時使用8個控制文件)
oracle將同時寫入所有的控制文件中,但是隻會讀取 control_files參數中所指定的第一個控制文件
1.關閉數據庫
2.將已有的控制文件複製多份並且重新命名,再將他們移動到操作系統的其它位置
 control_files = ( 'i:/oracle/oradata/ctrloradb01.ctl',
     'j:/oracle/oradata/ctrloradb02.ctl',
     'k:/oracle/oradata/ctrloradb03.ctl',
     'l:/oracle/oradata/ctrloradb04.ctl')
3.修改初始化參數文件中的control_files的設置
4.重新啓動數據庫

備份控制文件
1.將控制文件備份爲二進制文件
alter database backup controlfile to 'i:/oracle/backup/control.bkp';

2.將控制文件備份爲文本文件(備份到oracle/base/admin/sid/udump目錄下的跟蹤文件中,將在跟蹤文件中生成一個SQL腳本)
alter database backup controlfile to trace;

刪除控制文件
1.關閉數據庫
2.編輯control_files初始化參數,使其中不再包含要刪除的控制文件的名稱
3.在操作系統中刪除控制文件
4.重新啓動數據庫

控制文件數據字典:
v$controlfile 所有控制文件的名稱和狀態信息

/* 重做日誌文件 */
oracle數據庫所使用的一組重做日誌中至少需要包含兩個重做日誌文件組.
只有當某個事務所產生的重做記錄全部被寫入重做日誌文件之後,oracle才認爲這個事務已經成功提交.重做記錄也可能會在事務提交之前就寫入重做日誌文件.

LGWR進程在開始寫入下一個重做日誌文件之前,必須確認這個即將被覆蓋的重做日誌文件已經完成如下工作:
*  如果數據庫處於非歸檔模式,已寫滿的重做日誌文件在被覆蓋之前,其中所有重做記錄所對應的事務的修改
   操作結果必須已經全部被寫入到數據文件中
*  如果數據庫處於歸檔模式,已寫滿的重做日誌文件在被覆蓋之前,不僅要對應所有事務的修改操作結果全部被   寫入到數據文件中,還需要等待歸檔進程完成對它的歸檔操作

在建立複合重做日誌文件時,應當將同一個重做日誌組中的各個成員分佈到不同的硬盤中去,這樣還可以避免LGWR進程和ARCn進程之間產生的硬盤I/O衝突.如果有條件,最好也能夠將數據文件和日誌文件分別存放在不同的硬盤中,這樣還可以避免LGWR進程與DBWR進程之間的I/O衝突.

重做日誌組的最大數目: maxlogfiles
每個重做日誌組的所能擁有得最大成員數目: maxlogmembers

創建重做日誌組(複合)
重做日誌組得組號不能大於maxlogfiles參數設定的值,當中不能有間斷.
alter database add logfile
 ('i:/oracle/oradata/oradb01/redo0301.rdo',
  'i:/oracle/oradata/oradb01/redo0302.rdo') size 100M
(應爲沒有指定group子句,oracle將自動爲新建的重做日誌組設置組號,一般是在當前組號之後遞增)

alter database add logfile group 3
 ('i:/oracle/oradata/oradb01/redo0301.rdo',
  'i:/oracle/oradata/oradb01/redo0302.rdo') size 100M

創建一個非複合重做日誌文件
alter database add logfile
 'i:/oracle/oradata/oradb01/redo01.rdo'

創建成員日誌文件(不能使用SIZE參數來設定日誌文件大小)
alter database add logfile member
 'i:/oracle/oradata/oradb01/redo0303.log' to group 3
或者
alter database add logfile member
 'i;/oracle/oradata/oradb01/redo0303.log' to
 ('i;/oracle/oradata/oradb01/redo0301.log',
  'i;/oracle/oradata/oradb01/redo0302.log')

改變重做日誌文件名稱或位置
1.關閉數據庫
2.在操作系統級別重新命名或移動重做日誌文件,要刪除原來位置上的文件
3.startup mount,不打開數據庫
4.用rename file子句的alter database語句
alter database rename file
 'I;/oracle/oradata/oradb01/redo0301.log',
 'I;/oracle/oradata/oradb01/redo0302.log' to
 'j;/oracle/logs/redo0301.log',
 'k;/oracle/logs/redo0302.log'
5.alter database open
6.備份控制文件

重做日誌組的狀態 active/current/inactive
成員日誌文件的狀態 valid/invalid/stale

刪除重做日誌組(只能刪除INACTIVE狀態的重做日誌組,如果要刪除CURRENT狀態的重做日誌組,必須執行一次手工日誌切換,將它切換到INACTIVE狀態)

alter database drop logfile group 3
最後需要手動刪除操作系統中的相應文件

刪除成員日誌文件(只能刪除INACTIVE狀態的重做日誌組中的成員日誌文件)
alter database drop logfile member
 'i:/oracle/oradata/oradb01/redo0302.log'
最後需要手動刪除操作系統中的相應文件

手工切換日誌(每進行一次日誌切換後,ORACLE將會在數據庫的警告文件中進行記錄)
alter system switch logfile

清空重做日誌組
(就是將重做日誌文件中的內容全部初始化,想當於刪除重做日誌文件,再重建它)
alter database clear logfile group 3

如果要清空的重做日誌組尚未歸檔,必須指定unarchived子句(oracle將避免對這個重做日誌組進行歸檔,其中保存的重做記錄暫時不會丟失)
alter database clear unarchived logfile group 3

警告:如果被清空的重做日誌組還沒有被歸檔,有可能造成數據丟失.比如,如果在一個表空間切換到脫機狀態時是不乾淨的,即SGA區中有部分屬於該表空間的髒緩存塊還沒有寫入數據文件,那麼在下一次將該表空間恢復爲聯機狀態時,會需要使用到重做日誌文件中的信息來進行恢復,而如果包含恢復信息的重做日誌組中已經被清空,那麼該表空間將無法恢復爲聯機狀態.

重做日誌文件數據字典
v$log  重做日誌文件的基本信息 
v$logfile 各個成員日誌文件的信息

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章