??? OMF , 全稱是 Oracle_Managed Files , 即 Oracle 文件管理,使用 OMF 可以簡(jiǎn)化管理員的管理工作,不用指定文件的名字、大小、路徑,其名字,大小,
路徑由 oracle 自動(dòng)分配。在刪除不再使用的日志、數(shù)據(jù)、控制文件時(shí), OMF 也可以自動(dòng)刪除其對(duì)應(yīng)的 OS 文件。
?
OMF 支持下列文件的自動(dòng)管理:
??? 表空間
??? 日志文件 ( 聯(lián)機(jī) )
??? 控制文件
前提條件:需要為這些類型文件設(shè)定相關(guān)參數(shù)。
?
一 . 數(shù)據(jù)文件的 OMF 管理
? 數(shù)據(jù)文件管理參數(shù): db_create_file_dest
? db_create_file_dest : Oracle 創(chuàng)建數(shù)據(jù)文件、臨時(shí)文件時(shí),在未明確指定路徑的情況下的缺省路徑,當(dāng) db_create_online_log_dest_n 未指定時(shí),
?????????????????????? 也作為聯(lián)機(jī)日志文件和控制文件的缺省路徑。
?
? 假定需要?jiǎng)?chuàng)建表空間 s 及數(shù)據(jù)文件
?
??? SQL > CREATE TABLESPACE s ; ? /* 收到了錯(cuò)誤信息 */
?????? create tablespace s
???????????????????? ? *
?????? ERROR at line 1 :
?????? ORA - 02199 : missing DATAFILE / TEMPFILE clause
?
??? SQL > show parameter db_create_file ?? /* 查看 db_create_file_dest 參數(shù) */
?
?????? NAME ???????????????????????????????? TYPE ??????? VALUE
?????? ------------------------------------ ----------- ------------------------------
?????? db_create_file_dest ????????????????? string
?
??? -- 設(shè)定 db_create_file_dest 參數(shù)
??? SQL > ALTER SYSTEM SET db_create_file_dest = '/u01/app/oracle/oradata/orcl' ;
?
?????? System altered .
?
??? -- 設(shè)定參數(shù)后,創(chuàng)建成功
??? SQL > CREATE TABLESPACE s ; ?
?
?????? Tablespace created .
?
??? SQL > SELECT NAME FROM v$datafile ; ? /* 可以看到 ORCL/datafile/o1_mf_s_5vrl1t7h_.dbf 是 Oralce 自動(dòng)創(chuàng)建的數(shù)據(jù)文件 */
?
?????? 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 ; ? /* 也可指定數(shù)據(jù)文件的大小為 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
?
??? -- 刪除表空間時(shí),對(duì)于使用了 OMF 生成的數(shù)據(jù)文件將隨著表空間的刪除一起被刪除
??? SQL > DROP TABLESPACE t ;
?
??? Tablespace dropped .
?
??? -- 查看物理文件,已經(jīng)不存在
??? 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
?
??? -- 對(duì)于未采用 OMF 來創(chuàng)建的表空間,在刪除表空間之后,其數(shù)據(jù)文件并沒有刪除, v$datafile 視圖中被刪除
??? -- 下面是未使用 OMF 創(chuàng)建的 x 表空間及數(shù)據(jù)文件
??? 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 的數(shù)據(jù)文件 */
?
?????? 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 ?? /* 操作系統(tǒng)中依然存在 */
?????? / u01 / app / oracle / oradata / orcl / x . dbf
?
??? -- 注意:使用 OMF 的時(shí)候會(huì)將物理文件刪除,應(yīng)特別注意使用
??? -- 使用下面的方法重建 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
?
總結(jié):使用 OMF 管理文件的方法
? 1. 使用 ALTER SYSTEM SET db_create_file_dest = '<path>' 設(shè)置路徑
? 2. 查看剛剛的設(shè)置 SHOW PARAMETER db_create_file_dest ;
? 3. 創(chuàng)建表空間及數(shù)據(jù)文件 CREATE TABLESPACE tablespace_name
? 4. 單獨(dú)創(chuàng)建表空間 CREATE TABLESPACE <> DATAFILE '<path>' SIZE <>;
? 5. 也可以創(chuàng)建 undo 和 temporary tablespace 。 CREATE UNDO TABLESPACE tablespace_name ; CREATE TEMPORARY TABLESPACE tablespace_name ;
? 6. 刪除表空間 DROP TABLESPACE tablespace_name ; OMF 情況下則刪除物理文件,等效于未使用 OMF 創(chuàng)建,使用 INCLUDING CONTENTS AND DATAFILES 刪除方式
?
?
二 . 日志文件的 OMF 管理
? 日志文件管理參數(shù): db_create_online_log_dest_n
? db_create_online_log_dest_n : Oracle 創(chuàng)建聯(lián)機(jī)日志文件和控制文件時(shí),在未明確指定路徑的情況下的缺省路徑
?
-- 查看日志文件的參數(shù),下面是未作設(shè)置的 db_create_online 參數(shù)
??? 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
?
??? -- 從上面可以看出系統(tǒng)預(yù)留了一個(gè)日志組個(gè)成員來形成 OMF ,一般情況下我們僅僅需要個(gè)成員即可。因?yàn)樵诖嗽O(shè)定個(gè)參數(shù)文件
??? -- 下面是未設(shè)定的情況下創(chuàng)建日志文件,則默認(rèn)為在數(shù)據(jù)文件路徑及閃回區(qū)各放一個(gè)文件,因?yàn)樯鲜鰞蓚€(gè)路徑都是 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
?????? ?
總結(jié):
? 1. 當(dāng)定義了 db_recovery_file_dest 和 db_create_file_dest 路徑,且沒有定義 db_create_online_log_dest_n 的時(shí)候,
??? 則 OMF 將日志文件存放在 db_recovery_file_dest 和 db_create_file_dest 路徑下,而且日志組下為個(gè)成員
? ? 2. 當(dāng)定義了 db_create_online_log_dest_1 則將日志文件存放到 db_create_online_log_dest_1
??? 和 db_create_file_dest 路徑下,且日志組下為個(gè)成員
? 3. 當(dāng)定義了 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. 當(dāng)定義了多個(gè) db_create_online_log_dest_n ,則為每個(gè)組 n 個(gè)日志成員,且多路復(fù)用
? 5. 增加日志文件的方法 ;
??? alter database add logfile ;
??? alter database add logfile [group n] ;
??? alter database add logfile member '<dir>' to group [n]
??? /*add logfile member 這個(gè)方法僅使用未使用 OMF 的日志文件,對(duì)于已經(jīng)運(yùn)用了 OMF 的日志組,無法使用該功能添加日志文件 */
? 6. 刪除日志文件組時(shí),對(duì)于 OMF 的日志文件組,其對(duì)應(yīng)的物理文件同時(shí)被刪除
??? alter database drop logfile group [n]
?
?
三 . 使用 OMF 管理控制文件
? 使用 OMF 管理控制文件同管理日志文件類似,主要涉及到的也是 db_create_online_log_dest_n 參數(shù)
? 即控制文件默認(rèn)存放在 db_create_online_log_dest_n 下,當(dāng)定義了一個(gè) db_create_online_log_dest_n
? 則生成一個(gè)控制文件,當(dāng)定義了多了則生成多個(gè)控制文件。
? 前提條件:去掉 control_files 參數(shù)
? alter system reset control_files scope = spfile sid = '*' ;
?
? 以下是預(yù)留的 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
?
總結(jié)
??? 參數(shù) ???????????????????????????? ?? ?????????? 適用范圍
??? 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 安裝環(huán)境) ??
?
?? Linux (RHEL 5.4) 下安裝 Oracle 10g R2
?
?? 使用 Uniread 實(shí)現(xiàn) SQLplus 翻頁功能
??
?? Using Oracle-Managed Files
?
??
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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