数据库迁移过程中使用热备份进行分时恢复

日期: 2008-06-11 作者:Darren 来源:TechTarget中国

  一个大型数据库的迁移过程中,一般只会有很短的停机时间,对于DBA来说,压力可想而之。本文将着重介绍一个缩短停机时间的好方法,详细内容请参考下文。


  注:本文中的示例适用于同平台、同版本数据库的迁移。


  解决方法如下:


  在工作环境中,我们可以通过一个热备份,应用归档恢复数据库到一致的状态,这时数据库可以被只读(read only)打开。


  然后我们可以继续应用归档来进行恢复,最后只需要短时间的停机,复制原数据库中的在线日志及归档日志、控制文件到新库中进行恢复,这时只需要极短的时间就可完成恢复。


  这个方法可以极大缩短割接时间。下文是一个参考示例的具体步骤:


  1.首先,启动数据库


  查询归档情况:







SQL> select name from v$archived_log;


NAME
——————————————-
E:ORACLEORADATAEYGLEREDO01.LOG
E:ORACLEORADATAEYGLEREDO02.LOG
E:ORACLEORADATAEYGLEREDO03.LOG
E:ORACLEORADATAEYGLEARCHIVEARC00001.001
E:ORACLEORADATAEYGLEARCHIVEARC00002.001
E:ORACLEORADATAEYGLEARCHIVEARC00003.001
E:ORACLEORADATAEYGLEARCHIVEARC00004.001
E:ORACLEORADATAEYGLEARCHIVEARC00005.001
E:ORACLEORADATAEYGLEARCHIVEARC00006.001
E:ORACLEORADATAEYGLEARCHIVEARC00001.001
E:ORACLEORADATAEYGLEARCHIVEARC00002.001


NAME
——————————————–
E:ORACLEORADATAEYGLEARCHIVEARC00003.001
E:ORACLEORADATAEYGLEARCHIVEARC00004.001
E:ORACLEORADATAEYGLEARCHIVEARC00005.001
E:ORACLEORADATAEYGLEARCHIVEARC00006.001


已选择15行。


  归档当前的日志:





SQL> alter system switch logfile;
系统已更改。

  2.备份数据库


  备份脚本:






alter tablespace system begin backup;
host copy E:ORACLEORADATAEYGLESYSTEM01.DBF e:oracleorabakSYSTEM01.DBF
alter tablespace system end backup;
alter tablespace undotbs1 begin backup;
host copy E:ORACLEORADATAEYGLEUNDOTBS01.DBF e:oracleorabakUNDOTBS01.DBF
alter tablespace undotbs1 end backup;
alter tablespace eygle begin backup;
host copy E:ORACLEORADATAEYGLEEYGLE01.DBF  e:oracleorabakEYGLE01.DBF
alter tablespace eygle end backup;


  
  执行备份:






SQL> @e:a.sql


表空间已更改。


已复制         1 个文件。



表空间已更改。



表空间已更改。


已复制         1 个文件。



表空间已更改。



表空间已更改。


已复制         1 个文件。



表空间已更改。



数据库已更改。


  3.更改数据并归档部分日志






SQL> insert into eygle.test select *from eygle.test;


已创建224行。


SQL> commit;


提交完成。


SQL> alter system switch logfile;


系统已更改。


SQL> insert into eygle.test select *from eygle.test;


已创建448行。


SQL> commit;


提交完成。


SQL> alter system switch logfile;


系统已更改。


SQL> insert into eygle.test select *from eygle.test;


已创建896行。


SQL> commit;


提交完成。


SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。


  4.执行恢复


  恢复备份的数据文件,然后启动数据库。


  使用当前日志及控制文件







SQL> startup mount;
ORACLE 例程已经启动。


Total System Global Area   47259136 bytes
Fixed Size                   454144 bytes
Variable Size              29360128 bytes
Database Buffers           16777216 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 197282 (在 11/13/2004 23:30:48 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:ORACLEORADATAEYGLEARCHIVEARC00008.001
ORA-00280: 更改 197282 对于线程 1 是按序列 # 8 进行的



指定日志: {=suggested | filename | AUTO | CANCEL}


ORA-00279: 更改 197393 (在 11/13/2004 23:32:22 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:ORACLEORADATAEYGLEARCHIVEARC00009.001
ORA-00280: 更改 197393 对于线程 1 是按序列 # 9 进行的
ORA-00278: 此恢复不再需要日志文件
’E:ORACLEORADATAEYGLEARCHIVEARC00008.001’



指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> alter database open read only;


数据库已更改。


SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。


Total System Global Area   47259136 bytes
Fixed Size                   454144 bytes
Variable Size              29360128 bytes
Database Buffers           16777216 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 197393 (在 11/13/2004 23:32:22 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:ORACLEORADATAEYGLEARCHIVEARC00009.001
ORA-00280: 更改 197393 对于线程 1 是按序列 # 9 进行的



指定日志: {=suggested | filename | AUTO | CANCEL}


ORA-00279: 更改 197423 (在 11/13/2004 23:32:51 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:ORACLEORADATAEYGLEARCHIVEARC00010.001
ORA-00280: 更改 197423 对于线程 1 是按序列 # 10 进行的
ORA-00278: 此恢复不再需要日志文件
’E:ORACLEORADATAEYGLEARCHIVEARC00009.001’



指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> alter database open read only;


数据库已更改。


SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。


Total System Global Area   47259136 bytes
Fixed Size                   454144 bytes
Variable Size              29360128 bytes
Database Buffers           16777216 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。


SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 197423 (在 11/13/2004 23:32:51 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:ORACLEORADATAEYGLEARCHIVEARC00010.001
ORA-00280: 更改 197423 对于线程 1 是按序列 # 10 进行的



指定日志: {=suggested | filename | AUTO | CANCEL}
E:OracleoradataeygleREDO01.LOG
ORA-00310: 存档日志包含序列 9;要求序列 10
ORA-00334: 归档日志: ’E:ORACLEORADATAEYGLEREDO01.LOG’



SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 197423 (在 11/13/2004 23:32:51 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:ORACLEORADATAEYGLEARCHIVEARC00010.001
ORA-00280: 更改 197423 对于线程 1 是按序列 # 10 进行的


指定日志: {=suggested | filename | AUTO | CANCEL}
E:OracleoradataeygleREDO02.LOG
已应用的日志。
完成介质恢复。
SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项


SQL> alter database open resetlogs;


数据库已更改。


SQL>


  :读者需要注意中间的部分,因为read only的打开并不影响数据库进一步的恢复(恢复可以分步进行)。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

Darren
Darren

相关推荐