Oracle的存儲的三大物理文件

 

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

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

               

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

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

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

    通常Oracle數據庫建立時都會建立至少兩個或兩個以上的控制文件。測試

2、控制文件的標準

    一、控制文件的文件名

    由control_files參數來指定控制文件名。
    若沒有指定該參數,則生成默認文件名,默認文件名在各個操做系統中各不相同

    二、控制文件的複用

    通常不一樣的控制文件都存放在不一樣的磁盤,當某個磁盤損壞時能夠經過在其餘磁盤上的控制文件進行復用,不須要任何的介質恢復。

    * 找到control_files參數列出全部文件名,將相應內容寫入全部控制文件
    * control_files中列出的第一個文件是Oracle數據庫運行期間惟一能夠讀取的文件
    * 數據庫運行期間,任何控制文件變爲不可用,則實例不能繼續運行

    三、備份控制文件

    進行如下數據庫物理結構改變以後,須要備份控制文件

    * 添加、取消或重命名數據文件
    * 添加或撤銷表空間,或更改表空間讀寫狀態
    * 添加或取消重作日誌文件

    四、控制文件大小管理

    MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXINSTANCES參數控制


3、建立控制文件

    一、建立初始化控制文件

    control_files = (/u01/oracle/prod/control01.ctl,
                     /u02/oracle/prod/control02.ctl,
                     /u03/oracle/prod/control03.ctl)

    注:若已經存在與指定名同名的文件,則在create database語句中指定controlfile reuse子句。並且新控制文件與原先控制文件的size必須相同。

    二、建立額外副本、重命名和重定位控制文件

    ① 關閉數據庫
    ② 在操做系統中複製、修改原控制文件
    ③ 修改control_files,添加或修改新的控制文件名
    ④ 從新啓動數據庫

    三、建立新的控制文件

    如下狀況可能會須要從新建立新的控制文件:

    * 數據庫全部控制文件都收到永久性損壞,且無任何備份
    * 但願修改數據庫參數的永久性設置,例如:SID、MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXINSTANCES等參數

    四、建立語句示例

    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 語句可能會損壞數據文件和聯機重作日誌文件,省略文件名會引發文件中數據的丟失,或失去訪問完整數據庫的能力,因此在使用這條語句時須要特別當心。

    五、建立步驟(嚴格遵照)

    ① 製做包括數據庫全部數據文件和聯機重作日誌文件的列表,可使用如下SQL列出清單
        select member from v$logfile; --日誌文件
       select name from v$datafile; -- 數據文件人工智能

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

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

==========================控制文件的相關操做==============================.net

1、create controlfile錯誤

    一、檢查文件差別

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

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

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

    注:不管是丟失仍是多餘,都會在相應實例的alert.log文件中包含一條解釋性消息。

    二、建立過程當中的錯誤

    通常在建立新的控制文件後打開數據庫,可能會返回一下錯誤類型:
    ORA-0117三、ORA-0117六、ORA-0117七、ORA-0121五、ORA-01216

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


2、備份控制文件

    一、備份控制文件爲二進制文件

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

    二、製做之後能夠從新建立控制文件的SQL
  
   alter database backup controlfile to trace;

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


3、恢復控制文件

    一、控制文件損壞

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

    二、磁盤損壞

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

    也能夠先修改control_file參數,而後恢復控制文件,再把


4、刪除控制文件

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


5、控制文件信息

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

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

聯機重作日誌概念 —— 又叫作日誌文件
1、聯機重作日誌

    一、重作線程

    每一個數據庫實例的聯機重作日誌組都是一個聯機重作的實例線程。
    無論有沒有多路複用,通常每一個Oracle都只有一個重作線程,固然RAC中每一個實例都包含一個重作線程。

    二、聯機重作日誌內容

    重作條目記錄了能夠對數據庫從新構造的全部修改數據,包括回滾段。
    重作記錄在SGA重作日誌緩存區中緩衝,並由LGWR進程寫入某個聯機重作日誌文件。

    事務被提交時,一定須要用LGWR將日誌所有從SGA緩存中寫入聯機重作日誌文件,而後才被告知提交完成。
    LGWR還會爲每一個事務分配一個識別重作記錄的系統修改號(SCN)。

    當重作日誌緩存填滿時LGWR也會將重作條目寫入到重作日誌文件,這些是能夠回滾的。

    三、聯機重作日誌寫入方式

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

    LGWR採用循環寫入的方式,即寫滿一個換下一個。或歸檔模式則寫滿了以後歸檔,不然則直接覆蓋。

    四、活動與非活動

    當前正在寫入的聯機重作日誌文件成爲「當前的」聯機重作日誌文件。
    實例恢復時所需的聯機重作日誌文件稱爲「活動的」聯機重作日誌文件。
    實例恢復不用的聯機重作日誌文件稱爲「非活動的」聯機重作日誌文件。

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

    五、日誌切換 & 日誌順序號

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

    每第二天志切換都會分配一個新的日誌順序號,歸檔時也將順序號進行保存。
    每一個聯機或存檔的重作日誌文件都經過它的日誌順序號進行惟一標識。


