cyc1111 发表于 2016-11-17 08:30:27

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

  <!-- ><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8</w:DrawingGridVerticalSpacing><w:View>Normal</w:View><w:Compatibility></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><!-->

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

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


实施过程及命令行步骤:

一、清理DB2环境,避免傻逼问题出现
C:/IBM/SQLLIB/BIN>db2ilist
DB2
BAK

C:/IBM/SQLLIB/BIN>db2idropbak
DB20000IDB2IDROP命令成功完成。

C:/IBM/SQLLIB/BIN>db2ilist
DB2

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

C:/IBM/SQLLIB>dir
驱动器C中的卷没有标签。
卷的序列号是C470-0EBA

C:/IBM/SQLLIB的目录

2011/02/2220:59<DIR>.
2011/02/2220:59<DIR>..
2011/02/2220:59<DIR>adsm
2011/06/1617:19<DIR>BIN
2011/02/2220:59<DIR>bnd
2011/02/2309:27<DIR>cfg
2011/02/2220:11<DIR>clidriver
2011/02/2220:11<DIR>conv
2011/03/3114:05<DIR>dasfcn
2007/10/0223:11241db2cli.opt
2011/02/2220:10<DIR>doc
2011/02/2309:27<DIR>FUNCTION
2011/02/2220:11<DIR>help
2011/02/2220:59<DIR>include
2011/02/2220:12<DIR>infopop
2010/11/3015:28787,408INFOPOPS_JHELP_CN.exe
2010/11/3015:291,700,448INFOPOPS_WHELP_CN.exe
2011/02/2220:59<DIR>java
2011/02/2220:59<DIR>lib
2011/02/2702:25<DIR>license
2011/02/2220:11<DIR>map
2011/02/2220:59<DIR>MISC
2011/02/2220:11<DIR>msg
2011/02/2220:59<DIR>Readme
2011/02/2220:59<DIR>samples
2011/02/2220:10<DIR>security
2011/02/2702:25<DIR>tivready
2011/03/1914:21<DIR>TOOLS
3个文件2,488,097字节
25个目录75,457,306,624可用字节

C:/IBM/SQLLIB>db2icrtdb2inst1
DB20000IDB2ICRT命令成功完成。

C:/IBM/SQLLIB>db2icrtdb2inst2
DB20000IDB2ICRT命令成功完成。

C:/IBM/SQLLIB>cdbin

C:/IBM/SQLLIB/BIN>hadr.cmd
"语法:handson.cmd<SL510>"
"运行错误,请检查脚本"

C:/IBM/SQLLIB/BIN>setdb2instance=db2inst1

C:/IBM/SQLLIB/BIN>db2start
ADM12026WDB2服务器检测到尚未注册产品"DB2EnterpriseServerEdition"的有效许
可证。
SQL1063NDB2START处理成功。

C:/IBM/SQLLIB/BIN>db2dropdbsample
SQL1031N在指示的文件系统中找不到数据库目录。SQLSTATE=58031

C:/IBM/SQLLIB/BIN>db2stop
SQL1064NDB2STOP处理成功。

C:/IBM/SQLLIB/BIN>db2idropdb2inst1
DB20000IDB2IDROP命令成功完成。

C:/IBM/SQLLIB/BIN>setdb2instance=db2inst2

C:/IBM/SQLLIB/BIN>db2start
ADM12026WDB2服务器检测到尚未注册产品"DB2EnterpriseServerEdition"的有效许
可证。
SQL1063NDB2START处理成功。

C:/IBM/SQLLIB/BIN>db2dropdbsample
SQL1031N在指示的文件系统中找不到数据库目录。SQLSTATE=58031

C:/IBM/SQLLIB/BIN>db2stop
SQL1064NDB2STOP处理成功。

C:/IBM/SQLLIB/BIN>db2idropdb2inst2
DB20000IDB2IDROP命令成功完成。



