设为首页 收藏本站
查看: 943|回复: 0

[经验分享] DB2数据库备份与恢复

[复制链接]

尚未签到

发表于 2016-11-16 01:06:25 | 显示全部楼层 |阅读模式
DB2数据库备份与恢复
  所谓数据备份,就是保留一套备用系统,当运行系统出现故障时,能够以最小的时间恢复原来的数据。数据库的备份,可以是整个数据库的拷贝,也可以是其中一部分数据的拷贝(一个或多个表空间)。数据备份一般有两个层次:
硬件级备份:用冗余的硬件来保证系统的连续运行,比如双机容错、硬盘镜像等方式。如果主硬件损坏,后备硬件能够立刻接替其工作。
软件级备份:将系统数据保存到其他可以移动的介质上,如磁带、软盘、光盘等。当系统出现故障后,可以将系统恢复到备份时的状态。本文主要讨论的是数据库的软件级备份。
  一、DB2数据库的备份
  DB2数据库可以备份整个数据库,也可以备份其中的一个或多个表空间;可以在应用连接到数据库时和事务正在处理时进行备份(这称为联机备份),也可以在没有任何应用连接到数据库时进行备份(这称为脱机备份)。(见表一)
DB2数据库使用命令BACKUP来备份。BACKUP命令需要SYSADM,SYSCTRL或SYSMAINT的权限,其命令语法为:BACKUP DATABASE 数据库别名 TO 介质名
或者
BACKUP DATABASE 数据库别名 TABLESPACE 表空间名 [ONLINE} TO 介质名
  其中介质名一般指定为介质的绝对路径,在 AIX 中不回转的磁带机设备名为 /dev/rmt0,回转的磁带机设备名为 /dev/rmt0.n 。也可将数据备份在硬盘上,介质名即为其绝对路径。BACKUP命令在指定的介质上生成一个或多个备份文件,以下显示了在 AIX 4.3 for RS/6000 上生成的文件名结构:
以下是 BACKUP 命令的一些例子:
(1)此例子是在指定的服务器目录 /backup/mydb 下给 mydb 数据库创建一个完整的备份:
BACKUP DATABASE mydb TO /backup/mydb
(2)此例子是给 mydb 数据库中指定的表空间 myspace1 进行联机备份,在进行备份时,应用可继续更新数据库:
BACKUP DATABASE mydb TABLESPACE myspace1 ONLINE TO /backup/mydb
  表一 数据库能否进行向前恢复带来的影响
  如果不允许进行向前恢复
  如果允许进行向前恢复
  在发生失败后,可以把数据库恢复到失败前与最后一次事务一致的状态。
  同样,也支持恢复到与最后一次事务一致的状态。
  可以把数据库恢复到任何有效的备份状态,但是不能重新执行发生在备份之后的事务。
  可以把数据库恢复到任何有效的备份状态,并且可以重新执行从发生失败到当前为止提交的事务。
  只能在没有任何应用连接到数据库时进行备份(这称为脱机备份)。
  可以在应用连接到数据库时和事务正在处理时进行备份(这称为联机备份)。同样支持脱机备份。
  每一个备份都必须包含整个数据库的当前状态。
  一个备份可能包含整个数据库的当前状态,或者是一个或多个表空间。数据库的表空间可以单独地备份和恢复。
  二、DB2数据库的恢复
  DB2数据库提供了三种恢复类型:
1、崩溃恢复(crash recovery):崩溃恢复是用来在失败后立即进行恢复,把数据库恢复到一个事务一致状态,此状态的所有更改只有在执行提交事务后才生效。崩溃恢复使用命令 RESTART 执行。
2、备份恢复(restore recovery):备份恢复可从上一次所作的备份中恢复数据库的内容。备份恢复使用 RESTORE 命令执行。
3、向前恢复(forward recovery):在一个数据库从备份中恢复了以后,向前恢复可以重新执行那些在备份后才更改了数据库的操作。在这种情况下,数据库可以恢复到备份和当前时间之间的任何时间断。向前恢复使用 ROLLFORWORD 命令执行。
崩溃恢复和备份恢复对任何数据库都适用,而向前恢复只有在数据库被指定可以使用此功能是才使用。表一显示了此功能带来的影响。
  表一 数据库能否进行向前恢复带来的影响
  如果不允许进行向前恢复
  如果允许进行向前恢复
  在发生失败后,可以把数据库恢复到失败前与最后一次事务一致的状态。
  同样,也支持恢复到与最后一次事务一致的状态。
  可以把数据库恢复到任何有效的备份状态,但是不能重新执行发生在备份之后的事务。
  可以把数据库恢复到任何有效的备份状态,并且可以重新执行从发生失败到当前为止提交的事务。
  只能在没有任何应用连接到数据库时进行备份(这称为脱机备份)。
  可以在应用连接到数据库时和事务正在处理时进行备份(这称为联机备份)。同样支持脱机备份。
  每一个备份都必须包含整个数据库的当前状态。
  一个备份可能包含整个数据库的当前状态,或者是一个或多个表空间。数据库的表空间可以单独地备份和恢复。
  
