技术开发 频道

如何使用DB2 V9进行非增量重定向还原

【IT168 专稿】IBM的DB2 V9 引入了自动存储器管理,使用自动存储功能可以帮助您简化表空间的存储管理,新创建的使用自动存储功能的表空间,其容器和空间分配完全由 DB2数据库管理器确定。本文重点介绍使用DB2® V9 自动存储功能的数据库如何进行非增量重定向还原。

简介

    数据库可能会因为软件或硬件故障而不可用,可能会遇到存储问题、断电、应用程序故障或误操作等各种需要采取不同恢复措施的故障情况。本文重点介绍使用了DB2® V9 的自动存储功能,不允许增量备份的数据库如何进行重定向还原。由于使用自动存储器功能的数据库在还原方面和以往有了很大区别,客户在实际使用的过程中容易出现各种问题,所以本文对自动存储功能会有详细的阐述。

    自动存储特性最初是在DB2 V8.2.2中引入的,DB2 V9扩展了这一特性,使用自动存储功能可以帮助您简化表空间的存储管理,新创建的使用自动存储功能的表空间,其容器和空间分配完全由 DB2数据库管理器确定。

自动存储管理

    自动存储器跨磁盘和文件系统自动增大数据库大小。因此,在保持数据库管理的存储器性能和灵活性的同时,不再需要管理存储器容器。在DB2 V9.1中,已对多分区数据库增加了自动存储器支持。如果您使用的是带DPF(Data Partitioning Feature,数据库分区功能)的企业服务器版,那您可以使用支持自动存储器功能的多分区数据库。在DB2 V9中创建新数据库的时候,默认启用自动存储功能,主要目的是简化表空间的存储管理,使用自动存储功能的数据库有一个或多个相关联的存储器路径,在创建表空间的时候不用指定存储的路径等特性。对使用自动存储器功能的数据库,其表空间可以使用自动存储管理,也可以不使用自动存储管理。对于不使用自动存储器功能的数据库,则其表空间不能使用自动存储管理。

    自动存储器简化了存储管理,它使您能够指定用于数据库管理器存放表空间数据以及为各种用途分配空间的存储路径。另外,在创建和填充表空间时,DB2 将管理这些表空间的容器和空间分配。如果不需要使用自动存储器,则必须通过运行 CREATE DATABASE 命令并将 AUTOMATIC STORAGE 选项设置为NO,或通过使用 sqlecrea API 并将 SQLEDBDESCEXT 参数设置为 SQL_AUTOMATIC_STORAGE_NO 来创建数据库。

    自动存储器功能只能在创建数据库时指定,不能对已经创建的未使用自动存储器功能的数据库启用自动存储器;同样,对创建数据库时启用自动存储器的数据库也不能禁用自动存储器,变通的方法就是在创建表空间的时候可以指定是否使用自动存储器,即虽然数据库启用了自动存储器功能,但可以创建不使用自动存储器功能的表空间。

    由于对多分区配置引入了自动存储器数据库,所以更改了 db2look 命令。现在在发出 db2look 命令之前,必须确保所有数据库分区都是活动的。如果有任何数据库分区处于不活动状态,则会发出警告消息,该消息说明无法生成表空间的DDL。此 db2look 命令更改会影响所有表空间类型。

    接下来,我们将通过示例的方式分别解释如何在创建数据库的时候使用自动存储器功能。

    示例1:创建不使用自动存储器的DB2数据库DB2TEST1

CREATE DATABASE DB2TEST1 AUTOMATIC STORAGE NO ON /db2/databases/db2test1

    如果在实际过程中不需要使用自动存储功能,则必须在创建数据库时将 AUTOMATIC STORAGE 选项设置为 NO,否则,将创建使用自动存储器功能的数据库。 

    示例2:创建使用自动存储器的DB2数据库DB2TEST2

CREATE DATABASE DB2TEST2

    因为在DB2 V9中创建新数据库的时候,默认启用自动存储功能,我们在创建数据库的时候没有显式将指定AUTOMATIC STORAGE 选项设置为NO,所以新创建的数据库DB2TEST2 将自动启用自动存储功能,其数据库路径是使用 dftdbpath 数据库管理器配置参数来确定,其存储器路径也是使用 dftdbpath 数据库管理器配置参数来确定。 

    默认创建了3个表空间:SYSCATSPACE、TEMPSPACE1和USERSPACE1,都是使用自动存储管理。需要注意的是,对USERSPACE1表空间,和其在DB2 V8相比其表空间类型由常规变成了大型。 

    示例3:创建使用自动存储器的DB2数据库DB2TEST3