二、创建2个实例,db2inst1作为主,db2inst2作为副。库以sample库为例
C:/IBM/SQLLIB/BIN>db2icrtdb2inst1
DB20000IDB2ICRT命令成功完成。

C:/IBM/SQLLIB/BIN>setdb2instance=db2inst1

C:/IBM/SQLLIB/BIN>db2start
ADM12026WDB2服务器检测到尚未注册产品"DB2EnterpriseServerEdition"的有效许
可证。
SQL1063NDB2START处理成功。

C:/IBM/SQLLIB/BIN>db2updatedbmcfgusingsvcename33333
DB20000IUPDATEDATABASEMANAGERCONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2setdb2comm=tcpip

C:/IBM/SQLLIB/BIN>db2terminate
DB20000ITERMINATE命令成功完成。

C:/IBM/SQLLIB/BIN>db2stop
SQL1064NDB2STOP处理成功。

C:/IBM/SQLLIB/BIN>db2start
ADM12026WDB2服务器检测到尚未注册产品"DB2EnterpriseServerEdition"的有效许
可证。
SQL1063NDB2START处理成功。

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

Creatingdatabase"SAMPLE"...
Connectingtodatabase"SAMPLE"...
Creatingtablesanddatainschema"JAMIN"...
CreatingtableswithXMLcolumnsandXMLdatainschema"JAMIN"...

'db2sampl'processingcomplete.


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

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingLOGRETAINRECOVERY
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2backupdbsampletoc:/temp

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


C:/IBM/SQLLIB/BIN>db2icrtdb2inst2
DB20000IDB2ICRT命令成功完成。

C:/IBM/SQLLIB/BIN>setdb2instance=db2inst2

C:/IBM/SQLLIB/BIN>db2start
ADM12026WDB2服务器检测到尚未注册产品"DB2EnterpriseServerEdition"的有效许
可证。
SQL1063NDB2START处理成功。

C:/IBM/SQLLIB/BIN>db2updatedbmcfgusingsvcename44444
DB20000IUPDATEDATABASEMANAGERCONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2setdb2comm=tcpip

C:/IBM/SQLLIB/BIN>db2terminate
DB20000ITERMINATE命令成功完成。

C:/IBM/SQLLIB/BIN>db2stop
SQL1064NDB2STOP处理成功。

C:/IBM/SQLLIB/BIN>db2start
ADM12026WDB2服务器检测到尚未注册产品"DB2EnterpriseServerEdition"的有效许
可证。
SQL1063NDB2START处理成功。

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

C:/IBM/SQLLIB/BIN>db2restoredbsamplefromc:/temp
SQL2522N多个备份文件与为备份的数据库映像提供的时间戳记值相匹配。

C:/IBM/SQLLIB/BIN>db2restoredatabasesamplefrom"c:/temp"takenat2011061617
3329replacehistoryfilewithoutprompting
DB20000IRESTOREDATABASE命令成功完成。

五、配置HADR环境参数

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingHADR_LOCAL_HOST%1
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingHADR_LOCAL_SVC44455
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingHADR_REMOTE_HOST%1
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingHADR_REMOTE_SVC33344
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingHADR_REMOTE_INSTdb2inst1
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingHADR_SYNCMODENEARSYNC
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingLOGINDEXBUILDon
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>SETdb2instance=db2inst1

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingHADR_LOCAL_HOST%1
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingHADR_LOCAL_SVC33344
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingHADR_REMOTE_HOST%1
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingHADR_REMOTE_SVC44455
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingHADR_REMOTE_INSTdb2inst2
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingHADR_SYNCMODENEARSYNC
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingLOGINDEXBUILDon
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

六、启动HADR
C:/IBM/SQLLIB/BIN>setdb2instance=db2inst2

C:/IBM/SQLLIB/BIN>db2starthadrondbsampleasstandby
SQL1768N未能启动HADR。原因码="4"。

七、错误诊断
db2=>?SQL1768N


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

说明:

与原因码对应的解释是:

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

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

