昨天我发现了一个奇怪的东西,它看起来像一个bug,但我会把它张贴在这里,以防有人以前看到它。Testscript:
#!/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)在独立数据库上运行脚本就像预期的那样工作:
./test_hadr.py -d db1 -u user -p pwd
start
connect done
end
start
connect done
end在第二个连接上对HADR主节点运行脚本
./test_hadr.py -d db1 -u user -p pwd
start
connect done
end
start
# waits for a couple of minutes我将其中断,在第二次尝试中,它似乎连接到故障转移,几分钟后:
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有什么线索可以说明为什么会发生这种情况,以及如何避免?多次使用相同的连接似乎有效,但使用两种不同的连接挂起。
发布于 2018-06-11 15:29:56
看起来,在配置备用服务器时,CLI驱动程序更喜欢它的正确主机名而不是"localhost“。如果在连接字符串中而不是在"localhost“中指定计算机主机名或IP地址,脚本将按预期工作。
可以将测试脚本修改为:
[...]
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“无论如何都不能工作。
https://dba.stackexchange.com/questions/209074
复制相似问题