oracle查询file_name,Oracle DG环境下db_file_name_convert的实际意义

关于DG环境下备库数据文件重命名的问题:

**前言:**

主要想表明DG环境下备库数据文件重命名的问题,以及db_file_name_convert与log_file_name_convert的作用。

**实验证明:**

主库为备库备份一份控制文件

RMAN> backup current controlfile for standby format '/home/oracle/rman/standby.ctl';

拷贝到备库进行恢复

**备库此时不设置db_file_name_convert ,log_file_name_convert两个参数:**

```

SQL> show parameter db_file_name_convert;

NAME TYPE VALUE

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

db_file_name_convert string

SQL> show parameter log_file_name_convert;

NAME TYPE VALUE

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

log_file_name_convert string

```

**恢复备库控制文件:**

RMAN> restore controlfile from '/home/oracle/rman/standby.ctl';

SQL> alter database mount;

**查看控制文件中记录的数据文件信息:**(proddg2为主库,prod为备库,曾做过主备切换)

```

SQL> select name from v$datafile;

NAME

/oracle/app/oradata/proddg2/system01.dbf

/oracle/app/oradata/proddg2/sysaux01.dbf

/oracle/app/oradata/proddg2/undotbs01.dbf

/oracle/app/oradata/proddg2/users01.dbf

/oracle/app/oradata/proddg2/example01.dbf

SQL> select member from v$logfile;

MEMBER

/oracle/app/oradata/proddg2/redo03.log

/oracle/app/oradata/proddg2/redo02.log

/oracle/app/oradata/proddg2/redo01.log

/oracle/app/oradata/proddg2/std_redo04.log

/oracle/app/oradata/proddg2/std_redo05.log

/oracle/app/oradata/proddg2/std_redo06.log

```

控制文件中记录的数据文件位置都是主库的,进行restore前,需要进行数据文件重命名

**手动重命名:**

```

SQL> set line 500

SQL> set pages 0

SQL> select q'[alter database rename file ']' || name || q'[' to ]' || q'['/oracle/app/oradata/prod/]' || substr(name,instr(name,'/',-1)+1) || q'[';]' from v$datafile;

执行:

alter database rename file '/oracle/app/oradata/proddg2/system01.dbf' to '/oracle/app/oradata/prod/system01.dbf';

alter database rename file '/oracle/app/oradata/proddg2/sysaux01.dbf' to '/oracle/app/oradata/prod/sysaux01.dbf';

alter database rename file '/oracle/app/oradata/proddg2/undotbs01.dbf' to '/oracle/app/oradata/prod/undotbs01.dbf';

alter database rename file '/oracle/app/oradata/proddg2/users01.dbf' to '/oracle/app/oradata/prod/users01.dbf';

alter database rename file '/oracle/app/oradata/proddg2/example01.dbf' to '/oracle/app/oradata/prod/example01.dbf';

ERROR at line 1:

ORA-01511: error in renaming log/data files

ORA-01141: error renaming data file 1 - new file '/oracle/app/oradata/prod/system01.dbf' not found

ORA-01110: data file 1: '/oracle/app/oradata/proddg2/system01.dbf'

ORA-27037: unable to obtain file status

Linux-x86_64 Error: 2: No such file or directory

Additional information: 3

```

**使用sqlplus手动进行重命名,重命名后的文件要在指定目录存在。(适用于热备份方式同步搭建DG)**

**使用RMAN在restore前重命名:**

```

SQL> select q'[set newname for datafile ']' || name || q'[' to ]' || q'['/oracle/app/oradata/prod/]' || substr(name,instr(name,'/',-1)+1) || q'[';]' from v$datafile;

```

将获取到的内容复制到RMAN命令块中形成脚本

```

recovery.sh:

rman target / log=recover_log << EOF

run

{

allocate channel d1 device type disk;

allocate channel d2 device type disk;

allocate channel d3 device type disk;

catalog start with '/home/oracle/rman';

set newname for datafile '/oracle/app/oradata/proddg2/system01.dbf' to '/oracle/app/oradata/prod/system01.dbf';

set newname for datafile '/oracle/app/oradata/proddg2/sysaux01.dbf' to '/oracle/app/oradata/prod/sysaux01.dbf';

set newname for datafile '/oracle/app/oradata/proddg2/undotbs01.dbf' to '/oracle/app/oradata/prod/undotbs01.dbf';

set newname for datafile '/oracle/app/oradata/proddg2/users01.dbf' to '/oracle/app/oradata/prod/users01.dbf';

set newname for datafile '/oracle/app/oradata/proddg2/example01.dbf' to '/oracle/app/oradata/prod/example01.dbf';

release channel d1;

release channel d2;

release channel d3;

restore database;

switch datafile all;

}

exit

EOF

```