3数据库启用了DATALINKS。

4配置参数HADR_LOCAL_HOST无效。

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

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

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

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

9数据库配置为使用原始日志。但是,HADR不支持对数据库日志文件使
用原始I/O(直接磁盘访问)。

10命令由于STOPHADR命令、取消激活数据库或内部错误而被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的值,或者使用BYFORCE选项来启动主数据库。



如果用于主数据库的HADR_TIMEOUT配置参数与用于备用数据库的此配
置参数的值不相同,那么连接也将失败。有关更多信息,请参阅
db2diag.log以获取有关主数据库和备用数据库的不兼容配置的消息。


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

9将数据库重新配置为对日志文件只使用文件系统存储器,而不是使用原
始I/O(直接磁盘访问)设备。请参阅DB2信息中心中有关logpath
和newlogpath数据库配置参数的讨论。

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

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>db2updatedbcfgforsampleusingHADR_LOCAL_HOSTSL510
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingHADR_REMOTE_HOSTSL510
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2stop
SQL0104N在"STOP"后面找到异常标记
"语句结束"。预期标记可能包括:"DATABASE"。SQLSTATE=42601

C:/IBM/SQLLIB/BIN>db2stop
SQL1064NDB2STOP处理成功。

C:/IBM/SQLLIB/BIN>db2start
ADM12026WDB2服务器检测到尚未注册产品"DB2EnterpriseServerEdition"的有效许
可证。
SQL1063NDB2START处理成功。

C:/IBM/SQLLIB/BIN>setdb2instance=db2inst1

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingHADR_LOCAL_HOSTSL510
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>>db2updatedbcfgforsampleusingHADR_REMOTE_HOSTSL510
'update'不是内部或外部命令,也不是可运行的程序
或批处理文件。

C:/IBM/SQLLIB/BIN>db2updatedbcfgforsampleusingHADR_REMOTE_HOSTSL510
DB20000IUPDATEDATABASECONFIGURATION命令成功完成。

C:/IBM/SQLLIB/BIN>db2stop
SQL1064NDB2STOP处理成功。

C:/IBM/SQLLIB/BIN>db2start
ADM12026WDB2服务器检测到尚未注册产品"DB2EnterpriseServerEdition"的有效许
可证。
SQL1063NDB2START处理成功。


八、重新启动HADR
C:/IBM/SQLLIB/BIN>setdb2instance=db2inst2

C:/IBM/SQLLIB/BIN>db2starthadrondbsampleasstandby
DB20000ISTARTHADRONDATABASE命令成功完成。

C:/IBM/SQLLIB/BIN>setdb2instance=db2inst1

C:/IBM/SQLLIB/BIN>db2starthadrondbsampleasprimary
DB20000ISTARTHADRONDATABASE命令成功完成。

C:/IBM/SQLLIB/BIN>

九、HADR测试


C:/IBM/SQLLIB/BIN>setdb2instance=db2inst1

C:/IBM/SQLLIB/BIN>db2pd-dsample-hadr

DatabasePartition0--DatabaseSAMPLE--Active--Up0days00:13:55--Date
2011-06-1617:57:43

HADRInformation:
RoleStateSyncModeHeartBeatsMissedLogGapRunAvg(bytes)
PrimaryPeerNearsync00

ConnectStatusConnectTimeTimeout
ConnectedThuJun1617:43:492011(1308217429)120

LocalHostLocalService
SL51033344

RemoteHostRemoteServiceRemoteInstance
SL51044455db2inst2

PrimaryFilePrimaryPgPrimaryLSN
S0000000.LOG00x0000000001388000

StandByFileStandByPgStandByLSN
S0000000.LOG00x0000000001388000

C:/IBM/SQLLIB/BIN>setdb2instance=db2inst2

C:/IBM/SQLLIB/BIN>db2pd-dsample-hadr

DatabasePartition0--DatabaseSAMPLE--Active--Up0days00:16:07--Date
2011-06-1617:59:18

