您的位置:首页 > 其它

Windows 7 SP1 64bit 实施单机环境下DB2 V9.5.7 HADR实现实例级故障切换

2011-06-30 21:54 399 查看
High Availability Disaster Recovery (HADR)是数据库级别的高可用性数据复制机制,
HADR
实现是基于
HDR

Informix
实现的(是数据库中高可用性灾难恢复相对比较成熟的功能)。本质上讲,
HADR
是一种日志传送功能(
DB2 UDB
现在支持这种功能),但它传送的不是固化的磁盘上的日志,而是日志缓冲区中的日志。这种方法提供了充分的粒度来满足解决方案的高可用性需求。
HADR
复制发生在数据库层。

在生产环境下,HADR
环境需要两台数据库服务器:主数据库服务器(
primary
)和备用数据库服务器(
standby
)。当主数据库中发生事务操作 时,会同时将日志文件通过
TCP/IP
协议传送到备用数据库服务器,然后备用数据库对接受到的日志文件进行重放(
Replay
),从而保持与主数据库的一 致性。当主数据库发生故障时,备用数据库服务器可以接管主数据库服务器的事务处理。此时,备用数据库服务器作为新的主数据库服务器进行数据库的读写操作, 而客户端应用程序的数据库连接可以通过自动客户端重新路由(
Automatic Client Reroute
)机制转移到新的主服务器。当原来的主数据库服务器被修复后,又可以作为新的备用数据库服务器加入
HADR
。通过这种机制,
DB2 UDB
实现了数据库的灾难恢复和高可用性,最大限度的避免了数据丢失。



实施过程及命令行步骤:

一、清理
DB2环境,避免傻逼问题出现

C:/IBM/SQLLIB/BIN>db2ilist

DB2

BAK


C:/IBM/SQLLIB/BIN>db2idrop bak

DB20000I DB2IDROP 命令成功完成。


C:/IBM/SQLLIB/BIN>db2ilist

DB2


C:/IBM/SQLLIB/BIN>cd ..


C:/IBM/SQLLIB>dir

驱动器 C
中的卷没有标签。

卷的序列号是 C470-0EBA


C:/IBM/SQLLIB 的目录


2011/02/22 20:59 <DIR> .

2011/02/22 20:59 <DIR> ..

2011/02/22 20:59 <DIR> adsm

2011/06/16 17:19 <DIR> BIN

2011/02/22 20:59 <DIR> bnd

2011/02/23 09:27 <DIR> cfg

2011/02/22 20:11 <DIR> clidriver

2011/02/22 20:11 <DIR> conv

2011/03/31 14:05 <DIR> dasfcn

2007/10/02 23:11 241 db2cli.opt

2011/02/22 20:10 <DIR> doc

2011/02/23 09:27 <DIR> FUNCTION

2011/02/22 20:11 <DIR> help

2011/02/22 20:59 <DIR> include

2011/02/22 20:12 <DIR> infopop

2010/11/30 15:28 787,408 INFOPOPS_JHELP_CN.exe

2010/11/30 15:29 1,700,448 INFOPOPS_WHELP_CN.exe

2011/02/22 20:59 <DIR> java

2011/02/22 20:59 <DIR> lib

2011/02/27 02:25 <DIR> license

2011/02/22 20:11 <DIR> map

2011/02/22 20:59 <DIR> MISC

2011/02/22 20:11 <DIR> msg

2011/02/22 20:59 <DIR> Readme

2011/02/22 20:59 <DIR> samples

2011/02/22 20:10 <DIR> security

2011/02/27 02:25 <DIR> tivready

2011/03/19 14:21 <DIR> TOOLS

3 个文件
2,488,097
字节

25 个目录
75,457,306,624
可用字节


C:/IBM/SQLLIB>db2icrt db2inst1

DB20000I DB2ICRT 命令成功完成。


C:/IBM/SQLLIB>db2icrt db2inst2

DB20000I DB2ICRT 命令成功完成。


C:/IBM/SQLLIB>cd bin


C:/IBM/SQLLIB/BIN>hadr.cmd

"语法
: handson.cmd <SL510>"

"运行错误,请检查脚本
"


C:/IBM/SQLLIB/BIN>set db2instance=db2inst1


C:/IBM/SQLLIB/BIN>db2start

ADM12026W DB2 服务器检测到尚未注册产品
"DB2 Enterprise Server Edition"
的有效许

