WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606
全部博文(599)
分类: Oracle
2009-12-07 15:48:15
下面通过示例,演示当物理 Standby 与 Primary 数据库路径不同时的可能出现的问题。
设定环境如下:
如果要创建的 Standby 数据库与 Primary 数据库的路径无法保持一致, 中的实现方式都是借助参数,自动转换数据文件路径。需要设置设置的参数有两个: db_file_name_convert 和 log_file_name_convert ,分别用来转换数据文件路径和重做日志文件路径 ( 含联机重做日志文件和 Standby 重做日志文件 ) 。不过设置初始化参数的方式在任何场合都好使吗,答案是否定的,下面的演示能详细说明这一点。
物理 Standby JSSPDG ,查看当前的路径转换参数设置:
JSSPDG> show parameter convert;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string F:\oracle\oradata\jssbook, L:\
oradata\jsspdg, L:\oradata\jss
pdg, F:\oracle\oradata\jssbook
log_file_name_convert string F:\oracle\oradata\jssbook, L:\
oradata\jsspdg, L:\oradata\jss
pdg, F:\oracle\oradata\jssbook查看当前数据文件路径:
JSSPDG> select name from v$datafile;
NAME
-------------------------------------------------------
L:\ORADATA\JSSPDG\SYSTEM01.DBF
L:\ORADATA\JSSPDG\UNDOTBS01.DBF
L:\ORADATA\JSSPDG\SYSAUX01.DBF
L:\ORADATA\JSSPDG\USERS01.DBF
L:\ORADATA\JSSPDG\SCOTT01.DBF
JSSPDG> select member from v$Logfile;
MEMBER
-------------------------------------------------------
L:\ORADATA\JSSPDG\REDO01.LOG
L:\ORADATA\JSSPDG\REDO02.LOG
L:\ORADATA\JSSPDG\REDO03.LOG
L:\ORADATA\JSSPDG\STDREDO01.LOG
L:\ORADATA\JSSPDG\STDREDO02.LOG
L:\ORADATA\JSSPDG\STDREDO03.LOG
6 rows selected.运气不错,看起来路径转换正常。不过你有没有想过,当前显示的数据文件、日志文件的路径是否就是控制文件中所存储的路径呢?
答案是否定的,例如,尝试修改文件转换参数:
JSSPDG > alter system set db _file_name_convert='' scope=spfile;
System altered.重新启动数据库:
JSSPDG > shutdown immediate
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
JSSPDG > startup mount;
ORACLE instance started.
Total System Global Area 314572800 bytes
Fixed Size 1248720 bytes
Variable Size 96469552 bytes
Database Buffers 209715200 bytes
Redo Buffers 7139328 bytes
Database mounted.再次查看日志文件的路径:
JSSPDG > select name from v$ datafile ;
NAME
----------------------------------------------------------------------------------------------------
F:\ORACLE\ORADATA\JSSBOOK\SYSTEM01.DBF
F:\ORACLE\ORADATA\JSSBOOK\UNDOTBS01.DBF
F:\ORACLE\ORADATA\JSSBOOK\SYSAUX01.DBF
F:\ORACLE\ORADATA\JSSBOOK\USERS01.DBF
L:\ORADATA\JSSPDG\SCOTT01.DBF除了 scott01.dbf 外,其它文件仍然显示的是原路径。 Scott01.dbf 为什么能显示正确的路径后面再说。其它数据文件显示的路径和当前 db_file_name_convert 参数的设置,结合来看至少能够得出结论:物理 Standby 控制文件中保存的文件路径并不一定就是实际路径,同时而 *_file_name_convert 参数也不是任何情况下均有效。下面我们就接着探讨另一个话题,什么情况下控制文件中保存的文件路径等于实际显示的路径呢?