CREATE DATABASE DB2TEST3 ON /db2/databases/db2test3

    因为在DB2 V9中创建新数据库的时候,默认启用自动存储功能,我们在创建数据库的时候没有显式将指定AUTOMATIC STORAGE 选项设置为NO,所以新创建的数据库DB2TEST3 将自动启用自动存储功能,其数据库路径是:/db2/databases/db2test3,其存储器路径也是:/db2/databases/db2test3。 

    示例4:创建使用自动存储器的DB2数据库DB2TEST4

CREATE DATABASE DB2TEST4 AUTOMATIC STORAGE YES

    也可以在创建数据库的时候显式将指定AUTOMATIC STORAGE 选项设置为YES,效果和默认时相同,创建的数据库DB2TEST4也使用自动存储,其数据库路径和存储器路径由dftdbpath 数据库管理器配置参数确定。 

    示例5:创建使用自动存储器的DB2数据库DB2TEST5

CREATE DATABASE DB2TEST5 ON /db2/databases/db2test5/autostorage DBPATH ON
/db2/databases/db2test5

    因为在DB2 V9中创建新数据库的时候,默认启用自动存储功能,我们在创建数据库的时候没有显式将指定AUTOMATIC STORAGE 选项设置为NO,所以新创建的数据库DB2TEST5 将自动启用自动存储功能,数据库路径由DBPATH ON directory参数指定,在当前示例中数据库路径是:/db2/databases/db2test5,存储器路径由ON directory 参数指定,在当前示例中存储器路径是 /db2/databases/db2test5/autostorage。 


    对于前面显示的示例,下表总结了所使用的存储器路径。

表空间所使用的存储器类型


    本节主要描述表空间、缓冲池、容器以及在DB2 V9中引入自动存储功能后的一些变化。

     表空间用来存储表,抽象物理存储,由一个或多个容器组成,也就是说表空间可以分布在一个或多个物理设备上。有4k、8k、16k、32k的四种页面大小的表空间。为了提高性能,可以将一个表的索引存储到另一个表空间,将大对象存储到第三个表空间,任何表的数据都循环存储在表空间的所有容器中;默认的表空间有:SYSCATSPACE(4K,存储系统目录和表)、TEMPSPACE1(4K,临时表空间)、USERSPACE1(4K,用户表空间)。 

    表空间的类型有四种:REGULAR(如USERSPACE1)、SYSTEM TEMPORARY(如TEMPSPACE1)、LARGE(用来存储LOB数据)、USER TEMPORARY(用来存储用户临时表)。 

    表空间按管理方式分为系统管理表空间(SMS:system manage space)和数据库管理表空间(DMS)。对于SMS表空间,每个容器都是操作系统的文件空间中的一个目录,由操作系统的文件管理器控制存储空间。对于DMS 表空间,每个容器或者是固定大小的预分配文件,或者是物理设备(例如,磁盘),由数据库管理器控制存储空间。 

    SMS表空间,其容器是文件系统的目录,是非预分配的,大小的限制为文件目录的大小,容器的个数在创建的时候决定,不能修改;如果使用SMS表空间,用户数据不能分开存储,也就是不能把用户数据分别存储在数据、索引、大数据表空间中。DMS表空间,其容器可是是file或raw devices ,其容器可以增加,修改,或改变大小;如果使用DMS表空间,用户数据可以分开存储,也就是可以把用户数据分别存储在INDEX,TABLE和LOB表空间中。 

    缓冲池是指从磁盘读取高速缓存表和索引数据页时或修改它们时分配给它们的主存储器。缓冲池的目的是改进系统性能。从内存访问数据要比从磁盘访问数据快得多,因此,数据库管理器需要读写磁盘(I/O)的次数越少,性能也越好。可以创建多个缓冲池,虽然在大多数情况下只需要一个,建议对每一种页大小的表空间分别建一个缓冲池。 

    缓冲池用来进行表或索引的缓存,一个数据库至少要有一个缓冲池 ,缓冲池的页大小可以是4k,8k,16k或32k; 表空间的页面大小要和缓冲池保持一致,缓冲池的目的是用来减少直接的I/O访问,提高I/O访问速度。默认的缓冲池为IBMDEFAULTBP(4K)。 

    在DB2 V9中如果想让数据库管理器自动调整缓冲池,首先数据库参数SELF_TUNING_MEM需要设置为ON,其次,缓冲池在创建的时候需要指定AUTOMATIC属性,比如创建缓冲池BP1,可以使用如下命令创建: 

   

