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是负责数据文件和日志文件的。从实际情况看也的确如此。