3.

IBM Db2 入門 — LUW と z/OS / 無料版 / Oracle との違い

編集
この記事の要点
  • IBM Db2 は IBM が開発するエンタープライズ RDBMS。1983 年リリースの老舗
  • 主要バリアント: Db2 for LUW (Linux/Unix/Windows) / Db2 for z/OS (メインフレーム) / Db2 for i (IBM i = AS/400)
  • 無料版: Db2 Community Edition(旧 Db2 Express-C)。商用利用可
  • CLI は db2 コマンド、SQL 標準準拠度が高い
  • IBM Cloud Pak for Data でクラウドネイティブ化、コンテナ対応
  • Oracle 互換モード(PL/SQL を Db2 で動かせる)で Oracle 移行を支援

IBM Db2 とは

IBM Db2(旧称 DB2)は IBM が開発・販売するリレーショナルデータベース管理システム。1983 年にメインフレーム向けに登場し、後に Linux / Unix / Windows / クラウド向けに拡張されました。世界中の銀行・保険・航空会社など巨大な基幹システムで使われています。

Oracle / SQL Server と並ぶ伝統的な商用 RDBMS の一角で、特にメインフレーム (z/OS) と IBM i (旧 AS/400) では事実上の標準データベースです。

Db2 のバリアント

製品名プラットフォーム特徴
Db2 for LUWLinux / Unix / Windows最も汎用的。オンプレ・クラウド両対応
Db2 for z/OSIBM Z メインフレーム金融・大規模 OLTP 向け。最高クラスの可用性
Db2 for iIBM i (AS/400 後継)OS と一体。中堅企業の基幹で広く採用
Db2 on CloudIBM Cloudマネージド・サーバーレス対応
Db2 Warehouseクラウド / オンプレ分析・データウェアハウス用カラム指向

エディション

  • Db2 Community Edition: 無償版(旧 Db2 Express-C)。CPU 4 コア / メモリ 16GB / ストレージ 100GB の制限内で商用利用も可能
  • Db2 Standard Edition: 中規模向け有償
  • Db2 Advanced Enterprise Server Edition (AESE): フル機能・無制限
  • Db2 Developer Edition: 開発者向け(非本番)

インストールと CLI

# Docker で Db2 Community を最速起動
docker run -itd --name mydb2 --privileged=true \
    -p 50000:50000 \
    -e LICENSE=accept \
    -e DB2INST1_PASSWORD=password \
    -e DBNAME=testdb \
    ibmcom/db2

# コンテナに入る
docker exec -ti mydb2 bash -c "su - db2inst1"

# Db2 CLI 起動
db2

# 接続
db2 => CONNECT TO testdb

# SQL 実行
db2 => SELECT * FROM SYSCAT.TABLES FETCH FIRST 5 ROWS ONLY

# 終了
db2 => TERMINATE

典型的な SQL

-- データベース作成
CREATE DATABASE MYDB AUTOMATIC STORAGE YES
    USING CODESET UTF-8 TERRITORY JP;

CONNECT TO MYDB;

-- テーブル作成
CREATE TABLE employees (
    emp_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY,
    name VARCHAR(100) NOT NULL,
    dept_id INTEGER,
    salary DECIMAL(10, 2),
    hire_date DATE,
    PRIMARY KEY (emp_id)
);

-- INSERT (Db2 は VALUES の前で OK)
INSERT INTO employees (name, dept_id, salary, hire_date)
VALUES ('Alice', 10, 50000.00, '2024-01-15');

-- ページネーション
SELECT *
FROM employees
ORDER BY emp_id
OFFSET 20 ROWS FETCH FIRST 10 ROWS ONLY;

-- カタログ情報
SELECT tabname FROM syscat.tables WHERE tabschema = 'DB2INST1';

Db2 と Oracle の違い

項目Db2Oracle
手続き型言語SQL PL / PL/SQL 互換モードPL/SQL
シーケンスSEQUENCE / IDENTITY 両対応SEQUENCE
SQL 標準準拠高い高い(ANSI 準拠 + 独自)
サブクエリの FROM 句必須エイリアス任意
分離レベルUR / CS / RS / RR の 4 段階READ COMMITTED / SERIALIZABLE
カラム指向BLU Acceleration 標準搭載Database In-Memory (有償)

Oracle 互換モード

Db2 9.7 以降で導入された機能で、PL/SQL や Oracle 固有 SQL がそのまま動く互換レイヤー。Oracle からの移行コストを大幅に削減します。

-- 互換モード有効化(DB 作成時)
CREATE DATABASE MYDB COMPATIBILITY_VECTOR ORA;

-- DUAL テーブル使用可
SELECT 'hello' FROM DUAL;

-- ROWNUM 使用可
SELECT * FROM employees WHERE ROWNUM <= 10;

-- PL/SQL ブロックも動く
BEGIN
    FOR rec IN (SELECT * FROM employees WHERE dept_id = 10) LOOP
        DBMS_OUTPUT.PUT_LINE(rec.name);
    END LOOP;
END;
/

IBM Cloud Pak for Data との連携

Cloud Pak for Data は IBM のデータ + AI 統合プラットフォーム。Kubernetes 上で Db2 をはじめ Watson 系 AI サービス、データ仮想化、データガバナンスを統合提供します。

  • Db2 を Kubernetes Operator で簡単デプロイ
  • Watson Studio で機械学習
  • データ仮想化で複数 DB / S3 / Hive を統一クエリ
  • Watson Knowledge Catalog でガバナンス

クライアントツール

ツール用途
db2 CLI標準対話型 SQL クライアント
IBM Data StudioEclipse ベース GUI (非推奨化)
Db2 Data Management ConsoleWeb 管理コンソール(現行推奨)
DBeaver / DataGripサードパーティ GUI (JDBC 接続)

FAQ

Q: Db2 と DB2 の表記の違いは
A: 2017 年から IBM の公式表記が Db2(小文字 b)に変更されました。以前は DB2 と全大文字。意味は同じです。

Q: Db2 Express-C はまだ使えるか
A: Db2 Express-C 後継が現在の Db2 Community Edition。公式サイトから無償ダウンロードでき、商用利用も可能です。

Q: Db2 for z/OS は LUW と SQL 互換性があるか
A: 大部分の SQL は共通ですが、メインフレーム固有の構文・型・カタログテーブルがあります。可搬性を重視するなら ISO/ANSI SQL の範囲に絞ると安全です。

編集
Post Share
子ページ
  1. DB接続コマンド
  2. データベース一覧の確認
  3. テーブル一覧の確認
  4. テーブル定義の確認
  5. DBの設定確認
  6. テーブルスペースの容量の確認および拡張
  7. データ型
  8. 複数カラムのUPDATE
  9. カラムの追加/削除/変更
  10. 自動番号付け (autoincrement) する方法
  11. インデックスの作成
  12. シーケンスおよびインクリメント(ID列)の違いと確認方法
  13. create table文の生成
  14. 特定スキーマの全テーブルの全カラム情報を取得する方法
  15. 【DB2】エラー一覧
  16. 【DB2】テーブル定義からCREATE TABLE文を生成する方法
同階層のページ
  1. Oracle
  2. MySQL & MariaDB
  3. DB2
  4. SQLite
  5. PostgreSQL
  6. RDBMS共通