此时,我们测试创建数据文件和在线日志。
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特性失效。