暂无图片
adg三个库切换后在进行全量恢复时会修改路径
我来答
分享
我姓陈我心沉💘 💘
2023-03-16
adg三个库切换后在进行全量恢复时会修改路径
暂无图片 5M

  现在有a,b,c三个数据库做了adg之后同步一切正常,a切换到b库(用switchover现在备库是主库)之后同步也正常现在模拟c数据库坏了之后想由b进行全量恢复,但是b恢复给c的时候会增加一个datafileDG的路径这个路径是没有配置过的,测试当a是正常的主库,由a库全量恢复给c的时候就是正常

c库查看到的路径配置均正常
db_file_name_convert string /mnt/oracle/app/oradata/a,/mnt/oracle/app/oradata/c/datafile,/mnt/oracle/app/oradata/b/datafile, /mnt/oracle/app/oradata/c/datafile
log_file_name_convert string
/mnt/oracle/app/oradata/a,/mnt/oracle/app/oradata/c/onlinelog, /mnt/oracle/app/oradata/b/onlinelog, /mnt/oracle/app/oradata/c/onlinelog

B库查看的路径配置均正常
db_file_name_convert string /mnt/oracle/app/oradata/a,/mnt/oracle/app/oradata/b/datafile, /mnt/oracle/app/oradata/c/datafile, /mnt/oracle/app/oradata/b/datafile
log_file_name_convert string /mnt/oracle/app/oradata/a,/mnt/oracle/app/oradata/b/onlinelog, /mnt/oracle/app/oradata/c/onlinelog, /mnt/oracle/app/oradata/b/onlinelog

A库查看的路径均正常
db_file_name_convert string
/mnt/oracle/app/oradata/b/datafile, /mnt/oracle/app/oradata/a, /mnt/oracle/app/oradata/c/datafile, /mnt/oracle/app/oradata/LAND
log_file_name_convert string
/mnt/oracle/app/oradata/b/onlinelog, /mnt/oracle/app/oradata/a, /mnt/oracle/app/oradata/c/onlinelog, /mnt/oracle/app/oradata/a

当B库为主库时使用rman在线恢复

duplicate target database for standby from active database;  //使用此命令,如下是提取出来的在b库恢复c库的结果

set newname for tempfile 1 to
"/mnt/oracle/app/oradata/c/datafileDG/datafile/temp01.dbf";
switch clone tempfile all;
set newname for datafile 1 to
"/mnt/oracle/app/oradata/c/datafileDG/datafile/system01.dbf";
set newname for datafile 2 to 

可以看到set newname的时候多增加了datafileDG的目录但是此目录并没有创建,想请教各位大神这样的我怎么进行排查?

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
我姓陈我心沉💘 💘

此问题已解决:

解决思路:
首先怀疑是c库和b库的db_file_name和log_file_name配置错误通过show parameter convert查看配置的均正常如下

c库查看配置

db_file_name_convert string /mnt/oracle/app/oradata/a,/mnt/oracle/app/oradata/c/datafile,/mnt/oracle/app/oradata/b/datafile, /mnt/oracle/app/oradata/c/datafile

log_file_name_convert string

/mnt/oracle/app/oradata/a,/mnt/oracle/app/oradata/c/onlinelog, /mnt/oracle/app/oradata/b/onlinelog, /mnt/oracle/app/oradata/c/onlinelog

B库查看的路径配置均正常
db_file_name_convert string /mnt/oracle/app/oradata/a,/mnt/oracle/app/oradata/b/datafile, /mnt/oracle/app/oradata/c/datafile, /mnt/oracle/app/oradata/b/datafile
log_file_name_convert string /mnt/oracle/app/oradata/a,/mnt/oracle/app/oradata/b/onlinelog, /mnt/oracle/app/oradata/c/onlinelog, /mnt/oracle/app/oradata/b/onlinelog

之后怀疑是多路径的问题,将landdgbei库的spfile中的两个路径修改为一个路径先进行测试(spfile文件只挑出如下,其余的配置均不进行修改)
#*.log_file_name_convert='/mnt/oracle/app/oradata/a','/mnt/oracle/app/oradata/c/onlinelog','/mnt/oracle/app/oradata/b/onlinelog','/mnt/oracle/app/oradata/c/onlinelog' //原先是两个路径
*.log_file_name_convert='/mnt/oracle/app/oradata/b/onlinelog','/mnt/oracle/app/oradata/c/onlinelog' //修改为一对路径之后用rman的在线恢复进行全量恢复,恢复是发现正常没有增加目录,如下操作
RMAN> duplicate target database for standby from active database;
contents of Memory Script:
{
set newname for tempfile 1 to
"/mnt/oracle/app/oradata/c/datafile/temp01.dbf";
switch clone tempfile all;
set newname for datafile 1 to
"/mnt/oracle/app/oradata/c/datafile/system01.dbf";
set newname for datafile 2 to
"/mnt/oracle/app/oradata/c/datafile/JD.DBF";
如上可以之后就开始查找原因,终于根据一篇文档找到了蛛丝马迹
原来dg参数不能级联转换目录,只能转换上级目录,或者只能转换下级目录
关于设置db_file_name_convert 参数的设置规则,否则都会报错:
不能把主库的多个目录,转换到dg库的同一个目录
不能级联转换目录
目录一定要最后带上‘’/‘’
https://blog.csdn.net/weixin_39765588/article/details/116328235 //将参考的目录放在最后
找到原因后根据实际情况制定适合自己的解决方案
现在的解决方案有两个
第一中方法:
就是遇到这样的情况恢复备库的时候需要先修改spfile文件之后在进行导入(只需要将b库掉换至a库之前即可,这样的方式经过测试a库同步c库也正常)
*.db_file_name_convert='/mnt/oracle/app/oradata/b/datafile','/mnt/oracle/app/oradata/c/datafile','/mnt/oracle/app/oradata/a','/mnt/oracle/app/oradata/c/datafile'
*.log_file_name_convert='/mnt/oracle/app/oradata/b/onlinelog','/mnt/oracle/app/oradata/c/onlinelog','/mnt/oracle/app/oradata/a','/mnt/oracle/app/oradata/c/onlinelog',
SQL> create spfile from pfile='/home/oracle/landdgbei';
File created.
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 1392508856 bytes
Fixed Size 8896440 bytes
Variable Size 1006632960 bytes
Database Buffers 369098752 bytes
Redo Buffers 7880704 bytes
RMAN> duplicate target database for standby from active database; //之后在进行全量恢复即可完成
第二种方法就是:
在spfile文件中多个目录转换的时候不转换到dg的同一个目录,但是这样产生的问题就是第一个现在要修改配置后需要重启因为线上不能随意的重启,还有一个最主要的原因就是
如果有两个dg的不同目录那数据也是有两份此时就要考虑硬件情况,适合我们的就是需要全量恢复的时候修改spfile文件的前后路径进行全量恢复,毕竟c库也不会经常坏!文档如果有不对之处还需要路过的大神指出哦!

暂无图片 评论
暂无图片 有用 2
暂无图片
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