Oracle的存儲的三大物理文件


 

分享一下我老師大神的人工智能教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

一、控制文件(Control File):保存有關數據庫的結構信息!

    控制文件是一個小型的二進制文件,可以記錄數據庫的物理結構。包括:

    * 數據庫名稱
    * 數據文件和日志文件的名稱和位置
    * 數據庫創建的時標
    * 當前日志的序號
    * 檢驗點信息

    一般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 databse april
    LOGFILE GROUP 1 ('/export/home/oracle/oradata/april/redo01_01.log',
                     '/export/home/oracle/oradata/april/redo01_02.log'),
            GROUP 2 ('/export/home/oracle/oradata/april/redo02_01.log',
                     '/export/home/oracle/oradata/april/redo02_02.log'),
            GROUP 3 ('/export/home/oracle/oradata/april/redo03_01.log',
                     '/export/home/oracle/oradata/april/redo03_02.log')
    noresetlogs
    datafile '/export/home/oracle/oradata/april/system01.dbf' size 3M,
             '/export/home/oracle/oradata/april/rbs01.dbf' SIZE 5M,
             '/export/home/oracle/oradata/april/users01.dbf' SIZE 5M,
             '/export/home/oracle/oradata/april/temp01.dbf' SIZE 5M
    MAXLOGFILES 50
    MAXLOGMEMBERS 3
    MAXDATAFILES 200
    MAXINSTANCES 6
    ARCHIVELOG;

    注:create controlfile 語句可能會損壞數據文件和聯機重做日志文件,省略文件名會引起文件中數據的丟失,或失去訪問完整數據庫的能力,所以在使用這條語句時需要特別小心。

    5、創建步驟(嚴格遵守)

    ① 制作包括數據庫所有數據文件和聯機重做日志文件的列表,可以使用以下SQL列出清單
        select member from v$logfile; --日志文件
       select name from v$datafile; -- 數據文件

       select value from v$parameter where name = 'control_files' ; -- 控制文件

    ② 關閉數據庫(immediate、abort)
    ③ 備份數據庫的所有數據文件和聯機重做日志文件
    ④ 啟動一個新的實例,但不要裝載和打開數據庫(nomount)
    ⑤ 使用create controlfile語句創建一個新的控制文件
        注:若重命名數據庫,或聯機重做日志文件丟失,可使用resetlogs子句
    ⑥ 在離線存儲設備上存儲新的控制文件備份
    ⑦ 編輯control_file初始化參數,若重命名數據庫,則編輯DB_NAME參數
    ⑧ 進行數據庫恢復(如果需要的話 )
        注:若指定resetlogs,則需要加入using backup control file來恢復數據庫
    ⑨ 打開數據庫(alter databse open;)

==========================控制文件的相關操作==============================

一、create controlfile錯誤

    1、檢查文件差異

    創建新的控制文件之后會檢查數據字典和控制文件之間的矛盾,以檢查丟失或多余的文件。

    丟失:
        若數據字典中存在某數據文件,而控制文件中沒有,則Oracle在控制文件中創建一個名為MISSINGnnn的占位符入口,表示作為脫機並需要介質恢復的標志。可以通過重命名MISSINGnnn來訪問MISSINGnnn對應的真正數據文件,但該文件必須是只讀或正常脫機的。
        又因為數據文件需要介質恢復,而RESETLOGS的結果排除了介質恢復的可能,所以當使用了RESETLOGS子句時,必須撤銷包含數據文件的表空間。

    多余:
        當控制文件記錄的數據文件不在數據字典中時,Oracle會從新的控制文件中刪除對數據文件的引用。

    注:無論是丟失還是多余,都會在相應實例的alert.log文件中包含一條解釋性消息。

    2、創建過程中的錯誤

    一般在創建新的控制文件后打開數據庫,可能會返回一下錯誤類型:
    ORA-01173、ORA-01176、ORA-01177、ORA-01215、ORA-01216

    最大的可能是在在創建時有文件丟失或多余文件。
    此時應該找到備份的數據文件和聯機重做日志文件,覆蓋當前文件,並使用正確的CREATE CONTROLFILE語句重新創建。


二、備份控制文件

    1、備份控制文件為二進制文件

    alter database backup controlfile to '/oracle/backup/control.bkp';

    2、制作以后可以重新創建控制文件的SQL
  
   alter database backup controlfile to trace;

    3、可以使用RMAN對控制文件進行備份