CREATE BUFFERPOOL "BP1" IMMEDIATE SIZE 250 AUTOMATIC PAGESIZE 4 K ;


    对已经创建好的缓冲池如果也想让数据库管理器自动调整,可以用ALTER BUFFERPOOL命令修改,比如修改IBMDEFAULTBP缓冲池:    

ALTER BUFFERPOOL IBMDEFAULTBP IMMEDIATE SIZE 250 AUTOMATIC;


    容器是物理存储设备。可以用目录名、设备名或文件名来标识它。 

    可以为表空间分配容器,单个表空间可以横跨多个容器,但每个容器只能属于一个表空间。 

    对自动存储器数据库,创建表空间时,有两种存储器类型可以选择: 

    (1)DB2管理存储器(自动存储器) 
    (2)手工管理存储器 

    如果新建的表空间使用DB2管理存储器(自动存储器),根据要创建的表空间类型不同,其空间管理会有所区别,当其表空间类型是常规或者大型时,将自动创建成数据库管理空间(DMS), 当其表空间类型是系统临时或者用户临时时,将自动创建成系统管理空间(SMS)。使用自动存储,就不再需要担心如何添加容器以及监控容器的增长等,自动存储会自动增加表空间在磁盘和文件系统上的大小。 

    如果新建的表空间是使用手工管理存储器,其空间管理又分系统管理空间(SMS)和数据库管理空间(DMS)两种方式。对于使用自动存储功能的表空间,其容器和空间管理完全由DB2数据库管理器确定,因此,系统管理空间(SMS)和数据库管理空间(DMS)只在使用手工管理存储器的表空间中会直接用到,在使用自动存储器功能的表空间中不会直接用到。同样,容器的定义和管理也只在使用手工管理存储器的表空间中会直接用到,在使用自动存储器功能的表空间其容器完全由DB2数据库管理器确定。

使用自动存储管理

    接下来我们通过例子来具体看一下如何使用自动存储管理,具体步骤如下:

1. 创建一个使用自动存储器的数据库DB2TEST1修改其数据库配置参数,使其使用归档日志,然后对数据库做一次全备。

2. 分别创建使用自动存储器功能的常规表空间TABLESPACE1和不使用自动存储器功能的大型表空间TABLESPACE2。

3. 对测试数据库DB2TEST1做一次全备,以便将来可以恢复到此时的状态。

4. 创建示例表 "DB2INST1"."EMPLOYEE"。

5. 对测试数据库DB2TEST1再做一次全备,以便将来可以恢复到此时的状态。

6. 利用全量备份还原测试数据库DB2TEST1。

7. 非增量定向还原测试数据库DB2TEST1。


创建测试数据库 

    我们首先创建使用自动存储功能的测试数据库DB2TEST1,打开 DB2 命令窗口,发出CREATE DATABASE语句,创建数据库,如 清单 1所示:

--清单 1. 创建自动存储器DB2数据库 CREATE DATABASE DB2TEST1 on /db2/databases/db2test1/auto_storage DBPATH ON /db2/databases/db2test1

    这样我们创建了一个自动存储器数据库DB2TEST1,其数据库路径是/db2/databases/db2test1,自动存储路径是/db2/databases/db2test1/auto_storage,默认创建了3个表空间:SYSCATSPACE、TEMPSPACE1、USERSPACE1,都是使用自动存储管理。创建好数据库后,连接数据库DB2TEST1,我们需要把数据库的日志管理模式改为归档,具体如清单2所示。

--清单 2. 更改数据库参数 UPDATE DATABASE CONFIGURATION USING LOGARCHMETH1 LOGRETAIN IMMEDIATE

    建议大家使用LOGARCHMETH1,此参数指定已归档日志的主要目标的介质类型,不要继续使用LOGRETAIN或USEREXIT参数。LOGARCHMETH1参数缺省值为OFF,取值范围可以是 LOGRETAIN、 USEREXIT、 DISK、TSM或VENDOR,各自的含义如下:

 OFF 

    指定不使用日志归档方法。如果 logarchmeth1 和 logarchmeth2 都设置为 OFF,那么认为数据库正在使用循环日志记录,且不可前滚恢复。这是缺省值。

