從引數取值看Oracle OMF特性
Oracle 10g以後,在目錄結構和檔案管理方面推出兩個特性OFA和OMF。OFA(Oracle Flexiable Architecture)是進行目錄結構約束規範的特性。診斷檔案diag、日誌、資料檔案等目錄結構分佈都是由OFA進行固定下來。OMF(Oracle Managed File)是針對檔案結構,將原來使用者負責檔案命名和位置轉變為Oracle負責管理。
OMF涉及的專案主要是資料檔案和日誌檔案。我們在進行檔案管理的過程中,比如新增、刪除操作,是不需要關注檔名稱位置細節的。簡單的說,OMF解決了三個問題:
ü 檔案存放位置。OMF和OFA是聯動的。從Oracle角度看,符合最佳實踐的檔案部署結構是成功資料庫安裝配置的要點。進入ASM之後,Oracle自身就有很強烈的“管理慾望”。藉助OMF,預設配置路徑就可以滿足大部分需要;
ü 檔案命名和建立。傳統檔案管理中,我們需要顯式的進行檔名稱指定(包含路徑)。藉助OMF,我們從這個工作中解放出來,只需要指定檔案大小(甚至不指定),建立操作就可以實現;
ü 檔案自動刪除。我們傳統資料檔案建立之後,直接刪除表空間drop tablespace xxx,是不能將資料檔案刪除的,除非我們使用including子句。藉助OMF,drop tablespace就可以將資料檔案自動刪除;
在OMF中,兩個引數起到決定作用,為db_create_file_dest和db_create_online_log_dest_n。這兩個引數在控制OMF行為中起到決定性作用。下面我們透過一系列的引數實驗,驗證兩個引數如何影響資料庫行為。
1、環境介紹
我們依然選擇Oracle 11gR2進行試驗,具體版本為11.2.0.4。
SQL> select * from v$version;
BANNER
----------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
預設系統引數情況如下:
SQL> show parameter db_create;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string /u01/app/oradata
db_create_online_log_dest_1 string
db_create_online_log_dest_2 string
db_create_online_log_dest_3 string
db_create_online_log_dest_4 string
db_create_online_log_dest_5 string
從官方解釋看,db_create_file_dest是負責通用檔案目錄結構,包括資料檔案和日誌檔案。Db_create_online_log_dest_n是負責線上日誌目錄結構,n是online redo log單個組成員數目。N的取值和建立資料庫時候的maxlogfile確定的數目。
當前資料檔案和日誌情況如下:
SQL> select file_name, file_id, tablespace_name from dba_data_files;
FILE_NAME FILE_ID TABLESPACE_NAME
------------------------------------------------------------- ---------- ------------------------------
/u01/app/oradata/ORA11G/datafile/o1_mf_users_9mnjs074_.dbf 4 USERS
/u01/app/oradata/ORA11G/datafile/o1_mf_undotbs1_9mnjs068_.dbf 3 UNDOTBS1
/u01/app/oradata/ORA11G/datafile/o1_mf_sysaux_9mnjs04h_.dbf 2 SYSAUX
/u01/app/oradata/ORA11G/datafile/o1_mf_system_9mnjrzty_.dbf 1 SYSTEM
/u01/app/oradata/ORA11G/datafile/o1_mf_system_9ppkjccb_.dbf 5 SYSTEM
SQL> select group#, member from v$logfile;
GROUP# MEMBER
---------- --------------------------------------------------------------------
3 /u01/app/oradata/ORA11G/onlinelog/o1_mf_3_9mnjx4n0_.log
3 /u01/app/fast_recovery_area/ORA11G/onlinelog/o1_mf_3_9mnjx54c_.log
2 /u01/app/oradata/ORA11G/onlinelog/o1_mf_2_9mnjwzpq_.log
2 /u01/app/fast_recovery_area/ORA11G/onlinelog/o1_mf_2_9mnjx15f_.log
1 /u01/app/oradata/ORA11G/onlinelog/o1_mf_1_9mnjwtj9_.log
1 /u01/app/fast_recovery_area/ORA11G/onlinelog/o1_mf_1_9mnjwvdm_.log
6 rows selected
當前OMF配置情況下,/u01/app/oradata為頂層檔案結構。資料檔案採用了OMF自動命名機制。Online Redo Log三組,每組兩個成員,一個在/u01/app/oradata目錄中的OFA架構體系下,另一個是在recovery area中。
注意:引數db_create_file_dest是file_dest,而不是datafile_dest。這個引數是一個統籌性的引數,位於OMF引數體系上層。如果log沒有指定另外目錄。Db_create_file_dest是負責資料檔案和日誌檔案的。從實際情況看也的確如此。
2、預設OMF行為
下面我們可以觀察一下預設OMF配置行為。首先是直接新增資料檔案操作。
SQL> alter tablespace users add datafile size 100m autoextend off;
Tablespace altered
此時,新檔案新增上,Oracle自動給予命名。
SQL> select file_name, file_id, tablespace_name from dba_data_files;
FILE_NAME FILE_ID TABLESPACE_NAME
------------------------------------------------------------- ---------- ------------------------------
/u01/app/oradata/ORA11G/datafile/o1_mf_users_9mnjs074_.dbf 4 USERS
/u01/app/oradata/ORA11G/datafile/o1_mf_users_9pplqldd_.dbf 6 USERS
(篇幅原因,有省略……)
6 rows selected
日誌組新增,新增一個新的日誌組。
SQL> alter database add logfile group 4 size 50m;
Database altered
SQL> select group#, member from v$logfile;
GROUP# MEMBER
---------- --------------------------------------------------------------------------------
(篇幅原因,有省略……)
4 /u01/app/oradata/ORA11G/onlinelog/o1_mf_4_9pplrks5_.log
4 /u01/app/fast_recovery_area/ORA11G/onlinelog/o1_mf_4_9pplrkwh_.log
8 rows selected
在預設情況下,db_create_log_dest是沒有設定的。故採用延續的db_create_file_dest目錄。並且會在recovery area中保留一個映象備份,形成兩份member成員的結構。
3、針對db_create_file_dest實驗
下面我們嘗試將db_create_file_dest引數指向一個新的位置。
[oracle@SimpleLinux app]$ pwd
/u01/app
[oracle@SimpleLinux app]$ mkdir -p /u01/app/oradata2
修改引數db_create_file_dest引數,該引數是支援動態修改的,修改之後不需要重新啟動伺服器。
SQL> alter system set db_create_file_dest='/u01/app/oradata2';
System altered
SQL> show parameter db_create_file_dest;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string /u01/app/oradata2
建立資料檔案和日誌檔案,檢視效果。
SQL> create tablespace test datafile size 10m autoextend off extent management local uniform size 1m segment space management auto;
Tablespace created
SQL> select file_name, file_id, tablespace_name from dba_data_files;
FILE_NAME FILE_ID TABLESPACE_NAME
------------------------------------------------------------- ---------- ------------------------------
(篇幅原因,有省略……)
/u01/app/oradata2/ORA11G/datafile/o1_mf_test_9ppm1m8w_.dbf 7 TEST
7 rows selected
注意:OMF不是意味著對於OFA的背離。我們調整了引數取值之後,新檔案建立只是在新的引數位置,使用OFA結構而已。原有的大寫資料庫名稱,型別目錄並沒有改變。
線上日誌測試:
SQL> alter database drop logfile group 4;
Database altered
SQL> alter database add logfile group 4 size 50m;
Database altered
新的日誌位置:
SQL> select group#, member from v$logfile;
GROUP# MEMBER
---------- --------------------------------------------------------------------------------
(篇幅原因,有省略……)
4 /u01/app/oradata2/ORA11G/onlinelog/o1_mf_4_9ppm2y0x_.log
4 /u01/app/fast_recovery_area/ORA11G/onlinelog/o1_mf_4_9ppm2y3s_.log
8 rows selected
當更換db_create_file_dest之後,新的日誌建立依然為兩份,在新目錄中一份,在recovery area中一份。
如果我們清空這個引數,將db_create引數都是空的話,是什麼現象?
SQL> alter system set db_create_file_dest='';
System altered
SQL> show parameter db_create;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string
db_create_online_log_dest_1 string
此時,我們測試建立資料檔案和線上日誌。
SQL> alter tablespace test add datafile size 10m autoextend off;
alter tablespace test add datafile size 10m autoextend off
ORA-02236: 檔名無效
SQL> alter database drop logfile group 4;
Database altered
SQL> alter database add logfile group 4 size 50m;
Database altered
資料檔案建立失效,但是online redo log建立成功。
SQL> select group#, member from v$logfile;
GROUP# MEMBER
---------- --------------------------------------------------------------------------------
4 /u01/app/fast_recovery_area/ORA11G/onlinelog/o1_mf_4_9ppmd9f8_.log
7 rows selected
注意:兩遍都清空的時候。資料檔案OMF被關閉,但是online redo log建立還會在recovery area中有涉及動作。有一點需要想到,recovery area的配置是和另一個引數db_recovery_area_dest相關的,如果這個引數同時設定為空,那麼還能成功嗎?
SQL> alter system set db_create_file_dest='';
System altered
SQL> alter database add logfile group 5;
alter database add logfile group 5
ORA-02236: 檔名無效
上面實驗說明了,在不配置db_create_log_dest_n系列引數情況下,db_create_file_dest負責了資料檔案、線上日誌的目錄結構。同時,如果recovery area配置有效,online redo log都會維持在recovery area中有一個成員映象檔案。
4、針對db_create_log_dest_n實驗
下面我們恢復現場,進行對db_create_log_dest的引數測試。同時恢復recovery_area_dest配置。
SQL> show parameter db_create;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string /u01/app/oradata
db_create_online_log_dest_1 string
db_create_online_log_dest_2 string
我們首先建立目錄。
[oracle@SimpleLinux app]$ mkdir -p /u01/app/oradata/ORA11GY/onlinelog
[oracle@SimpleLinux app]$ mkdir -p /u01/app/oradata/onlinelog
配置一個db_create_log引數。
SQL> alter system set db_create_online_log_dest_1='/u01/app/oradata/ORA11GY/onlinelog';
System altered
SQL> show parameter db_create;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string /u01/app/oradata
db_create_online_log_dest_1 string /u01/app/oradata/ORA11GY/onlinelog
db_create_online_log_dest_2 string
db_create_online_log_dest_3 string
db_create_online_log_dest_4 string
db_create_online_log_dest_5 string
此時建立日誌組:
SQL> alter database add logfile group 4 size 50m;
Database altered
SQL> select group#, member from v$logfile;
GROUP# MEMBER
---------- --------------------------------------------------------------------------------
(篇幅原因,有省略……)
4 /u01/app/oradata/ORA11GY/onlinelog/ORA11G/onlinelog/o1_mf_4_9ppmwmk6_.log
7 rows selected
我們看到了不同,雖然db_create_file引數設定為/u01/app/oradata,但是作為個性化的配置,新日誌組成員還是使用了db_create_log_dest_1作為基準目錄。同時在這個基準目錄上進行OFA結構設定。另一個不同點是:當前recovery area中自動映象消失了,沒有自動建立!
再新增一個新的目錄位置,檢視效果。
SQL> alter system set db_create_online_log_dest_2='/u01/app/oradata/onlinelog';
System altered
SQL> show parameter db_create;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string /u01/app/oradata
db_create_online_log_dest_1 string /u01/app/oradata/ORA11GY/onlinelog
db_create_online_log_dest_2 string /u01/app/oradata/onlinelog
db_create_online_log_dest_3 string
嘗試建立新的日誌組:
SQL> alter database add logfile group 5 size 50m;
Database altered
SQL> select group#, member from v$logfile;
GROUP# MEMBER
---------- --------------------------------------------------------------------------------
(篇幅原因,有省略……)
5 /u01/app/oradata/ORA11GY/onlinelog/ORA11G/onlinelog/o1_mf_5_9ppn1178_.log
5 /u01/app/oradata/onlinelog/ORA11G/onlinelog/o1_mf_5_9ppn119j_.log
9 rows selected
當設定了db_create_log_dest_n系列引數之後,原有的recovery area映象組成員不會出現了。_n設定的個數就是新日誌組中成員的數目。
5、結論
從上面實驗,我們可以看到OMF系列引數的設定規則。引數db_create_file_dest、db_create_log_dest_n和recovery area三者是相關的。
當db_create_file_dest設定,recovery area啟用,但是log_dest沒有設定的時候,資料檔案和online redo log的OMF特性是開啟的,而且在recovery area中會有自動的映象成員檔案建立。
當db_create_file_dest設定,recovery area不啟用,log_dest也沒有啟用的時候,資料檔案和日誌的OMF開啟,但是不會再recovery area中建立自動成員。
一旦db_create_file_dest被關閉,資料檔案的OMF特性關閉。如果同時recovery area和log_dest也沒有設定,日誌檔案OMF特性失效。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-1426779/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【OMF】使用Oracle的OMF 特性Oracle
- Oracle OMF特性試驗Oracle
- 【引數】REMOTE_LOGIN_PASSWORDFILE引數三種取值及其行為特性分析REM
- 從OMF和備份角度看ASM的優點ASM
- PHP字串offset取值特性PHP字串
- oracle OMF的使用Oracle
- OMF (Oracle Managed File)Oracle
- Oracle OMF 為雞肋Oracle
- 從 流行linux發行版 看 發行版引數Linux
- python使用引數對巢狀字典進行取值Python巢狀
- 10g中的optimizer_mode引數的取值
- oracle實驗記錄 (OMF)Oracle
- Oracle引數-隱藏引數Oracle
- 全面學習ORACLE Scheduler特性(6)設定Repeat Interval引數Oracle
- Oracle 11g 鎖特性增加(引數ddl_lock_time)Oracle
- oracle 引數Oracle
- Oracle 12c新特性:IN-Memory Option - 快取與引數Oracle快取
- Oracle引數檔案解析——引數解析Oracle
- [Oracle]常用日期取值方法Oracle
- Oracle 核心引數Oracle
- Oracle UNDO引數Oracle
- Oracle引數大全Oracle
- oracle引數配置Oracle
- oracle 效能引數Oracle
- ORACLE核心引數Oracle
- oracle引數整理Oracle
- Oracle 12C新特性-資料泵新引數(LOGTIME)Oracle
- Oracle 12C新特性-資料泵新引數(VIEWS_AS_TABLES)OracleView
- Oracle引數檔案 各引數解釋Oracle
- 從記憶體管理策略看Rust獨特性 - Khorchanov記憶體Rust
- Oracle:PDB 引數管理Oracle
- Oracle rman 配置引數Oracle
- Oracle 引數檔案Oracle
- ORACLE 配置event引數Oracle
- Oracle檢視引數Oracle
- Oracle隱式引數Oracle
- Oracle 隱含引數Oracle
- ORACLE隱含引數Oracle