2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Db2 の SAMPLE DB とライセンスについて

Last updated at Posted at 2019-09-15

Db2 の SAMPLE DB とライセンスについて

今日はDb2 の SAMPLE DB とライセンスについてです。
私自身は Db2 を専門的にやっているわけではありませんが、
Db2 のライセンスについて確認する機会があったため、その時に確認した情報をお伝えしたいと思います。

末尾の db2sampl コマンドのマニュアルをご覧いただければわかりますが、
Db2 の一部のエディションで、db2sampl コマンドで SAMPLE DB を作成すると、ライセンス違反になる可能性があります。

例として、 v10.5 のマニュアルには以下の記載があります。

DB2® Workgroup Server Edition および Db2 Express® Server Edition では、SAMPLE データベースにはマテリアライズ照会表 (MQT) とマルチディメンション・クラスター表 (MDC) が含まれており、これはライセンス違反の原因になります。 この違反状態を除去する唯一の方法は、Db2 Enterprise Server Edition にアップグレードすることです。

v11.x には、Express 系のエディションが無いため、マニュアルの表記は異なります。(Workgroup Server Edition になっています)ご利用のバージョンに合わせて確認したほうが無難ですね。

現在利用中の Db2 にライセンス違反があるかどうかに関しては、 ライセンス準拠レポートで確認することができます。

ライセンス準拠レポートの出力

現在、ライセンスに準拠しているどうかを確認するためには db2licm コマンドを利用します。
Db2 のインスタンスオーナーのID で以下のコマンドを発行します。

$ db2licm -g ./output.txt

LIC1440I  License compliance report generated successfully.

ライセンスレポート(上記の例では output.txt)には、以下のような情報が出力されます。

ライセンス準拠レポート

ライセンス準拠リセットの最終日付:                "mm/dd/YYYY"

DB2 Express-C   準拠

上記の例は、 v10.5 での Db2 Express-C エディションの例です。

なお、「ライセンス準拠リセット」というのは、ライセンスに関する情報を一度クリーンアップする、という意味です。
ライセンスに関する情報が実環境とずれている可能性もあるため、ライセンス準拠のリセット → インスタンスの再起動 → ライセンスレポートの生成、というのが正しい手順です。
( db2licm -x -> db2stop -> db2start -> db2licm -g )

異常がある場合は、下記のような出力となります。

ライセンス準拠レポート

DB2 Express-C   違反
	マテリアライズ照会表
	マルチディメンション・クラスタリング表

ライセンス状況を確認したい場合は、上記のレポートで確認しましょう。
また、現在導入されているライセンスを確認したい場合は、 インスタンスオーナーで、db2licm -l です。

$ db2licm -l
Product name:                     "IBM DB2 Developer-C Edition"
License type:                     "Community"
Expiry date:                      "Permanent"
Product identifier:               "db2dec"
Version information:              "11.5"
Max amount of memory (GB):        "16"
Max number of cores:              "4"
Max amount of table space (GB):   "100"

これは、 Db2 v11.5 の Developer-C エディションの例です。

SAMPLE DB について

さて、冒頭に記載した SAMPLE DB ですが、マテリアライズ照会表(MQT)、マルチディメンション・クラスター表(MDC)が含まれています。
そのため、一部のエディションでは、SAMPLE DB を利用していると知らずにライセンス違反になります。

SAMPLE DB が作られるのは、大きく言うと以下のケースがあります(もしかしたら他にもあるかもしれません)
● GUI インストーラーを利用した導入途中で、インストール・タイプに「標準」を選択した場合
● GUI インストーラーを利用した導入後の「DB2 ファーストステップ」画面で、「サンプル・データベースの作成」ボタンをおして作成した場合
● db2sampl コマンドを利用して作成した場合

1点目に関しては、そのような記載をしている Db2 導入手順の Web ページがありました。
(ただ、すみませんが自分自身では確認していません)

また、インターネット上の各種 Web ページで紹介されている Db2 のインストール手順の中には
テスト的にサンプルDB を作成してみる手順になっているものがあります。
何も考えずにサンプルDB を作成し、そのままにしておくと問題になるケースがあります。
(あくまでエディションによります)

なお、コマンドで SAMPLE DB を作成する場合、以下のようになります。(db2inst1 がインスタンスオーナーの場合)

$ whoami
db2inst1

$ db2sampl

  Creating database "SAMPLE"...
  Connecting to database "SAMPLE"...
  Creating tables and data in schema "DB2INST1"...
  Creating tables with XML columns and XML data in schema "DB2INST1"...

  'db2sampl' processing complete.

$

マテリアライズ照会表、マルチディメンション・クラスター表の識別

SAMPLE DB 、もしくは各種アプリケーションで利用しているDB に、マテリアライズ照会表、マルチディメンション・クラスター表があるかどうかは、以下の方法で確認できます。