HADRInformation:
RoleStateSyncModeHeartBeatsMissedLogGapRunAvg(bytes)
StandbyPeerNearsync00

ConnectStatusConnectTimeTimeout
ConnectedThuJun1617:43:492011(1308217429)120

LocalHostLocalService
SL51044455

RemoteHostRemoteServiceRemoteInstance
SL51033344db2inst1

PrimaryFilePrimaryPgPrimaryLSN
S0000000.LOG00x0000000001388000

StandByFileStandByPgStandByLSNStandByRcvBufUsed
S0000000.LOG00x00000000013880000%

C:/IBM/SQLLIB/BIN>

C:/IBM/SQLLIB/BIN>setdb2instance=db2inst1

C:/IBM/SQLLIB/BIN>db2connecttosampleuserdb2adminusingdb2admin

数据库连接信息

数据库服务器=DB2/NT649.5.7
SQL授权标识=DB2ADMIN
本地数据库别名=SAMPLE


C:/IBM/SQLLIB/BIN>db2createtabletest(c1integernotnull,c2varchar(2),prima
rykey(c1))
DB20000ISQL命令成功完成。

C:/IBM/SQLLIB/BIN>db2insertintotest(c1,c2)values(11,'aa')
DB20000ISQL命令成功完成。

C:/IBM/SQLLIB/BIN>db2insertintotest(c1,c2)values(22,'bb')
DB20000ISQL命令成功完成。

C:/IBM/SQLLIB/BIN>db2commit
DB20000ISQL命令成功完成。

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

setdb2instance=db2inst2
db2takeoverhadrondatabasesampleuserdb2adminusingdb2admin

