执行数据库备份、恢复和前滚
来自www.ibm/
简介
本文提供了执行数据库备份、恢复和前滚日志文件这些基本操作的循序渐进指南。以下示例将介绍这些实用程序句法上的变体,以便展示 DB2® 产品的灵活性。
通常,本主题将解决权限、所需连接、语法和有益的用法注释等问题,以成功执行备份、恢复或前滚过程。假设您熟悉 DB2 Universal Database™(DB2 UDB)引擎,并且系统满足下列要求:
1 安装了 DB2 UDB 版本 6 或 7。
2 已在 DB2 中创建了一个实例。
3 操作系统是 UNIX®、Microsoft Windows 98、Windows 2000 或 Windows NT。
4 DB2 的版本是个人版、工作组版、企业版(EE)或扩展企业版(EEE)。
5 本地机器或存储设备上有足够的磁盘空间保存备份映象。
注:本文中的所有示例都是从 DB2 命令行环境创建的。
创建 sample 数据库
这些示例中所用的数据库是一个“sample”数据库,可以通过执行下列操作创建该数据库:
在用于 DB2 V7.1 的 Windows NT 上:
5 单击屏幕左下角处的 Start 菜单。
5 单击 Programs。
5 单击(IBM DB2)。
5 单击 First Steps。
5 单击 Create the Sample Databases。
5 选择 Sample。
在 UNIX 上:
5 将用户切换成 DB2 实例所有者。
5 执行位于 $HOME/ instance owner/sqllib 的 db2profile
5 在命令行上输入 db2sampl。
注:如果没有到 db2sampl,则意味着可选的 db2sampl 脚本没有与其余 DB2 产品一起安装。需要手工创建一个数据库。
p>
测试前滚命令的效果
如果将使用 sample 数据库作为对下面示例的测试,请在 sample 数据库的一个表中更新或插入几行。这样,您将能够看到使用前滚过程与不使用前滚过程相对比的效果。例如,驻留在 sample 数据库中的一个表是 employee 表。在备份之后恢复数据库前,请发出与下面类似的命令:
db2 "update employee set empno = '11' where firstnme = 'CHRISTINE'"
     
The "empno" field for 'CHRISTINE' is changed from '10' to '11'.
   
然后,如果决定使用前滚选项,您将会看到这一更新已从日志文件中恢复。如果没有使用前滚选项,您将会看到先前的值“10”。
高级概述
在进行备份、恢复和前滚的过程前,从图形观点看一下该过程可能会有所获益。在我们单步执行该过程时,请参考下图以获取更清晰的信息。

数据库备份
在备份数据库前,请确保对 DB2 具有下列权限之一:
SYSADM
SYSCTRL
SYSMAINT
对于这些示例,创建一个存储数据库映象的目录,如 C:\backup。没有必要为了执行备份而与数据库连接,因为备份命令会自动创建连接。另外,请确保在执行脱机备份时没有其它应用程序与数据库连接,否则您将接收到一条 SQL1035N 错误消息。DB2“list applications”和 DB2“force applications all”是完成这一任务的有用命令。
有两种可以执行备份的方式。第一种是脱机数据库备份。这种备份方式需要至数据库的独占连接,因为将备份数据库中的所有表空间。第二种是联机数据库备份。这种备份方式对于那些运行生产数据库并且需要数据库中连续不断地运行一个或多个表空间的用户特别有用。当使用联机备份时,仅要备份的表空间需要用户有独占连接。这样允许数据库内的其它不需要备份的表空间仍保持联机,以供其它应用程序访问。
注:如果执行联机备份,请确保在数据库管理器配置文件中启用了前滚恢复参数 logretain = on 或 userexit **。如果还没有这样做,您将会接收到一条 SQL2413N 错误,并需要执行下列命令:
db2 "update dbm configuration using logretain on"
db2数据库安装
> db2stop
> db2start
**因为 userexit 选项需要详细的用法说明,所以本文将不对此进行讨论。
启用了 logretain 和/或 userexit 参数后,进行完整的数据库脱机备份。可以通过执行下列命令进行验证,以查看数据库是否处于备份挂起状态:
db2 "get database configuration for sample"
然后,查“Backup Pending”值(它将被设置为“YES”或“NO”)。进行了完整数据库备份后,您将能够在此后的任何时候执行联机表空间备份。
示例 1 — 将数据库脱机备份至本地目录
db2 "backup database sample user db2admin using db2admin
     