Recovery Manager complete.

**查看数据文件以及日志文件的记录:**

**数据文件:**

```

SQL> select name from v$datafile;

NAME

/oracle/app/oradata/prod/system01.dbf

/oracle/app/oradata/prod/sysaux01.dbf

/oracle/app/oradata/prod/undotbs01.dbf

/oracle/app/oradata/prod/users01.dbf

/oracle/app/oradata/prod/example01.dbf

```

数据文件重命名成功也恢复成功。

**日志文件:**

```

SQL> select member from v$logfile;

MEMBER

/oracle/app/oradata/proddg2/redo03.log

/oracle/app/oradata/proddg2/redo02.log

/oracle/app/oradata/proddg2/redo01.log

/oracle/app/oradata/proddg2/std_redo04.log

/oracle/app/oradata/proddg2/std_redo05.log

/oracle/app/oradata/proddg2/std_redo06.log

```

**日志文件还需要手动重命名,因为不存在proddg2目录,重命名至prod目录下**

**(日志文件是可以在sqlplus中mount状态下重命名的,不需要在对应目录存在日志文件)。**

**2.如果在备库此时存在如下参数时的情况:**

```

db_file_name_convert =/oracle/app/oradata/proddg2, /oracle/app/oradata/prod

log_file_name_convert=/oracle/app/oradata/proddg2, /oracle/app/oradata/prod

```

**恢复备库的控制文件:**

```

RMAN> restore controlfile from '/home/oracle/rman/standby.ctl';

SQL> alter database mount;

Database altered.

```

**查看数据文件与日志文件信息:**

```

SQL> select name from v$datafile;

NAME

/oracle/app/oradata/prod/system01.dbf

/oracle/app/oradata/prod/sysaux01.dbf

/oracle/app/oradata/prod/undotbs01.dbf

/oracle/app/oradata/prod/users01.dbf

/oracle/app/oradata/prod/example01.dbf

SQL> select member from v$logfile;

MEMBER

/oracle/app/oradata/prod/redo03.log

/oracle/app/oradata/prod/redo02.log

/oracle/app/oradata/prod/redo01.log

/oracle/app/oradata/prod/std_redo04.log

/oracle/app/oradata/prod/std_redo05.log

/oracle/app/oradata/prod/std_redo06.log

```

**再直接使用RMAN执行restore database即可。**

```

RMAN> restore database;

```

**总结:**

两种方式将主库的控制文件传给备库。

**1**.alter database create standby controlfile as '/home/oracle/control01.ctl';

```

拷贝到备库,将数据库启动到mount模式后,需要手动进行数据文件重命名,**但是要保证重命名后的路径下存在相应的数据文件。**

//该控制文件中记录的数据文件路径仍为主库的数据文件路径。

```

2.backup current controlfile for standby format '/home/oracle/%d_%I_%s_%p.bkp';

```

使用RMAN备份的控制文件,拷贝到备库时,使用RMAN进行恢复控制文件时

如果备库设置了db_file_name_convert与log_file_name_convert参数,

那么当数据库启动到mount时,就无需手动进行数据文件重命名,因为RMAN在恢复控制文件过程中,会依据该参数设置,自行修改控制文件中记录的数据文件路径日志文件路径。

如果备库没有设置db_file_name_convert与log_file_name_convert参数

那么就需要在restore前在RMAN的run块中对数据文件进行set new name 然后执行switch datafile all。

但是日志文件还是需要手动重命名。

```

3.另外意义

```

db_file_name_convert与log_file_name_convert参数的另外一个意义就是当主库创建数据文件等操作时,备库会根据该参数转化路径后自动创建一个相对应位置的数据文件,前提是STANDBY_FILE_MANAGEMENT参数为auto模式。

```

**疑问:备库的redo与standby redo是如何生成的,何时生成的。**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值