ITPub博客

首页 > 数据库 > Oracle > 从参数取值看Oracle OMF特性

从参数取值看Oracle OMF特性

Oracle 作者:studywell 时间:2015-02-04 22:25:50 0 删除 编辑

 

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博客 ” ,链接:https://blog.itpub.net/29519108/viewspace-1426779/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-03-04

  • 博文量
    307
  • 访问量
    535350