2、規劃聯機重作日誌

    一、多路複用(Group)

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

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

 

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

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

    二、日誌成員存放在不一樣磁盤

    設置多路複用時,將日誌組成員放置到不一樣的磁盤上。這樣當某磁盤失敗時,能夠跳過這個成員繼續工做。

    另外將成員放置到不一樣磁盤上能夠消除LGWR和ARCn在後臺進程對聯機重作日誌成員的爭奪。

    注:數據文件和聯機重作日誌文件也應該放在不一樣磁盤上,以減小寫數據塊和寫記錄之間出現的競爭。

    三、聯機重作日誌成員的大小

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

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

    四、聯機重作日誌文件的數量

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

    仔細檢查LGWR跟蹤文件和數據庫報警文件的內容,若是消息代表:由於檢驗點尚未完成或者組尚未存檔的緣故,LGWR不得不頻繁得等待組,那麼就須要添加組來解決問題。

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

    五、控制存檔延遲

    在數據庫中使用聯機重作日誌歸檔,而後將歸檔日誌放到備用數據庫,經過查詢日誌來進行和數據庫中一樣的操做。這兩個操做之間存在一個時間間隔,就叫作存檔延遲。能夠經過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之間,且不要跳躍使用,不然會耗費數據庫控制文件中的空間。

    二、建立聯機重作日誌成員

   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,首次使用時變成活動狀態。


2、重定位 & 重命名

    ① 關閉數據庫: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'


3、取消聯機重作日誌組成員

    一、取消日誌組

    要注意:
    ① 至少須要保留兩組聯機重作日誌文件
    ② 日誌組狀態爲「非活動」時才能夠取消,若是是「活動」的,則須要進行強制切換
    ③ 要確保日誌組已經存檔,能夠查看V$LOG視圖查看是否存檔

   alter database drop logfile group 3;

    在執行DROP以後要在操做系統中刪除磁盤文件

    二、取消聯機重作日誌成員

    要注意:
    ① 能夠取消原先對稱的組中的成員,使其暫時不對稱,但最好當即調整這種情況
    ② 實例須要至少兩個有效聯機重作日誌文件,且不能取消最後一個有效成員,使用V$LOGFILE查看狀態
    ③ 和取消組同樣,須要成員爲非活動狀態,不然須要進行一次強制切換
    ④ 確保要取消的成員已經通過存檔

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

4、強制切換日誌
  
   alter system swith logfile;


5、校驗重作日誌文件中的塊

    設置DB_BLOCK_CHECKSUM初始化參數爲TRUE,則對全部寫到磁盤上的Oracle數據塊進行校驗,包括重作很多天志塊。
    DB_BLOCK_CHECKSUM參數的默認值是FLASE

    <具體原理未知>

    注:容許校驗會對系統產生額外的開銷,而且下降數據庫性能。須要監視數據庫性能以判斷校驗的代價是否太重。


6、清除聯機重作日誌文件

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

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

    注:若清除的日誌能夠將脫機表空間變成聯機狀態,則須要在語句中加上UNRECOVERABLE DATAFILE子句。
        由於清除該日誌後不再能把脫機表空間變成聯機狀態,因此不得不撤銷表空間或執行未完成的恢復過程。


7、查看聯機重作日誌信息

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

數據文件

1、DataFile管理準則

    一、初始參數DB_FILES

    DB_FILES指出了數據文件信息保留的SGA空間數量,因此也指出了能夠爲該實例建立的數據文件的最大編號。
    注:更改DB_FILES值須要重啓實例後纔可生效。

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

    二、添加DataFile到表空間

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

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

    三、考慮性能的影響

    四、肯定數據文件的大小

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

    五、適當放置數據文件

    數據文件所有放在一個磁盤驅動器可能會引發競爭,有條件能夠分開存放。

    六、與重作日誌文件分開存儲

    數據文件與重作日誌文件存放在一個磁盤容易形成所有數據丟失,儘可能分開存放。或保存多個重作日誌文件。


2、建立和添加DataFile

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

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


3、改變DataFile大小

    一、啓用/禁用數據文件的自動盤區

    自動盤區指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;


    二、手動調整DataFile

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


4、修改數據文件可用性

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

    ① alter database 語句修改單獨的DataFile
    ② alter tablespace 語句修改全部的DataFile

    一、在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

    二、在NOARCHIVELOG模式下使DataFile脫機

    因爲在NOARCHIVELOG模式下,數據文件脫機後會形成數據的遺失,因此只能使用ALTER DATABASE語句下帶有DATAFILE和OFFLINE DROP子句的選項將該DataFile直接取消,例如該DataFile只包含臨時段數據,並無備份時

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

    三、修改TableSpace中全部DataFile或TempFile的可用性

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

    注:修改某TableSpace中的全部數據文件,可是TableSpace自己的狀態不改變。

    總結:

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

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

1、DataFile的重命名和重定位     一、單個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';     ④ 備份數據庫     注:重定位的操做基本上與重命名相同,即在改變名稱的基礎上也經過操做系統改變了位置。     二、多個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';     ④ 備份數據庫 2、驗證DataFile中的數據塊     若是須要配置Oracle來校驗數據塊,則須要將DB_BLOCK_CHECHSUM參數項設置爲TRUE     注:DB_BLOCK_CHECHSUM的默認值是FALSE,但能夠動態改變。     工做過程: 當啓用塊校驗時,Oracle爲每一個寫到磁盤的塊計算校驗和,包括臨時塊。DBWn爲每一個塊計算校驗和後,將其存儲在塊的頭部,下一次Oracle讀一個數據塊時,使用它來校驗和檢測塊中的訛誤,如有錯誤則返回ORA-01578,並將錯誤信息寫入跟蹤文件 3、查看數據文件信息     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

相關文章
相關標籤/搜索