LOGRETAIN 

    此值仅可用于 logarchmeth1,且等价于将 logretain 配置参数设置为 RECOVERY。 如果指定此值,将自动更新 logretain 配置参数。

USEREXIT 

    此值仅对 logarchmeth1 有效,且等价于将 userexit 配置参数设置为 ON。如果指定此值,将自动更新 userexit 配置参数。

DISK 

    此值后必须紧跟冒号(:),然后是现有标准路径名,日志文件将在其中归档。例如,如果将 logarchmeth1 设置为 DISK:/u/dbuser/archived_logs,那么将归档日志文件放入名为 /u/dbuser/archived_logs 的目录。 

    注: 如果正在归档至磁带,可以使用 db2tapemgr 实用程序来存储和检索日志文件。

TSM 

    如果指定不带任何附加配置参数,此值指示应该使用缺省管理类,将日志文件归档在本地 TSM 服务器上。如果此值后紧跟冒号(:)和 TSM 管理类,那么使用指定的管理类来归档日志文件。

VENDOR 

    指定将使用供应商库来归档日志文件。此值后必须紧跟冒号(:)和库的名称。库中提供的 API 必须使用备份并复原供应商产品的 API。 

    注: 如果将 logarchmeth1 或 logarchmeth2 设置为 OFF 以外的值,那么必须配置数据库以进行前滚恢复。 

    如果更新 userexit 或 logretain 配置参数,将自动更新 logarchmeth1,反之亦然。然而,如果您要使用 userexit 或 logretain, 必须将 logarchmeth2 设置为 OFF。 

    更改成功后,此时你执行如下命令:

FORCE APPLICATIONS ALL
    命令成功后,用LIST APPLICATIONS看所有应用程序是否都断开了,如果没有断开,再重复执行FORCE APPLICATIONS ALL,保证断开后,把数据库做一次全备,如清单3所示。
--清单 3.备份数据库 BACKUP DATABASE DB2TEST1 TO /db2/databases/backup/

 

    完全备份成功后,连接上数据库,现在您可以创建示例表空间了。这样我们就创建了一个测试库DB2TEST1,其使用归档日志,不允许增量备份。

创建示例表空间

    创建表空间既可以在服务器或本地执行命令创建,也可以在本地Windows环境上使用图形化界面的方式创建,为了使用图形化界面,我们首先来编目远程的数据库服务器,如清单4所示。

--清单 4. 编目远程数据库 CATALOG ADMIN TCPIP NODE 192.168.0.1 REMOTE 192.168.0.1 CATALOG TCPIP NODE db2inst1 REMOTE 192.168.0.1 SERVER 50000 CATALOG DATABASE DB2TEST1 AS MYDB AT NODE db2inst1

    把IP地址是192.168.0.1,端口号是50000的数据库服务器在本地编目为节点db2inst1,并把数据库DB2TEST1在本地编目为MYDB。 

    接下来我们创建使用自动存储器功能的表空间TABLESPACE1,连接上数据库DB2TEST1后,发出CREATE TABLESPACE命令,如清单5所示。

--清单 5. 创建常规表空间TABLESPACE1,使用自动存储 CREATE REGULAR TABLESPACE TABLESPACE1 PAGESIZE 4 K MANAGED BY
AUTOMATIC STORAGE BUFFERPOOL IBMDEFAULTBP

    注意,我们在MANAGED BY后面跟的是AUTOMATIC STORAGE,表示新创建的表空间将使用自动存储。查看表空间可以使用LIST TABLESPACES命令,在DB2 命令行中输入下列命令,如清单6所示。

--清单 6. 查看表空间 LIST TABLESPACES SHOW DETAIL

 

    你可以看到TABLESPACE1已经创建成功,其空间管理类型是数据库管理空间,具体如清单7所示。

--清单 7. 查看表空间结果 