三、恢復控制文件

    1、控制文件損壞

    ①關閉實例 ②將未損壞的控制文件副本覆蓋已損壞文件 ③打開數據庫

    2、磁盤損壞

    ①關閉實例 ②經未損壞控制文件副本復制到新磁盤空間 ③修改control_file參數 ④打開數據庫

    也可以先修改control_file參數,然后恢復控制文件,再把


四、刪除控制文件

    ① 關閉數據庫
    ② 修改control_file參數
    ③啟動數據庫
    ④ 在磁盤上刪除相應controlfile文件


五、控制文件信息

    通過一下視圖來查看控制文件信息:

    V$CONTROLFILE:控制文件名稱
    V$CONTROLFILE_RECORD_SECTION:控制文件記錄段信息
    V$PARAMETER:初始化參數CONTROL_FILES的值

聯機重做日志概念 —— 又叫做日志文件
一、聯機重做日志

    1、重做線程

    每個數據庫實例的聯機重做日志組都是一個聯機重做的實例線程。
    不管有沒有多路復用,一般每個Oracle都只有一個重做線程,當然RAC中每個實例都包含一個重做線程。

    2、聯機重做日志內容

    重做條目記錄了可以對數據庫重新構造的所有修改數據,包括回滾段。
    重做記錄在SGA重做日志緩存區中緩沖,並由LGWR進程寫入某個聯機重做日志文件。

    事務被提交時,必定需要用LGWR將日志全部從SGA緩存中寫入聯機重做日志文件,然后才被告知提交完成。
    LGWR還會為每個事務分配一個識別重做記錄的系統修改號(SCN)。

    當重做日志緩存填滿時LGWR也會將重做條目寫入到重做日志文件,這些是可以回滾的。

    3、聯機重做日志寫入方式

    數據庫的聯機重做日志組務必要有兩個或兩個以上,這樣可以保持其中一個一直用於寫入,另一個用於歸檔。

    LGWR采用循環寫入的方式,即寫滿一個換下一個。或歸檔模式則寫滿了之后歸檔,否則則直接覆蓋。

    4、活動與非活動

    當前正在寫入的聯機重做日志文件成為“當前的”聯機重做日志文件。
    實例恢復時所需的聯機重做日志文件稱為“活動的”聯機重做日志文件。
    實例恢復不用的聯機重做日志文件稱為“非活動的”聯機重做日志文件。

    已經進行存檔的聯機重做日志文件不能重新使用或重寫,知道ARCn存儲了這個文件內容。

    5、日志切換 & 日志順序號

    一般默認在一個文件寫滿時切換到寫一個文件,但是也可以規定時間進行切換,這樣就不用理會是否寫滿。
    也可以手動進行強制切換。

    每次日志切換都會分配一個新的日志順序號,歸檔時也將順序號進行保存。
    每個聯機或存檔的重做日志文件都通過它的日志順序號進行唯一標識。


