??? OMF , 全稱是 Oracle_Managed Files , 即 Oracle 文件管理,使用 OMF 可以簡化管理員的管理工作,不用指定文件的名字、大小、路徑,其名字,大小,
路徑由 oracle 自動分配。在刪除不再使用的日志、數據、控制文件時, OMF 也可以自動刪除其對應的 OS 文件。
?
OMF 支持下列文件的自動管理:
??? 表空間
??? 日志文件 ( 聯機 )
??? 控制文件
前提條件:需要為這些類型文件設定相關參數。
?
一 . 數據文件的 OMF 管理
? 數據文件管理參數: db_create_file_dest
? db_create_file_dest : Oracle 創建數據文件、臨時文件時,在未明確指定路徑的情況下的缺省路徑,當 db_create_online_log_dest_n 未指定時,
?????????????????????? 也作為聯機日志文件和控制文件的缺省路徑。
?
? 假定需要創建表空間 s 及數據文件
?
??? SQL > CREATE TABLESPACE s ; ? /* 收到了錯誤信息 */
?????? create tablespace s
???????????????????? ? *
?????? ERROR at line 1 :
?????? ORA - 02199 : missing DATAFILE / TEMPFILE clause
?
??? SQL > show parameter db_create_file ?? /* 查看 db_create_file_dest 參數 */
?
?????? NAME ???????????????????????????????? TYPE ??????? VALUE
?????? ------------------------------------ ----------- ------------------------------
?????? db_create_file_dest ????????????????? string
?
??? -- 設定 db_create_file_dest 參數
??? SQL > ALTER SYSTEM SET db_create_file_dest = '/u01/app/oracle/oradata/orcl' ;
?
?????? System altered .
?
??? -- 設定參數后,創建成功
??? SQL > CREATE TABLESPACE s ; ?
?
?????? Tablespace created .
?
??? SQL > SELECT NAME FROM v$datafile ; ? /* 可以看到 ORCL/datafile/o1_mf_s_5vrl1t7h_.dbf 是 Oralce 自動創建的數據文件 */
?
?????? NAME
?????? --------------------------------------------------------------------------------
?????? / u01 / app / oracle / oradata / orcl / system01 . dbf
?????? / u01 / app / oracle / oradata / orcl / undotbs01 . dbf
?????? / u01 / app / oracle / oradata / orcl / sysaux01 . dbf
?????? / u01 / app / oracle / oradata / orcl / users01 . dbf
?????? / u01 / app / oracle / oradata / orcl / example01 . dbf
?????? / u01 / app / oracle / oradata / orcl / Test . dbf
?????? / u01 / app / oracle / oradata / orcl / ORCL / datafile / o1_mf_s_5vrl1t7h_ . dbf
?
??? /* 查看物理文件,缺省為 MB*/
??? SQL > ho ls - lh / u01 / app / oracle / oradata / orcl / ORCL / datafile / o1_mf_s_5vrl1t7h_ . dbf ?
?????? - rw ------- 1 oracle oinstall 101M Apr ? 7 16:54 /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_s_5vrl1t7h_.dbf
?
??? SQL > CREATE TABLESPACE t DATAFILE SIZE 10m ; ? /* 也可指定數據文件的大小為 MB*/
?
?????? Tablespace created .
?
??? SQL > SELECT NAME FROM v$datafile ;
?
?????? NAME
?????? --------------------------------------------------------------------------------
?????? / u01 / app / oracle / oradata / orcl / system01 . dbf
?????? / u01 / app / oracle / oradata / orcl / undotbs01 . dbf
?????? / u01 / app / oracle / oradata / orcl / sysaux01 . dbf
?????? / u01 / app / oracle / oradata / orcl / users01 . dbf
?????? / u01 / app / oracle / oradata / orcl / example01 . dbf
?????? / u01 / app / oracle / oradata / orcl / Test . dbf
?????? / u01 / app / oracle / oradata / orcl / ORCL / datafile / o1_mf_s_5vrl1t7h_ . dbf
?????? / u01 / app / oracle / oradata / orcl / ORCL / datafile / o1_mf_t_5vrlgqtl_ . dbf
?
??? SQL > ho ls - lh / u01 / app / oracle / oradata / orcl / ORCL / datafile / o1_mf_t_5vrlgqtl_ . dbf
?????? - rw ------- 1 oracle oinstall 11M Apr ? 7 17:01 /u01/app/oracle/oradata/orcl/ORCL/datafile/o1_mf_t_5vrlgqtl_.dbf
?
??? -- 刪除表空間時,對于使用了 OMF 生成的數據文件將隨著表空間的刪除一起被刪除
??? SQL > DROP TABLESPACE t ;
?
??? Tablespace dropped .
?
??? -- 查看物理文件,已經不存在
??? SQL > ho ls - lh / u01 / app / oracle / oradata / orcl / ORCL / datafile / o1_mf_t_5vrlgqtl_ . dbf ?
?????? ls : / u01 / app / oracle / oradata / orcl / ORCL / datafile / o1_mf_t_5vrlgqtl_ . dbf : No such file or directory
?
??? -- 對于未采用 OMF 來創建的表空間,在刪除表空間之后,其數據文件并沒有刪除, v$datafile 視圖中被刪除
??? -- 下面是未使用 OMF 創建的 x 表空間及數據文件
??? SQL > CREATE TABLESPACE x DATAFILE '/u01/app/oracle/oradata/orcl/x.dbf' SIZE 10m ;
?
?????? Tablespace created .
?
??? SQL > SELECT NAME FROM v$datafile ; ?????
?
?????? NAME
?????? --------------------------------------------------------------------------------
?????? / u01 / app / oracle / oradata / orcl / system01 . dbf
?????? / u01 / app / oracle / oradata / orcl / undotbs01 . dbf
?????? / u01 / app / oracle / oradata / orcl / sysaux01 . dbf
?????? / u01 / app / oracle / oradata / orcl / users01 . dbf
?????? / u01 / app / oracle / oradata / orcl / example01 . dbf
?????? / u01 / app / oracle / oradata / orcl / Test . dbf
?????? / u01 / app / oracle / oradata / orcl / ORCL / datafile / o1_mf_s_5vrl1t7h_ . dbf
?????? / u01 / app / oracle / oradata / orcl / x . dbf
?
??? SQL > DROP TABLESPACE x ;
?
?????? Tablespace dropped .
?
??? SQL > SELECT NAME FROM v$datafile ; /* 視圖中已不存在 x.dbf 的數據文件 */
?
?????? NAME
?????? --------------------------------------------------------------------------------
?????? / u01 / app / oracle / oradata / orcl / system01 . dbf
?????? / u01 / app / oracle / oradata / orcl / undotbs01 . dbf
?????? / u01 / app / oracle / oradata / orcl / sysaux01 . dbf
?????? / u01 / app / oracle / oradata / orcl / users01 . dbf
?????? / u01 / app / oracle / oradata / orcl / example01 . dbf
?????? / u01 / app / oracle / oradata / orcl / Test . dbf
?????? / u01 / app / oracle / oradata / orcl / ORCL / datafile / o1_mf_s_5vrl1t7h_ . dbf
?
??? SQL > ho ls / u01 / app / oracle / oradata / orcl / x . dbf ?? /* 操作系統中依然存在 */
?????? / u01 / app / oracle / oradata / orcl / x . dbf
?
??? -- 注意:使用 OMF 的時候會將物理文件刪除,應特別注意使用
??? -- 使用下面的方法重建 x 表空間,然后使用 including contents and datafiles 徹底刪除表空間及物理文件
??? SQL > CREATE TABLESPACE X DATAFILE '/u01/app/oracle/oradata/orcl/x.dbf' REUSE ; ??
?
?????? Tablespace created .
?
??? SQL > DROP TABLESPACE x INCLUDING CONTENTS AND DATAFILES ;
?
?????? Tablespace dropped .
?
??? SQL > ho ls / u01 / app / oracle / oradata / orcl / x . dbf
?????? ls : / u01 / app / oracle / oradata / orcl / x . dbf : No such file or directory
?
總結:使用 OMF 管理文件的方法
? 1. 使用 ALTER SYSTEM SET db_create_file_dest = '<path>' 設置路徑
? 2. 查看剛剛的設置 SHOW PARAMETER db_create_file_dest ;
? 3. 創建表空間及數據文件 CREATE TABLESPACE tablespace_name
? 4. 單獨創建表空間 CREATE TABLESPACE <> DATAFILE '<path>' SIZE <>;
? 5. 也可以創建 undo 和 temporary tablespace 。 CREATE UNDO TABLESPACE tablespace_name ; CREATE TEMPORARY TABLESPACE tablespace_name ;
? 6. 刪除表空間 DROP TABLESPACE tablespace_name ; OMF 情況下則刪除物理文件,等效于未使用 OMF 創建,使用 INCLUDING CONTENTS AND DATAFILES 刪除方式
?
?
二 . 日志文件的 OMF 管理
? 日志文件管理參數: db_create_online_log_dest_n
? db_create_online_log_dest_n : Oracle 創建聯機日志文件和控制文件時,在未明確指定路徑的情況下的缺省路徑
?
-- 查看日志文件的參數,下面是未作設置的 db_create_online 參數
??? SQL > SHOW PARAMETER db_create_online
?
?????? NAME ???????????????????????????????? TYPE ??????? VALUE
?????? ------------------------------------ ----------- ------------------------------
?????? 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
?
??? -- 從上面可以看出系統預留了一個日志組個成員來形成 OMF ,一般情況下我們僅僅需要個成員即可。因為在此設定個參數文件
??? -- 下面是未設定的情況下創建日志文件,則默認為在數據文件路徑及閃回區各放一個文件,因為上述兩個路徑都是 OMF 路徑,如下:
?
??? SQL > SELECT MEMBER FROM v$logfile ;
?
?????? MEMBER
?????? --------------------------------------------------------------------------------
?????? / u01 / app / oracle / oradata / orcl / redo03 . log
?????? / u01 / app / oracle / oradata / orcl / redo02 . log
?????? / u01 / app / oracle / oradata / orcl / redo01 . log
?????? / u01 / app / oracle / oradata / orcl / ORCL / onlinelog / o1_mf_4_5vtgzjyz_ . log
?????? / u01 / app / oracle / flash_recovery_area / ORCL / onlinelog / o1_mf_4_5vtgzlhb_ . log
?
??? SQL > SHOW PARAMETER db_create_file_dest
?
?????? NAME ??????? ????????????????????????? TYPE ??????? VALUE
?????? ------------------------------------ ----------- ------------------------------
?????? db_create_file_dest ????????????????? string ????? / u01 / app / oracle / oradata / orcl
?
?????? SQL > show parameter db_recovery_file_dest
?
?????? NAME ???????????????????????????????? TYPE ??????? VALUE
?????? ------------------------------------ ----------- ------------------------------
?????? db_recovery_file_dest ??????????????? string ????? / u01 / app / oracle / flash_recovery
???????????????????????????????????????????????? ? _area
?????? db_recovery_file_dest_size ?????????? big integer 2G
?
??? -- 將日志文件存放到指定的 disk1,disk2 下面
??? SQL > ho mkdir / u01 / app / oracle / disk1
?
??? SQL > ho mkdir / u01 / app / oracle / disk2
?
??? SQL > ALTER SYSTEM SET db_create_online_log_dest_1 = '/u01/app/oracle/disk1' ;
?
?????? System altered .
?
??? SQL > ALTER SYSTEM SET db_create_online_log_dest_2 = '/u01/app/oracle/disk2' ;
?
?????? System altered .
?
??? SQL > ALTER DATABASE ADD logfile ;
?
?????? Database altered .
?
??? SQL > SELECT * FROM v$logfile ; /* 可以看到新的日志文件放到 disk1,disk2 下面 */
?
?????? GROUP# STATUS ? TYPE ??? MEMBER ?????????????????????????????????? IS_
??? ---------- ------- ------- ---------------------------------------- ---
?????????? ? 3 ???????? ONLINE ? / u01 / app / oracle / oradata / orcl / redo03 . log ? NO
?????????? ? 2 ???????? ONLINE ? / u01 / app / oracle / oradata / orcl / redo02 . log ? NO
?????????? ? 1 ???????? ONLINE ? / u01 / app / oracle / oradata / orcl / redo01 . log ? NO
?????????? ? 4 ?????? ?? ONLINE ? / u01 / app / oracle / oradata / orcl / ORCL / online NO
???????????????????????? ?? log / o1_mf_4_5vtgzjyz_ . log
?
?????????? ? 4 ???????? ONLINE ? / u01 / app / oracle / flash_recovery_area / ORCL YES
???????????????????????? ?? / onlinelog / o1_mf_4_5vtgzlhb_ . log
?
?????????? ? 5 ???????? ONLINE ? / u01 / app / oracle / disk1 / ORCL / onlinelog / o1_ NO
???????????????????????? ?? mf_5_5vtlpxo0_ . log
?
?????? GROUP# STATUS ? TYPE ??? MEMBER ?????????????????????????????????? IS_
??? ---------- ------- ------- ---------------------------------------- ---
?
?????????? ? 5 ???????? ONLINE ? / u01 / app / oracle / disk2 / ORCL / onlinelog / o1_ NO
????????????? ?????????? ?? mf_5_5vtlpz4d_ . log
?
???????????????????????? ?? SQL > alter database drop logfile group 5 ;
?
??? Database altered .
?
??? /* 刪除日志文件組 */
??? SQL > ALTER DATABASE DROP logfile GROUP 4 ;
?
?????? Database altered .
?
??? SQL > SELECT group# , member FROM v$logfile ;
?
?????? GROUP# MEMBER
??? ---------- ----------------------------------------
?????????? ? 3 / u01 / app / oracle / oradata / orcl / redo03 . log
?????????? ? 2 / u01 / app / oracle / oradata / orcl / redo02 . log
?????????? ? 1 / u01 / app / oracle / oradata / orcl / redo01 . log
?????????? ?
??? SQL > ho ls / u01 / app / oracle / disk1 / ORCL / onlinelog / o1_mf_5_5vtlpxo0_ . log ;
?????? ls : / u01 / app / oracle / disk1 / ORCL / onlinelog / o1_mf_5_5vtlpxo0_ . log : No such file or directory
?????? ?
總結:
? 1. 當定義了 db_recovery_file_dest 和 db_create_file_dest 路徑,且沒有定義 db_create_online_log_dest_n 的時候,
??? 則 OMF 將日志文件存放在 db_recovery_file_dest 和 db_create_file_dest 路徑下,而且日志組下為個成員
? ? 2. 當定義了 db_create_online_log_dest_1 則將日志文件存放到 db_create_online_log_dest_1
??? 和 db_create_file_dest 路徑下,且日志組下為個成員
? 3. 當定義了 db_create_online_log_dest_1 和 db_create_online_log_dest_2 則存放到
??? db_create_online_log_dest_1 和 db_create_online_log_dest_2 下
? 4. 當定義了多個 db_create_online_log_dest_n ,則為每個組 n 個日志成員,且多路復用
? 5. 增加日志文件的方法 ;
??? alter database add logfile ;
??? alter database add logfile [group n] ;
??? alter database add logfile member '<dir>' to group [n]
??? /*add logfile member 這個方法僅使用未使用 OMF 的日志文件,對于已經運用了 OMF 的日志組,無法使用該功能添加日志文件 */
? 6. 刪除日志文件組時,對于 OMF 的日志文件組,其對應的物理文件同時被刪除
??? alter database drop logfile group [n]
?
?
三 . 使用 OMF 管理控制文件
? 使用 OMF 管理控制文件同管理日志文件類似,主要涉及到的也是 db_create_online_log_dest_n 參數
? 即控制文件默認存放在 db_create_online_log_dest_n 下,當定義了一個 db_create_online_log_dest_n
? 則生成一個控制文件,當定義了多了則生成多個控制文件。
? 前提條件:去掉 control_files 參數
? alter system reset control_files scope = spfile sid = '*' ;
?
? 以下是預留的 OMF 路徑:
??? SQL > SHOW PARAMETER db_create
?
?????? NAME ???????????????????????????????? TYPE ??????? VALUE
?????? ------------------------------------ ----------- ------------------------------
?????? db_create_file_dest ????????????????? string ????? / u01 / app / oracle / oradata / orcl
?????? db_create_online_log_dest_1 ????????? string ????? / u01 / app / oracle / disk1
?????? db_create_online_log_dest_2 ????????? string ????? / u01 / app / oracle / disk2
?????? db_create_online_log_dest_3 ????????? string
?????? db_create_online_log_dest_4 ????????? string
?????? db_create_online_log_dest_5 ????????? string
??? SQL > show parameter db_recovery_file
?
?????? NAME ???????????????????????????????? TYPE ??????? VALUE
?????? ------------------------------------ ----------- ------------------------------
?????? db_recovery_file_dest ??????????????? string ????? / u01 / app / oracle / flash_recovery
????????????????????????????????????????????? ? _area
?????? db_recovery_file_dest_size ?????????? big integer 2G
?
總結
??? 參數 ???????????????????????????? ?? ?????????? 適用范圍
??? db_create_file_dest_size ????????? datafile , create tablespace <>
??? db_create_online_log_dest_n ?????? logfile , controlfile
??? db_recovery_file_dest ???????????? ? rman , archivelog , onlinelog
?
四 . 更多
?? VmWare6.5.2 下安裝 RHEL 5.4 (配置 Oracle 安裝環境) ??
?
?? Linux (RHEL 5.4) 下安裝 Oracle 10g R2
?
??
?? Oracle 相關
?? Using Oracle-Managed Files
?
??
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