to c:\backup with 3 buffers buffer 1000 without prompting"
   
该命令将使用用户 db2admin 和密码 db2admin(仅在当前用户不具备必需的数据库权限时
才需要使用该用户和密码)产生数据库“sample”的备份映象。将使用 3 个缓冲区把该映象存储在 c:\backup 中,每个缓冲区的缓冲区大小为 1000 页面。“without prompting”键短语指定备份将以无人照看方式运行,并且任何通常需要用户介入的操作都将返回一条错误消息。
示例 2 — 将表空间级别联机备份至磁带设备
db2 "backup database sample tablespace (syscatspace,
     
userspace1) online to /dev/rmt0 without prompting"
   
该命令将产生数据库内指定表空间的备份映象。syscatspace 和 userspace1 是驻留在 sample 数据库中两个要备份的表空间。磁带机是 /dev/rmt0。由于命令中没有定义缓冲区和缓冲区页面的数量,所以缺省值将为 Buffers = 2 和 Buffer(size) = 1024 页面。当在 SCO UNIXware 7 上使用磁带设备时,必须指定缓冲区大小为 16 页面。
联机表空间备份的优点在于:数据库中的所有其它表空间都可用于处理。缺省值是“offline”,这要求在执行备份时断开所有应用程序与数据库的连接。
执行这些命令后,您应该在 DB2 命令行上接收到下列消息:
"Backup successful. The timestamp for this backup image is: timestamp"
timestamp是每个数据库备份映象的唯一标识,如果单个文件夹中有多个备份映象,则在您执行恢复时需要该标识。在 UNIX 系统上,时间戳记与备份映象文件名连接:
"ddhhmmss.seq"
在 Windows NT 系统上,备份映象存储在一个有 5 个层次的目录树中,该目录中也包含该时间戳记信息:
"pe\db2instance\nodexxx\catnxxxx\yyyymmdd\hhmmss.seq"
如需以前备份的数据库的信息,请输入下列命令:
db2 "list history backup all for database sample"
数据库恢复
在恢复数据库前,对 DB2 具有下列权限之一:
SYSADM
SYSCTRL
SYSMAINT
如果恢复至一个新数据库(不是现有的数据库),则需要 SYSADM 或 SYSCTRL。
脱机数据库恢复将需要一个独占连接;所以在这一任务期间应该无应用程序连接至数据库。而且,请确保在执行脱机恢复时没有其它应用程序与数据库连接,否则您将接收到一条 SQL1035 错误消息。
示例 1 — 从本地目录脱机恢复到一个现有数据库中
db2 "restore database sample user db2admin using db2admin
     
from c:\backup taken at 20010222145404 with 3 buffers buffer
     
1000 without rolling forward without prompting"
   
该命令将把保存在 c:\backup 中带有时间戳记 20010222145404 的数据库映象恢复到现有 sample 数据库中(请参考数据库备份一节中有关如何获取前面提到的时间戳记值的信息)。该命令将用备份的数据库映象文件有效地覆盖旧的 sample 数据库文件。键短语“without rolling forward”将阻止数据库管理器使恢复的数据库处于前滚挂起状态(如果在备份数据库时没有为前滚恢复启用该数据库,则不需要该短语)。如果您对将所有数据库文件恢复到上次成功的事务那一点感兴趣,而且在备份数据库时为前滚恢复启用了它,则忽略“without rolling forward”键短语。
如果没有使用关键字“from”,则当前目录将是备份映象的缺省位置。而且,如果只有一个数据库备份映象驻留在目标文件夹中,则不需要键短语“taken at timestamp”。
示例 2 — 将表空间从磁带设备联机恢复到现有数据库中
db2 "restore database sample tablespace (syscatspace,
     
userspace1) online from /dev/rmt0 taken at 20010222151429 newlogpath
     
/home/db2v71/samplelogs without prompting"
   
该命令在允许无限制地处理联机恢复命令未涉及的其它表空间的同时,把 syscatspace 和 userspace1 表空间恢复到现有 sample 数据库。而且,如果在同一个文件夹中有多个备份映象,则必须声明“taken at timestamp”键短语。如果恢复后不适合使用备份映象中的 logpath,则可以包括“newlogpath”关键字。例如,在路径不再有效或它当前正由另一个数据库使用时。
示例 3 — 脱机恢复到 AIX® 上新的数据库中