DB2 error: SQL10007N Message "-1390" could not be retrieved. Reason code: "3"

DB2 error: SQL10007N Message "-1390" could not be retrieved. Reason code: "3"

尝试连接到 db2 数据库时出现以下错误:

$ /opt/ibm/db2/V10.5/bin/db2 connect to SRVO
SQL10007N Message "-1390" could not be retrieved.  Reason code: "3".

但是,从 DBeaver 连接到它时,我没有遇到任何问题。错误的原因可能是什么?

消息说:

SQL1390C The environment variable DB2INSTANCE is not defined or is invalid.

并且 SQL10007 也因此返回 - 因此通过将 DB2INSTANCE 设置为您的当前实例来修复它。

set  DB2INSTANCE=whateveryourinstanceis

补充: 您在 DBeaver 中看到的驱动程序应指向以下文件的正确位置: db2java.zip db2jcc_license_cu.jar(或类似) db2jcc4.jar

我在我的一个 Ansible 角色中遇到了这个问题,它为应用程序执行 sql 个脚本。它发生在我将 DB2 从 11.1.0 升级到 11.1.4.5(我正在使用的软件支持的最新版本)之后。

设置 DB2INSTANCE 环境变量没有帮助。通过以实例用户身份手动登录,我看到还有一堆来自 DB2 的变量:

[db2inst1@cnx-db2 ~]$ env | grep -i db2 | wc -l
16

但是有一个脚本 ~/sqllib/db2profile 可以设置所有相关的环境变量。像这样调用它在我的 Ansible 角色中有效:

- name: "Check and create DBs for CNX with user {{ db2.instance.name }}"
  become: yes
  become_user: "{{ db2.instance.name }}"
  shell: |
    . ~/sqllib/db2profile
    apps=("activities" "blogs" "cognos" "communities" "dogear" "files" "forum" "homepage" "mobile" "profiles" "metrics" "pushnotification" "wikis")
    for app in ${apps[*]}
    do
      {{ db2.target }}/bin/db2 -td@ -vf {{ cnx_sql_dir }}/${app}/db2/createDb.sql
      {{ db2.target }}/bin/db2 -td@ -vf {{ cnx_sql_dir }}/${app}/db2/appGrants.sql
    done