Redhat Linux 5.3环境实施DB2 V9.7 HADR

数据库主机:使用VMwareworkstation 虚拟两台机器

操作系统:RedHatEL5.3

数据库软件:DB2V9.7

虚拟机,操作系统环境安装过程省去。

2.2逻辑拓扑结构

Redhat Linux 5.3环境实施DB2 V9.7 HADR

2.3网络配置2.3.1主机的IP配置

Linux1130.30.3.252(255.255.255.0)

Linux2130.30.3.136(255.255.255.0)

2.3.2/etc/hosts文件配置

Linux1的/etc/hosts

130.30.3.252linux1

130.30.3.136linux2

Linux2的/etc/hosts

130.30.3.252linux1

130.30.3.136linux2

2.3.3验证网络连通性

验证,确保网络连通性是否正常及配置正确

Pinglinux1

Pinglinux2

Ping130.30.3.252

Ping130.30.3.136

3DB2软件安装3.1系统内核参数调整

用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

3.2用户资源限制调整

设置DB2实例用户Data,nofiles,fsize资源的操作系统硬限制为无限制。

可通过修改文件/etc/security/limits.conf设置

*softnproc3000

*hardnproc16384

*softnofile65536

*hardnofile65536

可通过ulimit–Hdnf命令查询值的限制

3.3创建文件系统

在主节点创建以下文件系统:

创建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

3.4创建用户及组

分别在主、备节点机器上创建以下用户组及用户,确保两台机器使用完全相同的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

3.5安装DB2软件

依次在主、备节点分别完成DB2数据库软件的安装,一般建议使用root安装,非root用户安装会有一些限制。

解压安装下载的安装介质

[root@linux1db2]#tarzxvfv9.7_linuxia32_server.tar.gz

使用db2_install命令执行安装

[root@linux1server]#./db2_install

选择DB2安装目录,可以更改安装目录,linux下缺省安装目录为/opt/ibm/db2/V9.7

用于安装产品的缺省目录-/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网络时间同步

建议同步集群节点上的时间和日期(但不是必须的)。

4配置NFS文件系统4.1配置NFS服务器

在主服务器上通过在/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文件中列出的所有目录。

4.2配置NFS客户机

用以下命令在在备机上创建共享目录:

[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

5创建示例数据库5.1创建数据库实例

分别在主、备节点完成数据库实例创建,修改参数

[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

5.2创建管理服务器

分别在主、备节点创建数据库管理服务器

[root@linux1~]#cd/opt/ibm/db2/V9.7/instance

[root@linux1instance]#./dascrt-udasusr1

SQL4406WTheDB2AdministrationServerwasstartedsuccessfully.

DBI1070IProgramdascrtcompletedsuccessfully.

[root@linux1instance]#su-dasusr1

[dasusr1@linux1~]$db2adminstart

SQL4409WTheDB2AdministrationServerisalreadyactive.

5.3创建示例数据库

在主节点创建sample数据库

[db2inst1@linux1~]$db2sampl-dbpath/db2home/db2inst1/sample

6HADR数据库配置6.1修改主数据库参数

修改以下数据库参数:

db2UPDATEDBCFGFORsampleUSINGINDEXRECRESTARTLOGINDEXBUILDONLOGARCHMETH1DISK:/db2bak/logsLOGPRIMARY20LOGSECOND20AUTORESTARTOFFTRACKMODON

[db2inst1@linux1~]$db2UPDATEDBCFGFORsampleUSINGINDEXRECRESTARTLOGINDEXBUILDONLOGARCHMETH1DISK:/db2bak/logsLOGPRIMARY20LOGSECOND20AUTORESTARTOFF

DB20000ITheUPDATEDATABASECONFIGURATIONcommandcompletedsuccessfully.

6.2在主服务器上备份数据库

在主机上执行脱机备份数据库

[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.

6.3在备用服务器上恢复数据库

通过主数据库备份进行完全恢复,完成备用数据库的创建

[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.

6.4修改/etc/services配置文件

分别在主、备服务器上修改服务配置文件,增加用于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数据库参数的时候您可以直接使用端口号来替代服务名。

6.5修改主服务器的HADR参数

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

6.6修改备用服务器的HADR参数

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(如主数据库主机异常情况下启用备用服务器接管数据库)。

7.1配置客户端重新路由

在主服务器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

7.2在客户端机器编目

db2catalogtcpipnodetesthadrremote130.30.3.252server60000

db2catalogdbsampleastesthadratnodetesthadr

7.3备用服务器正常接管

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条记录已选择。

7.4主数据库异常时接管

在主数据库宕库,主数据库主机故障,网络故障等异常情况下导致主数据库问题是的接管测试。

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条记录已选择。

7.5原主服务器恢复接管

在主数据库宕库,主数据库主机故障,网络故障等异常情况下导致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支持备用数据库查询模式打开。

8.2基本维护操作8.2.1启动HADR

1.在备用服务器上启动备用数据库上的HADR

db2deactivatedatabasesample

db2starthadrondatabasesampleasstandby

2.在主服务器上启动主数据库上的HADR

db2deactivatedatabasesample

db2starthadrondatabasesampleasprimary

8.2.2停止HADR

1.在主服务器上停止主数据库的HADR

db2deactivatedatabasesample

db2stophadrondatabasesample

2.在备用服务器上停止备用数据库的HADR

db2deactivatedatabasesample

db2stophadrondatabasesample

8.2.3HADR接管

在备用服务器上执行数据库普通接管命令

db2takeoverhadrondatabasesample

如果普通接管失败,或者主数据库故障时,需执行强制接管命令

db2takeoverhadrondatabasesamplebyforce

8.3HADR复制的操作

以下操作将会通过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.

8.4HADR不复制的操作

以下操作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.



你可能感兴趣的:(redhat)