现在的位置: 首页 > 综合 > 正文

DB2 重定向恢复脚本

2018年04月26日 ⁄ 综合 ⁄ 共 6933字 ⁄ 字号 评论关闭

本文说明了实现 DB2 重定向恢复的过程,实际上提供了 Korn shell 和 Perl 脚本来帮助您亲自在 UNIX 平台上设置该过程。

简介

如果您曾经需要将 IBM® DB2® 数据库及其数据从一个环境复制到另一个环境, 那么 DB2 重定向恢复是实现您目标的最快、最彻底的方法。 而且,如果数据库有许多表空间,那么您也许对使用脚本的半自动方法感兴趣, 与以手工方式构建重定向恢复并运行恢复相比,这种方法更快、更可靠且更易于使用。

本文将描述实现 DB2 重定向恢复的脚本方法,提供我所开发的使 DB2 重定向恢复过程半自动化的 KORN shell 脚本和 Perl 脚本示例,并逐步告诉您如何使用它们。



回页首

优缺点

DB2 重定向恢复是将整个数据库及其数据一起从一个环境复制到另一个环境的最快方法。 将脚本与 GUI 或基于文本的编辑器的搜索和替换特性一起使用,可以加快构建您所需的重定向恢复语句的过程。 与以手工方式执行该过程相比,脚本方法执行起来更可靠更容易。

然而,DB2 重定向恢复不能用于将数据从一个操作系统移动到另一个操作系统。 例如,不能将在运行 AIX® 操作系统的服务器上进行备份的 DB2 恢复到运行 z/OS™、OS/400® 或 Windows® 操作系统的服务器上。

环境

本文中的脚本在运行 AIX 操作系统和 DB2 版本 8、7 及 6 的服务器上测试过。KORN shell 和 Perl 脚本应该在任何具有类 UNIX® 操作系统(它们支持这些类型的脚本)的服务器上都能工作。(我想起了 Linux 和 Linux/390。)这些脚本被设计成在本机 UNIX 环境中运行, 而不打算在 DB2 脚本中心客户机窗口(DB2 Script Center Client Window)下运行。

在开始之前,要切记下列两条警告:

  • 在尝试对大型数据库运行脚本之前,先练习对小型测试数据库运行它们。
  • 如果有任何想要保存的设置或数据,那么在试图恢复到目标数据库环境之前,请先备份它。



回页首

脚本

