Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1208607
  • 博文数量: 350
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5668
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 17:53
文章分类

全部博文(350)

文章存档

2013年(350)

分类: Oracle

2013-04-27 09:44:51

Dataguard 是项常见并且实用的技术,常规方式的配置非常简单,基本上没有太多技术问题,大部时间可能都会花在复制数据文件的 IO 操作上,不过如果条件特殊,比如 Primary 数据文件路径与 Standby 路径不一致,配置时还是有一些需要引起注意的地方。

  下面通过示例,演示当物理 Standby 与 Primary 数据库路径不同时的可能出现的问题。

  设定环境如下:

  • Primary 数据库: JSSWEB ,文件路径在 F:\oracle\oradata\jssbook 目录下
  • 物理 Standby : JSSPDG ,通过 Primary 创建,文件路径在 L:\oradata\jsspdg 目录下
  • 物理 Standby : JSSLDG ,通过 JSSPDG 创建,文件路径在 L:\oradata\jss l dg 目录下

1、 *_FILE_NAME_CONVERT 参数什么时候生效的呢

  如果要创建的 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 参数也不是任何情况下均有效。下面我们就接着探讨另一个话题,什么情况下控制文件中保存的文件路径等于实际显示的路径呢?


阅读(1219) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~