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-セルにデータが挿入されることがある