现在的位置: 首页 > 数据库 > 正文

Oracle数据库热备份(联机备份)

2014年11月17日 数据库 ⁄ 共 1999字 暂无评论 ⁄ 阅读 1,247 次
文章目录

冷备份必须关闭数据库且备份全部数据文件,这在大型超市等数据系统中无法使用。而热备份则解决了这个问题,不仅不需要关闭数据库,而且还可以只备份那些变化的表空间或数据文件。

热备份必须在归档模式下,且只有数据文件是必须备份的。因为控制文件、重做日志文件、归档日志文件都是靠冗余来保护的而不需要备份来保护。如许多商业Oracle数据库系统要求有3个控制文件,每个重做日志组必须包括3个成员文件,归档日志在归档模式下可多备份同时写等。

热备份优缺点

优点:

  • 备份期间数据库可正常使用;
  • 无需全文件备份,可灵活备份到表空间或特定数据文件,降低了备份时间;

缺点:

  • 对DBA技术要求较高,维护困难,易出错且后果严重;
  • 数据库运行在归档模式,系统开销增加,管理和维护成本增加;

其中,系统效率的影响并不是主要缺点,易出错和技术上的高要求才是局限性。所以,若非7*24运行的数据库,最好隔段时间就冷备份一次。否则,一旦热备份出错后果是灾难性的。

热备份步骤

1)查看当前所有文件的备份状态,使用语句:select * from v$backup;

查看当前所有文件的备份状态是必要的,因为在数据库不只一个DBA的情况下,若两个热备份同时进行会对数据缓冲区与重做日志文件产生极大压力,造成性能低下。最好做到,每次只备份一个表空间。

2)查看要备份的文件名及表空间,使用语句:select file_id,file_name,tablespace_name from dba_data_files;

3)将要备份的表空间设置为备份状态,使用语句:alter tablespace tbs_name begin backup;

表空间处于备份状态时,所有数据文件的文件头被冻结(锁住)并产生检查点,SCN在备份时不发生变化。

此时可以对表空间内表进行SELECT访问,也可以进行DML操作。但由于数据文件被锁无法写入,DML操作会写入重做日志文件,这一操作对重做日志缓冲区和重做日志文件的压力都加大了,可能会造成性能的下降。

所在,在进行热备份时要注意几点:

  • 重做日志缓冲区和重做日志文件适当增大;
  • 每次只备份一个表空间;
  • 在DML操作最少的时间进行备份;

4)使用操作系统命令将数据文件物理拷贝到指定备份位置,如Windows使用COPY,Linux使用cp;

5)将备份完成的表空间设置为非备份状态,使用语句:alter tablespace tbs_name end backup;

结束表空间的备份状态,即将表空间所对应的所有数据文件的文件头解锁,此后数据库对这些数据文件的操作就恢复正常。

理论上讲,到此为止就已经完成了热备份。然而,备份期间很可能会产生一些DML操作,这些操作是写在重做日志文件中的,将其归档到日志文件也是很有必要的。

6)将当前重做日志文件信息手工写入归档日志文件,使用语句:alter system achive log current;

该命令还造成重做日志组的切换和产生检查点,当然,也可使用命令alter system switch logfile。

热备份性能

由于对大的表空间进行联机备份要消耗大量的系统资源,会造成在线用户的活动效率受到影响,所以有必要使用手段缓解联机备份对系统效率造成的影响。

对于某些数据不再变动或较长时间不变的数据可以放入专门的表空间,然后将其改为只读表空间,这样可以在一次备份后以后避免对这些数据的联机备份。

更改表空间为只读状态,使用语句:alter tablespace tbs_name read only;

更改表空间状态后,必须对该表空间所对应的所有数据文件进行物理备份,因为read write状态下的备份对read only无效。另外,表空间状态更改前后也要对控制文件进行备份,因为表空间状态改变后控制文件无法识别状态改变之前的表空间。同样,表空间改加read write之后也需要对数据文件和控制文件进行备份。

在更改表空间状态时,Oracle内部完成了以下操作:

  • 将数据文件的文件头以当前的SCN号冻结;
  • 数据库后台写进行DBWR将不再写该表空间所对应的任何数据文件;
  • 对该表空间所对应的每一个数据文件执行检查点操作;

热备份中系统崩溃

由于热备份大文件需要时间较长,在拷贝过程中系统崩溃会造成一种囧境:

  • 由于表空间处于备份状态数据文件头被冻结,表空间所对应的数据文件与数据库已不同步所以无法打开数据库。
  • 由于要结束表空间备份状态需要使用命令alter tablespace tbs_name end backup,但数据库无法打开也就执行不了,就无法将表空间备份状态结束。

面对这样的两难困境,可以启动数据库加载状态,然后使用命令结束表空间备份状态,再使用alter database open打开数据库。此时,之前没有完成的备份变成无用备份,必须立刻删除掉并重新对该表空间进行联机备份。

声明:该笔记转载自《Oracle DBA培训教程》,仅用于个人学习,若侵犯到您的版权敬请告知!

» 声明:本站文章源于个人经验总结或书籍、互联网转载,内容仅用于个人学习,请勿转载,否则后果自负!

给我留言

留言无头像?