ORACLE的redo里是否包含 rename 和resize?

From
http://hi.baidu.com/zxtandy/blog/item/2df37dd0ce53008da1ec9c43.html

先备份datafile 3,再备份控制文件,然后rename file,datafile resize,shutdown.用dbms_restore恢复出controlfile,mount后进行恢复,可以看到恢复后的数据文件名是rename前的名,alert.log里面并没有因为rename产生的cannot identify/lock data file 10错误, 也就是说rename并没有包含在redo中并被应用.

----- 调置归档模式:

SQL> alter system set log_archive_dest = 'd:\ora92\oradata\ice\archive\' scope=spfile;
系统已更改。
SQL> alter system set log_archive_format = '%s.arc' scope=spfile;
系统已更改。
SQL> alter system set log_archive_start = true scope=spfile;
系统已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area    97589952 bytes                                       
Fixed Size                    453312 bytes                                       
Variable Size               58720256 bytes                                       
Database Buffers            37748736 bytes                                       
Redo Buffers                  667648 bytes                                       
数据库装载完毕。
SQL> alter database archivelog;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> archive log list
数据库日志模式             存档模式
自动存档              启用
存档终点             d:\ora92\oradata\ice\archive\
最早的概要日志序列      6
下一个存档日志序列    8
当前日志序列            8
SQL> alter system switch logfile;
系统已更改。

----创建测试表空间:
SQL> create tablespace test_rename datafile 'd:\ora92\oradata\ice\rename01.dbf' size 10m;
表空间已创建。
SQL> select file_id,file_name
   2   from dba_data_files;

    FILE_ID                                                                      
----------                                                                      
FILE_NAME                                                                       
--------------------------------------------------------------------------------
          1                                                                      
D:\ORA92\ORADATA\ICE\SYSTEM01.DBF                                               
                                                                                
          2                                                                      
D:\ORA92\ORADATA\ICE\UNDOTBS01.DBF                                              
                                                                                
          3                                                                      
D:\ORA92\ORADATA\ICE\RENAME01.DBF      

----备份测试表空间:                                          

SQL> alter tablespace test_rename begin backup;

表空间已更改。

SQL> host ocopy d:\ora92\oradata\ice\rename01.dbf d:\ora92\oradata\;

SQL> alter tablespace test_rename end backup;
表空间已更改。

----备份控制文件:
SQL> alter database backup controlfile to 'd:\ora92\oradata\controlbak.bak';
数据库已更改。

---- Rename Datafile:
SQL> alter tablespace test_rename offline;
表空间已更改。

--- OS上rename datafile 。
SQL> alter database rename file 'd:\ora92\oradata\ice\rename01.dbf' to 'd:\ora92\oradata\ice\rename02.dbf';
数据库已更改。
SQL> alter tablespace test_rename online;
表空间已更改。
SQL> select file_id,file_name
   2   from dba_data_files;

    FILE_ID                                                                      
----------                                                                      
FILE_NAME                                                                       
--------------------------------------------------------------------------------
          1                                                                      
D:\ORA92\ORADATA\ICE\SYSTEM01.DBF                                               
                                                                                
          2                                                                      
D:\ORA92\ORADATA\ICE\UNDOTBS01.DBF                                              
                                                                                
          3                                                                      
D:\ORA92\ORADATA\ICE\RENAME02.DBF  

系统已更改。
----Resize datafile:                                              
SQL> alter database datafile 3 resize 20m;

数据库已更改。

SQL> select bytes/1024
   2   from dba_data_files
   3   where file_id = 3;

BYTES/1024                                                                      
----------                                                                      
      20480                                                                      
SQL> alter system switch logfile;

系统已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

