Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2886972
  • 博文数量: 599
  • 博客积分: 16398
  • 博客等级: 上将
  • 技术积分: 6875
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-30 12:04
个人简介

WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606

文章分类

全部博文(599)

文章存档

2014年(12)

2013年(56)

2012年(199)

2011年(105)

2010年(128)

2009年(99)

分类: Oracle

2009-12-07 15:49:21

2、 STANDBY_FILE_MANAGEMENT 参数的值很重要

  看了前面的例子,相信会对scott01.dbf文件印象深刻。这家伙不知道是哪位大员的表亲或内侍,反正后台相当强硬,*_file_name_convert这么彪悍的实权派都耐何不了它。偷偷告诉你,后台老板有可能是STANDBY_FILE_MANAGEMENT哟。话不多说,直接看示例:

  手动修改数据文件路径:

    JSSPDG> alter database rename file ' F:\ORACLE\ORADATA\JSSBOOK\USERS01.DBF ' to 'L:\ORADATA\JSSPDG\USERS01.DBF';

    alter database rename file ' F:\ORACLE\ORADATA\JSSBOOK\USERS01.DBF ' to 'L:\ORADATA\JSSPDG\USERS01.DBF'

    *

    ERROR at line 1:

    ORA-01511: error in renaming log/data files

    ORA-01275: Operation RENAME is not allowed if standby file management is automatic.

  注意文件路径哟。

  命令执行报错,提示需要修改standby file maangement参数为手动,好吧,听它的:

    JSSPDG> show parameter standby

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    standby_archive_dest                 string      %ORACLE_HOME%\RDBMS

    standby_file_management              string      AUTO

    SQL> alter system set standby_file_management = MANUAL;

    System altered.

  然后再次执行修改:

    JSSPDG> alter database rename file ' F:\ORACLE\ORADATA\JSSBOOK\USERS01.DBF ' to 'L:\ORADATA\JSSPDG\USERS01.DBF';

    Database altered.

  成功,然后再次查看当前文件路径:

    JSSPDG> show parameter db_file_name_convert;

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    db_file_name_convert                 string      

    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

    L:\ORADATA\JSSPDG\USERS01.DBF

    L:\ORADATA\JSSPDG\SCOTT01.DBF

  显式手动修改文件路径后,即使不设置文件转换的参数,显示的也是正确的路径了(废话,我们手动指定了嘛,当然指定成什么就显示什么)。

  注意这个显式手动指定的概念,这个包含的范围是很广的,不仅仅是我们手动通过alter database命令修改,alter tablespace修改肯定也好使。另外还有一条,就是standby_file_management参数的初始功能。该参数其实就用来同步Primary数据库与物理Standby数据库,当有表空间或数据文件修改操作时,是否自动同步到Standby端,默认情况下是AUTO,也就是自动同步。如果是AUTO状态,自动继承自Primary数据库的修改,那么这部分文件的路径保存在Standby数据库的控制文件中时,仍然是Primary数据库时的路径,显示时受制于*_file_name_convert参数的影响。受制于篇幅,这里就不演示standby_file_management参数在Primary和物理Standby间自动同步表空间、数据文件修改时的状态了,如果有兴趣,你可以私下自行。

  另外,有没有可能,前面不生效是由于db_file_name_convert参数设置不适当造成的呢?之前都是对f:\oracle.....路径进行转换,修改一下初始化参数,显式指定l:\oradata\jsspdg试一试呢:

    JSSPDG> alter system set db_file_name_convert='L:\ORADATA\JSSPDG\','L:\ORADATA\JSS\',' F:\ORACLE\ORADATA\JSSBOOK \','L:\ORADATA\JSS\' Scope=spfile;

    System altered.

  重新启动物理Standby数据库(没办法,convert参数均无法即时生效):

    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

    ----------------------------------------------------------------------------------------------------

    L:\ORADATA\JSS \SYSTEM01.DBF

    L:\ORADATA\JSS \UNDOTBS01.DBF

    L:\ORADATA\JSS \SYSAUX01.DBF

    L:\ORADATA\JSSPDG\USERS01.DBF

    L:\ORADATA\JSSPDG\SCOTT01.DBF

  未显式修改过的文件的路径已经做了转换,但其它两个文件的路径毫无变化,看起来对于这类文件手动指定过的文件路径,即使设置*_file_name_convert参数,也无法对它们的文件路径做转换。如果这类文件路径有误或需要修改,唯一的方式,只能是显式通过命令手动修改其路径。接着,我们再来探讨一个问题,什么情况下*_file_name_convert参数能够"真正"起作用呢?

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