二、規划聯機重做日志

    1、多路復用(Group)

    多路復用是避免損壞聯機重做日志文件。
    多路復用時LGWR將同一重做日志信息同時寫入多個同樣的聯機重做日志文件。

    建議必須要使用多路復用(至少兩個組)。  
  

 

    注:當某個成員不可用,則標記為INVALID,並向LGWR跟蹤文件和數據報警文件中寫入錯誤信息。不同問題會不同反映。
      * 一個操作成功一個操作失敗時:按正常過程進行,忽略不可用成員
      * 日志切換時需要存檔而不能訪問下一個組時:暫時中斷操作,直到歸檔完成
      * 介質失敗,切換時不能訪問下一組:關閉數據庫,並返回錯誤信息
      * LGWR寫入時不能訪問文件:關閉數據庫,並返回錯誤信息

    注:不同的組中不一定需要相同個數的成員。只含有1個組的多路復用是非法的。

    2、日志成員存放在不同磁盤

    設置多路復用時,將日志組成員放置到不同的磁盤上。這樣當某磁盤失敗時,可以跳過這個成員繼續工作。

    另外將成員放置到不同磁盤上可以消除LGWR和ARCn在后台進程對聯機重做日志成員的爭奪。

    注:數據文件和聯機重做日志文件也應該放在不同磁盤上,以減少寫數據塊和寫記錄之間出現的競爭。

    3、聯機重做日志成員的大小

    規定聯機重做日志的大小,以便將填滿的組存檔到脫機存檔介質(磁帶或磁盤)的某個單元中。
    例如磁盤上有一個填滿的聯機重做日志組,且磁盤還有49%的未使用存儲空間,此時最好降低聯機重做日志文件的大小。

    多路復用時,同一個組中的多有成員比用擁有同樣的大小!
    不同組的成員大小不同,但是這樣沒有什么好處,而且會對檢驗點的設置帶來不便。

    4、聯機重做日志文件的數量

    聯機日志文件數量的確定最好的方法是測試不同的配置的效果。
    最佳配置:在不妨礙LGWR向重做日志寫入信息的前提下,使用盡可能少的組(至少2個組)。

    仔細檢查LGWR跟蹤文件和數據庫報警文件的內容,如果消息表明:因為檢驗點還沒有完成或者組還沒有存檔的緣故,LGWR不得不頻繁得等待組,那么就需要添加組來解決問題。

    注:MAXLOGFILES-最大組數;MAXLOGMEMBERS-最大成員數;要修改這兩個參數需要重建數據庫或控制文件,所以創建數據庫時要慎重。

    5、控制存檔延遲

    在數據庫中使用聯機重做日志歸檔,然后將歸檔日志放到備用數據庫,通過查詢日志來進行和數據庫中同樣的操作。這兩個操作之間存在一個時間間隔,就叫做存檔延遲。可以通過ARCHIVE_LAG_TARGET初始化參數來嚴格限定延遲的時間長度。

    設置了ARCHIVE_LAG_TARGET之后,Oracle將定期檢查實例當前的聯機重做日志,在發生一下情況時切換日志:
    * n秒鍾前創建了當前日志,並估計當前日志存檔時間為m秒,而n+m值超過ARCHIVE_LAG_TARGET的值
    * 當前日志包含重做記錄

    ARCHIVE_LAG_TARGET = 1800 單位是秒,默認為0,表示禁止該功能

    在選擇數值時考慮一下因素:
    * 切換日志所消耗的系統開銷
    * 作為日志完整條件的結果,通常日志切換發生的頻率
    * 備用數據庫可以人壽多少重做損失

    注:當數據庫本身就經常切換時,設置這個值沒有什么意義,而且當設置值很低時,對性能會產生負面影響。

 

==================================對日志文件的操作===============================

一、創建聯機重做日志

    1、創建聯機重做日志組
  
   alter database add logfile
    ('/export/home/oracle/oradata/april/log1.log','/export/home/oracle/oradata/april/log2.log') size 500k;

   alter database add group 10
    ('/export/home/oracle/oradata/april/log1.log','/export/home/oracle/oradata/april/log2.log') size 500k;


    注:組號必須在1和MAXLOGFILES之間,且不要跳躍使用,否則會耗費數據庫控制文件中的空間。

    2、創建聯機重做日志成員

   alter database add logfile member '/export/home/oracle/oradata/april/log2.log' to group 2;

   alter database add logfile member '/export/home/oracle/oradata/april/log2.log'
    to ('/export/home/oracle/oradata/april/log2.log','/export/home/oracle/oradata/april/log2.log')

    注:指定組中所有成員也可以表示這個組。新建的日志成員狀態為INVALID,首次使用時變成活動狀態。


二、重定位 & 重命名

    ① 關閉數據庫:shutdown immediate

    ② 在操作系統中移動或重命名聯機重做日志文件

    ③ 啟動並裝載數據庫:startup mount

    ④ 使用rename語句

   alter database rename file
    '/export/home/oracle/oradata/april/log1c.log','/export/home/oracle/oradata/april/log2c.log'
    to '/export/home/oracle/oradata/april/log1a.log','/export/home/oracle/oradata/april/log2a.log'


三、取消聯機重做日志組成員

    1、取消日志組

    要注意:
    ① 至少需要保留兩組聯機重做日志文件
    ② 日志組狀態為“非活動”時才可以取消,如果是“活動”的,則需要進行強制切換
    ③ 要確保日志組已經存檔,可以查看V$LOG視圖查看是否存檔

   alter database drop logfile group 3;

    在執行DROP之后要在操作系統中刪除磁盤文件

    2、取消聯機重做日志成員

    要注意:
    ① 可以取消原先對稱的組中的成員,使其暫時不對稱,但最好立即調整這種狀況
    ② 實例需要至少兩個有效聯機重做日志文件,且不能取消最后一個有效成員,使用V$LOGFILE查看狀態
    ③ 和取消組一樣,需要成員為非活動狀態,否則需要進行一次強制切換
    ④ 確保要取消的成員已經經過存檔

   alter database drop logfile member '/export/home/oracle/oradata/april/log1.log';

四、強制切換日志
  
   alter system swith logfile;