十、DB2HADR管理说明
1.启动和停止DB2HADR:使用STARTHADR命令启动主数据库和备用数据库的HADR。启动主数据库使用ASPRIMARY子句,启动备用数据库使用ASSTANDBY子句。如果想以其他用户启动HADR,可以通过USERuser-nameUSINGpassword子句指定用户名和密码,在启动主数据库的HADR时,如果在数据库HADR_TIMEOUT所指定的时间内未能建立与备用数据库HADR的连接,启动将失败。这时候,你可以等排除故障并成功启动备用数据库HADR后再启动主数据库HADR,也可以通过指定BYFORCE子句强行启动主数据库。:
2.启动备用数据库:starthadrondatabasesampleasstandby
3.启动主数据库:starthadrondatabasesampleasprimary使用STOPHADR停止主数据库和备用数据库的HADR,如果在活动的主数据库上发出此命令,所有的数据库连接都被断开,数据库恢复为标准数据库,并保持联机状态;如果在活动的备用数据库上发出此命令,将停止失败。你必须先使用DEACTIVATEDATABASE命令取消激活,然后再停止HADR。
4.停止备用数据库:deactivatedatabasesample,stophadrondatabasesample
5.停止主数据库:stophardondatabasesample
6.查看HARD的配置及运行状态:当备用数据库的HADR启动时,它首先进入本地同步更新状态。并根据本地日志路径配置参数及日志归档方法的设置检索本地系统中的日志文件并重放。当本地日志文件重放完毕,备用数据库进入远程同步暂挂状态。当与主数据库建立连接之后,备用数据库进入远程同步更新状态。即主数据库将自己的日志文件通过TCPIP协议发送给备用数据库,备用数据库接收到日志文件并重放,直到所有日志文件都重放完毕,备用数据库和主数据库进入对等状态。
7.查看DB2HADR状态:db2pd-dsample-hadr
8.主数据库和备用数据库的接管/故障转移:当主数据库发生故障时,备用数据库可以接管主数据库的服务,成为新的主数据库(称为故障转移)。当原主数据库修复后,又可以作为备用数据库加入HADR对。即使主数据库服务器没有故障,我们通过接管命令(TAKEOVER)切换主数据库和备用数据库的角色。
9.接管命令只能用在备用数据库上。HADR提供两种接管方式:
a)紧急接管:takeoverhadrondatabasesamplebyforce
b)普通接管:takeoverhadrondatabasesample
10.主数据库和备用数据库的同步方式:在上面的配置实例中我们将主数据库和备用数据库的HADR_SYNCMODE参数值设置为NEARSYNC,当主数据库和备用数据库处于对等状态时,HADR采用NEARSYNC(接近同步)同步方式管理日志写入。DB2提供了三种日志同步方式:
a)SYNC(同步):采用SYNC方式时,仅当主数据库日志写入成功,并收到备用数据库的应答,确保备用数据库的日志也成功写入的情况下,才认为日志写入成功。这种方式下的事务响应时间最长,但最大限度的确保不发生事务丢失;
b)NEARSYNC(接近同步):采用NEARSYNC方式时,当主数据库日志写入成功,并收到备用数据库的应答,确定备用数据库已经接收到日志时,即认为日志写入成功。也就是说,备用数据库接收到的日志并不一定能成功写入持久存储设备上的日志文件。这种方式下的事务响应时间比SYNC方式短,且仅当两台服务器同时发生故障时,才会发生事务丢失;
c)ASYNC(异步):采用ASYNC方式时,当主数据库日志写入成功,并将日志发送出去之后,即认为日志写入成功。此方式并不保证备用数据库能收到日志,这要依赖于TCP/IP网络情况。这种方式下的事务响应时间最短,但产生事务丢失的可能性也最大。
11.自动客户端重新路由(AutomaticClientReroute):要配置自动客户端重新路由,使用UPDATEALTERNATESERVER命令设置备用数据库信息(使用方法参考上面的配置实例),这些信息将被存放在数据库的系统目录中。请注意:必须使用此命令来设置备用数据库,而不是HADR_REMOTE_HOST和HADR_REMOTE_SVC数据库配置参数,自动客户端重新路由不使用这两个参数。当客户端与数据库建立连接时,备用数据库的配置信息(主机/IP及端口号)也同时被发送给DB2客户端。当客户端与主数据库的连接被中断时,客户端就使用这些信息连接到备用数据库,从而最小限度的降低了数据库故障所造成的影响。需要强调的是,这个过程由DB2客户端自动完成,不需要用户用程序干涉。通过LISTDBDIRECOTRY命令可以查看系统数据库目录中自动客户端重新路由的配置。
12.索引日志记录:索引的创建、重建、重组也是HADR环境中需要考虑的一个方面,DB2通过数据库配置参数LOGINDEXBUILD和CREATETABLE或ALTERTABLE语句中的LOGINDEXBUILD选项来控制是否对索引的相关操作进行详细的日志记录。我们在上面的HADR配置实例中将LOGINDEXBUILD数据库参数配置为ON,意为让DB2记录索引创建、重建、重组的完整日志。这显然会降低主数据库的运行效率并占用更多的日志空间。但因为备用数据库可以通过重放日志来重新构建索引,所以当主数据库发生故障,备用数据库的索引仍然可用。用户可以通过CREATETABLE或ALTERTABLE语句的LOGINDEXBUILD选项来对单个表设定索引日志记录级别。LOGINDEXBUILD选项有三个可选参数:
a)NULL:这是缺省值,当使用此参数时,表的索引日志记录级别由数据库配置参数LOGINDEXBUILD的值决定。
b)ON:使用此参数,数据库配置参数LOGINDEXBUILD的值将被忽略,DB2将记录这个表上所有索引维护的详细日志。
c)OFF:使用此参数时,数据库配置参数LOGINDEXBUILD的值将被忽略,DB2将不记录这个表上索引维护的日志。如果表选项LOGINDEXBUILD设置为OFF,或者LOGINDEXBUILD设置为NULL但数据库配置参数LOGINDEXBUILD设置为OFF,DB2将不记录这些表的索引维护日志,备用数据库也就无法重放索引维护操作,致使这些索引在备用数据库上变为无效状态。当主数据库发生故障,备用数据库切换为新主数据库后,这些无效的索引必须重建才能被使用。DB2通过数据库配置参数INDEXREC来指定在什么时候检查并重建无效索引。INDEXREC参数有三个可选值:
i.RESTART:DB2将在显式或隐式重启数据库(RESTARTDATABASE)的时候检查并重新构建无效索引。
ii.ACCESS:DB2将在无效索引第一次被访问的时候才会重新构建它。
iii.SYSTEM:使用数据库管理器配置参数(DatabaseManagerConfiguration)INDEXREC的值。
在上面的配置实例中,我们将INDEXREC的值设为RESTART,备用数据库将在接管为新的主数据库时检查并重新构建所有无效索引。