可证。

SQL1063N DB2START 处理成功。


C:/IBM/SQLLIB/BIN>db2 drop db sample

SQL1031N 在指示的文件系统中找不到数据库目录。
SQLSTATE=58031


C:/IBM/SQLLIB/BIN>db2stop

SQL1064N DB2STOP 处理成功。


C:/IBM/SQLLIB/BIN>db2idrop db2inst1

DB20000I DB2IDROP 命令成功完成。


C:/IBM/SQLLIB/BIN>set db2instance=db2inst2


C:/IBM/SQLLIB/BIN>db2start

ADM12026W DB2 服务器检测到尚未注册产品
"DB2 Enterprise Server Edition"
的有效许

可证。

SQL1063N DB2START 处理成功。


C:/IBM/SQLLIB/BIN>db2 drop db sample

SQL1031N 在指示的文件系统中找不到数据库目录。
SQLSTATE=58031


C:/IBM/SQLLIB/BIN>db2stop

SQL1064N DB2STOP 处理成功。


C:/IBM/SQLLIB/BIN>db2idrop db2inst2

DB20000I DB2IDROP 命令成功完成。




二、创建
2个实例,
db2inst1
作为主,
db2inst2
作为副。库以
sample
库为例

C:/IBM/SQLLIB/BIN>db2icrt db2inst1

DB20000I DB2ICRT 命令成功完成。


C:/IBM/SQLLIB/BIN>set db2instance=db2inst1


C:/IBM/SQLLIB/BIN>db2start

ADM12026W DB2 服务器检测到尚未注册产品
"DB2 Enterprise Server Edition"
的有效许

可证。

SQL1063N DB2START 处理成功。


C:/IBM/SQLLIB/BIN>db2 update dbm cfg using svcename 33333

DB20000I UPDATE DATABASE MANAGER CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2set db2comm=tcpip


C:/IBM/SQLLIB/BIN>db2 terminate

DB20000I TERMINATE 命令成功完成。


C:/IBM/SQLLIB/BIN>db2stop

SQL1064N DB2STOP 处理成功。


C:/IBM/SQLLIB/BIN>db2start

ADM12026W DB2 服务器检测到尚未注册产品
"DB2 Enterprise Server Edition"
的有效许

可证。

SQL1063N DB2START 处理成功。


C:/IBM/SQLLIB/BIN>db2sampl.exe


Creating database "SAMPLE"...

Connecting to database "SAMPLE"...

Creating tables and data in schema "JAMIN"...

Creating tables with XML columns and XML data in schema "JAMIN"...


'db2sampl' processing complete.



三、
将主库设置为归档模式,这是必须的。


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using LOGRETAIN RECOVERY

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 backup db sample to c:/temp


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



C:/IBM/SQLLIB/BIN>db2icrt db2inst2

DB20000I DB2ICRT 命令成功完成。


C:/IBM/SQLLIB/BIN>set db2instance=db2inst2


C:/IBM/SQLLIB/BIN>db2start

ADM12026W DB2 服务器检测到尚未注册产品
"DB2 Enterprise Server Edition"
的有效许

可证。

SQL1063N DB2START 处理成功。


C:/IBM/SQLLIB/BIN>db2 update dbm cfg using svcename 44444

DB20000I UPDATE DATABASE MANAGER CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2set db2comm=tcpip


C:/IBM/SQLLIB/BIN>db2 terminate

DB20000I TERMINATE 命令成功完成。


C:/IBM/SQLLIB/BIN>db2stop

SQL1064N DB2STOP 处理成功。


C:/IBM/SQLLIB/BIN>db2start

ADM12026W DB2 服务器检测到尚未注册产品
"DB2 Enterprise Server Edition"
的有效许

可证。

SQL1063N DB2START 处理成功。


四、
在副库上恢复之前主库的备份,注意时间戳的匹配。


C:/IBM/SQLLIB/BIN>db2 restore db sample from c:/temp

SQL2522N 多个备份文件与为备份的数据库映像提供的时间戳记值相匹配。


C:/IBM/SQLLIB/BIN>db2 restore database sample from "c:/temp" taken at 2011061617

3329 replace history file without prompting

DB20000I RESTORE DATABASE 命令成功完成。