マテリアライズ照会表
syscat.tables カタログ・ビューの type 列が "S" になっている
マルチディメンション・クラスター表
syscat.tables カタログ・ビューの clustered 列が "Y" になっている

詳しくは、末尾の参考リンクの syscat.tables カタログ・ビューマニュアルや、「MDC表への…」 という技術情報をご覧ください。

以下で、実際に確認してみます。

まず、DB の有無を確認します。
以下、すべてインスタンスオーナーで実施しています。(インスタンスオーナーでなくとも、適切な権限があれば確認できます)

$ db2 list db directory

 System Database Directory

 Number of entries in the directory = 2

Database 1 entry:

 Database alias                       = TESTDB
 Database name                        = TESTDB
 Local database directory             = /database/data
 Database release level               = 15.00
 Comment                              =
 Directory entry type                 = Indirect
 Catalog database partition number    = 0
 Alternate server hostname            =
 Alternate server port number         =

Database 2 entry:

 Database alias                       = SAMPLE
 Database name                        = SAMPLE
 Local database directory             = /database/data
 Database release level               = 15.00
 Comment                              =
 Directory entry type                 = Indirect
 Catalog database partition number    = 0
 Alternate server hostname            =
 Alternate server port number         =

例では、TEST、SAMPLE DBがあります。
以下では、 SAMPLE DB について確認しますが、すべての DB、テーブルについて確認する必要があります。

SAMPLE DB に接続します。

$ db2 connect to sample

   Database Connection Information

 Database server        = DB2/LINUXX8664 11.5.0.0
 SQL authorization ID   = DB2INST1
 Local database alias   = SAMPLE

$

ここで、 エラー SQL1032N No start database manager command was issued. SQLSTATE=57019 が表示される場合は
Db2 インスタンスが起動していませんので、インスタンスオーナーで db2start を実行し、起動します。
OS レベルのコマンドで起動を確認する場合、 ps -ef | grep db2sysc でプロセスが表示されるかどうかを確認してください。
(該当インスタンスオーナーユーザーの db2sysc プロセスがあるかどうかを確認)

接続後、SQL を発行して確認しますが、その際に syscat.tables ビューの定義を確認する必要があるかもしれません。
その場合は、以下のコマンドで確認します。

$ db2 describe table syscat.tables

                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
TABSCHEMA                       SYSIBM    VARCHAR                    128     0 No
TABNAME                         SYSIBM    VARCHAR                    128     0 No
OWNER                           SYSIBM    VARCHAR                    128     0 No
OWNERTYPE                       SYSIBM    CHARACTER                    1     0 No
TYPE                            SYSIBM    CHARACTER                    1     0 No
STATUS                          SYSIBM    CHARACTER                    1     0 No

…以下略

まず、マテリアライズ照会表の有無を、以下の SQL で確認します。

$ db2 "select substr( tabname, 1,20 ) as tabname, type from syscat.tables where type='S'"

TABNAME              TYPE
-------------------- ----
ADEFUSR              S

ADEFUSR というテーブルがマテリアライズ照会表になっています。

次に、マルチディメンション・クラスター表を確認します。

$ db2 "select substr( tabname, 1,20 ) as tabname, type, clustered from syscat.tables where clustered='Y'"

TABNAME              TYPE CLUSTERED
-------------------- ---- ---------
EMPMDC               T    Y

  1 record(s) selected.

EMPMDC というテーブルがマルチディメンション・クラスター表になっています。

まとめて確認するなら、 db2 "select substr( tabname, 1,20 ) as tabname, type, clustered from syscat.tables"
全ての表を表示してしまってもよいかもしれません。

確認後は、セッションを切断します。

$ db2 connect reset
DB20000I  The SQL command completed successfully.

普段あまり気にしないエディションやライセンスですが、
インフラ担当者から見ると、 「アプリの担当者がどんな表を作成しているかわからない」
アプリ担当者から見ると、「エディションの細かい話やライセンスまで把握していない」という感じで
グレーゾーンに落ちてしまう可能性があります。

Db2 の機能がつかえればOK、というだけではなく、ライセンスや監査上も問題ないように注意しましょう!

参考情報

● db2sampl コマンド

v11.5 :
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001934.html
v11.1 :
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001934.html
v10.5 :
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_10.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001934.html

● SYSCAT.TABLES カタログ・ビュー
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0001063.html

● [DB2 LUW] MDC 表への INSERT でエラーが発生すると、後続の INSERT で誤った MDC セルにデータが挿入されることがある
https://www.ibm.com/support/pages/db2-luw-mdc-表への-insert-でエラーが発生すると、後続の-insert-で誤った-mdc-セルにデータが挿入されることがある


2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?