数据库主机:使用VMwareworkstation 虚拟两台机器
操作系统:RedHatEL5.3
数据库软件:DB2V9.7
虚拟机,操作系统环境安装过程省去。
Linux1130.30.3.252(255.255.255.0)
Linux2130.30.3.136(255.255.255.0)
Linux1的/etc/hosts
130.30.3.252linux1
130.30.3.136linux2
Linux2的/etc/hosts
130.30.3.252linux1
130.30.3.136linux2
验证,确保网络连通性是否正常及配置正确
Pinglinux1
Pinglinux2
Ping130.30.3.252
Ping130.30.3.136
用root用户登录,编辑/etc/sysctl.conf文件,修改需调整的内核参数,增加如下:
kernel.sem=250256000321024
kernel.shmmax=268435456
kernel.shmall=8388608
kernel.msgmax=65535
kernel.msgmnb=65535
kernel.shmall=2097152
kernel.shmmax=2147483648
kernel.shmmni=4096
#semaphores:semmsl,semmns,semopm,semmni
kernel.sem=25032000100128
fs.file-max=65536
net.ipv4.ip_local_port_range=102465000
net.core.rmem_default=262144
net.core.rmem_max=262144
net.core.wmem_default=262144
net.core.wmem_max=262144
执行sysctl–p,从/etc/sysctl.conf文件装入sysctl设置。
运行ipcs–l命令显示验证当前的内核参数设置
#ipcs-l
------SharedMemoryLimits--------
maxnumberofsegments=4096//SHMMNI
maxsegsize(kbytes)=32768//SHMMAX
maxtotalsharedmemory(kbytes)=8388608//SHMALL
minsegsize(bytes)=1
------SemaphoreLimits--------
maxnumberofarrays=1024//SEMMNI
maxsemaphoresperarray=250//SEMMSL
maxsemaphoressystemwide=256000//SEMMNS
maxopspersemopcall=32//SEMOPM
semaphoremaxvalue=32767
------Messages:Limits--------
maxqueuessystemwide=1024//MSGMNI
maxsizeofmessage(bytes)=65536//MSGMAX
defaultmaxsizeofqueue(bytes)=65536//MSGMNB
设置DB2实例用户Data,nofiles,fsize资源的操作系统硬限制为无限制。
可通过修改文件/etc/security/limits.conf设置
*softnproc3000
*hardnproc16384
*softnofile65536
*hardnofile65536
可通过ulimit–Hdnf命令查询值的限制
在主节点创建以下文件系统:
创建PV,卷组
[root@linux1db2]#pvcreate/dev/sdb1
[root@linux1db2]#vgcreatedatavg/dev/sdb1
新建LV,文件系统
[root@linux1~]#lvcreate-ndb2homelv-L1G/dev/datavg
Logicalvolume"db2homelv"created
[root@linux1~]#lvcreate-nhafs01lv-L2G/dev/datavg
Logicalvolume"hafs01lv"created
#mkfs.ext3/dev/datavg/db2homelv
#mkfs.ext3/dev/datavg/hafs01lv
#mkdir/db2home
#mkdir/db2bak
挂载文件系统
#mount/dev/datavg/db2homelv/db2home
#mount/dev/datavg/hafs01lv/db2bak
增加挂载点条目
#vi/etc/fstab
/dev/datavg/db2homelv/db2homeext3defaults12
/dev/datavg/hafs01lv/db2bakext3defaults12
在备用主机节点创建以下文件系统
[root@linux2~]#vgcreatedatavg/dev/sdb1
Volumegroup"datavg"successfullycreated
[root@linux2~]#lvcreate-ndb2homelv-L1G/dev/datavg
Logicalvolume"db2homelv"created
[root@linux2~]#mkfs.ext3/dev/datavg/db2homelv
[root@linux2~]#mkdir/db2home
[root@linux2~]#mount/dev/datavg/db2homelv/db2home
[root@linux2~]#vi/etc/fstab
/dev/datavg/db2homelv/db2homeext3defaults12
分别在主、备节点机器上创建以下用户组及用户,确保两台机器使用完全相同的UID,GID。
新建用户组
通过输入下列命令,为实例所有者创建一个组(例如,db2iadm1),为将要执行UDF或存储过程的用户创建一个组(例如,db2fadm1),并为管理服务器创建一个组(例如,dasadm1):
groupadd-g999db2iadm1
groupadd-g998db2fadm1
groupadd-g997dasadm1
新建用户
通过使用下列命令,为前一步骤中创建的每个组创建一个用户。每个用户的主目录将是先前创建的共享DB2主目录(db2home)。
useradd-u999-gdb2iadm1-m-d/db2home/db2inst1db2inst1
useradd-u998-gdb2fadm1-m-d/db2home/db2fenc1db2fenc1
useradd-u997-gdasadm1-m-d/db2home/dasusr1dasusr1
设置新建用户的初始密码
#passwddb2inst1
#passwddb2fenc1
#passwddasusr1
修改文件系统属主
#chowndb2inst1:db2iadm1/db2home
#chowndb2inst1:db2iadm1/db2bak
依次在主、备节点分别完成DB2数据库软件的安装,一般建议使用root安装,非root用户安装会有一些限制。
解压安装下载的安装介质
[root@linux1db2]#tarzxvfv9.7_linuxia32_server.tar.gz
使用db2_install命令执行安装
[root@linux1server]#./db2_install
选择DB2安装目录,可以更改安装目录,linux下缺省安装目录为/opt/ibm/db2/V9.7
***********************************************************
要选择另一个目录用于安装吗?[是/否]
否
安装DB2产品选择ESE
指定下列其中一个关键字以安装DB2产品。
ESE
CONSV
WSE
EXP
PE
CLIENT
RTCL
按“帮助”以重新显示产品名称。
按“退出”以退出。
***********************************************************
ESE
等待安装执行过程,完成后会提示安装成功信息
正在初始化DB2安装。
要执行的任务总数为:46
要执行的所有任务的总估计时间为:1876
任务#1启动
描述:正在检查许可协议的接受情况
估计时间1秒
任务#1结束
…………………………………
…………………………………S
已成功完成执行。
有关更多信息,请参阅"/tmp/db2_install.log.18940"上的DB2安装日志。
3.6配置NTP网络时间同步
建议同步集群节点上的时间和日期(但不是必须的)。
在主服务器上通过在/etc/exports文件中添加以下条目,可以在启动时通过一个NFS服务导出这个文件系统
[root@linux1db2bak]#vi/etc/exports
/db2bak*(rw,no_root_squash)
启动NFS服务
[root@linux1db2bak]#servicenfsstart
[root@linux1db2bak]#serviceportmapstart
执行exportfs命令,使将挂载的NFS客户机能使用配置的/db2bak共享目录
/usr/sbin/exportfs-a
其中选项a用于导出/etc/exports文件中列出的所有目录。
用以下命令在在备机上创建共享目录:
[root@linux2~]#mkdir/db2bak
添加一个条目到/etc/fstab文件,使NFS在启动时自动挂载文件系统:
130.30.3.252:/db2bak/db2baknfsrw,timeo=300,retrans=5,hard,intr,bg,suid
用以下命令在备机数据库服务器上挂载导出的文件系统:
[root@linux2~]#mount-tnfs130.30.3.252:/db2bak/db2bak
或[root@linux2server]#mount/db2bak
[root@linux1instance]cd/opt/ibm/db2/V9.7/instance
[root@linux1instance]#./db2icrt-udb2fenc1db2inst1
DBI1070IProgramdb2icrtcompletedsuccessfully.
[root@linux1instance]#./db2ilist
db2inst1
[root@linux1instance]#su-db2inst1
[db2inst1@linux1~]$db2start
01/27/201117:37:4600SQL1063NDB2STARTprocessingwassuccessful.
SQL1063NDB2STARTprocessingwassuccessful.
[db2inst1@linux1~]$db2setdb2comm=tcpip
[db2inst1@linux1~]$db2updatedbmcfgusingsvcenameDB2_db2inst1
DB20000ITheUPDATEDATABASEMANAGERCONFIGURATIONcommandcompletedsuccessfully.
[db2inst1@linux1~]$cat/etc/services|grepDB2_
DB2_db2inst160000/tcp
DB2_db2inst1_160001/tcp
DB2_db2inst1_260002/tcp
DB2_db2inst1_END60003/tcp
分别在主、备节点创建数据库管理服务器
[root@linux1~]#cd/opt/ibm/db2/V9.7/instance
[root@linux1instance]#./dascrt-udasusr1
SQL4406WTheDB2AdministrationServerwasstartedsuccessfully.
DBI1070IProgramdascrtcompletedsuccessfully.
[root@linux1instance]#su-dasusr1
[dasusr1@linux1~]$db2adminstart
SQL4409WTheDB2AdministrationServerisalreadyactive.
在主节点创建sample数据库
[db2inst1@linux1~]$db2sampl-dbpath/db2home/db2inst1/sample
修改以下数据库参数:
db2UPDATEDBCFGFORsampleUSINGINDEXRECRESTARTLOGINDEXBUILDONLOGARCHMETH1DISK:/db2bak/logsLOGPRIMARY20LOGSECOND20AUTORESTARTOFFTRACKMODON
[db2inst1@linux1~]$db2UPDATEDBCFGFORsampleUSINGINDEXRECRESTARTLOGINDEXBUILDONLOGARCHMETH1DISK:/db2bak/logsLOGPRIMARY20LOGSECOND20AUTORESTARTOFF
DB20000ITheUPDATEDATABASECONFIGURATIONcommandcompletedsuccessfully.
在主机上执行脱机备份数据库
[db2inst1@linux1db2bak]$db2deactivatedbsample
DB20000ITheDEACTIVATEDATABASEcommandcompletedsuccessfully.
[db2inst1@linux1db2bak]$db2backupdbsampleto/db2bak/with2buffersbuffer1024parallelism4withoutprompting
Backupsuccessful.Thetimestampforthisbackupimageis:20110309104324
[db2inst1@linux1db2bak]$ls
logslost+foundSAMPLE.0.db2inst1.NODE0000.CATN0000.20110309104324.001
[db2inst1@linux1db2bak]$db2ckbkpSAMPLE.0.db2inst1.NODE0000.CATN0000.20110309104324.001
[1]Buffersprocessed:###################################
ImageVerificationComplete-successful.
通过主数据库备份进行完全恢复,完成备用数据库的创建
[root@linux2instance]#su-db2inst1
[db2inst1@linux2~]$cd/db2bak
[db2inst1@linux2~]$mkdir/db2home/db2inst1/sample
[db2inst1@linux2~]$ls
samplesqllib
[db2inst1@linux2~]$cd/db2bak
[db2inst1@linux2db2bak]$ls
logslost+foundSAMPLE.0.db2inst1.NODE0000.CATN0000.20110309104324.001SAMPLE.0.db2inst1.NODE0000.CATN0000.20110310105829.001
[db2inst1@linux2db2bak]$db2restoredbsamplefrom/db2baktakenat20110310105829replacehistoryfile
DB20000ITheRESTOREDATABASEcommandcompletedsuccessfully.
分别在主、备服务器上修改服务配置文件,增加用于HADR通讯使用的服务名称和端口。
–Servicename:DB2_HADR_1
–Portnumber:55001
–Servicename:DB2_HADR_2
–Portnumber:55002
在主服务器linux1上添加如下服务
[root@linux1~]#cat/etc/services|grepDB2_
DB2_db2inst160000/tcp
DB2_db2inst1_160001/tcp
DB2_db2inst1_260002/tcp
DB2_db2inst1_END60003/tcp
DB2_HADR_155001/tcp
DB2_HADR_255002/tcp
在备服务器linux2上添加如下服务
[root@linux2~]#cat/etc/services|grepDB2_
DB2_db2inst160000/tcp
DB2_db2inst1_160001/tcp
DB2_db2inst1_260002/tcp
DB2_db2inst1_END60003/tcp
DB2_HADR_155001/tcp
DB2_HADR_255002/tcp
注:这一步不是必须的,因为在下面配置HADR_LOCAL_SVC和HADR_REMOTE_SVC数据库参数的时候您可以直接使用端口号来替代服务名。
db2updatedbcfgforsampleusingHADR_LOCAL_HOST130.30.3.252
db2updatedbcfgforsampleusingHADR_LOCAL_SVCDB2_HADR_1
db2updatedbcfgforsampleusingHADR_REMOTE_HOST130.30.3.136
db2updatedbcfgforsampleusingHADR_REMOTE_SVCDB2_HADR_2
db2updatedbcfgforsampleusingHADR_REMOTE_INSTDB2INST1
db2updatedbcfgforsampleusingHADR_SYNCMODENEARSYNC
db2updatedbcfgforsampleusingHADR_TIMEOUT10
db2updatedbcfgforsampleusingHADR_PEER_WINDOW120
db2connecttosample
db2quiescedatabaseimmediateforceconnections
db2unquiescedatabase
db2connectreset
db2updatedbcfgforsampleusingHADR_LOCAL_HOST130.30.3.136
db2updatedbcfgforsampleusingHADR_LOCAL_SVCDB2_HADR_2
db2updatedbcfgforsampleusingHADR_REMOTE_HOST130.30.3.252
db2updatedbcfgforsampleusingHADR_REMOTE_SVCDB2_HADR_1
db2updatedbcfgforsampleusingHADR_REMOTE_INSTdb2inst1
db2updatedbcfgforsampleusingHADR_SYNCMODENEARSYNC
db2updatedbcfgforsampleusingHADR_TIMEOUT10
db2updatedbcfgforsampleusingHADR_PEER_WINDOW120
6.7启动HADR
在备用服务器上启动HADR备用数据库
db2deactivatedatabasesample
db2starthadrondatabasesampleasstandby
[db2inst1@linux2db2bak]$db2deactivatedatabasesample
SQL1496WDeactivatedatabaseissuccessful,butthedatabasewasnotactivated.
[db2inst1@linux2db2bak]$db2starthadrondatabasesampleasstandby
DB20000ITheSTARTHADRONDATABASEcommandcompletedsuccessfully.
在主服务器上启动HADR主数据库
db2deactivatedatabasesample
db2starthadrondatabasesampleasprimary
[db2inst1@linux1db2bak]$db2deactivatedatabasesample
SQL1496WDeactivatedatabaseissuccessful,butthedatabasewasnotactivated.
[db2inst1@linux1db2bak]$db2starthadrondatabasesampleasprimary
DB20000ITheSTARTHADRONDATABASEcommandcompletedsuccessfully.
注意:
在启动HADR时,一定要先在备用服务器上启动HADR服务,然后在主服务器上启动。同样,在停止HADR时,要先在主服务器上停止服务,然后是备用服务器。
如果你先启动主数据库服务器HADR,那么你必须保证在HADR_TIMEOUT参数指定的时间内(单位为秒)启动备用数据库服务器HADR。否则将启动失败。
6.8查看HADR运行状态
现在,已经完成了HADR设置,就应该检查它是否能够正常工作。
在主服务器linux1上执行以下命令:
db2getsnapshotfordbonsample
输出如下:
HADRStatus
Role=Primary
State=Peer
Synchronizationmode=Nearsync
Connectionstatus=Connected,2011-03-0911:01:55.144160
Peerwindowend=2011-03-0911:06:34.000000(1299639994)
Peerwindow(seconds)=120
Heartbeatsmissed=0
Localhost=130.30.3.252
Localservice=DB2_HADR_1
Remotehost=130.30.3.136
Remoteservice=DB2_HADR_2
Remoteinstance=DB2INST1
timeout(seconds)=3
Primarylogposition(file,page,LSN)=S0000000.LOG,0,00000000045F81C1
Standbylogposition(file,page,LSN)=S0000000.LOG,0,00000000045F81C1
Loggaprunningaverage(bytes)=0
在主服务器linux1上执行以下命令:
db2getsnapshotfordbonsample
输出如下:
HADRStatus
Role=Standby
State=Peer
Synchronizationmode=Nearsync
Connectionstatus=Connected,2011-03-0911:01:54.978888
Peerwindowend=2011-03-0911:08:24.000000(1299640104)
Peerwindow(seconds)=120
Heartbeatsmissed=0
Localhost=130.30.3.136
Localservice=DB2_HADR_2
Remotehost=130.30.3.252
Remoteservice=DB2_HADR_1
Remoteinstance=db2inst1
timeout(seconds)=3
Primarylogposition(file,page,LSN)=S0000000.LOG,0,00000000045F81C1
Standbylogposition(file,page,LSN)=S0000000.LOG,0,00000000045F81C1
Loggaprunningaverage(bytes)=0
也可以通过db2pd–dbsample–hadr命令来查看HADR运行状态。
7HADR接管测试
设置过程的最后一步是测试HADR的故障恢复功能。可以手工在备用服务器上执行普通接管命令
db2takeoverhadrondatabasesample
如果一般的接管不起作用,就需要指定BYFORCE选项,强迫db2切换到备用服务器上的HADR(如主数据库主机异常情况下启用备用服务器接管数据库)。
在主服务器linux1上,执行以下命令启用HADR的自动客户机重路由特性:
db2updatealternateserverfordatabasesampleusinghostname130.30.3.136port60000
[db2inst1@linux1db2bak]$db2updatealternateserverfordatabasesampleusinghostname130.30.3.136port60000
DB20000ITheUPDATEALTERNATESERVERFORDATABASEcommandcompleted
successfully.
DB21056WDirectorychangesmaynotbeeffectiveuntilthedirectorycacheis
refreshed.
[db2inst1@linux1db2bak]$db2listdbdirectory
SystemDatabaseDirectory
Numberofentriesinthedirectory=1
Database1entry:
Databasealias=SAMPLE
Databasename=SAMPLE
Localdatabasedirectory=/db2home/db2inst1/sample
Databasereleaselevel=d.00
Comment=
Directoryentrytype=Indirect
Catalogdatabasepartitionnumber=0
Alternateserverhostname=130.30.3.136
Alternateserverportnumber=60000
在备用服务器linux2上,执行以下命令启用HADR的自动客户机重路由特性:
db2updatealternateserverfordatabasesampleusinghostname130.30.3.252port60000
[db2inst1@linux2db2bak]$db2updatealternateserverfordatabasesampleusinghostname130.30.3.252port60000
DB20000ITheUPDATEALTERNATESERVERFORDATABASEcommandcompleted
successfully.
DB21056WDirectorychangesmaynotbeeffectiveuntilthedirectorycacheis
refreshed.
[db2inst1@linux2db2bak]$db2listdbdirectory
SystemDatabaseDirectory
Numberofentriesinthedirectory=1
Database1entry:
Databasealias=SAMPLE
Databasename=SAMPLE
Localdatabasedirectory=/db2home/db2inst1
Databasereleaselevel=d.00
Comment=
Directoryentrytype=Indirect
Catalogdatabasepartitionnumber=0
Alternateserverhostname=130.30.3.252
Alternateserverportnumber=60000
db2catalogtcpipnodetesthadrremote130.30.3.252server60000
db2catalogdbsampleastesthadratnodetesthadr
1.在主数据库上创建测试表
C:\DocumentsandSettings\fengsh>db2connecttotesthadruserdb2inst1usingdb2inst1
db2=>CREATETABLEHADRTEST(IDINTEGERNOTNULLWITHDEFAULT,NAMEVARCHAR(10),PRIMARYKEY(ID))
DB20000ISQL命令成功完成。
db2=>INSERTINTOHADRTEST(ID,NAME)VALUES(1,'张三')
DB20000ISQL命令成功完成。
db2=>INSERTINTOHADRTEST(ID,NAME)VALUES(2,'李四')
DB20000ISQL命令成功完成。
db2=>select*fromhadrtest
IDNAME
---------------------
1张三
2李四
2条记录已选择。
db2=>
2.在备用服务器上接管主数据库
[db2inst1@linux2db2bak]$db2takeoverhadrondatabasesample
DB20000ITheTAKEOVERHADRONDATABASEcommandcompletedsuccessfully.
获取快照发现,备用服务器上HADR已经接管,成为primay数据库
[db2inst1@linux2db2bak]$db2getsnapshotfordbonsample|more
HADRStatus
Role=Primary
State=Peer
Synchronizationmode=Nearsync
Connectionstatus=Connected,2011-03-0914:55:55.852957
Peerwindowend=2011-03-0915:01:08.000000(1299654068)
Peerwindow(seconds)=120
Heartbeatsmissed=0
Localhost=130.30.3.136
Localservice=DB2_HADR_2
Remotehost=130.30.3.252
Remoteservice=DB2_HADR_1
Remoteinstance=db2inst1
timeout(seconds)=3
Primarylogposition(file,page,LSN)=S0000001.LOG,0,00000000049DB3A1
Standbylogposition(file,page,LSN)=S0000001.LOG,0,00000000049DB3A1
Loggaprunningaverage(bytes)=0
而对应原来主服务器上数据库成为standby数据库
[db2inst1@linux1~]$db2getsnapshotfordatabaseonsample
HADRStatus
Role=Standby
State=Peer
Synchronizationmode=Nearsync
Connectionstatus=Connected,2011-03-0914:55:56.222980
Peerwindowend=2011-03-0915:03:16.000000(1299654196)
Peerwindow(seconds)=120
Heartbeatsmissed=0
Localhost=130.30.3.252
Localservice=DB2_HADR_1
Remotehost=130.30.3.136
Remoteservice=DB2_HADR_2
Remoteinstance=DB2INST1
timeout(seconds)=3
Primarylogposition(file,page,LSN)=S0000001.LOG,0,00000000049DB3A1
Standbylogposition(file,page,LSN)=S0000001.LOG,0,00000000049DB3A1
Loggaprunningaverage(bytes)=0
3.客户端应用程序验证
客户端程序无法连原主数据库后,会自动重新路由连接到备用数据库,不用客户端重新连库。
C:\DocumentsandSettings\fengsh>db2"select*fromhadrtest"
SQL30108N连接失败,但是已经重新建立了连接。主机名或IP地址为
"130.30.3.136",服务名称或端口号为
"60000"。可能会也可能不会重新尝试专用寄存器(原因码="1")。SQLSTATE=08506
C:\DocumentsandSettings\fengsh>db2"select*fromhadrtest"
IDNAME
---------------------
1张三
2李四
2条记录已选择。
重新在原主服务器上接管数据库,恢复最初主备数据库服务器状态,验证客户程序的连接,也自动完成重新路由。
C:\DocumentsandSettings\fengsh>db2"select*fromhadrtest"
SQL30108N连接失败,但是已经重新建立了连接。主机名或IP地址为
"130.30.3.252",服务名称或端口号为
"60000"。可能会也可能不会重新尝试专用寄存器(原因码="1")。SQLSTATE=08506
C:\DocumentsandSettings\fengsh>db2"select*fromhadrtest"
IDNAME
---------------------
1张三
2李四
2条记录已选择。
在主数据库宕库,主数据库主机故障,网络故障等异常情况下导致主数据库问题是的接管测试。
1.用db2_kill命令手工关闭主服务器
[db2inst1@linux1db2dump]$db2_kill
ipclean:RemovingDB2engineandclient'sIPCresourcesfordb2inst1.
在备库服务器上执行db2getsnapshotfordbonsample获取快照信息
HADRStatus
Role=Standby
State=Disconnectedpeer
Synchronizationmode=Nearsync
Connectionstatus=Disconnected,2011-03-1016:54:28.400277
Peerwindowend=2011-03-1017:00:29.000000(1299747629)
Peerwindow(seconds)=120
Heartbeatsmissed=0
Localhost=130.30.3.136
Localservice=DB2_HADR_2
Remotehost=130.30.3.252
Remoteservice=DB2_HADR_1
Remoteinstance=db2inst1
timeout(seconds)=10
Primarylogposition(file,page,LSN)=S0000006.LOG,59,0000000005D860C4
Standbylogposition(file,page,LSN)=S0000006.LOG,59,0000000005D860C4
Loggaprunningaverage(bytes)=0
2.在备用服务器上接管HADR主数据库
[db2inst1@linux2sample]$db2takeoverhadrondatabasesample
SQL1770NTakeoverHADRcannotcomplete.Reasoncode="1".
[db2inst1@linux2sample]$db2takeoverhadrondatabasesamplebyforce
DB20000ITheTAKEOVERHADRONDATABASEcommandcompletedsuccessfully.
备用机器HADR接管为primary数据库
HADRStatus
Role=Primary
State=Disconnected
Synchronizationmode=Nearsync
Connectionstatus=Disconnected,2011-03-1016:54:28.400277
Peerwindowend=Null(0)
Peerwindow(seconds)=120
Heartbeatsmissed=0
Localhost=130.30.3.136
Localservice=DB2_HADR_2
Remotehost=130.30.3.252
Remoteservice=DB2_HADR_1
Remoteinstance=db2inst1
timeout(seconds)=10
Primarylogposition(file,page,LSN)=S0000006.LOG,59,0000000005D860C4
Standbylogposition(file,page,LSN)=S0000000.LOG,0,0000000000000000
Loggaprunningaverage(bytes)=0
3.客户端应用程序验证
客户端程序无法连原主数据库后,会自动重新路由连接到备用数据库,不用客户端重新连库。
C:\DocumentsandSettings\fengsh>db2select*fromhadrtest
IDNAME
---------------------
1张三
2李四
2条记录已选择。
C:\DocumentsandSettings\fengsh>db2select*fromhadrtest
SQL30108N连接失败,但是已经重新建立了连接。主机名或IP地址为
"130.30.3.136",服务名称或端口号为
"60000"。可能会也可能不会重新尝试专用寄存器(原因码="1")。SQLSTATE=08506
C:\DocumentsandSettings\fengsh>db2select*fromhadrtest
IDNAME
---------------------
1张三
2李四
2条记录已选择。
C:\DocumentsandSettings\fengsh>db2select*fromhadrtest
SQL30108N连接失败,但是已经重新建立了连接。主机名或IP地址为
"130.30.3.252",服务名称或端口号为
"60000"。可能会也可能不会重新尝试专用寄存器(原因码="1")。SQLSTATE=08506
C:\DocumentsandSettings\fengsh>db2select*fromhadrtest
IDNAME
---------------------
1张三
2李四
2条记录已选择。
在主数据库宕库,主数据库主机故障,网络故障等异常情况下导致HADR数据库故障接管;待主服务器恢复后,重新进行hadr主数据库接管,恢复最初主备状态。
1.启动实例
[db2inst1@linux1db2dump]$db2start
03/10/201117:05:5400SQL1063NDB2STARTprocessingwassuccessful.
SQL1063NDB2STARTprocessingwassuccessful.
2.启动hadr到standby数据库
[db2inst1@linux1db2dump]$db2starthadrondatabasesampleasstandby
DB20000ITheSTARTHADRONDATABASEcommandcompletedsuccessfully.
3.重新接管恢复为primary数据库
[db2inst1@linux1db2dump]$db2takeoverhadrondbsample
DB20000ITheTAKEOVERHADRONDATABASEcommandcompletedsuccessfully.
4.客户端应用程序验证
客户端程序自动重新路由连接到主服务器的primary数据库。
8其他问题8.1HADR设计限制
1.仅在DB2UDB企业服务器版本(ESE)上支持HADR。但是,当ESE上有多个数据库分区时,不支持HADR。
2.主数据库和备用数据库主机的操作系统、db2软件的版本,级别必须相同,交替卷动升级过程中较短时间除外。
3.主数据库和备用数据库上的DB2UDB发行版必须具有相同的位大小(32位或64位)。
4.日志要使用独立的、高性能的磁盘或文件系统归档日志的位置,主从节点必须都能访问的到
5.HADR通讯最好使用独立的网络
6.考虑使用多块网卡
7.考虑提供一个虚拟IP访问数据库服务器
8.考虑使用客户端自动路由――虚拟IP和客户端自动路由二选一即可,不可同时使用。
客户端自动路由与虚拟IP相比,它是DB2软件集成的,不需其他硬件或软件支持。
9.选择合适的hadr_syncmode模式
10.在V9.7前版本不支持备用数据库上的读操作,客户机无法与备用数据库连接,V9.7支持备用数据库查询模式打开。
1.在备用服务器上启动备用数据库上的HADR
db2deactivatedatabasesample
db2starthadrondatabasesampleasstandby
2.在主服务器上启动主数据库上的HADR
db2deactivatedatabasesample
db2starthadrondatabasesampleasprimary
1.在主服务器上停止主数据库的HADR
db2deactivatedatabasesample
db2stophadrondatabasesample
2.在备用服务器上停止备用数据库的HADR
db2deactivatedatabasesample
db2stophadrondatabasesample
在备用服务器上执行数据库普通接管命令
db2takeoverhadrondatabasesample
如果普通接管失败,或者主数据库故障时,需执行强制接管命令
db2takeoverhadrondatabasesamplebyforce
以下操作将会通过HADR从主数据库复制到standby库
DataDefinitionLanguage(DDL):
–Includescreateanddroptable,index,andmore
DataManipulationLanguage(DML):
–Insert,update,ordelete
Bufferpool:
–Createanddrop
Tablespace:
–Create,drop,oralter.
–Containersizes,filetypes(rawdeviceorfilesystem),andpathsmustbeidenticalontheprimaryandthestandby.
–Tablespacetypes(DMSorSMS)mustbeidenticalonboththeservers.
–Ifthedatabaseisenabledforautomaticstorage,thenthestoragepathsmustbeidentical.
OnlineREORG:
–Replicated.Thestandby’sPeerstatewiththeprimaryisrarelyimpacted
bythis,althoughitcanimpactthesystembecauseoftheincreaseinthenumberoflogrecordsgenerated.
OfflineREORG:
-Replicated.
Storedproceduresanduserdefinedfunctions(UDF):
–Creationstatementsarereplicated.
–HADRdoesnotreplicatetheexternalcodeforstoredproceduresorUDFobjectlibraryfiles.Inordertokeeptheseinsynchronizationbetweentheprimaryandthestandby,itistheuser’sresponsibilitytosettheseuponidenticalpathsonboththeprimaryandthestandbyservers.Ifthepathsarenotidentical,invocationfailsonthestandby.
以下操作HADR不会复制standby数据库:
_NOTLOGGEDINITIALLYtables:
–TablescreatedoralteredwiththeNOTLOGGEDINITIALLYoption
specifiedarenotreplicated.Thetablesareinvalidonthestandbyand
afteratakeover,attemptstoaccessthesetablesresultinanerror.
_BLOBsandCLOBs:
–Non-loggedLargeObjects(LOBs)arenotreplicated,butthespaceis
allocatedandLOBdataissettobinaryzeroesonthestandby.
_Datalinks:
–NOTSUPPORTEDinHADR.
_Databaseconfigurationchanges:
–UPDATEDBCFGisnotreplicated.
–Dynamicdatabaseconfigurationparameterscanbeupdatedtoboththe
primaryandthestandbywithoutinterruption.Forthedatabase
configurationparametersthatneedarecycleofthedatabasewe
recommendyoufollowtherollingupgradesteps.See7.1,“DB2fixpack
rollingupgrades”onpage177.
_Recoveryhistoryfile:
–NOTautomaticallyshippedtostandby.
–Youcanplaceaninitialcopyofthehistoryfilebyusingaprimarybackup
imagetorestorethehistoryfiletothestandbyusingtheRESTORE
commandwiththeREPLACEHISTORYFILEoptionforexample:
db2restoredatabasesamplereplacehistoryfile
–Youcanalsoupdatethehistoryfileonthestandbyfromaprimarybackup
imagebytheRESTOREcommandforexample:
db2restoredatabasesamplehistoryfile
–Ifatakeoveroperationoccursandthestandbydatabasehasan
up-to-datehistoryfile,backupandrestoreoperationsonthenewprimary
generatenewrecordsinthehistoryfileandblendseamlesslywiththe
recordsgeneratedontheoriginalprimary.Ifthehistoryfileisout-of-date
orhasmissingentries,anautomaticincrementalrestoremightnotbe
possible;instead,amanualincrementalrestoreoperationisrequired.
Wethinkthattherecoveryhistoryfilefortheprimarydatabaseisnot
relevanttothestandbydatabase,becauseitcontainsDB2recovery
informationspecifictothatprimaryserver;DB2keepsrecordsofwhich
backupfiletouseforrecoverytopriorpointsintime,amongotherthings.
102HighAvailabilityandDisasterRecoveryOptionsforDB2onLinux,UNIX,andWindows
InmostHADRimplementations,thestandbysystemisonlyusedinthe
primarymodeasatemporarymeasure,whiletheoldprimaryserveris
beingfixed,makingtheprimaryversionoftherecoveryhistoryfile
irrelevant;also,becauseofpotentiallydifferentlogfilenumbersand
locationsbetweentheprimaryandthestandby,incorrectforuseonthe
standbyserver.