一、问题描述:
数据库版本:11.2.0.3 单实例的DG
在2019-03-26号,某个备库的/目录空间不是很充裕,将原来的归档目录/arcdg/center/archivelog更换为/oradata/archivelog新目录。(两个是不同的盘)
操作步骤如下:
- 主库关闭日志投递
- 备库关闭日志应用
- 备库修改归档路径
- 备库开启日志应用
- 主库开启日志投递
在2019-03-28巡检发现,在旧的归档路径下仍然生成一部分归档文件。
二、问题分析:
数据库中有两个参数LOG_ARCHIVE_DEST_1,STANDBY_ARCHIVE_DEST,2者的关系如下:
STANDBY_ARCHIVE_DEST参数指定从主库接收的归档日志存储在备库中的位置。
1)主库的LOG_ARCHIVE_DEST_n='service'默认的arch传输方式,primary会远程将archived log传输到standby_archive_dest下
2)fal_*是通过arch传输过来的,所以使用的是STANDBY_ARCHIVE_DEST目录,如果不存在这个目录,就使用LOG_ARCHIVE_DEST_n
3)If both parameters are specified, the STANDBY_ARCHIVE_DEST initialization parameter
overrides the directory location specified with the LOG_ARCHIVE_DEST_n parameter.
如果STANDBY_ARCHIVE_DEST和LOG_ARCHIVE_DEST_n两个参数指定,STANDBY_ARCHIVE_DEST初始化覆盖LOG_ARCHIVE_DEST_n目录指定位置参数。
4)If none of the initialization parameters have been specified, thenarchived redo log files are stored inthe default location forthe STANDBY_ARCHIVE_DEST initialization parameter.
如果STANDBY_ARCHIVE_DEST和LOG_ARCHIVE_DEST_n都没有配置,将会把归档日志放到STANDBY_ARCHIVE_DEST的默认目录
5)如果STANDBY_ARCHIVE_DEST未配置,而配置了LOG_ARCHIVE_DEST_n,那么产生的归档将放置到LOG_ARCHIVE_DEST_n
6)建议:STANDBY_ARCHIVE_DEST和LOG_ARCHIVE_DEST_n=‘location’的配置相同
7)在11g,已经不建议使用STANDBY_ARCHIVE_DEST,也就是说建议配置dg的时候尽量使用standby redo logfile
在11g的版本中该参数已经弃用,并且会自动选择适当的位置。默认值是?/dbs/arch。
备库接收主库的归档路径选择优先顺序从高到低依次为:
STANDBY_ARCHIVE_DEST > LOG_ARCHIVE_DEST_1> STANDBY_ARCHIVE_DEST的默认值?/dbs/arch。
在11g版本,STANDBY_ARCHIVE_DEST不用再设置,但实际值继承LOG_ARCHIVE_DEST_1参数设置。当修改LOG_ARCHIVE_DEST_1时,STANDBY_ARCHIVE_DEST继承旧值,不刷新,而LOG_ARCHIVE_DEST_1即时刷新,不需重启库,重启库STANDBY_ARCHIVE_DEST继承LOG_ARCHIVE_DEST_1的新值(即当前值)。
如果备库利用standby redo log,那么日志将会被arch进程生成归档到LOG_ARCHIVE_DEST_n
如果备库是利用主库的arch进程传输日志文件,那么将会被放置到STANDBY_ARCHIVE_DEST
由于修改LOG_ARCHIVE_DEST_1值之后,LOG_ARCHIVE_DEST_1即时刷新,而STANDBY_ARCHIVE_DEST未刷新,继承了dest_1的旧值,导致STANDBY_ARCHIVE_DEST参数仍然是LOG_ARCHIVE_DEST_1变更前的路径:
这样就导致主库传递的归档文件在/arcdg/center/archivelog/路径下,主库传递的standby redo log并生成的归档在/oradata/archivelog路径下,归档产生在两个路径。
三、问题解决:
重启数据库实例,STANDBY_ARCHIVE_DEST参数自动变化