十一、DB2HADR的限制
a)只有DB2UDBEnterpriseServerEdition(ESE)支持HADR,但HADR不能支持分区数据库(DatabasePartitioningFeature,DPF)。
b)主数据库和备用数据库必须运行在相同的操作系统版本上,并且DB2UDB的版本也必须一致,除非短暂的软件升级过程。
c)主数据库和备用数据库的位大小必须一致(32位或64位)。
d)不能在备用数据库上进行备份操作
e)备用数据库是不能访问的,客户端程序无法连接备用数据库。
f)日至归档操作只能在主数据库上进行。带有COPYNO选项的LOAD命令是不支持的
g)主数据库和备用数据库必须是一对一的。
h)HADR不能使用循环日志
i)HADR不复制数据库配置参数、共享库、DLL、UDF或存储过程

注意以上是9.5版本的DB2限制,从DB29.7.1开始支持了HADR备机可读。
j)除非已启用“在备用数据库上读取”,否则客户机无法与备用数据库连接。“在备用数据库上读取”可让客户机连接至活动备用数据库及发出只读查询。
k)如果已启用“在备用数据库上读取”,那么不允许在备用数据库上执行写入日志记录的操作;只有读取客户机可以连接至活动备用数据库。
l)如果已启用“在备用数据库上读取”,那么不允许在备用数据库上执行修改数据库内容的写入操作。将不支持尝试修改数据库对象的任何异步线程(例如JustInTimeStatistics(JITS)和自动重建索引)和实用程序。JITS和自动重建索引不应在备用数据库上运行。
m)只能由当前主数据库执行日志归档。
n)只能对当前主数据库运行自调整内存管理器(STMM)。在主数据库启动或备用数据库通过接管而转换为主数据库后,直到第一个客户机连接生效,STMMEDU才可能启动。
o)在备用数据库上不支持备份操作。
p)未进行日志记录的操作(例如对数据库配置参数和恢复历史记录文件所作的更改)不会被复制到备用数据库。
q)不支持指定了COPYNO选项的装入操作。
r)HADR不支持对数据库日志文件使用原始I/O(直接磁盘访问)。如果HADR是通过STARTHADR命令启动的,或者在配置了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和VisualExplain)和db2batch工具(SQL1773N原因码5)。如果要分析只读工作负载的性能,那么首先应在主数据库上运行这些工具,在主数据库上对工作负载进行必要的优化,然后将优化后的工作负载移至备用数据库。
m.在备用数据库上不支持程序包的显式绑定及重新绑定和隐式重新绑定。尝试运行引用失效对象的静态程序包及这些程序包的隐式重新绑定将导致错误(分别为SQL1773N原因码5和6)。应该转为在主数据库上绑定程序包,并在将更改复制到备用数据库后,在备用数据库上运行程序包。
n.在备用数据库上不支持自调整内存管理器(STMM)。如果要调整备用数据库(以适合运行只读工作负载或以在接管后执行良好),那么必须手动调整。
o.主数据库上的工作负载管理器(WLM)DDL语句将在备用数据库上重放,但它们在备用数据库上不会生效;但是,存在于数据库备份(用于建立备用数据库)中的任何定义在启用了读取的备用数据库上将是活动的。
p.在备用数据库上不支持创建和改变序列。同样,不能使用NEXTVALUE表达式来生成序列中的下一个值。
q.在备用数据库上不支持无效对象的运行时重新验证。
r.不能将备用数据库配置为FederationServer。
s.在备用数据库上不支持备份和归档操作。
t.在备用数据库上不支持停顿操作。