表空间标识 = 3
名称 = TABLESPACE1
类型 = 数据库管理空间
内容 = 所有持久数据。常规表空间。
状态 = 0x0000
详细解释:
正常
总计页数 = 8192
可用页数 = 8160
已用页数 = 96
可用页数 = 8064
高水位标记(页) = 96
页大小(以字节计) = 4096
扩展数据块大小(页) = 32
预取大小(页) = 32
容器数 = 1
最小恢复时间 = 2007-09-11-09.18.46.000000
    还可以通过在本地(Windows环境下)控制中心,对远程实例和数据库连接后,对MYDB数据库进行操作,右键单击“表空间”文件夹,选创建,打开创建表空间向导,如图1所示。

    在名称中输入表空间名TABLESPACE1,选中“让DB2管理存储器(自动存储器)(L)”,这样将创建使用自动存储器的表空间,你一定注意到了,当你选中“让DB2管理存储器(自动存储器)(L)”时向导比选中“我想手工管理存储器(I)”,少了空间管理和容器两部分功能,这是因为使用自动存储的表空间容器和空间管理是自动完成的。 

    接着我们要创建一个使用非自动存储的大型表空间TABLESPACE2,其使用32K页大小,因此在创建之前我们需要先创建一个32K页大小的缓冲池,如清单8所示。

--清单8. 创建缓冲池 CREATE BUFFERPOOL BUFFERPOOL_32K IMMEDIATE SIZE 250 AUTOMATIC PAGESIZE 32 K

 

    注意,在DB2 V9中引入了自动自调整内存机制,默认情况下启动,我们在创建缓冲池BUFFERPOOL_32K加了一个选项AUTOMATIC,表示可以对缓冲池的内存启用自调整。 

    命令成功完成后,我们接下来创建32K页大小的使用非自动存储的大型表空间TABLESPACE2,如清单9所示。

--清单 9. 创建大型表空间 CREATE LARGE TABLESPACE TABLESPACE2 PAGESIZE 32 K MANAGED BY DATABASE
USING (
FILE '/db2/databases/tablespaces/tablespace_32k' 640 ) EXTENTSIZE
16 OVERHEAD 10.5 PREFETCHSIZE 16 TRANSFERRATE 0.14 BUFFERPOOL BUFFERPOOL_32K

    注意,此时我们在MANAGED BY后面跟的是DATABASE,表示空间管理是数据库管理(DMS),此时容器也需要自己定义。

备份测试数据库

    现在我们来备份测试数据库,好方便我们在下面的例子中可以恢复到此时的状态,如清单10所示。

--清单 10.备份数据库 BACKUP DATABASE DB2TEST1 TO /db2/databases/backup/

    命令执行完后,显示如下:

备份成功。此备份映像的时间戳记是:20070911175125
创建示例表 

    接下来我们创建示例表,在/home/db2inst1/目录下我们编写脚本employee.sql,内容如清单11所示。
--清单 11. employee.sql内容 CREATE TABLE "DB2INST1"."EMPLOYEE" ( "EMPNO" CHAR(6) NOT NULL , "FIRSTNME" VARCHAR(12) NOT NULL , "MIDINIT" CHAR(1) , "LASTNAME" VARCHAR(15) NOT NULL , "PHOTO" BLOB (10 M ) NOT NULL LOGGED NOT COMPACT, "WORKDEPT" CHAR(3) , "PHONENO" CHAR(4) , "HIREDATE" DATE , "JOB" CHAR(8) , "EDLEVEL" SMALLINT NOT NULL , "SEX" CHAR(1) , "BIRTHDATE" DATE , "SALARY" DECIMAL(9,2) , "BONUS" DECIMAL(9,2) , "COMM" DECIMAL(9,2) ) IN "TABLESPACE1" LONG IN "TABLESPACE2";

 

    接下来执行employee.sql脚本:

$db2 –tvf /home/db2inst1/employee.sql

    执行成功后,表DB2INST1.EMPLOYEE的用户数据存放在TABLESPACE1,大型字段存放在TABLESPACE2中,其中TABLESPACE1是使用自动存储器,TABLESPACE2是使用的非自动存储器。

再次备份测试数据库 

    现在我们来再次备份测试数据库,好方便我们在下面的例子中可以恢复到此时的状态,如清单12所示。

--清单 12.备份数据库 BACKUP DATABASE DB2TEST1 TO /db2/databases/backup/

    命令执行完后,显示如下:

备份成功。此备份映像的时间戳记是:20070911175656