五、
配置
HADR环境参数


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_LOCAL_HOST %1

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_LOCAL_SVC 44455

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_REMOTE_HOST %1

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_REMOTE_SVC 33344

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_REMOTE_INST db2inst1

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_SYNCMODE NEARSYNC

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using LOGINDEXBUILD on

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>SET db2instance=db2inst1


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_LOCAL_HOST %1

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_LOCAL_SVC 33344

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_REMOTE_HOST %1

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_REMOTE_SVC 44455

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_REMOTE_INST db2inst2

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_SYNCMODE NEARSYNC

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using LOGINDEXBUILD on

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


六、启动
HADR

C:/IBM/SQLLIB/BIN>set db2instance=db2inst2


C:/IBM/SQLLIB/BIN>db2 start hadr on db sample as standby

SQL1768N 未能启动
HADR
。原因码
= "4"



七、
错误诊断

db2 => ? SQL1768N



SQL1768N 未能启动
HADR
。原因码
= "<
原因码
>"



说明:


与原因码对应的解释是:


1 不可恢复数据库,这是因为正在使用循环日志记录。


2 数据库启用了无限活动日志记录。


3 数据库启用了
DATALINKS



4 配置参数
HADR_LOCAL_HOST
无效。


5 HADR_LOCAL_SVC 配置参数是无效服务名称。


6 HADR_REMOTE_SVC 配置参数是无效服务名称。


7 在
HADR
超时时间间隔内,主数据库未能与它的备用数据库建立连接。


8 一个或多个
HADR
数据库配置参数没有任何值。


9 数据库配置为使用原始日志。但是,
HADR
不支持对数据库日志文件使

用原始 I/O
(直接磁盘访问)。


10 命令由于
STOP HADR
命令、取消激活数据库或内部错误而被
HADR


闭所中断。


11 不能将
HADR_LOCAL_HOST

HADR_REMOTE_HOST
配置参数解析为同一

IP 格式。


12 配置参数
HADR_REMOTE_HOST
无效。


98 未安装有效的
HADR
许可证。命令未成功完成。


99 在
HADR
启动期间发生了内部错误。


用户响应:


与原因码对应的用户响应是:


1 数据库必须是可恢复的数据库。激活日志归档或者打开
LOGRETAIN


然后重新发出该命令。


2 禁用无限活动日志记录并重新发出该命令。


3 将数据库管理器配置参数
DATALINKS
设置为
NO
并重新发出该命令。


4 确保可以将配置参数
HADR_LOCAL_HOST
映射至与本地主机相关联的一个

IPv4 或
IPv6
地址。


5 确保
HADR_LOCAL_SVC
配置参数是有效的服务名称。对于
Unix
平台,

编辑 /etc/services
文件。对于
Windows
,编辑
%SystemRoot%/

system32/drivers/etc/services。另外,可以为此参数指定文字端口

号。


6 确保
HADR_REMOTE_SVC
配置参数是有效服务名称。对于
Unix
平台,

编辑 /etc/services
文件。对于
Windows
,编辑
%SystemRoot%/

system32/drivers/etc/services。另外,可以为此参数指定文字端口

号。


7


检查备用数据库上的远程主机和远程服务参数。确保备用数据库是联机

的,并且网络在起作用。如果网络速度太慢,那么还要考虑增大配置参

数 HADR_TIMEOUT
的值,或者使用
BY FORCE
选项来启动主数据库。




如果用于主数据库的 HADR_TIMEOUT
配置参数与用于备用数据库的此配

置参数的值不相同,那么连接也将失败。有关更多信息,请参阅

db2diag.log 以获取有关主数据库和备用数据库的不兼容配置的消息。



8 确保一个或多个
HADR
数据库配置参数具有值。


9 将数据库重新配置为对日志文件只使用文件系统存储器,而不是使用原

始 I/O
(直接磁盘访问)设备。请参阅
DB2
信息中心中有关
logpath

和 newlogpath
数据库配置参数的讨论。


10 找出
HADR
关闭的原因,如果有必要,请重新发出
START HADR
命令。


11 确保
HADR_LOCAL_HOST

HADR_REMOTE_HOST
配置参数采用同一种
IP

格式(IPv4

IPv6
)或者可以解析为同一种格式。


12 确保可以将配置参数
HADR_REMOTE_HOST
映射至
IPv4

IPv6
地址。


98 获取并安装有效的
HADR
许可证,然后重新提交该命令。


99 如果问题仍然存在,请与
IBM
支持机构联系。


db2 =>


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_LOCAL_HOST SL510

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_REMOTE_HOST SL510

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 stop

