標籤:根據 環境 undo 副本 約束 不同的 tab 使用 包含
DB_CREATE_FILE_DEST
參數DB_CREATE_FILE_DEST用來指定重要資料庫檔案的位置,資料庫檔案包括:資料檔案、臨時檔案、重做記錄檔、控制檔案、塊變化追蹤檔案。
例:
DB_CREATE_FILE_DEST = ‘/u01/app/oracle/oradata‘ --指定資料檔案的預設存放位置
DB_RECOVERY_FILE_DEST
參數DB_RECOVERY_FILE_DEST 和 參數DB_RECOVERY_FILE_DEST_SIZE用來指定快速恢複區的預設位置,快速恢複區包括以下檔案:
一個或多個重做記錄檔、一個或多個控制檔案、RMAN備份檔案(資料檔案副本、控制檔案副本等)、歸檔日誌、閃回日誌。
例:
DB_RECOVERY_FILE_DEST = ‘/u01/app/oracle/fast_recovery_area‘
DB_RECOVERY_FILE_DEST_SIZE = 20G
DB_CREATE_ONLINE_LOG_DEST_n
參數DB_CREATE_ONLINE_LOG_DEST_n用來指定重做日誌和控制檔案的預設位置,可以指定一個目錄或者ASM磁碟組,參數最後的n表示參數可以重複設定多個,但最多不能超過五個。
對於控制檔案和重做記錄檔按,這個參數設定的值會被DB_CREATE_FILE_DEST 和DB_RECOVERY_FILE_DEST參數設定的值覆蓋,但如果 DB_CREATE_FILE_DEST沒被設定只設定了DB_CREATE_ONLINE_LOG_DEST_n參數,那麼只有重做記錄檔和控制檔案能通過OCF(ORACLE Managed Files)建立。
Oracle建議設定至少兩個位置,因為這大大提高了容錯能力,例:
DB_CREATE_ONLINE_LOG_DEST_1 = ‘/u02/oradata‘
DB_CREATE_ONLINE_LOG_DEST_2 = ‘/u03/oradata‘
檔案會被建立為OCF(Oracle Managed Files)的情況
當你設定了相應參數,而有沒有明確給出檔案的相關資訊時,檔案會被建立成為OCF:
*在初始化參數檔案中設定了參數DB_CREATE_FILE_DEST,
DB_RECOVERY_FILE_DEST,或者 DB_CREATE_ONLINE_LOG_DEST_n
*用命令ALTER SYSTEM動態設定參數DB_RECOVERY_FILE_DEST, DB_CREATE_FILE_DEST,或DB_CREATE_ONLINE_LOG_DEST_n
*用命令ALTER SESSION動態設定參數DB_RECOVERY_FILE_DEST, DB_CREATE_FILE_DEST,或DB_CREATE_ONLINE_LOG_DEST_n
如果建立OCF資料檔案SQL語句發現錯誤或者是因為某些原因執行失敗,那麼所建立的資料檔案會被當作是失敗或錯誤恢複而自動刪除,某些情況下還須手動刪除。
Oracle託管檔案(OCF)的命名
Oracle託管檔案的命名規則遵循OFA(Optimal Flexible Architecture)標準,被指定的檔案名稱應滿足以下要求:
*資料庫檔案都很容易跟其他檔案區分開來;
*不同的檔案類型的檔案名稱應明確包含相關重要的屬性,例如一個資料檔案的名字應該包含跟它相關聯的資料表空間的名字,一個歸檔記錄檔包含線程、隊列及建立日期等資訊。
Oracle託管檔案建立時不會給出重複的名字,檔案的命名規則由以下構成:
*檔案建立的預設位置
*一個檔案的命名模板是基於檔案的類型和作業系統的類型以及是否使用Oracle自動儲存管理
*是一個唯一的字串——確保檔案的建立不會損壞現有的檔案
命名規則:
destination_prefix/o1_mf_%t_%u_.dbf
destination_prefix 指的是destination_location/db_unique_name/datafile;
destination_location 就是參數DB_CREATE_FILE_DEST指定的目錄;
db_unique_name 就是唯一的目標資料庫的名字(通過參數DB_UNIQUE_NAME設定,如果DB_UNIQUE_NAME參數沒有設定,那麼就會使用初始化參數DB_NAME的值);
%t 指的是資料表空間的名字;
%u 是保證唯一性的有八個字元的字串;
例:
假設參數設定成以下值
DB_CREATE_FILE_DEST = /u01/app/oracle/oradata
DB_UNIQUE_NAME = PAYROLL
那麼,資料檔案的名字就如下
/u01/app/oracle/oradata/PAYROLL/datafile/o1_mf_tbs1_2ixh90q_.dbf
需要注意的是,千萬不要去重新命名這些Oracle託管檔案(OCF),資料庫跟據它的名字來識別它是否是Oracle管理檔案;如果你重新命名了的話,資料庫將不再將其識別為和當作Oracle託管檔案(OCF)。
用Oracle託管檔案的方式建立資料庫
CREATE DATABASE語句產生相關Oracle託管檔案。
*指定控制檔案
在設定檔裡設定初始化參數CONTROL_FILES ,即可建立相應控制檔案按;
*指定重做記錄檔
參數LOGFILE在CREATE DATABASE 語句中會被忽略,因為在建立Oracle託管重做記錄檔時這個參數會被忽略。
*指定SYSTEM 和 SYSAUX資料表空間資料檔案
在CREATE DATABASE 語句中DATAFILE和SYSAUX DATAFILE參數並不需要設定,因為在建立system 和sysaux 的Oracle託管資料表空間資料檔案時會被忽略。
*指定undo資料表空間的資料檔案
參數UNDO TABLESPACE的子參數DATAFILE是可選的,它的檔案名稱並不需要指定。
控制檔案
在資料庫建立的過程中,控制檔案是根據CONTROL_FILES參數的設定而建立的,如果參數CONTROL_FILES沒有設定並且設定了至少一個Oracle託管檔案建立所需的初始化參數,Oracle託管控制檔案在預設位置建立,而這個預設位置則是根據初始化參數的設定情況而定的,如下:
1.設定了一個或多個DB_CREATE_ONLINE_LOG_DEST_n初始化參數,第一個目錄是主要控制檔案的位置,而參數 DB_CREATE_FILE_DEST 和 DB_RECOVERY_FILE_DEST則會被忽略(如果有設定);
2.如果只設定了 DB_CREATE_FILE_DEST,資料庫將會在該目錄下建立一個控制檔案;
3.同樣,如果只設定了參數DB_RECOVERY_FILE_DEST,資料庫就會在該目錄下建立一個控制檔案;
如果 CONTROL_FILES和Oracle託管檔案建立所需的初始化參數都沒有設定,那麼控制檔案的預設位置將取決於作業系統依賴。所有以這種形式建立的控制檔案都不是Oracle託管檔案,你必須在初始化參數檔案中添加CONTROL_FILES這個參數。
所以如果想資料庫建立Oracle託管控制檔案,若有spfile,就往spfile裡添加CONTROL_FILES參數;若沒有spfile,那麼你必須手動往txt格式的pfile檔案添加CONTROL_FILES參數。
重做記錄檔
重做日誌的預設位置是由以下參數的設定情況而定的
1.如果設定了一個或多個DB_CREATE_ONLINE_LOG_DEST_n參數,資料庫將會在各個參數所指定的目錄都建立一個記錄檔,不過記錄檔的個數受參數MAXLOGMEMBERS所設定的值約束。
2.如果除參數. DB_CREATE_ONLINE_LOG_DEST 之外,參數 DB_CREATE_FILE_DEST 和 DB_RECOVERY_FILE_DEST 都設定了,那麼資料庫將會在每個參數所制定的目錄建立一個Oracle託管檔案成員,參數 DB_CREATE_FILE_DEST所設定的位置的記錄檔為第一個成員。
3.如果只設定了 DB_CREATE_FILE_DEST 參數或者只設定了 DB_RECOVERY_FILE_DEST參數資料庫都會在相應的目錄建立一個記錄檔。
預設的Oracle託管記錄檔的大小是100M。如果所有的Oracle託管檔案建立初始化參數和LOGFILE都沒有設定,那麼CREATE DATABASE這個語句將會執行失敗。
SYSTEM和SYSAUX資料表空間的資料檔案
在建立system 和sysaux 的Oracle託管資料表空間資料檔案時參數 DATAFILE 和 SYSAUX DATAFILE 會被忽略,而資料檔案的位置有以下情況:
1.只設定了DB_CREATE_FILE_DEST參數,其他Oracle託管檔案建立初始化參數都沒設定,那麼表空將將會給SYSTEM資料表空間和 SYSAUX資料表空間在參數指定的位置各建立一個資料檔案;
2.如果DB_CREATE_FILE_DEST參數沒有設定,那麼SYSTEM資料表空間和 SYSAUX資料表空間的資料檔案的名字和大小將有作業系統依賴決定,以這種方式建立的資料檔案不再是Oracle託管檔案;
通常情況下,SYSTEM和SYSAUX的資料表空間Oracle託管檔案的大小為100M並且是可擴充的,每次擴張的大小為100M或者是其自身大小,你也可以通過ALTER TABLESPACE來更改其每次擴張的大小。
如果是建立Oracle託管檔案,那麼DATAFILE參數將會被覆蓋;如果所有的參數都沒有設定,那麼CREATE DATABASE執行將會失敗。當預設參數被Oracle託管檔案覆蓋時,設定了SIZE參數而並沒有設定AUTOEXTEND參數,那麼資料檔案將不能自動擴張。
UNDO資料表空間的資料檔案
參數UNDO TABLESPACE的子參數DATAFILE是可選的,檔案名稱也不需要指定。當 設定了DB_CREATE_FILE_DEST參數而沒有給出資料檔案的檔案名稱時,Oracle託管檔案將會在參數指定目錄建立;如果資料檔案名沒給出 DB_CREATE_FILE_DEST參數也沒有設定,CREATE DATABASE語句將會提示說有語法錯誤。
資料檔案的位置:
1.設定了DB_CREATE_FILE_DEST參數,資料檔案將會在參數指定位置闖將;
2.沒設定DB_CREATE_FILE_DEST參數,資料檔案的位置將會由作業系統來決定。
預設資料表空間的臨時檔案
參數DEFAULT TEMPORARY TABLESPACE的子參數TEMPFILE是可選的,檔案名稱也不需要指定。如果檔案名稱沒指定但參數DB_CREATE_FILE_DEST 設定了,資料庫將會在參數指定的目錄建立Oracle託管臨時檔案;如果參數DB_CREATE_FILE_DEST 沒有設定,CREATE DATABASE將會執行失敗並提示法錯誤。
DEFAULT TEMPORARY TABLESPACE參數是可選的如果沒有給出,那麼預設暫存資料表空間就不會被建立。Oracle託管臨時檔案預設是100M,以及是可以無線擴張的。
例:
Example 1
以下例子是以Oracle託管檔案的方式建立資料庫及其資料檔案,假設如下
*SYSTEM資料表空間資料檔案在目錄/u01/app/oracle/oradata下,並且是可以無限擴張的;
*SYSAUX資料表空間資料檔案在 /u01/app/oracle/oradata目錄,並且是可以無限擴張的,資料表空間是本地自動段管理的;
*有兩個線上的記錄檔組分別在目錄/u02/oradata和/u03/oradata下,每個群組成員的檔案大小都是100M;
*如果啟用了自動udno管理員模式(預設),undo資料表空間的資料檔案將會在 /u01/app/oracle/oradata目錄下建立,檔案的大小是20M並且是可以無限擴張的,undo資料表空間的名字是SYS_UNDOTS;
*如果初始化參數CONTROL_FILES沒有設定,那麼資料庫將會分別在/u02/oradata和/u03/oradata建立一個控制檔案,其中/u02/oradata下的是主控制檔案;
要滿足以上要求,那麼就需要在初始化參數檔案中設定以下參數:
DB_CREATE_FILE_DEST = ‘/u01/app/oracle/oradata‘
DB_CREATE_ONLINE_LOG_DEST_1 = ‘/u02/oradata‘
DB_CREATE_ONLINE_LOG_DEST_2 = ‘/u03/oradata‘
填寫完之後,執行以下語句即可:
CREATE DATABASE sample;
如果想要把資料庫的SYSTEM資料表空間建立成本地管理資料表空間,只需在建立語句後添加參數EXTENT MANAGEMENT LOCAL即可;如果沒有這個參數,資料表空間將會是目錄管理的,Oracle官方推薦建立本地管理的SYSTEM資料表空間
CREATE DATABASE sample EXTENT MANAGEMENT LOCAL;
Example 2
以下例子也是以Oracle託管檔案的方式建立資料庫及其資料檔案,假設如下
*SYSTEM資料表空間的資料檔案是在目錄/u01/app/oracle/oradata 下,並且是可以無線擴張的;
*SYSAUX資料表空間資料檔案在目錄/u01/app/oracle/oradata下,並且是可以無限擴張的以及是自動斷空間管理的;
*兩個100M的重做記錄檔在目錄/u01/app/oracle/oradata下,並且是不可複用的;
*一個名字和大小分別為SYS_UNDOTS和20M的UNDO資料表空間資料檔案在目錄/u01/app/oracle/oradata下,並且是可無限擴張的;
*控制檔案在目錄/u01/app/oracle/oradata下;
在這個例子中,還假設以下情況:
*初始化參數檔案中沒有設定DB_CREATE_ONLINE_LOG_DEST_n參數;
*初始化參數檔案中沒有設定CONTROL_FILES參數;
*UNDO自動管理員模式已開啟;
接下來執行以下語句
ALTER SYSTEM SET DB_CREATE_FILE_DEST = ‘/u01/app/oracle/oradata‘;
CREATE DATABASE sample2 EXTENT MANAGEMENT LOCAL;
需要說明的是,以上配置並不是一個生產環境下的資料庫配置的例子,只供講解或測試用;建立一個生產環境下的資料庫你至少需要建立兩個控制檔案,以及重做記錄檔是可複用的。
Example 3
在這個例子中,Oracle託管預設暫存資料表空間資料檔案和UNDO資料表空間資料檔案的大小都是已經給定的,有以下假設:
*一個400M的SYSTEM資料表空間資料檔案在目錄/u01/app/oracle/oradata下(因為已經指定了大小,所有資料檔案是不可擴張的);
*一個200M的SYSAUX資料表空間資料檔案在目錄/u01/app/oracle/oradata下(因為已經指定了大小,所有資料檔案是不可擴張的),資料表空間是自動斷空間管理的;
*兩個重做記錄檔組分別在目錄/u02/oradata和/u03/oradata,並且每個組裡的成員檔案都是100M;
*預設暫存資料表空間dflt_ts的臨時檔案在目錄/u01/app/oracle/oradata下,大小為10M,並且是不可擴張的;
*大小為100M的UNDO資料表空間undo_ts在目錄 /u01/app/oracle/oradata下,並且是不可擴張的;
*如果CONTROL_FILES初始化參數沒有設定,兩個控制檔案將分別會在目錄/u02/oradata和/u03/oradata建立,其中/u02/oradata下的是主要控制檔案;
接下來,在初始化參數檔案中設定添加以下參數:
DB_CREATE_FILE_DEST = ‘/u01/app/oracle/oradata‘
DB_CREATE_ONLINE_LOG_DEST_1 = ‘/u02/oradata‘
DB_CREATE_ONLINE_LOG_DEST_2 = ‘/u03/oradata‘
然後,再執行以下SQL語句:
CREATE DATABASE sample3
EXTENT MANAGEMENT LOCAL
DATAFILE SIZE 400M
SYSAUX DATAFILE SIZE 200M
DEFAULT TEMPORARY TABLESPACE dflt_ts TEMPFILE SIZE 10M
UNDO TABLESPACE undo_ts DATAFILE SIZE 100M;
資料庫資料檔案管理