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
Using Oracle-Managed Files