利用全量备份还原测试数据库 

    使用RESTORE DATABASE 命令来在发生问题(例如介质或存储器故障、断电或者应用程序故障)后恢复数据库或表空间。如果已经备份了数据库或各个表空间,则可以在它们由于某种原因损坏时重新创建它们。 

    需要注意的是,我们的备份介质中所包含的自动存储路径在我们要复原的环境中必须存在,这次还原我们将利用第一次全量备份的备份文件,时间戳为20070911175125,通过DB2命令行发出RESTORE DATABASE命令,具体如清单13所示。

--清单 13.还原数据库 RESTORE DATABASE DB2TEST1 FROM /db2/databases/backup/ TAKEN AT 20070911175125

    由于DB2TEST1数据库存在并且在发出RESTORE DATABASE命令时将被替换,所以会返回一个提示消息,内容如下:

SQL2539W 警告!正在复原至与备份映像数据库相同的现有数据库。数据库文件将被删除。 
要继续吗?(y/n)

    我们指定y,将完成还原操作。 

    数据库还原操作需要一个独占连接:启动任务后,restore实用程序会防止其他应用程序访问数据库,直到还原操作成功完成,所以不能再对该数据库运行任何应用程序,但表空间还原操作可以联机完成,前提是该数据库是归档数据库。 

    命令成功后,连接数据库,会报数据库处于ROLL-FORWARD PENDING状态,这是因为归档数据库执行完还原后,需要进行前滚恢复,具体返回消息如下:

SQL1117N 由于 ROLL-FORWARD PENDING,不能连接或激活数据库 "DB2TEST1"。SQLSTATE=57019
    接下来我们对DB2TEST1继续进行前滚恢复,发出ROLLFORWARD命令,具体见清单14所示。
--清单 14.前滚恢复数据库 ROLLFORWARD DATABASE DB2TEST1 TO END OF LOGS AND STOP

 

    执行成功后,就可以正常访问数据库了,从返回的消息可以看到已处理的日志文件有两个S0000001.LOG、S0000002.LOG两个,此时具体的消息如清单15所示下。

清单 15.前滚恢复数据库返回消息 

前滚状态

输入数据库别名 = DB2TEST1
节点数已返回状态 = 1

节点号 = 0
前滚状态 = 未暂挂
下一个要读取的日志文件 =
已处理的日志文件 = S0000001.LOG - S0000002.LOG
上次落实的事务 = 2007-09-11-09.56.54.000000 UTC

DB20000I ROLLFORWARD命令成功完成。

非增量重定向还原测试数据库


    以上介绍了如何对数据库进行还原和前滚恢复,接下来看一下如何对不允许增量备份的数据库进行非增量重定向还原。 

    在数据库备份操作期间,保留了一个记录,它记录了与正在备份的表空间相关的所有表空间容器。在还原操作期间,会检查备份映像中列示的所有容器,以确定它们是否存在并可访问。若这些容器中的一个或多个由于介质故障(或由于任何其他原因)而不可访问,还原操作将失败。在这种情况下,还原操作需要重定向至不同的容器。 

    可以通过调用RESTORE DATABASE命令并指定REDIRECT参数来重新定义表空间容器,需要注意的是对使用自动存储功能的表空间需要重新指定自动存储路径,而不是重定向至不同的容器。在重定向还原操作期间,如果目录和文件容器不存在,将自动创建。数据库管理器不会自动创建设备容器。容器重定向为管理表空间容器提供了相当大的灵活性。 

    我们使用时间戳记为20070911175656的全备备份映像进行重定向还原,首先,连接上DB2TEST1数据库(如果要还原的是另外的机器,可以在其上面建立一个名称为DB2TEST1的数据库,再连接上),发出RESTORE DATABASE命令,使用REDIRECT选项,如清单16所示。

