异构dataguard下的db_file_name_convert设置

发布时间 2023-12-15 13:48:15作者: slnngk

环境:
主库:win2012 server
从库:centos 6
db:11.2.0.4

 

1.主库上创建表空间

create tablespace tps_win01
logging datafile 'c:\oracle\app\oradata\win11g\tps_win01.dbf' size 50m
autoextend on
next 10m maxsize 2048m
extent management local
segment space management auto;

 

2.从库日志看到创建的文件

Media Recovery Waiting for thread 1 sequence 140 (in transit)
Recovery of Online Redo Log: Thread 1 Group 4 Seq 140 Reading mem 0
  Mem# 0: /u01/app/oracle/oradata/ora11g/stdbyredo04.log
Fri Dec 15 01:34:29 2023
WARNING: File being created with same name as in Primary
Existing file may be overwritten
Recovery created file C:\ORACLE\APP\ORADATA\WIN11G\TPS_WINAA01.DBF
Successfully added datafile 8 to media recovery
Datafile #8: '/u01/app/oracle/product/11.2.0.4/db_1/dbs/C:ORACLEAPPORADATAWIN11GTPS_WINAA01.DBF'

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ora11g/system01.dbf
/u01/app/oracle/oradata/ora11g/sysaux01.dbf
/u01/app/oracle/oradata/ora11g/undotbs01.dbf
/u01/app/oracle/oradata/ora11g/users01.dbf
/u01/app/oracle/oradata/ora11g/tps_hxl01.dbf
/u01/app/oracle/oradata/ora11g/tps_goldengate01.dbf
/u01/app/oracle/oradata/ora11g/tps_win01.dbf
/u01/app/oracle/product/11.2.0.4/db_1/dbs/C:ORACLEAPPORADATAWIN11GTPS_WINAA01.DBF

存放路径不是我们预期的

 

3.查看参数db_file_name_convert

SQL> show parameters db_file_name_convert;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert                 string      win11g, ora11g


这样配置在linux->linux是没问题的,但现在是win->linux,没有按照预期的转换


4.尝试修改数据文件名称

SQL> alter database recover managed standby database canel;
SQL> alter system set standby_file_management=manual;
SQL>alter database rename file '/u01/app/oracle/product/11.2.0.4/db_1/dbs/C:ORACLEAPPORADATAWIN11GTPS_WINAA01.DBF' to '/u01/app/oracle/oradata/ora11g/tps_winaa01.dbf';
alter database rename file '/u01/app/oracle/product/11.2.0.4/db_1/dbs/C:ORACLEAPPORADATAWIN11GTPS_WINAA01.DBF' to '/u01/app/oracle/oradata/ora11g/tps_winaa01.dbf'
*
ERROR at line 1:
ORA-01511: error in renaming log/data files
ORA-01121: cannot rename database file 8 - file is in use or recovery
ORA-01110: data file 8:
'/u01/app/oracle/product/11.2.0.4/db_1/dbs/C:ORACLEAPPORADATAWIN11GTPS_WINAA01.DBF'

 

好像不能直接修改,数据库需要先修改到mount模式

 

5.数据库修改到mount状态下

SQL> shutdown immediate
SQL> startup mount

 

6.数据文件拷贝到正确的目录

cp /u01/app/oracle/product/11.2.0.4/db_1/dbs/C:ORACLEAPPORADATAWIN11GTPS_WINAA01.DBF /u01/app/oracle/oradata/ora11g/tps_winaa01.dbf

 

7.再次修改
SQL>alter database rename file '/u01/app/oracle/product/11.2.0.4/db_1/dbs/C:ORACLEAPPORADATAWIN11GTPS_WINAA01.DBF' to '/u01/app/oracle/oradata/ora11g/tps_winaa01.dbf';

 

8.打开数据库
SQL> alter database open;

 

9.参数修改为自动
SQL>alter system set standby_file_management=auto;

 

10.应用日志
SQL> alter database recover managed standby database using current logfile disconnect from session;

 

11.修改参数db_file_name_convert

SQL> alter system set db_file_name_convert='C:\oracle\app\oradata\win11g','/u01/app/oracle/oradata/ora11g' scope=both;
alter system set log_file_name_convert='C:\oracle\app\oradata\win11g','/u01/app/oracle/oradata/ora11g' scope=both
                 *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified

alter system set db_file_name_convert='C:\oracle\app\oradata\win11g','/u01/app/oracle/oradata/ora11g' scope=spfile;

 

12.重启生效

alter database recover managed standby database cancel;
shutdown immediate
startup
alter database recover managed standby database using current logfile disconnect from session;

 

发现没有设置正确

主库创建表空间,从库发现数据文件不是放置在预期的地方
Successfully added datafile 9 to media recovery
Datafile #9: '/u01/app/oracle/product/11.2.0.4/db_1/dbs/C:ORACLEAPPORADATAWIN11GTPS_WINBB01.DBF'

正确的设置如下:
alter system set db_file_name_convert='C:\ORACLE\APP\ORADATA\WIN11G\','/u01/app/oracle/oradata/ora11g/' scope=spfile;

 

最后一个目录需要使用\(win)或是/(linux)结束