五、校驗重做日志文件中的塊

    設置DB_BLOCK_CHECKSUM初始化參數為TRUE,則對所有寫到磁盤上的Oracle數據塊進行校驗,包括重做數日志塊。
    DB_BLOCK_CHECKSUM參數的默認值是FLASE

    <具體原理未知>

    注:允許校驗會對系統產生額外的開銷,並且降低數據庫性能。需要監視數據庫性能以判斷校驗的代價是否過重。


六、清除聯機重做日志文件

    在聯機重做日志損壞時,可以使用CLEAR命令來初始化聯機重做日志文件

    但是要注意以下情況不能使用:
    * 僅有兩個日志組
    * 受到損壞的重做日志文件屬於當前組
  
   alter database clear logfile group 3;
   alter database clear unarchived logfile group 3;
  
    注:清除了恢復備份所需的日志文件,則不能再進行恢復,Oracle將在警報文件中寫入一條消息來描述不能恢復的備份。

    注:若清除的日志可以將脫機表空間變成聯機狀態,則需要在語句中加上UNRECOVERABLE DATAFILE子句。
        因為清除該日志后再也不能把脫機表空間變成聯機狀態,所以不得不撤銷表空間或執行未完成的恢復過程。


七、查看聯機重做日志信息

    V$LOG:顯示來自於控制文件的重做日志文件信息
    V$LOGFILE:標識重做日志文件組及其成員的狀態
    V$LOG_HISTORY:包含日志歷史信息

數據文件

一、DataFile管理准則

    1、初始參數DB_FILES

    DB_FILES指出了數據文件信息保留的SGA空間數量,所以也指出了可以為該實例創建的數據文件的最大編號。
    注:更改DB_FILES值需要重啟實例后才可生效。

    DB_FILES太小,則在關閉數據庫前無法添加超過限制數量的數據文件,太大則消耗內存。

    2、添加DataFile到表空間

    添加DataFile到表空間需要遵循一下的條件:

    * 操作系統對一個進程能夠同時打開的文件數加以限制
    * 操作系統對數據文件的數量和大小加以限制
    * Oracle對實例打開的數據庫文件最大數量有限制(與操作系統有關)
    * 不能超過DB_FILES所指定的數據文件數量
    * CREATE DATABASE/CONTROLFILE 中 MAXDATAFILES子句的影響

    3、考慮性能的影響

    4、確定數據文件的大小

    SYSTEM表空間的數據文件至少需要150M來包括數據字典和回滾段。
    如果安裝了Oracle的其他產品,則可能還需要額外的空間。

    5、適當放置數據文件

    數據文件全部放在一個磁盤驅動器可能會引起競爭,有條件可以分開存放。

    6、與重做日志文件分開存儲

    數據文件與重做日志文件存放在一個磁盤容易造成全部數據丟失,盡量分開存放。或保存多個重做日志文件。


二、創建和添加DataFile

   create tablespace --創建表空間及其數據文件
    create temporary tablespace --創建臨時表空間及其臨時文件
    alter tablespace ... add datafile --添加一個數據文件
    alter tablespace ... add tempfile --添加一個臨時文件
    create database --創建數據庫和關聯的數據文件
    alter database ... create datafile --創建一個新的空的數據文件代替原來的

    注:推薦指定文件全名,否則按系統默認會比較混亂。


三、改變DataFile大小

    1、啟用/禁用數據文件的自動盤區

    自動盤區指DataFile可以在額定的范圍內自動增長,這樣可以減少表空間用完時立即干預的必要,也可以確保應用程序不會因為分配盤區而失敗或暫停。

    查詢數據文件是否為自動盤區,可以查詢DBA_DATA_FILES視圖的AUTOEXTENSIBLE字段。

    要將數據文件設置成自動盤區,可以在以下語句中加入 AUTOEXTEND ON 子句:
    CREATE DATABASE ...
    CREATE TABLESPACE ...
    ALTER TABLESPACE ...

    添加的舉例:

    ALTER TABLESPACE users
    ADD DATAFILE '/export/home/oracle/oradata/april/users03.dbf' SIZE 10M
    AUTOEXTEND ON
    NEXT 512K
    MAXSIZE 250M;

    禁用的例子:

    ALTER DATABASE DATAFILE '/export/home/oracle/oradata/april/users03.dbf'
    AUTOEXTEND OFF;


    2、手動調整DataFile

    使用以下語句來手動改變DataFile的大小:
    ALTER DATABASE DATAFILE '/export/home/oracle/oradata/april/stuff01.dbf'
    RESIZE 100M;