可以通过把数据库配置参数 LOGRETAIN 或 USEREXIT 设置为 YES 来使向前恢复生效。日志会由于生成新的文件而不断增加,并且它们是无限制的。在这种情况下,必须采取一些办法把旧的日志文件保存到文档中,以防止文件系统被日志占满。
  1、RESTART 命令
此命令是当一些操作还在处理时发生断电或软件崩溃后要发出的第一个命令。它建立一个数据库的连接,并使用日志来把数据库恢复到事务一致状态。所有在失败发生前由提交操作所引起的数据库更改都会生效。所有在失败前被撤消的操作和失败时正在处理的事务对数据库进行的更改都被撤消。
下面是 RESTART 命令的例子:
RESTART DATABASE mydb
  2、RESTORE 命令
此命令使用存储在备份中的内容来恢复数据库的内容。RESTORE 命令可以创建一个新的数据库。RESTORE 命令需要 SYSADM,SYSCTRL或SYSMAINT特权。RESTORE 命令要使用的备份可能包含整个数据库或一组表空间。恢复整个数据库必须脱机进行,恢复表空间可以联机进行,也就是在还有应用连接到数据库时进行。RESTORE 命令语法为:
RESTORE DB 目标数据库别名 [TABLESPACE 表空间名] [FROM 介质名] [TAKEN AT 时间]
  下面是一些 RESTORE 命令的例子:
(1)从一个特定目录(/backup/mydb)中的备份来恢复 mydb 数据库。如果 mydb 不能够进行向前恢复,数据库将被恢复到备份时的状态,而且可以立即使用。如果能够进行向前恢复,数据库会被置为向前挂起(pending)状态,直到它被执行向前恢复命令之后才能被使用。
RESTORE DATABASE mydb FROM /backup/mydb
(2)下面的命令是对数据库 mydb 进行恢复,并且在外部指定不进行向前恢复,数据库可以被立即使用。
RESTORE DATABASE mydb FROM /backup/mydb WITHOUT ROLLING FORWARD
(3)下面的例子是从一个指定的目录(/backup/mydb)中来恢复 mydb 数据库的一个指定的表空间,此恢复要使用指定的日期和时间:
RESTORE DATABASE mydb TABLESPACE ONLINE FROM /backup/mydb TAKEN AT 20000926201226
  3、ROLLFORWARD 命令
ROLLFORWARD 命令是在执行了一个 RESTORE 命令之后执行的,以便对数据库或它的表空间进行向前恢复。ROLLFORWARD 命令需要SYSADM,SYSCTRL 或 SYSMAINT 特权,并且数据库必须能够进行向前恢复。
ROLLFORWARD 命令可以适用于整个数据库或是一个或多个表空间,它们的状态此时都是向前挂起(pending)的。如果向前恢复整个数据库,此过程必须是脱机的,而且数据库可以被恢复成备份时间和当前时间之中的任何时间段。如果只向前恢复单独的表空间,此过程既可以是联机的也可以是脱机的,但是必须把表空间向前恢复到当前时间后,再重新执行所有引起更改的提交操作,这样可保证被恢复的表空间和数据库中的其它部分保持一致。ROLLFORWARD 命令语法为:
ROLLFORWARD DATABASE 数据库名 [TO {时间,END OF LOGS}][TABLESPACE {ONLINE,表空间名}]
  下面是一些 ROLLFORWARD 命令的例子:
(1)此例子使 mydb 数据库恢复到当前时刻。字句 AND STOP 是让数据库不被置为 ROLLFORWARD PENDING 状态,并且可以被存取:
ROLLFORWARD DATABASE mydb TO END OF LOGS AND STOP
(2)下面的例子向前恢复 mydb 数据库,并重新执行在指定日期和时间之前提交的所有事务:
ROLLFORWARD DATABASE mydb TO 2000-09-26-10.3059 AND STOP
(3)下面的例子只把数据库 mydb 中的某一表空间向前恢复。此命令是在执行了一次表空间级别的恢复后发出的,它只适用于被恢复的表空间。此命令指出向前恢复是联机进行的,并且要进行到当前时间(日志末尾):
ROLLFORWARD DATABASE mydb TO END OF LOGS AND STOP TABLESPACE ONLINE
注:如果数据库中有一些列是 LOB 数据类型的,并且它们被创建带有 NOT LOGGED 选项,那么对这些列进行的更新操作就没有被记录到日志中,向前恢复就不会对这些列进行操作。如果在向前恢复过程中,遇到了没有日志的列,它们的值会被置为十六进制的0。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-300732-1-1.html 上篇帖子: 在JAVA中调用DB2存储过程 下篇帖子: db2 HA环境下许可证的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表