SQL0104N 在
"STOP"
后面找到异常标记

"语句结束
"
。预期标记可能包括:
"DATABASE"

SQLSTATE=42601


C:/IBM/SQLLIB/BIN>db2stop

SQL1064N DB2STOP 处理成功。


C:/IBM/SQLLIB/BIN>db2start

ADM12026W DB2 服务器检测到尚未注册产品
"DB2 Enterprise Server Edition"
的有效许

可证。

SQL1063N DB2START 处理成功。


C:/IBM/SQLLIB/BIN>set db2instance=db2inst1


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_LOCAL_HOST SL510

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>>db2 update db cfg for sample using HADR_REMOTE_HOST SL510

'update' 不是内部或外部命令,也不是可运行的程序

或批处理文件。


C:/IBM/SQLLIB/BIN>db2 update db cfg for sample using HADR_REMOTE_HOST SL510

DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。


C:/IBM/SQLLIB/BIN>db2stop

SQL1064N DB2STOP 处理成功。


C:/IBM/SQLLIB/BIN>db2start

ADM12026W DB2 服务器检测到尚未注册产品
"DB2 Enterprise Server Edition"
的有效许

可证。

SQL1063N DB2START 处理成功。



八、重新启动HADR

C:/IBM/SQLLIB/BIN>set db2instance=db2inst2


C:/IBM/SQLLIB/BIN>db2 start hadr on db sample as standby

DB20000I START HADR ON DATABASE 命令成功完成。


C:/IBM/SQLLIB/BIN>set db2instance=db2inst1


C:/IBM/SQLLIB/BIN>db2 start hadr on db sample as primary

DB20000I START HADR ON DATABASE 命令成功完成。


C:/IBM/SQLLIB/BIN>


九、
HADR测试



C:/IBM/SQLLIB/BIN>set db2instance=db2inst1


C:/IBM/SQLLIB/BIN>db2pd -d sample -hadr


Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 00:13:55 -- Date

2011-06-16 17:57:43


HADR Information:

Role State SyncMode HeartBeatsMissed LogGapRunAvg (bytes)

Primary Peer Nearsync 0 0


ConnectStatus ConnectTime Timeout

Connected Thu Jun 16 17:43:49 2011 (1308217429) 120


LocalHost LocalService

SL510 33344


RemoteHost RemoteService RemoteInstance

SL510 44455 db2inst2


PrimaryFile PrimaryPg PrimaryLSN

S0000000.LOG 0 0x0000000001388000


StandByFile StandByPg StandByLSN

S0000000.LOG 0 0x0000000001388000


C:/IBM/SQLLIB/BIN>set db2instance=db2inst2


C:/IBM/SQLLIB/BIN>db2pd -d sample -hadr


Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 00:16:07 -- Date

2011-06-16 17:59:18


HADR Information:

Role State SyncMode HeartBeatsMissed LogGapRunAvg (bytes)

Standby Peer Nearsync 0 0


ConnectStatus ConnectTime Timeout

Connected Thu Jun 16 17:43:49 2011 (1308217429) 120


LocalHost LocalService

SL510 44455


RemoteHost RemoteService RemoteInstance

SL510 33344 db2inst1


PrimaryFile PrimaryPg PrimaryLSN

S0000000.LOG 0 0x0000000001388000


StandByFile StandByPg StandByLSN StandByRcvBufUsed

S0000000.LOG 0 0x0000000001388000 0%


C:/IBM/SQLLIB/BIN>


C:/IBM/SQLLIB/BIN>set db2instance=db2inst1


C:/IBM/SQLLIB/BIN>db2 connect to sample user db2admin using db2admin


数据库连接信息


数据库服务器 = DB2/NT64 9.5.7

SQL 授权标识
= DB2ADMIN

本地数据库别名 = SAMPLE



C:/IBM/SQLLIB/BIN>db2 create table test(c1 integer not null ,c2 varchar(2),prima

ry key (c1))

DB20000I SQL 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 insert into test (c1,c2) values (11,'aa')

DB20000I SQL 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 insert into test (c1,c2) values (22,'bb')

DB20000I SQL 命令成功完成。


C:/IBM/SQLLIB/BIN>db2 commit

DB20000I SQL 命令成功完成。


C:/IBM/SQLLIB/BIN>