---- 用备份的控制文件,数据文件Restore:
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area    97589952 bytes                                       
Fixed Size                    453312 bytes                                       
Variable Size               58720256 bytes                                       
Database Buffers            37748736 bytes                                       
Redo Buffers                  667648 bytes                                       
数据库装载完毕。
SQL> recover database using backup controlfile;
ORA-00279: 更改 202902 (在 04/17/2006 11:20:45 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ORA92\ORADATA\ICE\ARCHIVE\9.ARC
ORA-00280: 更改 202902 对于线程 1 是按序列 # 9 进行的 
指定日志: {=suggested | filename | AUTO | CANCEL}
d:\ora92\oradata\ice\redo01.log
ORA-00310: 存档日志包含序列 7;要求序列 9
ORA-00334: 归档日志: 'D:\ORA92\ORADATA\ICE\REDO01.LOG'

SQL> recover database using backup controlfile;
ORA-00279: 更改 202902 (在 04/17/2006 11:20:45 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ORA92\ORADATA\ICE\ARCHIVE\9.ARC
ORA-00280: 更改 202902 对于线程 1 是按序列 # 9 进行的

指定日志: {=suggested | filename | AUTO | CANCEL}
d:\ora92\oradata\ice\redo02.log
ORA-00310: 存档日志包含序列 8;要求序列 9
ORA-00334: 归档日志: 'D:\ORA92\ORADATA\ICE\REDO02.LOG'

SQL> recover database using backup controlfile;
ORA-00279: 更改 202902 (在 04/17/2006 11:20:45 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ORA92\ORADATA\ICE\ARCHIVE\9.ARC
ORA-00280: 更改 202902 对于线程 1 是按序列 # 9 进行的

指定日志: {=suggested | filename | AUTO | CANCEL}
d:\ora92\oradata\ice\redo03.log
已应用的日志。
完成介质恢复。

SQL> alter database open;
alter database open
*
ERROR 位于第 1 行: 
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项


SQL> alter database open resetlogs;

数据库已更改。

-----验证结果:

SQL> select file_name,bytes/1024/1024
   2   from dba_data_files;

FILE_NAME                                                                       
--------------------------------------------------------------------------------
BYTES/1024/1024                                                                 
---------------                                                                 
D:\ORA92\ORADATA\ICE\SYSTEM01.DBF                                               
             500                                                                 
                                                                                
D:\ORA92\ORADATA\ICE\UNDOTBS01.DBF                                              
             200                                                                 
                                                                                
D:\ORA92\ORADATA\ICE\RENAME01.DBF                                               
             20                                                                 

可以看到file name 没有改变过来,而file size则改变过来了,

这就证明:redo log中会记录file size的改变,而file name的改变只会记录在控制文件中。

这个有什么用呢?

在DG当中用处就大了:

需要注意的是:
在primary 上rename a datafile,即使STANDBY_FILE_MANAGEMENT = auto,也需要在standby上手工执行相同的操作。


-------------------------修改相应的primary数据文件路径-----------------------
1.Offline 表空间:
Alter tablespace tools offline NORMAL;

2.Mv dbfile:
Mv /data4/oradata/crmtemp/tools02.dbf /disk3/oradata/crmtemp/

3.Rename:
Alter tablespace tools
rename datafile '/data4/oradata/crmtemp/tools02.dbf'
To '/disk3/oradata/crmtemp/tools02.dbf';

4.Online:
Alter tablespace tools online;

-------------------------修改相应的standby 数据文件路径-----------------------
1.Recover
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
2> DISCONNECT FROM SESSION;
确定已经所有的log都已经应用了。
2.Cancel RECOVER:
SQL> SELECT NAME, SEQUENCE#, ARCHIVED, APPLIED 
2> FROM V$ARCHIVED_LOG;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

3.Shutdown
SQL> SHUTDOWN;

4.Mv dbfile:
Mv /data4/oradata/crmtemp/tools02.dbf /disk3/oradata/crmtemp/

5.mount
SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;

6.Rename:
ALTER DATABASE RENAME FILE 
'/data4/oradata/crmtemp/tools02.dbf'
To '/data1/oradata/crmtemp/tools02.dbf';

7.Recover:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

  

alter database datafile '/data2/oradata/crmtemp/feedback_index04.dbf' resize 512m

primary上resize 这个动作,即使STANDBY_FILE_MANAGEMENT = manual , standby上也不需要做什么动作,既可以自动应用。

  

对于rename file ,是修改的控制文件 中的文件名,数据库中本身没有记录文件名,所以我猜测 rename file 并没有产生相关信息进入日志,所以standby需要手工处理。

而resize 产生了相关的日志的(大小变了),在standby一端能解析出这个命令来。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/230160/viewspace-620040/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/230160/viewspace-620040/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值