--清单 16.重定向还原数据库第一步 RESTORE DATABASE DB2TEST1 TAKEN AT 20070911175656 ON
/db2/databases/new_db2test1/auto_storage DBPATH ON
/db2/databases/new_db2test1 REPLACE EXISTING REDIRECT

    我们此次重定向还原数据库,通过ON和DBPATH ON参数将数据库路径和自动存储器路径都做了更改,即把数据库路径由/db2/databases/db2test1改成了/db2/databases/new_db2test1,把自动存储器路径由/db2/databases/db2test1/auto_storage改成了/db2/databases/new_db2test1/auto_storage。 

    DBPATH ON参数表示目标数据库目录。如果实用程序还原到一个现有数据库,将忽略次参数。知道的驱动器和目录必须是本地的。如果备份映像包括启用了自动存储器的数据库,且未指定ON参数,则此参数与TO参数是同义词,且仅数据库目录被更改,而与数据库关联的存储路径不更改。 

    TO target-directory参数我们这里没有使用,简单介绍一下这个参数,因为在实际应用过程中,也会经常用到。此参数表示目标数据库目录,如果实用程序还原到一个现有数据库,将忽略此参数。指定的驱动器和目录必须是本地的。如果备份映像包括启用了自动存储器的数据库,则仅数据库目录被更改,而与数据库关联的存储路径不更改。 

    ON参数重新定义与自动存储区数据库相关联的存储路径。此参数只能用在启用了自动存储器的数据库上,如果将此参数与未启用自动存储器的数据库将导致错误(SQL20321N)。使用此参数后, 不再使用备份映像中定义的现有存储路径,自动存储器表空间自动重定向至新路径。如果没有为自动存储器数据库指定此参数,则存储器路径仍为备份映像中定义的路径,此时,备份映像中定义的路径在我们要还原的服务器上要真实存在,否则整个重定向最终会失败。 

    可以指定一个或多个路径,各个路径之间用逗号分隔。每个路径必须有绝对路径名称且该路径必须在本地。如果磁盘上尚没有该数据库,且未指定DBPATH ON参数,则第一个路径用作目标数据库目录。 

    对不使用自动存储,且需要重新定义其容器的表空间TABLESPACE2发出SET TABLESPACE CONTAINERS命令。对TABLESPACE2的表空间标识可以通过LIST TABLESPACES SHOW DETAIL得到。表空间TABLESPACE1、SYSCATSPACE、TEMPSPACE1和USERSPACE1,都是使用自动存储管理,所以不需要发出SET TABLESPACE CONTAINERS命令。如清单17所示。

--清单 17.重定向还原数据库第二步 SET TABLESPACE CONTAINERS FOR 4 USING (FILE '/databases/tablespace1/tablespace_32k' 640)

    成功后完成了第一步和第二步之后,发出RESTORE DATABASE DB2TEST1 CONTINUE命令,如清单18所示。

--清单 18.重定向还原数据库第三步 RESTORE DATABASE DB2TEST1 CONTINUE

    如果第三步失败,或者如果已异常终止了还原操作,则可以从第一步重启启动重定向的还原。 

    命令成功后,连接数据库,会报数据库处于ROLL-FORWARD PENDING状态,这是因为归档数据库执行完还原后,需要进行前滚恢复,具体返回消息如下:

SQL1117N 由于 ROLL-FORWARD PENDING,不能连接或激活数据库 "DB2TEST1"。SQLSTATE=57019

    接下来我们对DB2TEST1继续进行前滚恢复,发出ROLLFORWARD命令,具体见清单19所示。

--清单 19.前滚恢复数据库 ROLLFORWARD DATABASE DB2TEST1 TO END OF LOGS AND STOP

    执行成功后,就可以正常访问数据库了,从返回的消息可以看到已处理的日志文件有S0000003.LOG,此时具体的消息如清单20所示下。

清单 20.前滚恢复数据库返回消息 

前滚状态

输入数据库别名 = DB2TEST1
节点数已返回状态 = 1

节点号 = 0
前滚状态 = 未暂挂
下一个要读取的日志文件 =
已处理的日志文件 = S0000003.LOG - S0000003.LOG
上次落实的事务 = 2007-09-11-13.51.46.000000 UTC

DB20000I ROLLFORWARD命令成功完成。

    重定向还原,至此完全做完,连接上DB2TEST1数据库,会发现有我们在第二次全备之后创建的示例表"DB2INST1"."EMPLOYEE"。

参考资料 

    学习

DB2 V9.1新增内容
数据恢复和高可用指南和参考 
管理指南:计划
DB2信息中心 

    获得产品和技术

• 下载 DB2 V9 测试版,试用本文中描述的特性。
• 使用可直接从 developerWorks 下载的 IBM 试用软件 构建您的下一个开发项目。 

    讨论

• 参与ITPUB论坛讨论。
• 参与 developerWorks blog 并加入 developerWorks 社区。 
 

0
相关文章