一、目录准备
mkdir -p /home/db2inst1/db2_backup
mkdir -p /home/db2inst1/db2_archive
mkdir -p /home/db2inst1/db2_log
chmod -R 775 /home/db2inst1/db2_backup
chmod -R 775 /home/db2inst1/db2_archive
chmod -R 775 /home/db2inst1/db2_log
chown -R db2inst1:db2inst1 /home/db2inst1/db2_backup
chown -R db2inst1:db2inst1  /home/db2inst1/db2_archive
chown -R  db2inst1:db2inst1 /home/db2inst1/db2_log 

二、服务和端口配置(注意HADR服务端口和实例端口要区分开)
DB2_HADR_1     55110/tcp
DB2_HADR_2     55111/tcp


三、开启归档模式 (主库和备库都操作)
先修改归档参数,做离线备份,重启数据库后,手工测试归档

主库
db2 update db cfg for sample using logarchmeth1 disk:/home/db2inst1/db2_archive/

db2 update db cfg for sample using NEWLOGPATH /home/db2inst1/db2_log

db2 force applications all

db2 backup db sample to /home/db2inst1/db2_backup/

db2stop force;db2start

db2 archive log for db sample

SQL1116N  A connection to or activation of database "SAMPLE" failed because
the database is in BACKUP PENDING state.  SQLSTATE=57019

备库:

db2 update db cfg for sample using logarchmeth1 disk:/home/db2inst1/db2_archive/

db2 update db cfg for sample using NEWLOGPATH /home/db2inst1/db2_log

db2 force applications all

db2 backup db sample to /home/db2inst1/db2_backup/

db2stop force;db2start

db2 archive log for db sample


四、备份和还原从库
主库离线全备份
1.db2 backup database sample to /home/db2inst1/db2_backup
3.scp /home/db2inst1/db2_backup/SAMPLE.0.db2inst1.DBPART000.20171220165404.001   [email protected]:/home/db2inst1/db2_backup/


备库还原数据
db2 restore database sample  from "/home/db2inst1/db2_backup/" taken at 20171220165404 replace history file

2.SQL2523W Warning! Restoring to an existing database that is different from

3.the database on the backup image, but have matching names. The target database

4.will be overwritten by the backup version. The Roll-forward recovery logs

5.associated with the target database will be deleted.

6.Do you want to continue ? (y/n) y

7.DB20000I The RESTORE DATABASE command completed successfully.


五、主库参数配置

db2 get db cfg for sample | grep -i HADR                                                                   
[db2inst1@107-sqlcheck db2_backup]$ db2 get db cfg for sample | grep -i HADR
 HADR database role                                      = STANDARD
 HADR local host name                  (HADR_LOCAL_HOST) =
 HADR local service name                (HADR_LOCAL_SVC) =
 HADR remote host name                (HADR_REMOTE_HOST) =
 HADR remote service name              (HADR_REMOTE_SVC) =
 HADR instance name of remote server  (HADR_REMOTE_INST) =
 HADR timeout value                       (HADR_TIMEOUT) = 120
 HADR target list                     (HADR_TARGET_LIST) =
 HADR log write synchronization mode     (HADR_SYNCMODE) = NEARSYNC
 HADR spool log data limit (4KB)      (HADR_SPOOL_LIMIT) = AUTOMATIC(0)
 HADR log replay delay (seconds)     (HADR_REPLAY_DELAY) = 0
 HADR peer window duration (seconds)  (HADR_PEER_WINDOW) = 0


db2 update db cfg for  sample using HADR_LOCAL_HOST 192.168.12.108

db2 update db cfg for  sample using HADR_LOCAL_SVC DB2_HADR_2

db2 update db cfg for  sample using HADR_REMOTE_HOST 192.168.12.107

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 NEARSYNC

db2 update db cfg for sample  using HADR_TIMEOUT 120


备库参数配置

db2 get db cfg for sample | grep -i HADR

db2 update db cfg for sample using HADR_LOCAL_HOST 192.168.12.108

db2 update db cfg for sample using HADR_LOCAL_SVC  DB2_HADR_2

db2 update db cfg for sample using HADR_REMOTE_HOST 192.168.12.107

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 NEARSYNC

db2 update db cfg for sample using HADR_TIMEOUT 120

db2 get db cfg for sample | grep -i HADR

启动HADR


先启动备库
standby端的数据库通过primary端的数据库恢复来,恢复后必须是roll forward-pending状态,
restore中不能使用without rolling forward,启动备库之前先确定这个状态
备库状态确认
db2 get db cfg for sample | grep Rollforward
Rollforward pending                                     = DATABASE

相比于主库:
db2 get db cfg for sample | grep Rollforward
Rollforward pending                                     = NO


启动备库
db2 start hadr on database sample as standby
[db2inst2@kvm111 ~]$ db2 start hadr on database sample as standby
SQL1766W  The command completed successfully. However, LOGINDEXBUILD was not
enabled before HADR was started.
查看HADR状态-目前只有备库,状态是disconnected


启动主库
db2 deactivate database sample
db2 start hadr on database sample as primary

现在主库和备库已经建立连接,HADR实验环境部署完成

db2 get snapshot for db on sample | grep -A 15 "HADR Status"

db2 get snapshot for db on hadb01 | grep -A 15 "HADR Status"



从库连接报错
SQL1776N  The command cannot be issued on an HADR database. Reason code = "1".

db2set DB2_HADR_ROS=ON


SQL1768N
未能启动 HADR。原因码 = reason-code。
说明:
与原因码对应的解释是:

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 关闭所中断。
98 未安装有效的 HADR 许可证。命令未成功完成。
99  在 HADR 启动期间发生了内部错误。


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

1 数据库必须是可恢复的数据库。激活日志归档或者打开 LOGRETAIN,然后重新发出该命令。
2 禁用无限活动日志记录并重新发出该命令。
3 将数据库管理器配置参数 DATALINKS 设置为 NO 并重新发出该命令。
4 将 HADR_LOCAL_HOST 设置更正为与本地主机名相匹配。
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 选项来启动主数据库。
8 确保一个或多个 HADR 数据库配置参数具有值。
9 将数据库重新配置为对日志文件只使用文件系统存储器,而不是使用原始 I/O(直接磁盘存取)设备。参阅 DB2 信息中心中有关 logpath 和 newlogpath 数据库配置参数的讨论。
10找出 HADR 关闭的原因,如有必要,重新发出 START HADR 命令。
98 获取并安装有效的 HADR 许可证,然后重新提交该命令。
99 如果问题仍然存在,请与“IBM 支持机构”联系。


有时候我们会希望让一个实例下的某个数据库停止对外提供服务,而不影响其它的数据库,
这时就需要停止单个数据库。
方法总结如下:

一种方法是:
使用 quiense database停止单个数据库:
如果连上来的用户不是sysadm中的一员,你可用instance用户连接上数据库,然后用
db2 quiesce db IMMEDIATE FORCE CONNECTIONS
然后
db2 reset 或者db2 terminate
然后
deactivate db
办完事后,记得用db2 unquiesce db来恢复其对外连接。

具体流程如下:
db2 connect to sample
db2 quiesce db immediate force connections
db2 terminate

db2 deactivate db sample

db2 connect to sample
db2 unquiesce db

注意:
QUIESCE DATABASE 后,仅有 sysadm, sysmaint, dbadm, 或 sysctrl 用户可以访问数据库。
另一种方法:
停止访问:
db2 uncatalog database sample
db2 terminate

启动访问:
db2 catalog database sample
db2 terminate
db2 connect to sample