profile.ksh 该脚本显示了 .profile 文件外观的示例。
dbaenv.ksh 该脚本设置由下面记载的 db2*.* 脚本使用的 DBA 环境变量。(请参阅 设置指示信息
db2redirected.restore.ksh 这是针对源 DB2 数据库运行的脚本, 该数据库已经备份过并且要将它恢复到目标 DB2 数据库。 从该脚本生成的输出将用于把备份恢复到目标 DB2 数据库。 (请参阅 运行脚本指示信息
db2redirected.restore.shell.ksh 这是一个脚本 shell,用于创建将运行 DB2 重定向恢复的脚本。

该脚本由 db2redirected.restore.ksh 使用,它无法自行运行。

db2redirected.restore.pl 这为源 DB2 数据库中的所有表空间生成 DB2 SET TABLESPACE CONTAINERS 语句。 如果有许多表空间,那么这个脚本可以节省手工输入的时间。

该脚本由 db2redirected.restore.ksh 调用,它无法自行运行。

db2deactivate.ksh 该脚本由生成的脚本调用,您将运行这个生成的脚本,以将 DB2 备份从源数据库恢复到目标数据库。



回页首

设置环境

设置这些脚本,使它们在 DB2 实例标识下运行。 可以将它们设置成在任何具有正确权限级别的标识下运行,以执行各种 DB2 命令。 下面使用的目录路径和名称可能会有所变化。这里是为准备使用脚本所需采取的步骤:

  1. 用有备份源 DB2 数据库权限的标识登录到源服务器。(通常是 DB2 实例标识。) 注:需要用有恢复到目标 DB2 数据库权限的标识在目标服务器上重复这些步骤。
  2. 在 $HOME 目录路径中,编辑 .profile 文件,并将下面三行添加到用于您标识的文件底部。 要查看示例,请参阅本文所附的 profile.ksh 文件。
    export PATH=$PATH/$HOME/bin:
    . dbaenv.ksh >/dev/null
    echo "DBA environment set up for the $ScriptDBName database."

  3. 从主目录执行以下命令来创建脚本目录(名为 bin )和输出目录。
    mkdir bin
    mkdir output

  4. 将目录更改至脚本目录。 cd bin
  5. 将本文所附的 dbaenv.kshdb2*.* 脚本复制、下载、FTP 或传输到新建的 bin 目录。
  6. 编辑 dbaenv.ksh 脚本文件并遵循注释中的指示信息。您需要更改的关键项是将 databaseName 更改为源 DB2 数据库名。 如果您使用的电子邮件地址和路径名与本文中记载的不同,则还要更改它们。
  7. 使脚本变为可执行的。 chmod 755 *
  8. 将目录更改至主目录。 cd
  9. 输入命令 . .profile

    根据 UNIX 管理员设置服务器的方法,该命令可能要有所不同。 如果它不能正确工作,请尝试打开一个新窗口,再次用该标识登录。

  10. 在目标服务器上,用适当权限的标识重复上面的第 1 步到第 9 步。



回页首

运行脚本

这些脚本假设已经在 /bin/ksh 中安装了 KORN 脚本程序,在 /usr/bin/perl 中安装了 Perl 脚本。另外,该过程假设:如果目标环境中需要任何存储在数据库之外的用户定义函数或存储过程, 您将以手工方式移动它们,因为 DB2 备份不包括这些对象。

可以恢复 DB2 备份,并将它重定向到另一个正在相同类型的操作系统下运行的 DB2 数据库。 执行重定向恢复所需的 DB2 命令语句是:

  1. 一条 DB2 RESTORE DATABASE INTO 命令
  2. 为数据库中每个表空间都执行一条 SET TABLESPACE CONTAINERS 命令
  3. 一条 DB2 RESTORE DATABASE CONTINUE 命令。

如果正在恢复联机备份,可能还需要恢复 DB2 日志文件并针对目标数据库发出 DB2 ROLLFORWARD DATABASE 命令。

下面的 db2redirected.restore.ksh 脚本将生成 SQL 文件中所需的所有命令,并且在 ksh 文件中生成可用于执行 DB2 重定向恢复的脚本。 在生成的 ksh 脚本运行之前,必须先编辑它。这是保护您自己的安全特性。

如果需要将文件容器重定向到目标服务器上的不同路径,则可能一定要编辑 SQL 文件并使用搜索和替换命令来更改 SET TABLESPACE CONTAINERS 语句。必须针对备份的源数据库运行 db2redirected.restore.ksh 脚本。必须针对要用于恢复的目标数据库环境运行生成的 ksh 脚本。

警告:如果没有更改 SET TABLESPACE CONTAINER 语句, 并在同一台 AIX 服务器上运行生成的 ksh 脚本和 SQL 命令,可能会破坏已备份数据库的容器,并给您自己带来许多问题。 您需要花些时间,规划将做些什么事情并确保在适当编辑和更改已生成的 ksh 脚本和 SQL 命令之后才运行它们。 在以手工方式执行重定向恢复时,也同样有这样的风险。

注:如果源数据库备份是在很久以前做的,并且您是针对该数据库的当前 DB2 目录运行这一过程, 那么可能会同时发生下列两个问题或发生其中一个问题:

  • 首先,脚本可能会为新的表空间生成 SET TABLESPACE CONTAINERS 语句,这些新的表空间在进行原始备份时在数据库中还不存在。 当运行至目标数据库的 DB2 重定向恢复时,这些将导致警告消息。
  • 其次,脚本不会为进行原始备份时已存在于数据库,但自那以后被删除的旧表空间生成 SET TABLESPACE CONTAINERS 命令。 当运行至目标数据库的 DB2 重定向恢复时,这些缺失的语句将导致错误消息。 需要以手工方式为自原始备份以来被删除的所有表空间添加缺失的语句。 如果源数据库与备份匹配,那么将不会发生因使用这种方法而产生的警告消息或错误。

建议:为了避免上面注释中提到的两个问题,用必需的参数安排 db2redirected.restore.ksh 脚本的运行时间,使其与源 DB2 数据库的备份在同一时间运行,并备份生成的 ksh 和 SQL 输出文件。然后,如果在任何时候需要从旧的 DB2 备份运行数据库的重定向恢复, 那么您就会有一个表空间容器语句,它与进行备份时的 DB2 目录相匹配。



回页首

详细步骤

如果您已经遵循了上面的所有预备步骤,那么应该准备进行以下操作:

  1. 登录到源服务器,备份源 DB2 数据库。可能要执行至 TSM(Tivoli 存储管理器,Tivoli Storage Manager)、磁盘或磁带的脱机或联机备份。源备份在目标服务器上必须是可用的和可见的。如果运行联机备份, 则需要一份自备份以来 DB2 日志文件的副本, 以便您可以恢复和前滚目标 DB2 环境。如果已经有了备份,则可以直接转至下一步。
  2. 运行 db2redirected.restore.ksh 脚本。有三个必需参数和四个可选参数。 脚本中有关于所有七个参数的注释。下面是一些如何运行该脚本的示例:

示例 1— 如果不带任何参数运行该脚本,那么它将显示注释,告诉您什么值是必需的。

db2redirected.restore.ksh

必须将备份数据库名(Backup Database Name)作为第一个参数传递到该脚本。
必须将备份时间戳记(Backup TimeStamp)CCYYMMDDHHMMSS 作为第二个参数传递到该脚本。
必须将目标数据库名(Target Database Name)作为第三个参数传递到该脚本。

示例 2— 如果使用参数 db2prod 20020901030000 db2test 在 db2prod 标识下针对 db2prod 数据库运行该脚本,则生成 ksh 脚本和 SQL 文件,它们可用于将 db2prod 备份恢复到 db2test 数据库。

db2redirected.restore.ksh db2prod 20020603020309 db2test

示例 3 — 如果使用参数 db2prod 20020901030000 db2test production test 在 db2prod 标识下针对 db2prod 数据库运行该脚本,则生成 ksh 脚本和 sql 文件,它们可用于将 db2prod 备份恢复到 db2test 数据库。另外, 在生成的 sql 文件中出现的所有“production”一词都被更改成单词“test”。

db2redirected.restore.ksh db2prod 20020603020309 db2test production test

在所有上面的示例中,该脚本将显示类似于下面 清单 1 中所示的注释,它告诉您生成的 ksh 和 SQL 输出文件的位置。这些注释提供有关您必须采取的步骤和您可能需要进行的更改的指示信息, 以完成 DB2 重定向恢复过程。

清单 1. db2redirected.restore.ksh 脚本生成的注释

  
db2redirected.restore.ksh Vers: 09/28/2002 on ServerName on Mon Jun 10 08:31:22 CDT 2002 ended.
Highest Return Code = 0
Output located in /db2/db2prod/output/ db2redirected.restore.ksh.db2prod.into.db2test.20020928.out
SQL located in /db2/db2prod/output/
db2redirected.restore.ksh.db2prod.into.db2test.20020928.out.sql
New script located in /db2/db2prod/output/
db2redirected.restore.ksh.db2prod.into.db2test.20020928.out.ksh
==============================================================
= > Change to the output directory.
cd /db2/db2prod/output
= > Edit the generated sql file and use search and replace to change directory paths
to support the target environment if needed. Change the restore from tsm to restore
from disk or tape if your source DB2 backup is on one of these environments. Change
the restore from an offline to an online if needed.
vi db2redirected.restore.ksh.db2prod.into.db2test.20020928.out.sql
= > Edit the generated ksh file and comment out the exit statement.
vi db2redirected.restore.ksh.db2prod.into.db2test.20020928.out.ksh
= > Logon to the target environment.
= > Create the target DB2 database if it does not already exist.
= > Copy the generated ksh and sql files from the source environment.
= > chmod 755 *.ksh to allow the generated script to be executed.
= > Run the generated script. db2redirected.restore.ksh.db2prod.into.db2test.20020928.out.ksh
==============================================================

请遵循上面注释中的指示信息。如果在运行生成的重定向恢复脚本时看到任何错误, 则需要修正这些错误,然后重新运行。如果由于任何原因您需要停止初始恢复过程然后再次启动,则可以使用以下命令来停止重定向恢复:

db2 restore database db2test abort

在重新运行之前,还需要删除目标数据库并重新创建它。

警告:如果由于空间错误而导致重定向恢复失败并且日志文件已填满, 那么发出 df -k 命令可能不会直接显示这个问题。其原因可能是: 当 DB2 停止恢复过程并回滚它试图做的工作时,会释放任何辅助日志,从而释放填满的空间。DB2 在执行重定向恢复时, 不使用目标数据库配置中的覆盖 logpath,而是使用缺省日志路径。 如果缺省 logpath 没有足够的空间来支持重定向恢复,请与系统管理员联系,要求他们在该路径下的文件系统中添加更多的可用空间。

该方法的一个替代方法是:将 newlogpath 语句添加到生成的 SQL 文件中的恢复命令, 只要新日志路径的文件系统有足够的空间来支持恢复。

如果恢复了联机备份,则需要将与源联机备份匹配的日志文件的备份复制到目标环境并发出以下命令:

db2 rollforward database db2test to end of logs and stop

在 DB2 重定向恢复完成之后,检查一下是否可以连接到目标数据库:

db2 connect to db2test

如果可以连接到该数据库,检查一下是否可以从表中选择行。例如,可以发出以下命令:

db2 "select * from syscat.tables"

如果需要更改目标环境的 DB2 日志路径,可以发出以下命令:

db2 update db cfg for db2test using newlogpath logpath

(其中, logpath是要为日志在目标环境中指派的路径)。

如果为新目标数据库创建了新实例,则需要将环境设置为支持 TCP/IP, 以便人们可以用象 DB2 控制中心(DB2 Control Center)工具之类的客户机软件来远程连接新数据库。

要求操作系统管理员将类似于下面所示的两个新项添加到 /etc/services 文件中。db2test_com 50008 和 db2test_int 50009 这两项是用户在配置客户机软件时所需的服务名和端口号,以便它可以连接到 DB2 实例。

db2test_com		50008/tcp
db2test_int 50009/tcp

当 AIX 管理员完成 /etc/services 项之后,您需要执行下面显示的两条命令。

db2set DB2COMM=tcpip
db2 update dbm cfg using svcename db2test_com

第一条命令将 DB2COMM 注册表变量设置为支持 TCP/IP 通信, 第二条命令将数据库管理服务名配置成与 /etc/services 通信服务名匹配。

发出 db2stopdb2start 以停止和重新启动实例,现在您应该可以配置工作站客户机软件,并可以远程连接到新的 DB2 实例和已经从备份恢复的数据库。



回页首

结束语

使用 DB2 重定向恢复将 DB2 数据库及其数据从一个环境移动到另一个环境是一个复杂的过程。 本文和这些脚本试图使这一过程变得简单一些。象计算机上的大多数复杂任务一样, 一旦对某个环境设置完毕,并使之运行,将它用于其它环境就容易许多。 如果您可能需要移动一个包含许多表空间和容器的数据库,那么您会发现这个方法确实很有帮助。

抱歉!评论已关闭.