Question & Answer
Question
su コマンドでユーザーを変更して複数の db2 コマンドを実行しようとすると SQL1024N エラーになることがあります。
Cause
コマンド行プロセッサー (CLP) は、インターフェースとして機能するフロントエンド・プロセス (db2 プロセス) と、データベースとの接続を保持するバックエンド・プロセス (db2bp プロセス) で構成されます。
以下のように同じシェルから複数回呼び出された db2 プロセスは、いずれも単一の db2bp プロセスが保持する同じ接続を利用します。
以下のように同じシェルから複数回呼び出された db2 プロセスは、いずれも単一の db2bp プロセスが保持する同じ接続を利用します。
$ db2 connect to SAMPLE
$ db2 list tablespaces
$ db2 "select * from org"
ただし、以下のようにひとつの su コマンドの中で複数の db2 コマンドを実行する場合、同一のシェルが使われるかどうかはオペレーティング・システムや呼び出されるシェル (ksh, bash など) によって異なります。このため CLP が期待通りに動かないことがあります。
$ su - db2inst1 -c "db2 -v connect to sample; db2 -v list tablespaces"
connect to sample
データベース接続情報
データベース・サーバー = DB2/AIX64 9.5.5
SQL 許可 ID = DB2INST1
ローカル・データベース別名 = SAMPLE
list tablespaces
SQL1024N データベース接続が存在しません。 SQLSTATE=08003
Answer
su コマンドの中で db2 コマンドを利用する場合には、以下のように別途スクリプトをファイルとして用意して実行してください。
$ cat /home/db2inst1/SCRIPT.sh
db2 -v connect to SAMPLE
db2 -v list tablespaces
$ su - db2inst1 -c /home/db2inst1/SCRIPT.sh
connect to SAMPLE
データベース接続情報
データベース・サーバー = DB2/AIX64 9.5.5
SQL 許可 ID = DB2INST1
ローカル・データベース別名 = SAMPLE
list tablespaces
現在のデータベースの表スペース
表スペース ID = 0
名前 = SYSCATSPACE
タイプ = データベース管理スペース
内容 = すべての永続データ。REGULAR 表スペース。
状態 = 0x0000
詳しい説明:
正常
関連情報
コマンド行プロセッサーのフィーチャー
コマンド行プロセッサーのフィーチャー
[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PmFAAU","label":"Operating System or Hardware-\u003EOS Configuration"}],"ARM Case Number":"","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"}],"Version":"All Versions"}]
Was this topic helpful?
Document Information
Modified date:
25 August 2023
UID
swg21574467