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/