




免费预览已结束,剩余10页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DB2 HADR1 概述High Availability Disaster Recovery (HADR)是数据库级别的高可用性数据复制机制,最初被应用于Informix数据库系统中,称为High Availability Data Replication(HDR)。IBM收购Informix之后,这项技术就应用到了新的DB2发行版中。一个HADR环境需要两台数据库服务器:主数据库服务器(primary)和备用数据库服务器(standby)。当主数据库中发生事务操作时,会同时将日志文件通过TCP/IP协议传送到备用数据库服务器,然后备用数据库对接受到的日志文件进行重放(Replay),从而保持与主数据库的一致性。当主数据库发生故障时,备用数据库服务器可以接管主数据库服务器的事务处理。此时,备用数据库服务器作为新的主数据库服务器进行数据库的读写操作,而客户端应用程序的数据库连接可以通过自动客户端重新路由(Automatic Client Reroute)机制转移到新的主服务器。当原来的主数据库服务器被修复后,又可以作为新的备用数据库服务器加入HADR。通过这种机制,DB2 UDB实现了数据库的灾难恢复和高可用性,最大限度的避免了数据丢失。下图为DB2 HADR的工作原理图:注:处于备用角色的数据库不能被访问。我们就采用DB2的样本数据库SAMPLE作为配置对象。配置过程(以下命令均在DB2 CLP中执行):2 环境操作系统:Redhat Linux Enterprise Server v4.0(两台都一样)数据库:DB2 ESE v9.5.0 for Linux 32bit(两台都一样,必须企业版)下载链接:/webapp/iwm/web/preLogin.do?source=db2udbdl 。DBSERV1:10 DBSERV2:163 配置1).在DBSERV1 10安装DB2,并创建缺省实例db2inst1,服务端口:50000,我们使用缺省的实例所有者用户db2inst1,密码:db2inst12). 在DBSERV1 10使用db2sampl命令在DBSERV1上创建样本数据库SAMPLErootlocalhost # su - db2inst1db2inst1localhost $ db2start db2inst1localhost $ db2sampl3). 在DBSERV1 10修改SAMPLE数据库配置参数LOGRETAIN为ON,以使该数据库日志记录方式改为存档日志。rootlocalhost # su - db2inst1db2inst1localhost $ db2db2 = connect to sampledb2 = update db cfg for sample using logretain on db2 = update db cfg for sample using trackmod ondb2 =update db cfg for sample using newlogpath /db2data/log4). 在DBSERV1 10修改索引日志记录参数rootlocalhost # su - db2inst1db2inst1localhost $ db2db2 = connect to sampledb2 = update db cfg for sample using logindexbuild ondb2 = update db cfg for sample using indexrec restart注:这一步并不是必须的。5). 在DBSERV1 10备份数据库SAMPLE创建目录/database/dbbakrootlocalhost # su - db2inst1 db2inst1localhost $ db2stop db2inst1localhost $ db2start db2inst1localhost $ db2db2 = backup DB sample to /database/dbbak其中/database/dbbak是用来存放数据库备份文件的目录,你完全可以指定任何一个db2inst1有写入权限的其他目录。 备份完成之后,在/database/dbbak目录下我们会看到数据库备份映像文件:SAMPLE.0.db2inst1.NODE0000.CATN0000.20110407182524.001注:你所得到的文件名的时间标志部分肯定和我的不一样,在下面的恢复数据库命令中要注意做相应的修改。6). 在DBSERV1 10将得到的数据库映像文件复制到DB2SERV2对应的目录下(/database/dbbak)。scp SAMPLE.0.db2inst1.NODE0000.CATN0000.20110407182524.001 db2inst16:/database/dbbak/7). 在备库DBSERV16上恢复数据库SAMPLE:rootlocalhost dbbak# su - db2inst1db2inst1localhost $ db2db2 = restore database sample from /database/dbbak taken at 20110407182524 replace history file without prompting8). 在主库上(DBSERV1 10)配置自动客户端重新路由: rootlocalhost dbbak# su - db2inst1db2inst1localhost $ db2db2 = update alternate server for database sample using hostname 16 port 5000 9). 在备库上DBSERV2 16配置自动客户端重新路由: rootlocalhost dbbak# su - db2inst1db2inst1localhost $ db2db2 = update alternate server for database sample using hostname 10 port 500010). 主备库上都配置HADR服务和侦听端口用vi编辑/etc/services文件(需要切换到root用户),加入下面两行:DB2_HADR_1 55001/tcpDB2_HADR_2 55002/tcp对于 Windows,编辑%SystemRoot%system32driversetcservices。注:这一步不是必须的,因为在下面配置HADR_LOCAL_SVC和HADR_REMOTE_SVC数据库参数的时候您可以直接使用端口号来替代服务名。11). 修改主数据库(DBSER1 10 SAMPLE)的配置参数:rootlocalhost dbbak# su - db2inst1db2inst1localhost $ db2db2 =UPDATE DB CFG FOR SAMPLE USING HADR_LOCAL_HOST 10db2 =UPDATE DB CFG FOR SAMPLE USING HADR_LOCAL_SVC DB2_HADR_1db2 =UPDATE DB CFG FOR SAMPLE USING HADR_REMOTE_HOST 16db2 =UPDATE DB CFG FOR SAMPLE USING HADR_REMOTE_SVC DB2_HADR_2db2 =UPDATE DB CFG FOR SAMPLE USING HADR_REMOTE_INST db2inst1 db2 =UPDATE DB CFG FOR SAMPLE USING HADR_SYNCMODE NEARSYNCdb2 =UPDATE DB CFG FOR SAMPLE USING HADR_TIMEOUT 120CONNECT TO SAMPLEdb2 =QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONSdb2 =UNQUIESCE DATABASEdb2 =CONNECT RESET12). 修改备用数据库(DBSERV2 16 SAMPLE)的配置参数:rootlocalhost dbbak# su - db2inst1db2inst1localhost $ db2db2 =UPDATE DB CFG FOR SAMPLE USING HADR_LOCAL_HOST 16 (主机名)db2 =UPDATE DB CFG FOR SAMPLE USING HADR_LOCAL_SVC DB2_HADR_2 (主机监听端口)db2 =UPDATE DB CFG FOR SAMPLE USING HADR_REMOTE_HOST 10 (备机名)db2 =UPDATE DB CFG FOR SAMPLE USING HADR_REMOTE_SVC DB2_HADR_1 (备机监听端口)db2 =UPDATE DB CFG FOR SAMPLE USING HADR_REMOTE_INST db2inst1 (备机实例)db2 =UPDATE DB CFG FOR SAMPLE USING HADR_SYNCMODE NEARSYNCdb2 =UPDATE DB CFG FOR SAMPLE USING HADR_TIMEOUT 12013).启动HADR:a) 首先启动备库DBSERV2 16的HADR:rootlocalhost dbbak# su - db2inst1db2inst1localhost $ db2db2 =DEACTIVATE DATABASE SAMPLEdb2 =START HADR ON DATABASE SAMPLE AS STANDBYb) 然后启动主库DBSERV1 10的HADR:rootlocalhost dbbak# su - db2inst1db2inst1localhost $ db2db2 =DEACTIVATE DATABASE SAMPLEdb2 =START HADR ON DATABASE SAMPLE AS PRIMARY注:如果先启动主数据库服务器HADR,那么必须保证在HADR_TIMEOUT参数指定的时间内(单位为秒)启动备用数据库服务器HADR。否则将启动失败。到目前为止,已经成功配置并启动了DB2 HADR。4 HADR测试1). 连接到主数据库,创建测试表HADRTEST,并插入几条测试数据:rootlocalhost dbbak# su - db2inst1db2inst1localhost $ db2db2 =CONNECT TO SAMPLE USER db2inst1 USING db2inst1db2 =CREATE TABLE HADRTEST(ID INTEGER NOT NULL WITH DEFAULT,NAME VARCHAR(10),PRIMARY KEY (ID)db2 =INSERT INTO HADRTEST (ID,NAME) VALUES (1,张三)db2 =INSERT INTO HADRTEST (ID,NAME) VALUES (2,李四)2). 主备库切换在备库DBSERV2 16上执行,使得备库接管主数据库rootlocalhost dbbak# su - db2inst1db2inst1localhost $ db2db2 =TAKEOVER HADR ON DATABASE SAMPLE USER db2inst1 USING db2inst13). 查询主备库状态在新的主数据库(原备用数据库DBSERV2 16)查询数据库状态:rootlocalhost dbbak# su - db2inst1db2inst1localhost $ db2db2 =GET SNAPSHOT FOR DB ON SAMPLEdb2inst1localhost $ db2pd -hadr -db sample在备用数据库(原主数据库DBSERV1 10):rootlocalhost dbbak# su - db2inst1db2inst1localhost $ db2db2 =GET SNAPSHOT FOR DB ON SAMPLEdb2inst1localhost $ db2pd -hadr -db sample4). 连接到新的主数据库,并查询HADRTEST表:rootlocalhost dbbak# su - db2inst1db2inst1localhost $ db2db2 = connect to sampledb2 = select * from HADRTEST显然, HADR环境已经可以正常工作了。读者可以自己再针对数据的修改、删除等进行一些测试。自动客户端重新路由(Automatic Client Reroute)功能也留给读者自己测试。5 HADR管理操作汇总1). 启动和停止HADR使用START HADR命令启动主数据库和备用数据库的HADR。启动主数据库使用AS PRIMARY子句,启动备用数据库使用AS STANDBY 子句。如果想以其他用户启动HADR,可以通过USER user-name USING password子句指定用户名和密码: 停止HADR停止主库db2inst1localhost dbbak$stop hard on database sample user db2inst1 using db2inst1 db2inst1localhost dbbak$ db2stop 或者(db2stop force)停止备库db2inst1localhost dbbak$ deactivate database sampledb2inst1localhost dbbak$ stop hadr on database sample user db2inst1 using db2inst1db2inst1localhost dbbak$ db2stop 或者(db2stop force) 启动HADR启动备库db2inst1localhost dbbak$ db2startdb2inst1localhost dbbak$db2 start hadr on database sample user db2inst1 using db2inst1 as standby启动主库db2inst1localhost dbbak$ db2startdb2inst1localhost dbbak$ db2 start hadr on database sample user db2inst1 using db2inst1 as primary在备库上执行主备切换db2inst1localhost dbbak$ db2 takeover hadr on database sample user db2inst1 using db2inst1在启动主数据库的HADR时,如果在数据库HADR_TIMEOUT所指定的时间内未能建立与备用数据库HADR的连接,启动将失败。这时候,你可以等排除故障并成功启动备用数据库HADR后再启动主数据库HADR,也可以通过指定BY FORCE子句强行启动主数据库。当备库宕机时两种处理方法:在都在主机上执行1)强制用主机单跑db2 =START HADR ON DATABASE SAMPLE AS PRIMARY BY FORCE2)数据库恢复为未启动HADR的数据库db2 = stop hadr on database sample使用STOP HADR 停止主数据库和备用数据库的HADR。如果在活动的主数据库上发出此命令,所有的数据库连接都被断开,数据库恢复为标准数据库(我们称没有启用HADR的数据库为标准数据库),并保持联机状态。如果在活动的备用数据库上发出此命令,将停止失败。你必须先使用DEACTIVATE DATABASE命令取消激活,然后再停止HADR。2). 查看HARD的配置及运行状态HADR连接状态:当备用数据库的HADR启动时,它首先进入本地同步更新状态。并根据本地日志路径配置参数及日志归档方法的设置检索本地系统中的日志文件并重放。当本地日志文件重放完毕,备用数据库进入远程同步暂挂状态。当与主数据库建立连接之后,备用数据库进入远程同步更新状态。即主数据库将自己的日志文件通过TCPIP协议发送给备用数据库,备用数据库接收到日志文件并重放,直到所有日志文件都重放完毕,备用数据库和主数据库进入对等状态。见下图:通过GET SNAPSHOT命令观察主数据库和备用数据库的连接状态。通过GET DB CFG命令可以查看HADR的配置情况,即HADR相关的几个数据库参数值。3). 接管/故障转移当主数据库发生故障时,备用数据库可以接管主数据库的服务,成为新的主数据库(称为故障转移)。当原主数据库修复后,又可以作为备用数据库加入HADR对。即使主数据库服务器没有故障,我们通过接管命令(TAKEOVER)切换主数据库和备用数据库的角色。接管命令只能用在备用数据库上。HADR提供两种接管方式(在备库上): 紧急接管:当主数据库发生故障时,可以在备用数据库上使用紧急接管,使备用数据库成为新的主数据库。紧急接管必须指定TAKEOVER命令的BY FORCE子句,例如:db2 =TAKEOVER HADR ON DATABASE SAMPLE BY FORCE 普通接管:普通接管就是没有使用BY FORCE子句的接管,例如:db2 =TAKEOVER HADR ON DATABASE SAMPLE这种接管必须在主数据库和备用数据库都正常运行的情况下使用。如果主数据库发生故障,普通接管将失败,这时候必须使用上面的紧急接管。4). 同步方式在上面的配置实例中我们将主数据库和备用数据库的HADR_SYNCMODE参数值设置为NEARSYNC,当主数据库和备用数据库处于对等状态时,HADR采用NEARSYNC(接近同步)同步方式管理日志写入。DB2提供了三种日志同步方式: SYNC(同步):采用SYNC方式时,仅当主数据库日志写入成功,并收到备用数据库的应答,确保备用数据库的日志也成功写入的情况下,才认为日志写入成功。这种方式下的事务响应时间最长,但最大限度的确保不发生事务丢失。 NEARSYNC(接近同步):采用NEARSYNC方式时,当主数据库日志写入成功,并收到备用数据库的应答,确定备用数据库已经接收到日志时,即认为日志写入成功。也就是说,备用数据库接收到的日志并不一定能成功写入持久存储设备上的日志文件。这种方式下的事务响应时间比SYNC方式短,且仅当两台服务器同时发生故障时,才会发生事务丢失。 ASYNC(异步):采用ASYNC方式时,当主数据库日志写入成功,并将日志发送出去之后,即认为日志写入成功。此方式并不保证备用数据库能收到日志,这要依赖于TCP/IP网络情况。这种方式下的事务响应时间最短,但产生事务丢失的可能性也最大5). 自动客户端重新路由(Automatic Client Reroute)要配置自动客户端重新路由,使用UPDATE ALTERNATE SERVER命令设置备用数据库信息(使用方法参考上面的配置实例),这些信息将被存放在数据库的系统目录中。请注意:必须使用此命令来设置备用数据库,而不是HADR_REMOTE_HOST 和 HADR_REMOTE_SVC 数据库配置参数,自动客户端重新路由不使用这两个参数。例子:配置自动客户端重新路由在主库上即DB2实例下运行$db2 update alternate server for database hadb using hostname 05 port 50002在备库上即DB2HA实例下运行$db2 update alternate server for database hadb using hostname 05 port 50001当客户端与数据库建立连接时,备用数据库的配置信息(主机/IP 及 端口号)也同时被发送给DB2客户端。当客户端与主数据库的连接被中断时,客户端就使用这些信息连接到备用数据库,从而最小限度的降低了数据库故障所造成的影响。需要强调的是,这个过程由DB2客户端自动完成,不需要用户用程序干涉。见下图:通过LIST DB DIRECOTRY 命令可以查看系统数据库目录中自动客户端重新路由的配置。6). 使用控制中心管理HADR在上面的讨论中我们主要通过DB2 CLP命令来创建和管理DB2 HADR。实际上DB2的控制中心也提供了创建和管理HADR的图形界面,例如:工具-向导-设置高可用性灾难恢复(HADR)数据库。这些功能使用起来都非常简单,在这里我们就不详细讨论了。但是,笔者强烈建议尽量多使用DB2 CLP命令来管理DB2(不仅仅是针对HADR),不要过于依赖DB2控制中心,因为很多服务器环境都不安装控制中心,这时候你如果没有掌握DB2 CLP命令,那可就麻烦大了。7). 关于索引日志记录索引的创建、重建、重组也是HADR环境中需要考虑的一个方面,DB2通过数据库配置参数LOGINDEXBUILD和CREATE TABLE或ALTER TABLE语句中的LOG INDEX BUILD选项来控制是否对索引的相关操作进行详细的日志记录。我们在上面的HADR配置实例中将LOGINDEXBUILD数据库参数配置为ON,意为让DB2记录索引创建、重建、重组的完整日志。这显然会降低主数据库的运行效率并占用更多的日志空间。但因为备用数据库可以通过重放日志来重新构建索引,所以当主数据库发生故障,备用数据库的索引仍然可用。用户可以通过CREATE TABLE或ALTER TABLE语句的LOG INDEX BUILD选项来对单个表设定索引日志记录级别。LOG INDEX BUILD选项有三个可选参数:l NULL:这是缺省值,当使用此参数时,表的索引日志记录级别由数据库配置参数LOGI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑影片拍摄方案设计图
- 科技企业员工绩效指标设定案例
- 手术护理服务流程标准化方案
- 班前活动创意活动方案策划
- 便民活动剪发活动方案策划
- 巢湖建筑围墙施工方案设计
- 产品的包装设计咨询方案
- 癌症病人-心理咨询方案
- 企业绩效咨询方案怎么写
- 仓山区国四道路施工方案
- GB/T 10357.1-2013家具力学性能试验第1部分:桌类强度和耐久性
- GB 16541-1996竖井罐笼提升信号系统安全技术要求
- GB 10068-2000轴中心高为56mm及以上电机的机械振动振动的测量、评定及限值
- 车辆模型课件
- 游泳训练理论与方法技术要点课件
- 促进深度学习的课堂教学策略专题研究
- 医疗护理品管圈QCC成果汇报之提高住院病人健康宣教的知晓率(问题解决型)
- 水泥厂化验室质量管理手册
- 2021年5月CCAA审核员考试《认证通用基础》真题及答案
- 2022诗词大会经典诗词文化知识竞赛题库150题(含答案)
- 中药炮制全部试题
评论
0/150
提交评论