在实例-db2inst2
下的
sample
数据库上执行
takeover
命令,接管实例
-db2inst1
下的
sample
数据库(手工执行备用数据库接管主数据库):

set db2instance=db2inst2

db2 takeover hadr on database sample user db2admin using
db2admin


十、
DB2 HADR管理说明

1.
启动和停止DB2 HADR


使用START HADR
命令启动主数据库和备用数据库的
HADR
。启动主数据库使用
AS PRIMARY
子句,启动备用数据库使用
AS STANDBY
子句。如果想以其他用户启动
HADR
,可以通过
USER user-name USING password
子句指定用户名和密码,在启动主数据库的
HADR
时,如果在数据库
HADR_TIMEOUT
所指定的时间内未能建立与备用数据库
HADR
的连接,启动将失败。这时候,你可以等排除故障并成功启动备用数据库
HADR
后再启动主数据库
HADR
,也可以通过指定
BY FORCE
子句强行启动主数据库。:

2.
启动备用数据库: start hadr on database sample [using db2admin using db2admin] as standby

3.
启动主数据库: start hadr on database sample [using db2admin using db2admin] as primary[by force]


使用STOP HADR
停止主数据库和备用数据库的
HADR
,如果在活动的主数据库上发出此命令,所有的数据库连接都被断开,数据库恢复为标准数据库,并保持联机状态;如果在活动的备用数据库上发出此命令,将停止失败。你必须先使


DEACTIVATE DATABASE命令取消激活,然后再停止
HADR


4.
停止备用数据库: deactivate database sample


stop hadr on database sample [using db2admin using db2admin]

5.
停止主数据库: stop hard on database sample [using db2admin using db2admin]

6.
查看HARD
的配置及运行状态


当备用数据库的HADR
启动时,它首先进入本地同步更新状态。并根据本地日志路径配置参数及日志归档方法的设置检索本地系统中的日志文件并重放。当本地日 志文件重放完毕,备用数据库进入远程同步暂挂状态。当与主数据库建立连接之后,备用数据库进入远程同步更新状态。即主数据库将自己的日志文件通过
TCPIP
协议发送给备用数据库,备用数据库接收到日志文件并重放,直到所有日志文件都重放完毕,备用数据库和主数据库进入对等状态。

7.
查看DB2 HADR
状态:
db2pd -d sample -hadr

8.
主数据库和备用数据库的接管/
故障转移


当主数据库发生故障时,备用数据库可以接管主数据库的服务,成为新的主数据库(称为故障转移)。当原主数据库修复后,又可以作为备用数据库加入HADR
对。即使主数据库服务器没有故障,我们通过接管命令(
TAKEOVER
)切换主数据库和备用数据库的角色。

9.
接管命令只能用在备用数据库上。HADR
提供两种接管方式:

a)
紧急接管: takeover hadr on database sample by force

b)
普通接管:takeover hadr on database sample

10.
主数据库和备用数据库的同步方式

在上面的配置实例中我们将主数据库和备用数据库的HADR_SYNCMODE
参数值设置为
NEARSYNC
,当主数据库和备用数据库处于对等状态时,
HADR
采用
NEARSYNC
(接近同步)同步方式管理日志写入。
DB2
提供了三种日志同步方式:

a)
SYNC(同步): 采用
SYNC
方式时,仅当主数据库日志写入成功,并收到备用数据库的应答,确保备用数据库的日志也成功写入的情况下,才认为日志写入成功。这种方式下的事务响应时间最长,但最大限度的确保不发生事务丢失;

b)
NEARSYNC(接近同步): 采用
NEARSYNC
方式时,当主数据库日志写入成功,并收到备用数据库的应答,确定备用数据库已经接收到日志时,即认为日志写入成功。也就是说,备用数 据库接收到的日志并不一定能成功写入持久存储设备上的日志文件。这种方式下的事务响应时间比
SYNC
方式短,且仅当两台服务器同时发生故障时,才会发生事务丢失;

c)
ASYNC(异步): 采用
ASYNC
方式时,当主数据库日志写入成功,并将日志发送出去之后,即认为日志写入成功。此方式并不保证备用数据库能收到日志,这要依赖于
TCP/IP
网络情况。这种方式下的事务响应时间最短,但产生事务丢失的可能性也最大。

