在给客户做数据迁移之前进行数据库巡检,发现一个原来并没有留意的问题,在数据库里面查询发现数据文件和归档日志文件都为单份,但是通过grid用户进入asmcmd模式下,发现数据文件和归档日志文件都为两份且路径不同,感觉比较奇怪,在这里将现象分析及解决方式进行记录。

为了复现遇见的现象,首先在测试环境下进行归档日志的设置,设置成和生产环境一样的路径参数,发现场景复现,步骤如下:

1、更改数据库归档日志路径

su - oracle

sqlplus / as sysdba

SQL> alter system set log_archive_dest_1='LOCATION=+DATA/arch/ sid='*' scope=both;

2、进行归档日志路径查看

SQL> archive log list;

Oracle Rac数据文件和归档日志文件在ASM磁盘组上出现双份现象分析解决_oracle

3、查看归档日志路径下的文件

su - grid

asmcmd

asmcmd > cd data/arch

asmcmd > ls -l

Oracle Rac数据文件和归档日志文件在ASM磁盘组上出现双份现象分析解决_数据文件双份_02

asmcmd > cd data/racdb/archivelog/2022_03_10

asmcmd > ls

Oracle Rac数据文件和归档日志文件在ASM磁盘组上出现双份现象分析解决_oracle_03

备注:发现两份竟然是mirror关系,删除arch路径下的归档日志,archivelog路径的的归档日志也会跟着一起自动删除。当切换归档日志时arch路径下会生成一个dbf结尾的归档日志,同时archivelog路径下也会在当天日期文件夹下自动生成一个asm自动管理的归档日志文件。

根据现象推测应该是asm管理文件机制导致的,查询资料得知是由于指定了归档日志的具体路径导致的,由于指定了具体路径,会在指定的路径下生成一份归档日志文件,但是asm机制也会按照自己的格式生成一份。解决办法就是在指定归档日志路径的时候直接指定asm磁盘组的名称即可,后边不用指定具体文件夹名称。

4、修改归档日志目标路径

Oracle Rac数据文件和归档日志文件在ASM磁盘组上出现双份现象分析解决_数据文件双份_04

5、切换归档后发现arch路径下不会新生成日志文件,最新生成的归档日志文件在DATA/RACDB/ARCHIVELOG/ ***(日期) 下只保存了一份。

6、根据归档日志的设置问题查找软件工程师在为表空间添加数据文件的脚本时候发现工程师为数据文件指定了具体的文件路径,这也是数据文件出现双份的原因。

数据文件解决方式是在数据迁移的时候直接使用rman setnewname 指定到+DATA目录,这样迁移完成后数据文件都在+DATA/RACDB/DATAFILE/路径下了。

7、总结

在使用asm磁盘组存储数据库的时候,无论在添加数据文件还是指定归档日志路径时候直接指定asm磁盘组名称即可,不需要指定具体路径,asm会自动管理数据文件路径,数据文件名以及归档日志具体路径和归档日志的名称。