質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

Q&A

解決済

3回答

10916閲覧

DB2 用語の意味を確認したい(カタログ、バインド、パッケージ)

bbb_eight

総合スコア15

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

0グッド

0クリップ

投稿2020/07/29 18:11

業務でたびたび「BIND」、「CATALOG」といったコマンドを利用することがあるのですが、
それぞれのコマンドがどのような意味を持っていて、
どのようなときに使用すればいいのかがいまいちよくわかりません。

その都度、職場で聞いたりインターネットで調べたりしているのですが、
全体的に情報が少なく、自分の中で整理ができておりません。
用語の意味を自分なりにまとめたものを下に記載しますので、
間違っているところや足りないところをご指摘いただけないでしょうか。

・BINDコマンド・・・クライアントとサーバのDB2のバージョンが異なる場合に使用する?
DB2は内部的にパッケージという情報を持っていて、それの整合性をあわせる?

・CATALOGコマンド・・・クライアントからサーバのDB2に接続するときに使用する?
(CATALOG TCPIP NODE ノード名 REMOTE ホスト名 SERVER 50000)

・ノード名とホスト名は同じものでOK(?)

・カタログ・・・クライアントに記録されているデータベースの接続情報?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

・BINDコマンド・・・クライアントとサーバのDB2のバージョンが異なる場合に使用する?
DB2は内部的にパッケージという情報を持っていて、それの整合性をあわせる?

SQLを直接発行する場合に行われる解析(実行計画含む)を事前に行って、実行コストを下げるのが目的です。
パッケージとはそれらの管理単位です。

・CATALOGコマンド・・・クライアントからサーバのDB2に接続するときに使用する?
(CATALOG TCPIP NODE ノード名 REMOTE ホスト名 SERVER 50000)

その認識でOKだと思います。

・ノード名とホスト名は同じものでOK(?)

任意ですから同じものでもOK

・カタログ・・・クライアントに記録されているデータベースの接続情報?

DB本体のカタログ情報を指す事が多いかと思います。

断片的な情報よりも全体を見渡せた方が良いと思いますので、以下を紹介しておきます。
第1章 DB2のアーキテクチャ - IBM
※oracleとの対比がありますから、oracleのキーワードで調べてみるのも情報量不足を補えるかと思います。

投稿2020/07/30 00:48

編集2020/07/30 01:41
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bbb_eight

2020/08/11 02:43

回答ありがとうございます。 bindコマンドはSQLを実行する上で必ず実行しなくてはならないものなのでしょうか? どのような場合にbindコマンドを実行しないといけないのか教えていただけないでしょうか。
sazi

2020/08/11 03:58

> bindコマンドはSQLを実行する上で必ず実行しなくてはならないものなのでしょうか? いいえ。パラメータなどの可変要素がなければSQLは直接実行は出来ます。 パラメータなどの可変要素がある場合は、SQLインジェクション対策の為にも行っておいた方が良いと思います。
bbb_eight

2020/08/11 12:14

回答ありがとうございます。 IBMのホームページで見つけたのですが、実行環境によっては、 SQLを実行したときに、エラーコードが「SQL0805N」のエラーが 発生することがあり、エラー回避のためにbindコマンドを実行しないと いけない場合があるということのようでした。 (https://www.ibm.com/support/pages/node/646477) sazi様の説明を聞くと、bindはSQLの実行速度アップのために、 可能であれば事前にやっておいたほうがいいことで、やらなくても特に支障は ないというような印象を受けるのですが、場合によってはbindコマンドを 実行しないといけない時があるということなのでしょうか? (クライアントとサーバーのDB2のバージョンが異なる場合?  バージョンが異なると必ずエラーが発生するというわけでもない?)
sazi

2020/08/11 12:26

ストアドなどのパッケージとして使用するものはBINDする必要がありますが、単独でSQLを実行する場合は必要ありません。 職場ではSQLは必ずパッケージ経由で行っているのですか?
bbb_eight

2020/08/15 00:46

職場では、IBMのDLLを使用してアプリケーションからSQL文を実行するか、db2cmdで直接SQL文を実行するかのどちらかになります。 知識がなく、それが必ずパッケージ経由になるのかどうかはわかりません。 ストアドプロシージャを使用することもありますが、あまり使用頻度は高くありません。 SQL内の値が動的に変更される場合、パラメーターマーカーを使用すると 実行計画が作成されないため、SQLの実行速度が速くなると聞いたことがあるのですが、パッケージ経由でSQLが実行されるのはそのような場合でしょうか。 (https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_9.7.0/com.ibm.db2.luw.apdv.sqlpl.doc/doc/c0020295.html )
sazi

2020/08/15 02:43 編集

> 何度も実行する必要のある SQL ステートメントの場合、SQL ステートメントを一回だけ準備し、パラメーター・マーカーを使って実行時に入力値を置換することにより、照会プランを再利用する方がたいてい効率的です。 上記のリンク先の引用について、パラメータマーカーを使用したからといって、実行計画が作成されないわけではありません。 SQLが発行された時、キャッシュ上に同じ内容のSQLであれば、前回実行時の実行計画を利用するのです。 パラメータマーカーを利用しない場合、条件の値が少しでも違えば異なるものとして扱われ、実行計画を作成しますが、パラメータマーカーを利用する事で、条件の値はパラメータマーカーで表現されるので、同じSQLとして扱われる場面が多くなるという事です。
bbb_eight

2020/08/15 10:19 編集

ご教示ありがとうございます。 業務で実際にbindコマンドが利用されたケースを確認しましたが、 Db2のバージョンがv9.7の環境で、サーバのdb2だけv11.1に更新したところ、 クライアントで「SQL0572N パッケージ “NULLID.SQLUAH18“は操作不能です。」のエラーが出てIMPORT文が実行できなかったようでした。 サーバのdb2のバージョンを更新した際に、類似の現象はしばしば起こるようで、そのような場合に@db2ubind.lstや@db2cli.lstを指定してbindを試すとエラーが解消されるのが経験的に分かっているため、そのように問合せ元に案内しているとのことです。
sazi

2020/08/15 11:17 編集

えーと、話が見えないのですが・・・ 質問は用語やその用途についてだったと思うのですが、何故バージョン相違によるエラーの話が急に出てきたんでしょう?
bbb_eight

2020/08/15 13:36

申し訳ありません。 サーバとクライアントのdb2のバージョンが不一致になる場合にこのようなエラーが発生して、bindをしたからエラーが解消したというのは、一般にあり得ることなのでしょうか。 なぜこのようなエラーが発生して、どういう理屈でエラーが解消されるのかがよくわからなかったためまずはbindの意味から確認したいと思い、今回の質問をさせていただきました。
sazi

2020/08/15 14:31

> bindをしたからエラーが解消したというのは、一般にあり得ることなのでしょうか。 DBサーバーとパッケージ間の会話に使用されるライブラリーのバージョンが違えばインターフェースが異なってエラーになる事は普通にあるでしょうね。 bindを他で例えると、exeをビルドするようなものです。 動作する環境が変わる(DBのバージョンが変わる)と、リビルドが必要だったりするのと同じだと思います。
guest

0

間違えて回答欄に投稿したため内容編集

投稿2020/08/15 13:27

編集2020/08/15 13:37
bbb_eight

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

間違えて回答欄に投稿したため内容編集

投稿2020/08/15 12:06

編集2020/08/15 13:32
bbb_eight

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問