11.
自动客户端重新路由(Automatic Client Reroute



要配置自动客户端重新路由,使用UPDATE ALTERNATE SERVER
命令设置备用数据库信息(使用方法参考上面的配置实例),这些信息将被存放在数据库的系统目录中。请注意:必须使用此命令来设置备用数据库, 而不是
HADR_REMOTE_HOST

HADR_REMOTE_SVC
数据库配置参数,自动客户端重新路由不使用这两个参数。当客户端与数据库建立连接时,备用数据库的配置信息(主机
/IP
及 端口号)也同时被发送给
DB2
客户端。当客户端与主数据库的连接被中断时,客户端就使用这些信息连接到备用数据库,从而最小限度的降低了数据库故障所造成 的影响。需要强调的是,这个过程由
DB2
客户端自动完成,不需要用户用程序干涉。通过
LIST DB DIRECOTRY
命令可以查看系统数据库目录中自动客户端重新路由的配置。

12.
索引日志记录

索引的创建、重建、重组也是HADR
环境中需要考虑的一个方面,
DB2
通过数据库配置参数
LOGINDEXBUILD

CREATE TABLE

ALTER TABLE
语句中的
LOG INDEX BUILD
选项来控制是否对索引的相关操作进行详细的日志记录。我们在上面的
HADR
配置实例中将
LOGINDEXBUILD
数据库参数配置为
ON
,意为 让
DB2
记录索引创建、重建、重组的完整日志。这显然会降低主数据库的运行效率并占用更多的日志空间。但因为备用数据库可以通过重放日志来重新构建索引, 所以当主数据库发生故障,备用数据库的索引仍然可用。用户可以通过
CREATE TABLE

ALTER TABLE
语句的
LOG INDEX BUILD
选项来对单个表设定索引日志记录级别。
LOG INDEX BUILD
选项有三个可选参数:

a)
NULL:这是缺省值,当使用此参数时,表的索引日志记录级别由数据库配置参数
LOGINDEXBUILD
的值决定。

b)
ON:使用此参数,数据库配置参数
LOGINDEXBUILD
的值将被忽略,
DB2
将记录这个表上所有索引维护的详细日志。

c)
OFF:使用此参数时,数据库配置参数
LOGINDEXBUILD
的值将被忽略,
DB2
将不记录这个表上索引维护的日志。 如果表选项
LOG INDEX BUILD
设置为
OFF
,或者
LOG INDEX BUILD
设置为
NULL
但数据库配置参数
LOGINDEXBUILD
设置为
OFF

DB2
将不记录这些表的索引维护日志,备用数据库也就无法重放索引维 护操作,致使这些索引在备用数据库上变为无效状态。当主数据库发生故障,备用数据库切换为新主数据库后,这些无效的索引必须重建才能被使用。
DB2
通过数据库配置参数
INDEXREC
来指定在什么时候检查并重建无效索引。
INDEXREC
参数有三个可选值:

i.
RESTART:
DB2
将在显式或隐式重启数据库(
RESTART DATABASE
)的时候检查并重新构建无效索引。

ii.
ACCESS:
DB2
将在无效索引第一次被访问的时候才会重新构建它。

iii.
SYSTEM:使用数据库管理器配置参数(
Database Manager Configuration

INDEXREC
的值。

在上面的配置实例中,我们将INDEXREC
的值设为
RESTART
,备用数据库将在接管为新的主数据库时检查并重新构建所有无效索引。



十一、
DB2 HADR的限制

a)
只有DB2 UDB Enterprise Server Edition

ESE
)支持
HADR
,但
HADR
不能支持分区数据库(
Database Partitioning Feature

DPF
)。

b)
主数据库和备用数据库必须运行在相同的操作系统版本上,并且DB2 UDB
的版本也必须一致,除非短暂的软件升级过程。

c)
主数据库和备用数据库的位大小必须一致(32
位或
64
位)。

d)
不能在备用数据库上进行备份操作

e)
备用数据库是不能访问的,客户端程序无法连接备用数据库。

f)
日至归档操作只能在主数据库上进行。带有COPY NO
选项的
LOAD
命令是不支持的

g)
主数据库和备用数据库必须是一对一的。

h)
HADR不能使用循环日志

i)
HADR不复制数据库配置参数、共享库、
DLL

UDF
或存储过程


注意以上是
9.5版本的
DB2
限制,从
DB2 9.7.1
开始支持了
HADR
备机可读。

j)
除非已启用“
在备用数据库上读取

,否则客户机无法与备用数据库连接。

在备用数据库上读取

可让客户机连接至活动备用数据库及发出只读查询。