四、修改數據文件可用性

    要使DataFile脫機或聯機,有兩種方法:

    ① alter database 語句修改單獨的DataFile
    ② alter tablespace 語句修改所有的DataFile

    1、在ARCHIVRLOG模式下的更改DataFile狀態

    alter database datafile '/export/home/oracle/oradata/april/stuff01.dbf' online;
    alter database datafile '/export/home/oracle/oradata/april/stuff01.dbf' offline;

    注:只有在archivelog 模式下才可使用alter database來更改DataFile

    2、在NOARCHIVELOG模式下使DataFile脫機

    由於在NOARCHIVELOG模式下,數據文件脫機后會造成數據的遺失,所以只能使用ALTER DATABASE語句下帶有DATAFILE和OFFLINE DROP子句的選項將該DataFile直接取消,例如該DataFile只包含臨時段數據,並沒有備份時

    alter database datafile '/export/home/oracle/oradata/april/users3.dbf' offline drop;

    3、修改TableSpace中所有DataFile或TempFile的可用性

    ALTER TABLESPACE ... DATAFILE {ONLINE|OFFLINE}
    ALTER TABLESPACE ... TEMPFILE {ONLINE|OFFLINE}

    注:修改某TableSpace中的所有數據文件,但是TableSpace本身的狀態不改變。

    總結:

    ① ALTER TABLESPACE可以在數據庫裝載狀態時發布,無需打開
    ② 涉及到系統表空間、撤銷表空間、默認臨時表空間時,必須是未打開的數據庫
    ③ ALTER DATABASE DATAFILE 語句中必須填入文件全名

=================================DataFile 第二部分=================================


一、DataFile的重命名和重定位

    1、單個TableSpace的DataFile重命名及重定位

    重命名步驟:

    ① 使包含該DataFile的非SYSTEM TableSpace脫機
        ALTER TABLESPACE users OFFLINE NOEMAL;
    ② 利用操作系統重命名DataFile
    ③ 使用ALTER TABLESPACE RENAME DATAFILE語句改文件名
        ALTER TABLESPACE users
        RENAME DATAFILE '/export/home/oracle/oradata/april/user1.dbf','/export/home/oracle/oradata/april/user2.dbf'
        TO '/export/home/oracle/oradata/april/users01.dbf','/export/home/oracle/oradata/april/users02.dbf';
    ④ 備份數據庫

    注:重定位的操作基本上與重命名相同,即在改變名稱的基礎上也通過操作系統改變了位置。

    2、多個TableSpace中的DataFile重命名和重定位

    ① 確保數據庫被裝載,但是關閉(必須關閉,與單TableSpace不同)
    ② 利用操作系統重命名及重定位DataFile
    ③ 使用ALTER DATABASE命令
        ALTER DATABASE
        RENAME FILE '/export/home/oracle/oradata/april/sort01.dbf','/export/home/oracle/oradata/april/user3.dbf'
        TO '/export/home/oracle/oradata/april/temp01.dbf','/export/home/oracle/oradata/april/users03.dbf';
    ④ 備份數據庫


二、驗證DataFile中的數據塊

    如果需要配置Oracle來校驗數據塊,則需要將DB_BLOCK_CHECHSUM參數項設置為TRUE

    注:DB_BLOCK_CHECHSUM的默認值是FALSE,但可以動態改變。

    工作過程: 當啟用塊校驗時,Oracle為每個寫到磁盤的塊計算校驗和,包括臨時塊。DBWn為每個塊計算校驗和后,將其存儲在塊的頭部,下一次Oracle讀一個數據塊時,使用它來校驗和檢測塊中的訛誤,若有錯誤則返回ORA-01578,並將錯誤信息寫入跟蹤文件


三、查看數據文件信息

    DBA_DATA_FILES:每個數據文件的說明信息,包括所屬表空間和文件標識
    DBA_EXTENTS:組成數據庫中所有段的盤區,包括盤區的數據文件標識
    DBA_FREE_SPACE:表空間中的空閑盤區,包含該盤區的數據文件標識
    V$DATAFILE:來自控制文件的數據文件信息
    V$DATAFILE_HEADER:包括來自數據文件頭部的信息

    SELECT NAME, FILE#, STATUS, CHECKPOINT_CHANGE# "CHECKPOINT"
      FROM V$DATAFILE;

    NAME:數據文件全名
    FILE#:文件號
    STATUS:SYSTEM表空間的DataFile直接標SYSTEM,其他則標ONLINE|OFFLINE(RECOVER)
    CHECKPOINT_CHANGE#:最近的檢測點寫入的最終SCN


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM