首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HADR主数据库上的ibm_db?

HADR主数据库上的ibm_db?
EN

Database Administration用户
提问于 2018-06-08 08:29:20
回答 1查看 624关注 0票数 1

昨天我发现了一个奇怪的东西,它看起来像一个bug,但我会把它张贴在这里,以防有人以前看到它。Testscript:

代码语言:javascript
复制
#!/usr/bin/python

import sys
import getopt
import re
import os
import traceback

import ibm_db

"""
Test of ibm_db in a HADR env
"""

def f1(dbname, username, pwd):
    print "start"
    cfg = (dbname, username, pwd)
    conn_str = "DATABASE=%s;HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;UID=%s;PWD=%s" % cfg
    conn1 = ibm_db.connect(conn_str, "", "")
    print "connect done"
    ibm_db.close(conn1)
    conn1 = None
    print "end"


def main():
    dbname = None
    username = None
    pwd = None
    try:
        opts, args = getopt.getopt(sys.argv[1:], "d:u:p:")
    except getopt.GetoptError:
        usage()
    for o, a in opts:
            if (o == "-d"):
                dbname = a
            if (o == "-u"):
                username = a
            if (o == "-p"):
                pwd = a

    f1(dbname, username, pwd)
    f1(dbname, username, pwd)

if __name__ == "__main__":
    try:
        main()
        print('')
    except Exception, e:
        print e
        sys.exit(1)
    sys.exit(0)

在独立数据库上运行脚本就像预期的那样工作:

代码语言:javascript
复制
./test_hadr.py -d db1 -u user -p pwd
start
connect done
end
start
connect done
end

在第二个连接上对HADR主节点运行脚本

代码语言:javascript
复制
./test_hadr.py -d db1 -u user -p pwd
start
connect done
end
start
# waits for a couple of minutes

我将其中断,在第二次尝试中,它似乎连接到故障转移,几分钟后:

代码语言:javascript
复制
write(1, "[IBM][CLI Driver] SQL1776N  The "..., 111[IBM][CLI Driver] SQL1776N  The command cannot be issued on an HADR database. Reason code = "1". SQLCODE=-1776
) = 111

有什么线索可以说明为什么会发生这种情况,以及如何避免?多次使用相同的连接似乎有效,但使用两种不同的连接挂起。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-06-11 15:29:56

看起来,在配置备用服务器时,CLI驱动程序更喜欢它的正确主机名而不是"localhost“。如果在连接字符串中而不是在"localhost“中指定计算机主机名或IP地址,脚本将按预期工作。

可以将测试脚本修改为:

代码语言:javascript
复制
[...]
import traceback
import socket
[...]

def f1(dbname, username, pwd):
    print "start"
    ip = socket.gethostbyname(socket.gethostname())
    cfg = (dbname, ip, username, pwd)
    conn_str = "DATABASE=%s;HOSTNAME=%s;PORT=50000;PROTOCOL=TCPIP;UID=%s;PWD=%s" % cfg
    [...]

推荐通过显式地将Db2绑定到IP地址通过nicbinding.cfg,在这种情况下,"localhost“无论如何都不能工作。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/209074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档