k)
如果已启用“
在备用数据库上读取

,那么不允许在备用数据库上执行写入日志记录的操作;只有读取客户机可以连接至活动备用数据库。

l)
如果已启用“
在备用数据库上读取

,那么不允许在备用数据库上执行修改数据库内容的写入操作。将不支持尝试修改数据库对象的任何异步线程(例如
Just In Time Statistics

JITS
)和自动重建索引)和实用程序。
JITS
和自动重建索引不应在备用数据库上运行。

m)
只能由当前主数据库执行日志归档。

n)
只能对当前主数据库运行自调整内存管理器(STMM
)。在主数据库启动或备用数据库通过接管而转换为主数据库后,直到第一个客户机连接生效,
STMM EDU
才可能启动。

o)
在备用数据库上不支持备份操作。

p)
未进行日志记录的操作(例如对数据库配置参数和恢复历史记录文件所作的更改)不会被复制到备用数据库。

q)
不支持指定了 COPY NO
选项的装入操作。

r)
HADR 不支持对数据库日志文件使用原始
I/O
(直接磁盘访问)。如果
HADR
是通过
START HADR
命令启动的,或者在配置了
HADR
的情况下激活(重新启动)数据库,并且检测到原始日志,那么相关联的命令将失败。

s)
对于一阶段落实,HADR
数据库可以充当联合服务器(事务管理器)或数据源(资源管理器)。对于两阶段落实,
HADR
数据库只能充当数据源。


注意:即使是
V9.7.1版本已经支持并开启了备库可读特性,依然存在以下限制:

a.
不允许在备用数据库上执行写入操作。在此上下文中,写入操作是修改目录、表和索引等永久数据库对象的操作。在备用数据库上执行写入操作会返回错误(SQL1773N
原因码
5
)。特别是,不能执行会导致在备用数据库上生成日志记录的任何操作。

b.
在重放 DDL


志记录或维护操作期间(
仅重放时间
),用户连接无法访问备用数据库。有关更多信息,请参阅活动备用数据库上的仅重放时间。

c.
当备用数据库处于本地同步复制状态时,用户连接无法访问该数据库。尝试连接此状态的客户机将收到错误(SQL1776N
原因码
1
)。

d.
在备用数据库上只支持未落实的读(UR
)隔离级别。请求更高隔离级别的应用程序、语句或子语句将收到错误(
SQL1773N
原因码
1
)。有关更多信息,请参阅活动备用数据库上的隔离级别。

e.
不会将实例级别审计配置复制到备用数据库。必须使
用 db2audit
工具确保实例级别审计设置在主数据库和备用数据库上是相同的。

f.
在备用数据库上不支持已声明临时表 (DGTT)
。在备用数据库上尝试创建或访问它们将收到错误(
SQL1773N
原因码
4
)。

g.
创建临时表 (CGTT)
只能创建在主数据库上,且它们的定义会被复制到备用数据库。但是,在备用数据库上不支持访问
CGTT
,尝试创建或访问它们将收到错误(
SQL1773N
原因码
4
)。

h.
在主数据库上创建“
创建临时表
”(CGTT)
将触发备用数据库上的仅重放窗口。

i.
在备用数据库上不能访问最初未进行日志记录(NLI
)表。在备用数据库上尝试读取
NLI
表的应用程序将收到错误(
SQL1477N
)。

j.
备用数据库上的查询只能使用 SMS
系统临时表空间。在备用数据库上执行使用
DMS
系统临时表空间的查询可能会导致错误(
SQL1773N
原因码
5
)。

k.
不能查询下列数据:XML
、大对象
(LOB)
、长字段(
LF
)、基于这些数据类型的其中一种的单值类型和结构化类型列。尝试查询这些数据类型将收到错误(
SQL1773N
原因码
3
)。

l.
在备用数据库上不支持说明工具(db2exfmt

db2expln

Visual Explain
)和
db2batch
工具(
SQL1773N
原因码
5
)。如果要分析只读工作负载的性能,那么首先应在主数据库上运行这些工具,在主数据库上对工作负载进行必要的优化,然后将优化后的工作负载移至备用数据库。

m.
在备用数据库上不支持程序包的显式绑定及重新绑定和隐式重新绑定。尝试运行引用失效对象的静态程序包及这些程序包的隐式重新绑定将导致错误(分别为 SQL1773N
原因码
5

6
)。应该转为在主数据库上绑定程序包,并在将更改复制到备用数据库后,在备用数据库上运行程序包。