十二、自动化脚本

@echooffrem-----rem单机环境DB2HADR生成脚本
rem您可以将这个脚本保存到一个脚本文件hadr.cmd中,然后按一下语法执行:
remhadr.cmd<hostname>
rem-------if"%1"==""gotousage
rem清除原有环境
rem----echo清除环境
setdb2instance=db2inst1
db2start
db2dropdbsample
db2stop
db2idropdb2inst1
setdb2instance=db2inst2
db2start
db2dropdbsample
db2stop
db2idropdb2inst2
rem------rem创建db2inst1实例
rem-----echo创建db2inst1实例....
db2icrtdb2inst1
iferrorlevel1gotoendecho成功创建db2inst1实例
setdb2instance=db2inst1
db2start
db2updatedbmcfgusingsvcename33333db2setdb2comm=tcpip
db2terminate
db2stop
db2start
echo在实例db2inst1下创建sample数据库
db2sampl
iferrorlevel1gotoenddb2updatedbcfgforsampleusingLOGRETAINRECOVERY
echo备份sample数据库到当前路径
db2backupdbsampleto.
iferrorlevel1gotoendrem--------rem创建db2inst2实例
rem--------echo创建db2inst2实例....
db2icrtdb2inst2
iferrorlevel1gotoendecho成功创建db2inst2实例
setdb2instance=db2inst2
db2start
db2updatedbmcfgusingsvcename44444db2setdb2comm=tcpip
db2terminate
db2stop
echo在实例db2inst2下恢复sample数据库
db2start
db2restoredbsamplefrom.
iferrorlevel1gotoendrem---------rem配置HADR参数
rem--------echo配置实例db2inst2下的sample数据库的HADR参数
db2updatedbcfgforsampleusingHADR_LOCAL_HOST%1
db2updatedbcfgforsampleusingHADR_LOCAL_SVC44455
db2updatedbcfgforsampleusingHADR_REMOTE_HOST%1
db2updatedbcfgforsampleusingHADR_REMOTE_SVC33344
db2updatedbcfgforsampleusingHADR_REMOTE_INSTdb2inst1
db2updatedbcfgforsampleusingHADR_SYNCMODENEARSYNC
db2updatedbcfgforsampleusingLOGINDEXBUILDon
echo配置实例db2inst1下的sample数据库的HADR参数
SETdb2instance=db2inst1
db2updatedbcfgforsampleusingHADR_LOCAL_HOST%1
db2updatedbcfgforsampleusingHADR_LOCAL_SVC33344
db2updatedbcfgforsampleusingHADR_REMOTE_HOST%1
db2updatedbcfgforsampleusingHADR_REMOTE_SVC44455
db2updatedbcfgforsampleusingHADR_REMOTE_INSTdb2inst2
db2updatedbcfgforsampleusingHADR_SYNCMODENEARSYNC
db2updatedbcfgforsampleusingLOGINDEXBUILDon
rem-------rem启动HADR
rem-----echo启动实例db2inst2下的sample数据库作为备用数据库standby
setdb2instance=db2inst2
db2starthadrondbsampleasstandby
iferrorlevel1gotoend
echo启动实例db2inst1下的sample数据库作为主数据库primary
setdb2instance=db2inst1
db2starthadrondbsampleasprimary
iferrorlevel1gotoend
echo祝贺您成功配置HADR.
exit:usage
echo"语法:handson.cmd<hostname>"
:endEcho"运行错误,请检查脚本"
页: [1]
查看完整版本: Windows 7 SP1 64bit 实施单机环境下DB2 V9.5.7 HADR实现实例级故障切换