先备份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 mountORACLE 例程已经启动。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当前日志序列 8SQL> 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 mountORACLE 例程已经启动。
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.ARCORA-00280: 更改 202902 对于线程 1 是按序列 # 9 进行的 指定日志: {=suggested | filename | AUTO | CANCEL}d:\ora92\oradata\ice\redo01.logORA-00310: 存档日志包含序列 7;要求序列 9ORA-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.ARCORA-00280: 更改 202902 对于线程 1 是按序列 # 9 进行的
指定日志: {=suggested | filename | AUTO | CANCEL}d:\ora92\oradata\ice\redo02.logORA-00310: 存档日志包含序列 8;要求序列 9ORA-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.ARCORA-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 toolsrename datafile '/data4/oradata/crmtemp/tools02.dbf'To '/disk3/oradata/crmtemp/tools02.dbf';4.Online:Alter tablespace tools online;-------------------------修改相应的standby 数据文件路径-----------------------1.RecoverSQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE2> 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.ShutdownSQL> SHUTDOWN;4.Mv dbfile:Mv /data4/oradata/crmtemp/tools02.dbf /disk3/oradata/crmtemp/5.mountSQL> 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 512mprimary上resize 这个动作,即使STANDBY_FILE_MANAGEMENT = manual , standby上也不需要做什么动作,既可以自动应用。
对于rename file ,是修改的控制文件 中的文件名,数据库中本身没有记录文件名,所以我猜测 rename file 并没有产生相关信息进入日志,所以standby需要手工处理。而resize 产生了相关的日志的(大小变了),在standby一端能解析出这个命令来。