n.
在备用数据库上不支持自调整内存管理器(STMM
)。如果要调整备用数据库(以适合运行只读工作负载或以在接管后执行良好),那么必须手动调整。

o.
主数据库上的工作负载管理器(WLM

DDL
语句将在备用数据库上重放,但它们在备用数据库上不会生效;但是,存在于数据库备份(用于建立备用数据库)中的任何定义在启用了读取的备用数据库上将是活动的。

p.
在备用数据库上不支持创建和改变序列。同样,不能使用 NEXT VALUE
表达式来生成序列中的下一个值。

q.
在备用数据库上不支持无效对象的运行时重新验证。

r.
不能将备用数据库配置为 Federation Server


s.
在备用数据库上不支持备份和归档操作。

t.
在备用数据库上不支持停顿操作。



十二、
自动化脚本


@echo offrem-----rem 单机环境
DB2 HADR
生成脚本

rem 您可以将这个脚本保存到一个脚本文件
hadr.cmd
中,然后按一下语法执行:

rem hadr.cmd<hostname>

rem-------if "%1"== ""goto usage

rem 清除原有环境

rem----echo 清除环境

set db2instance=db2inst1

db2start

db2drop db sample

db2stop

db2idrop db2inst1

set db2instance=db2inst2

db2start

db2drop db sample

db2stop

db2idrop db2inst2

rem------rem 创建
db2inst1
实例

rem-----echo 创建
db2inst1
实例
....

db2icrt db2inst1

if errorlevel1 goto endecho 成功创建
db2inst1
实例

set db2instance=db2inst1

db2start

db2update dbm cfg using svcename33333db2set db2comm=tcpip

db2 terminate

db2stop

db2start

echo 在实例
db2inst1
下创建
sample
数据库

db2sampl

if errorlevel1 goto enddb2update db cfgfor sample using LOGRETAIN RECOVERY

echo 备份
sample
数据库到当前路径

db2backup db sampleto .

if errorlevel1 goto endrem--------rem 创建
db2inst2
实例

rem--------echo 创建
db2inst2
实例
....

db2icrt db2inst2

if errorlevel1 goto endecho 成功创建
db2inst2
实例

set db2instance=db2inst2

db2start

db2update dbm cfg using svcename44444db2set db2comm=tcpip

db2 terminate

db2stop

echo 在实例
db2inst2
下恢复
sample
数据库

db2start

db2restore db samplefrom .

if errorlevel1 goto endrem---------rem 配置
HADR
参数

rem--------echo 配置实例
db2inst2
下的
sample
数据库的
HADR
参数

db2update db cfgfor sample using HADR_LOCAL_HOST
%1

db2update db cfgfor sample using HADR_LOCAL_SVC

44455

db2update db cfgfor sample using HADR_REMOTE_HOST

%1

db2update db cfgfor sample using HADR_REMOTE_SVC

33344

db2update db cfgfor sample using HADR_REMOTE_INST db2inst1

db2update db cfgfor sample using HADR_SYNCMODE NEARSYNC

db2update db cfgfor sample using LOGINDEXBUILD

on

echo 配置实例
db2inst1
下的
sample
数据库的
HADR
参数

SET db2instance=db2inst1

db2update db cfgfor sample using HADR_LOCAL_HOST

%1

db2update db cfgfor sample using HADR_LOCAL_SVC

33344

db2update db cfgfor sample using HADR_REMOTE_HOST

%1

db2update db cfgfor sample using HADR_REMOTE_SVC

44455

db2update db cfgfor sample using HADR_REMOTE_INST db2inst2

db2update db cfgfor sample using HADR_SYNCMODE NEARSYNC

db2update db cfgfor sample using LOGINDEXBUILD

on

rem-------rem 启动
HADR

rem-----echo 启动实例
db2inst2
下的
sample
数据库作为备用数据库
standby

set db2instance=db2inst2

db2 start hadron db sample

as standby

if errorlevel1 goto end

echo 启动实例
db2inst1
下的
sample
数据库作为主数据库
primary

set db2instance=db2inst1

db2 start hadron db sample

as primary


if errorlevel1 goto end

echo 祝贺您成功配置
HADR.

exit:usage

echo "语法
: handson.cmd<hostname>"

:endEcho "运行错误,请检查脚本
"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: