Db2-quick-guide

提供:Dev Guides
移動先:案内検索

DB2-はじめに

この章では、DB2の歴史、バージョン、エディション、およびそれぞれの機能について説明します。

概要

DB2はIBMのデータベース製品です。 これは、リレーショナルデータベース管理システム(RDBMS)です。 DB2は、データを効率的に保存、分析、取得するように設計されています。 DB2製品は、オブジェクト指向機能とXMLを使用した非リレーショナル構造のサポートにより拡張されています。

歴史

当初、IBMは特定のプラットフォーム向けにDB2製品を開発していました。 1990年以来、Linux、UNIX、Windowsなどの信頼できるオペレーティングシステムで実行できるユニバーサルデータベース(UDB)DB2サーバーの開発を決定しました。

バージョン

IBM DB2の場合、UDBの現在のバージョンは10.5であり、BLUアクセラレーションの機能とコード名は「Kepler」です。 今日までのDB2のすべてのバージョンを以下にリストします。

Version Code Name
3.4 Cobweb
8.1, 8.2 Stinger
9.1 Viper
9.5 Viper 2
9.7 Cobra
9.8 It added features with Only PureScale
10.1 Galileo
10.5 Kepler

データサーバーのエディションと機能

DB2の必要な機能の要件に応じて、組織は適切なDB2バージョンを選択します。 次の表に、DB2サーバーのエディションとその機能を示します。

Editions Features
Advanced Enterprise Server Edition and Enterprise Server Edition (AESE/ESE) It is designed for mid-size to large-size business organizations. Platform - Linux, UNIX, and Windows. Table partitioning High Availability Disaster Recovery (HARD) Materialized Query Table (MQTs) Multidimensional Clustering (MDC) Connection concentrator Pure XML Backup compression Homogeneous Federations
Workgroup Server Edition (WSE) It is designed for Workgroup or mid-size business organizations. Using this WSE you can work with - High Availability Disaster Recovery (HARD) Online Reorganization Pure XML Web Service Federation support DB2 Homogeneous Federations Homogeneous SQL replication Backup compression
Express -C It provides all the capabilities of DB2 at zero charge. It can run on any physical or virtual systems with any size of configuration.
Express Edition It is designed for entry level and mid-size business organizations. It is full featured DB2 data server. It offers only limited services. This Edition comes with - Web Service Federations DB2 homogeneous federations Homogeneous SQL Replications Backup compression
Enterprise Developer Edition It offers only single application developer. It is useful to design, build and prototype the applications for deployment on any of the IBM server. The software cannot be used for developing applications.

DB2-サーバーのインストール

この章では、DB2サーバーのインストール手順について説明します。

前書き

DB2サーバーの試用版をダウンロードするか、http://www-01.ibm.com/software/data/db2/express-c/downloadl [www.ibm.com]から製品ライセンスを購入できます。 実行するオペレーティングシステムのサイズに応じて、ダウンロード可能な2つのDB2サーバーがあります。 たとえば、32ビットLinuxまたはUNIXオペレーティングシステム用のDB2サーバーをダウンロードする場合は、32ビットDB2サーバーをダウンロードする必要があります。 同じことが64ビットDB2サーバーにも当てはまります。

ハードウェア要件

プロセッサー:最小コア2Duo

RAM:最小1GB

ハードディスク:30GB以上

ソフトウェア要件

DB2サーバーをインストールする前に、システムに必要なソフトウェアを準備する必要があります。 Linuxの場合、「libstdc ++ 6.0」をインストールする必要があります。

システムの互換性を確認する

DB2サーバーをインストールする前に、システムがDB2サーバーと互換性があるかどうかを確認する必要があります。 互換性を確認するには、コマンドコンソールで「db2prereqcheck」コマンドを呼び出す必要があります。

LinuxオペレーティングシステムにDB2をインストールする

ターミナルを開き、「CD <DB2 installation folder>」コマンドを使用してコンソールでdb2インストールイメージフォルダーのパスを設定します。 次に、「./db2prereqcheck」コマンドを入力して、システムとDB2サーバーの互換性を確認します。

./db2prereqcheck

図-1は、Linuxオペレーティングシステムとハードウェアシステムの互換性要件を示しています。

LinuxシステムにDB2をインストールするための所定の手順に従います。

  • 端末を開きます。
  • rootユーザーとしてログインします。
  • DB2インストールフォルダーを開きます。
  • 「./db2setup」と入力して、Enterキーを押します。

このプロセスにより、DB2サーバーのセットアップの実行が開始されます。

DB2サーバーのセットアップ

「./db2setup」と入力し、ルートターミナルでEnterキーを押して、DB2サーバーのセットアッププロセスを開始します。

そうすると、「Launch Padのセットアップ」画面が表示されます。 [図-2]

Launch Padのセットアップ

[起動パッドのセットアップ]ページで、左側のメニューから[製品のインストール]オプションを選択します。 オプション「DB​​2 Advanced Enterprise Server Edition」を選択します。 「新規インストール」ボタンを選択します。

「DB2 setup wizard」という名前の新しいフレームが表示されます。 「次へ」をクリックします。 [図-3]

DB2セットアップウィザード

次の画面にDB2ライセンス契約が表示されます。 「同意します…」を選択します。「次へ」をクリックします。 [図-4]

DB2ライセンス契約

次の画面には、インストールタイプが表示され、デフォルトで「標準」に設定されています。

同じ選択を維持します。 「次へ」をクリックします。 [図-5]

インストールアクション

次の画面にインストールアクションが表示されます。

「DB2 Advanced Enterprise Server Editionのインストール…」を選択します

「次へ」をクリックします。 [図-6]

インストールディレクトリ

次の画面で、セットアッププログラムはインストールディレクトリの選択を求めます。

デフォルトのままにして「次へ」をクリックします。

サーバー情報

次の画面にユーザー認証が表示されます。 「dasusr1」ユーザーのパスワードを入力します。

(覚えやすいように、パスワードはユーザー名と同一にすることができます。)

DB2インスタンス

次の画面で、セットアップはDB2サーバーインスタンスの作成を要求します。

ここでは、「db2inst1」という名前のDB2インスタンスを作成しています。

DB2インスタンス名

次の画面では、デフォルトのインスタンスに必要なパーティションの数を尋ねられます。

「単一または複数の」パーティションを選択できます。

「単一パーティションインスタンス」を選択します。 「次へ」をクリックします。

DB2パーティション

次の画面で、セットアップは作成中のDB2インスタンスの認証を求めます。

ここでは、デフォルトでユーザー名は「db2inst1」として作成されます。 ユーザー名と同じパスワードを入力できます。

「次へ」をクリックします。

認証

次の画面で、セットアップは「db2fenc」ユーザーの認証情報の入力を求めます。

ここでは、ユーザー名と同じパスワードを入力できます。

「次へ」をクリックします。

認証情報

次の画面で、「この時点で通知を送信するようにdb2サーバーをセットアップしない」オプションを選択できます。

「次へ」をクリックします。

通知

次の画面には、db2セットアップに関する情報が表示されます。

「完了」をクリックします。

この段階で、DB2のインストール手順は完了です。

DB2インストールの検証

DB2サーバーのインストールの有用性を確認する必要があります。 DB2サーバーのインストールが完了したら、現在のユーザーモードからログアウトし、「db2inst1」ユーザーにログインします。 「db2inst1」ユーザー環境では、ターミナルを開いて次のコマンドを実行し、db2製品が適切にインストールされているかどうかを確認できます。

db2level

このコマンドは、現在のインスタンスにインストールされているDB2製品の現在のバージョンとサービスレベルを表示します。

構文:

db2level

例:

db2level

出力:

DB21085I Instance "db2inst2" uses "64" bits
And DB2 code release "SQL10010" with level
identifier "0201010E". Informational tokens
are "DB2 v10.1.0.0", "s120403",
"LINUXAMD64101", and Fix Pack "0".
Product is installed at "/home/db2inst2/sqllib".

db2licm

このコマンドは、DB2製品のすべてのライセンス関連情報を表示します。

構文:

db2licm <parameter>

例:

db2licm -l

出力:

Product name:                     "DB2 Advanced Enterprise Server Edition"
License type:                     "Trial"
Expiry date:                      "10/02/2014"
Product identifier:               "db2aese"
Version information:              "10.1"
Product name:                     "DB2 Connect Server"
License type:                     "Trial"
Expiry date:                      "10/02/2014"
Product identifier:               "db2consv"
Version information:              "10.1"

コマンドラインプロセッサ(CLP)

CLPは、次の3つのモードのいずれかで開始できます。

  • コマンドモード:このモードでは、各コマンドとSQLステートメントの前に「db2」を付ける必要があります。 たとえば、クエリ「db2 activate database sample」。
  • インタラクティブ入力モード:「db2」コマンドを使用して、このモードを起動できます。 ここでは、プレフィックスなしでSQLステートメントを渡すことができます。 たとえば、「データベースサンプルのアクティブ化」。
  • バッチモード:ここでは、要件のすべてのSQLクエリを含むスクリプトファイルを作成し、「。db2」拡張子でファイルを保存する必要があります。 構文「db2 –tf <filename.db2>」を使用して、コマンドラインでこれを呼び出すことができます。

DB22へのアクセス

DB2-インスタンス

前書き

インスタンスは、DB2 Database Managerの論理環境です。 インスタンスを使用して、データベースを管理できます。 要件に応じて、1つの物理マシン上に複数のインスタンスを作成できます。 インスタンスディレクトリの内容は次のとおりです。

  • データベースマネージャーの構成ファイル
  • システムデータベースディレクトリ
  • ノードディレクトリ
  • ノード構成ファイル[db2nodes.cfg]
  • デバッグファイル、ダンプファイル

DB2 Database Serverの場合、デフォルトのインスタンスは「DB2」です。 作成後にインスタンスディレクトリの場所を変更することはできません。 インスタンスは複数のデータベースを管理できます。 インスタンスでは、各データベースには一意の名前、独自のカタログテーブルのセット、構成ファイル、権限、および特権があります。

DB2製品のインスタンスのアーキテクチャ

db2_product

複数のインスタンス

Linux、UNIX、およびWindows上の1つのDB2Serverに複数のインスタンスを作成できます。 物理マシンに複数のDB2サーバーをインストールすることが可能です。

Linuxでのインスタンスの作成

DB2サーバーがrootユーザーとしてインストールされている場合、LinuxおよびUNIX上に複数のインスタンスを作成できます。 インスタンスは、LinuxとUNIXで独立して同時に実行できます。 一度にデータベースマネージャの単一のインスタンス内で作業できます。

インスタンスフォルダーには、データベース構成ファイルとフォルダーが含まれます。 インスタンスディレクトリは、オペレーティングシステムのバージョンに応じて、Windowsのさまざまな場所に保存されます。

インスタンスのリスト

インスタンスをリストするには、次のコマンドを使用します。

db2ilist

このコマンドは、システムで使用可能なすべてのインスタンスをリストします。

構文:

db2ilist

例: [DB2コピーで作成されたインスタンスの数を確認するには]

db2ilist

出力:

db2inst1
db2inst2
db2inst3

インスタンス環境コマンド

これらのコマンドは、DB2 CLIでインスタンスの配置を操作するのに役立ちます。

インスタンスを取得する

このコマンドは、現在実行中のインスタンスの詳細を表示します。

構文:

db2 get instance

例: [現在のユーザーをアクティブにした現在のインスタンスを表示するには]

db2 get instance

出力:

The current database manager instance is : db2inst1

インスタンスを設定

DB2 UDB上のインスタンスのデータベースマネージャーを起動または停止するには、現在のインスタンスに対して次のコマンドを実行します。

構文:

set db2instance=<instance_name>

例: [「db2inst1」環境を現在のユーザーにアレンジするには]

set db2instance=db2inst1

db2start

このコマンドを使用して、インスタンスを開始できます。 この前に、「インスタンスの設定」を実行する必要があります。

構文:

db2start

例: [インスタンスを開始するには]

db2start

出力:

SQL1063N DB2START processing was successful

db2stop

このコマンドを使用すると、実行中のインスタンスを停止できます。

構文:

db2stop

出力:

SQL1064N DB2STOP processing was successful.

インスタンスを作成する

新しいインスタンスを作成する方法を見てみましょう。

db2icrt

新しいインスタンスを作成する場合は、rootでログインする必要があります。 インスタンスIDはルートIDまたはルート名ではありません。

新しいインスタンスを作成する手順は次のとおりです。

*Step1* :たとえば、オペレーティングシステムユーザーを作成します。

構文:

useradd -u <ID> -g <group name> -m -d <user location> <user name>
-p <password>

:[グループ 'db2iadm1’およびパスワード 'db2inst2’に名前 'db2inst2’のインスタンスのユーザーを作成するには]

useradd -u 1000 -g db2iadm1 -m -d/home/db2inst2 db2inst2 -p db2inst2
*Step2* :新しいユーザーを作成するには、rootユーザーのDB2インスタンスディレクトリに移動します。

ロケーション:

cd/opt/ibm/db2/v10.1/instance
  • ステップ3 *:次の構文を使用してインスタンスを作成します。

構文:

./db2icrt -s ese -u <inst id> <instance name>

:[ESE(Enterprise Server Edition)の機能を使用して、ユーザー 'db2inst2’に新しいインスタンス 'db2inst2’を作成するには]

./db2icrt -s ese -u db2inst2 db2inst2

出力:

DBI1446I The db2icrt command is running, please wait.
 ….
 …..
DBI1070I Program db2icrt completed successfully.

インスタンスの通信ポートとホストの配置

/etc/servicesファイルを編集して、ポート番号を追加します。 以下の構文では、「inst_name」はインスタンス名を示し、「inst_port」はインスタンスのポート番号を示します。

構文:

db2c_<inst name> <inst_port>/tcp

:[インスタンス 'db2inst2’の変数 'db2c_db2inst2’に 'services’ファイルに '50001/tcp’ポート番号を追加]

db2c_db2inst2 50001/tcp
  • 構文1 *:[データベースマネージャーの構成をサービス名で更新します。 次の構文「svcename」はインスタンスサービス名を示し、「inst_name」はインスタンス名を示します]
db2 update database manager configuration using svcename db2c_&<inst_name>
  • 例1 *:[インスタンス 'db2inst2’の値 'db2c_db2inst2’を持つ変数svcenameを使用したDBM設定の更新
db2 update database manager configuration using svcename db2c_db2inst2

出力

DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed successfully.
  • 構文2 *:現在のインスタンスの「tcpip」通信プロトコルを設定します
db2set DB2COMM=tcpip
  • 構文3 *:[現在のインスタンスを停止および開始して、データベースマネージャーの構成から更新された値を取得する]
db2stop
db2start

インスタンスを更新する

次のコマンドを使用してインスタンスを更新できます。

db2iupdt

このコマンドは、同じバージョンリリース内のインスタンスを更新するために使用されます。 このコマンドを実行する前に、「db2stop」コマンドを使用してインスタンスデータベースマネージャーを停止する必要があります。 「inst_name」の下の構文は、以前にリリースまたはインストールされたdb2サーバーインスタンス名を示し、新しいリリースまたはインストールされたdb2サーバーバージョンに更新します。

  • 構文1 *:通常モードでインスタンスを更新するには
db2iupdt <inst_name>

例1:

./db2iupdt db2inst2
  • 構文2 *:デバッグモードでインスタンスを更新するには
db2iupdt -D <inst_name>

db2iupdt -D db2inst2

インスタンスのアップグレード

インスタンスを以前のバージョンのDB2コピーから、新しくインストールされた現在のバージョンのDB2コピーにアップグレードできます。

db2iupgrade

LinuxまたはUNIXシステムでは、このコマンドはDB2DIR/instanceディレクトリーにあります。 次の構文では、「inst_name」は以前のバージョンのDB2インスタンスを示し、「inst_username」は現在インストールされているバージョンのDB2コピーインスタンスユーザーを示します。

  • 構文2 *:
db2iupgrade -d -k -u <inst_username> <inst_name>

db2iupgrade -d -k -u db2inst2 db2inst2

コマンドパラメータ:

*-d* :デバッグモードをオンにします。
*-k* :DB2コピーでこのコマンドを実行している場所でサポートされている場合、アップグレード前のインスタンスタイプを保持します。

Linuxでdb2iupgradeコマンドにスーパーユーザー(su)を使用している場合、「-」オプションを指定して「su」コマンドを発行する必要があります。

インスタンスを削除する

「db2icrt」コマンドで作成されたインスタンスをドロップまたは削除できます。

db2idrop

LinuxおよびUNIXオペレーティングシステムでは、このコマンドはDB2_installation_folder/instanceディレクトリにあります。

構文:[次の構文では、「inst_username」はインスタンスのユーザー名を示し、「inst_name」はインスタンス名を示します]

db2idrop -u <inst_username> <inst_name>

:[db2inst2を削除するには]

./db2idrop -u db2inst2 db2inst2

インスタンスで他のコマンドを使用する

現在作業中のDB2インスタンスを見つけるコマンド。

  • 構文1 *:[データベースマネージャーによってアクティブ化された現在のインスタンスを確認するには]
db2 get instance

出力:

The current database manager instance is:  db2inst1
  • 構文2 *:[現在のインスタンスを操作ビットとリリースバージョンで表示するには]
db2pd -inst | head -2

例:

db2pd -inst | head -2

出力:

Instance db2inst1 uses 64 bits and DB2 code release SQL10010
  • 構文3 *:[現在動作しているインスタンスの名前を確認するには]
db2 select inst_name from sysibmadm.env_inst_info

例:

db2 select inst_name from sysibmadm.env_inst_info

出力:

INST_NAME  --------------------------------------
db2inst1
1 record(s) selected.

構文:[デフォルトとして新しいインスタンスを設定するには]

db2set db2instdef=<inst_name> -g

:[新しく作成されたインスタンスをデフォルトのインスタンスとして配列するには]

db2set db2instdef=db2inst2 -g

DB2-データベース

この章では、関連する構文を使用したデータベースの作成、アクティブ化、非アクティブ化について説明します。

データベースのアーキテクチャ

データベースアーキテクチャ

データベースは、データベース操作を効率的に処理するために連携して動作するテーブル、スキーマ、バッファプール、ログ、ストレージグループ、およびテーブルスペースの集合です。

データベースディレクトリ

データベースディレクトリは、データベースの整理されたリポジトリです。 データベースを作成すると、デフォルトのストレージデバイス、構成ファイル、一時テーブルリストなどの詳細など、データベースに関するすべての詳細がデータベースディレクトリに保存されます。

パーティショングローバルディレクトリは、インスタンスフォルダーに作成されます。 このディレクトリには、データベースに関連するすべてのグローバル情報が含まれています。 このパーティションのグローバルディレクトリには、NODExxxx/SQLyyyという名前が付けられます。ここで、xxxxはデータパーティション番号、yyyはデータベーストークンです。

パーティショングローバルディレクトリに、メンバー固有のディレクトリが作成されます。 このディレクトリには、ローカルデータベース情報が含まれています。 メンバー固有のディレクトリの名前はMEMBERxxxxで、xxxxはメンバー番号です。 DB2 Enterprise Server Edition環境は単一のメンバーで実行され、メンバー固有のディレクトリは1つだけです。 このメンバー固有のディレクトリには、MEMBER0000という一意の名前が付けられます。

パーティション化されたグローバルディレクトリ

ディレクトリの場所:<インスタンス>/NODExxx/SQLxxx

パーティショングローバルディレクトリには、以下に示すデータベース関連ファイルが含まれています。

  • グローバルデッドロックファイルへの書き込みイベント監視ファイル
  • 表スペース情報ファイル[SQLSPCS.1、SQLSPCS.2]
  • ストレージグループ制御ファイル[SQLSGF.1、SQLSGF.2]
  • 一時表スペースコンテナーファイル。 [/storage path//T0000011/C000000.TMP/SQL00002.MEMBER0001.TDA]
  • グローバル構成ファイル[SQLDBCONF]
  • 履歴ファイル[DB2RHIST.ASC、DB2RHIST.BAK、DB2TSCHG.HIS、DB2TSCHG.HIS]
  • ロギング関連ファイル[SQLOGCTL.GLFH.1、SQLOGCTL.GLFH.2]
  • ファイルのロック[SQLINSLK、SQLTMPLK]
  • 自動保管コンテナ

メンバー固有のディレクトリ

ディレクトリの場所:/NODExxxx/SQLxxxx/MEMBER0000

このディレクトリには以下が含まれます。

  • データベースに関連付けられたオブジェクト
  • バッファプール情報ファイル[SQLBP.1、SQLBP.2]
  • ローカルイベント監視ファイル
  • ロギング関連ファイル[SQLOGCTL.LFH.1、SQLOGCTL.LFH.2、SQLOGMIR.LFH]。
  • ローカル構成ファイル
  • デッドロックイベントモニターファイル。 詳細なデッドロックイベントモニターファイルは、ESEおよびパーティションデータベース環境の場合、カタログノードのデータベースディレクトリに保存されます。

データベース作成

「CREATE DATABASE」コマンドを使用して、インスタンスにデータベースを作成できます。 すべてのデータベースは、インスタンスの作成時に作成されるデフォルトのストレージグループ「IBMSTOGROUP」で作成されます。 DB2では、すべてのデータベーステーブルは「テーブルスペース」に格納され、それぞれのストレージグループを使用します。

データベースの特権はPUBLIC [CREATETAB、BINDADD、CONNECT、IMPLICIT_SCHEMA、およびSELECT]として自動的に設定されますが、RESTRICTIVEオプションが存在する場合、特権はPUBLICとして付与されません。

非制限的なデータベースの作成

このコマンドは、制限のないデータベースを作成するために使用されます。

構文:[新しいデータベースを作成します。 「database_name」は、作成する新しいデータベース名を示します。]

db2 create database <database name>

:[名前 'one’の新しい非制限的なデータベースを作成するには]

db2 create database one

出力:

DB20000I The CREATE DATABASE command completed successfully.

制限的なデータベースの作成

このコマンドを呼び出すと、制限データベースが作成されます。

構文:[以下の構文では、「db_name」はデータベース名を示します。]

db2 create database <db_name> restrictive

:[「two」という名前の新しい制限付きデータベースを作成するには]

db2 create database two restrictive

異なるユーザー定義の場所でデータベースを作成する

別のパスにデフォルトのストレージグループ「IBMSTOGROUP」でデータベースを作成します。 以前は、特定の場所にデータベースを保存または作成するために、ユーザー定義の場所なしでコマンド「データベースの作成」を呼び出しました。 ユーザー定義のデータベースの場所を使用してデータベースを作成するには、次の手順に従います。

構文:[以下の構文では、「db_name」は「データベース名」を示し、「data_location」はデータをフォルダーに保存する場所を示し、「db_path_location」はドライバーの「data_location」の場所を示します。

db2 create database '<db_name>' on '<data location>' dbpath on '<db_path_location>'

:[データが「data1」に保存され、このフォルダーが「dbpath1」に保存される「four」という名前のデータベースを作成するには]

db2 create database four on '/data1' dbpath on '/dbpath1'

ローカルまたはシステムデータベースディレクトリファイルの表示

このコマンドを実行して、現在のインスタンスで使用可能なディレクトリのリストを表示します。

構文:

db2 list database directory

例:

db2 list database directory

出力:

 System Database Directory
 Number of entries in the directory = 6
 Database 1 entry:
 Database alias                       = FOUR
 Database name                        = FOUR
 Local database directory             =
/home/db2inst4/Desktop/dbpath
 Database release level               = f.00
 Comment                              =
 Directory entry type                 = Indirect
 Catalog database partition number    = 0
 Alternate server hostname            =
 Alternate server port number         =
Database 2 entry:
Database alias                       = SIX
Database name                        = SIX
Local database directory             =/home/db2inst4
Database release level               = f.00
Comment                              =
Directory entry type                 = Indirect
Catalog database partition number    = 0
Alternate server hostname            =
Alternate server port number         =

データベースのアクティブ化

このコマンドは、特定のデータベースに必要なすべてのサービスを起動して、データベースをアプリケーションで使用できるようにします。

構文:[「db_name」はデータベース名を示します]

db2 activate db <db_name>

:[データベース 'one’のアクティブ化]

db2 activate db one

データベースの非アクティブ化

このコマンドを使用すると、データベースサービスを停止できます。

構文:

db2 deactivate db <db_name>

:[データベース「one」を非アクティブ化するには]

db2 deactivate db one

データベースへの接続

データベースを作成して使用するには、データベースに接続または起動する必要があります。

構文:

db2 connect to <database name>

:[データベース1を現在のCLIに接続するには]

db2 connect to one

出力:

 Database Connection Information
 Database server        = DB2/LINUXX8664 10.1.0
 SQL authorization ID   = DB2INST4
 Local database alias   = ONE

データベースが制限されているかどうかを確認する

このデータベースが制限されているかどうかを確認するための構文は次のとおりです。

構文:[次の構文では、「db」はデータベースを示し、「cfg」は構成を示し、「db_name」はデータベース名を示します]

db2 get db cfg for <db_name> | grep -i restrict

:['one’データベースが制限されているかどうかを確認するには]

db2 get db cfg for one | grep -i restrict

出力:

Restrict access                       = NO

データベースマネージャーとデータベースの構成

インスタンス構成(データベースマネージャー構成)は「db2system」という名前のファイルに保存され、データベース関連の構成は「SQLDBCON」という名前のファイルに保存されます。 これらのファイルは直接編集できません。 これらのファイルは、APIを呼び出すツールを使用して編集できます。 コマンドラインプロセッサを使用すると、これらのコマンドを使用できます。

データベースマネージャーの構成パラメーター

構文:[インスタンスデータベースマネージャーの情報を取得するには]

db2 get database manager configuration
db2 get dbm cfg

構文:[インスタンスデータベースマネージャーを更新するには]

db2 update database manager configuration
db2 update dbm cfg

構文:[以前の構成をリセットするには]

db2 reset database manager configuration
db2 reset dbm cfg

データベース構成パラメーター

構文:[データベースの情報を取得するには]

db2 get database configuration
db2 get db cfg

構文:[データベース構成を更新するには]

db2 update database configuration
db2 update db cfg

構文:[データベース構成で以前に構成された値をリセットするには

db2 reset database configuration
db2 reset db cfg

構文:[現在のアクティブデータベースのサイズを確認するには]

db2 "call get_dbsize_info(?,?,?,-1)"

:[現在アクティブ化されているデータベースのサイズを確認するには]

db2 "call get_dbsize_info(?,?,?,-1)"

出力:

Value of output parameters
--------------------------
Parameter Name  : SNAPSHOTTIMESTAMP
Parameter Value : 2014-07-02-10.27.15.556775
Parameter Name  : DATABASESIZE
Parameter Value : 105795584
Parameter Name  : DATABASECAPACITY
Parameter Value : 396784705536
Return Status = 0

データベースに必要なスペースの見積もり

データベースのサイズを推定するには、次の要因の寄与を考慮する必要があります。

  • システムカタログ表
  • ユーザーテーブルデータ
  • ロングフィールドデータ
  • ラージオブジェクト(LOB)データ
  • インデックススペース
  • 一時的な作業スペース
  • XMLデータ
  • ログファイルスペース
  • ローカルデータベースディレクトリ
  • システムファイル

データベース権限の確認

以下の構文を使用して、非制限データベース上のPUBLICに付与されているデータベース権限を確認できます。

  • ステップ1 *:インスタンスの認証ユーザーIDとパスワードを使用してデータベースに接続します。

構文:[ユーザー名とパスワードでデータベースに接続するには]

db2 connect to <db_name> user <userid> using <password>

:[ユーザーID「db2inst4」およびパスワード「db2inst4」で「1」個のデータベースを接続するには]

db2 connect to one user db2inst4 using db2inst4

出力:

 Database Connection Information
 Database server        = DB2/LINUXX8664 10.1.0
 SQL authorization ID   = DB2INST4
 Local database alias   = ONE
  • ステップ2 *:データベースの権限を確認します。

構文:[以下の構文は、現在のデータベースの権限サービスの結果を示しています]

db2 "select substr(authority,1,25) as authority, d_user, d_group,
d_public, role_user, role_group, role_public,d_role from table(
sysproc.auth_list_authorities_for_authid ('public','g'))as t
order by authority"

例:

db2 "select substr(authority,1,25) as authority, d_user, d_group,
d_public, role_user, role_group, role_public,d_role from table(
sysproc.auth_list_authorities_for_authid ('PUBLIC','G'))as t
order by authority"
  • 出力: *
AUTHORITY                 D_USER D_GROUP D_PUBLIC ROLE_USER ROLE_GROUP ROLE_PUBLIC D_ROLE
------------------------- ------ ------- -------- --------- ---------- ----------- ------
ACCESSCTRL               *  *N       *  *N          *
BINDADD ** Y ** N *
CONNECT                  *  *Y       *  *N          *
CREATETAB ** Y ** N *
CREATE_EXTERNAL_ROUTINE  *  *N       *  *N          *
CREATE_NOT_FENCED_ROUTINE ** N ** N *
CREATE_SECURE_OBJECT     *  *N       *  *N          *
DATAACCESS ** N ** N *
DBADM                    *  *N       *  *N          *
EXPLAIN ** N ** N *
IMPLICIT_SCHEMA          *  *Y       *  *N          *
LOAD ** N ** N *
QUIESCE_CONNECT          *  *N       *  *N          *
SECADM ** N ** N *
SQLADM                   *  *N       *  *N          *
SYSADM **  **  **  *
SYSCTRL                  *  **  **  **
SYSMAINT **  **  **  *
SYSMON                   *  **  **  **
WLMADM ** N ** N           *
20 record(s) selected.

データベースの削除

Dropコマンドを使用して、インスタンスデータベースディレクトリからデータベースを削除できます。 このコマンドは、すべてのオブジェクト、テーブル、スペース、コンテナ、および関連ファイルを削除できます。

構文:[データベースをインスタンスから削除するには]

db2 drop database <db_name>

:[インスタンスから「6」データベースを削除するには]

db2  drop database six

出力:

DB20000I The DROP DATABASE command completed successfully

DB2-バッファープール

この章では、データベースのバッファプールを紹介します。

bufferpool

前書き

バッファプールは、データベースマネージャによって割り当てられるメインメモリ空間の一部です。 バッファプールの目的は、ディスクからテーブルとインデックスのデータをキャッシュすることです。 すべてのデータベースには独自のバッファプールがあります。 新しいデータベースの作成時にデフォルトのバッファプールが作成されます。 「IBMDEFAULTBP」と呼ばれます。 ユーザーの要件に応じて、いくつかのバッファプールを作成することができます。 データベースマネージャは、バッファプールにテーブル行データをページとして配置します。 このページは、データベースがシャットダウンされるか、スペースに新しいデータが書き込まれるまで、バッファプールに残ります。 データで更新されるがディスクに書き込まれないバッファプール内のページは、「ダーティ」ページと呼ばれます。 バッファプール内の更新されたデータページがディスクに書き込まれた後、バッファプールは別のデータを取得する準備ができています。

テーブルスペースとバッファプールの関係

各表スペースは、データベース内の特定のバッファープールに関連付けられています。 1つのテーブルスペースは1つのバッファプールに関連付けられています。 バッファプールとテーブルスペースのサイズは同じでなければなりません。 複数のバッファプールを使用すると、データベースで使用されるメモリを構成して、全体的なパフォーマンスを向上させることができます。

バッファプールのサイズ

バッファプールページのサイズは、「CREATE DATABASE」コマンドを使用するときに設定されます。 ページサイズを指定しない場合、デフォルトのページサイズである4 KBが使用されます。 バッファプールが作成されると、後でページサイズを変更することはできません

現在のデータベースディレクトリで使用可能なバッファプールを一覧表示する

構文:[以下の構文は、データベースで利用可能なすべてのバッファプールを示しています]

db2 select * from syscat.bufferpools

:[現在のデータベースで利用可能なバッファプールを表示するには]

db2 select * from syscat.bufferpools

出力:

BPNAME      BUFFERPOOLID DBPGNAME   NPAGES      PAGESIZE    ESTORE
NUMBLOCKPAGES BLOCKSIZE   NGNAME
------------------------------------------------------------
IBMDEFAULTBP
 1 -
 -2        4096 N                  0           0 -

 1 record(s) selected.

バッファプールを作成する

データベースサーバーの新しいバッファプールを作成するには、「バッファプール名」と「ページのサイズ」という2つのパラメータが必要です。 次のクエリを実行して、新しいバッファプールを作成します。

構文:[以下の構文では、「bp_name」はバッファプール名を示し、「size」はバッファプール用に宣言する必要があるページのサイズを示します(4K、8K、16K、32K)]

db2 create bufferpool <bp_name> pagesize <size>

:[名前「bpnew」、サイズ「8192」(8Kb)の新しいバッファプールを作成します。]

db2 create bufferpool bpnew pagesize 8192

出力

DB20000I The SQL command completed successfully.

バッファプールの削除

バッファプールを削除する前に、テーブルスペースが割り当てられているかどうかを確認する必要があります。

構文:[バッファプールを削除するには]

drop bufferpool <bp_name>

:[bufferpoolという名前の「bpnew」を削除するには]

db2 drop bufferpool bpnew

出力

DB20000I The SQL command completed successfully.

DB2-テーブルスペース

この章では、表領域について詳しく説明します

テーブルスペース

前書き

表スペースはストレージ構造であり、表、索引、ラージオブジェクト、および長いデータが含まれます。 データベース内のデータを、システム上のデータの保存場所に関連する論理ストレージグループに整理するために使用できます。 このテーブルスペースはデータベースパーティショングループに保存されます

データベース内の表領域の利点

表スペースは、次のようなさまざまな方法でデータベースに役立ちます。

回復可能性:表領域はバックアップおよび復元操作をより便利にします。 1つのコマンドを使用して、テーブルスペース内のすべてのデータベースオブジェクトをバックアップまたは復元できます。

自動ストレージ管理:データベースマネージャーは、ニーズに応じてコンテナを作成および拡張します。

メモリ使用率:単一のバッファプールで複数のテーブルスペースを管理できます。 一時テーブルスペースを独自のバッファプールに割り当てて、ソートや結合などのアクティビティのパフォーマンスを向上させることができます。

容器

表領域には、1つ以上のコンテナが含まれます。 コンテナは、ディレクトリ名、デバイス名、またはファイル名にすることができます。 データベースでは、単一のテーブルスペースが同じ物理ストレージデバイス上に複数のコンテナを持つことができます。 自動ストレージ表領域オプションを使用して表領域が作成される場合、コンテナの作成と管理はデータベース管理者によって自動的に処理されます。 自動ストレージ表領域オプションで作成されていない場合は、コンテナを自分で定義および管理する必要があります。

デフォルトの表領域

新しいデータベースを作成すると、データベースマネージャーはデータベースのデフォルトのテーブルスペースを作成します。 これらの表領域は、ユーザーおよび一時データのストレージとして使用されます。 各データベースには、次のように少なくとも3つのテーブルスペースが含まれている必要があります。

  1. カタログ表領域
  2. ユーザー表領域
  3. 一時テーブルスペース

カタログ表領域:データベースのシステムカタログ表が含まれています。 SYSCATSPACEという名前で、ドロップできません。

ユーザー表領域:この表領域にはユーザー定義の表が含まれます。 データベースには、USERSPACE1という名前のデフォルトのユーザー表領域が1つあります。 作成時にテーブルのユーザー定義テーブルスペースを指定しない場合、データベースマネージャはデフォルトのユーザーテーブルスペースを選択します。

一時表領域:一時表領域には一時表データが含まれます。 この表領域には、システム一時表領域またはユーザー一時表領域が含まれます。

システム一時表領域は、ソートや結合などの操作を実行している間、データベースマネージャーが必要とする一時データを保持します。 データベースには少なくとも1つのシステム一時表領域が必要であり、TEMPSPACE1という名前が付けられます。 データベースの作成時に作成されます。 ユーザー一時表領域は、表からの一時データを保持します。 DECLARE GLOBAL TEMPORARY TABLEまたはCREATE GLOBAL TEMPORARY TABLEステートメントで作成されます。 この一時テーブルスペースは、データベース作成時にデフォルトでは作成されません。

表領域とストレージ管理:

表領域は、使用方法に応じてさまざまな方法で設定できます。 オペレーティングシステムをセットアップして、テーブルスペースの割り当てを管理したり、データベースマネージャーにスペースを割り当てたり、データ用のテーブルスペースの自動割り当てを選択したりできます。

次の3種類の管理スペースが利用可能です。

システム管理スペース(SMS):オペレーティングシステムのファイルシステムマネージャーは、テーブルが保存されているスペースを割り当てて管理します。 ストレージスペースはオンデマンドで割り当てられます。 このモデルは、データベースオブジェクトを表すファイルで構成されています。 この表領域タイプは、ユーザー定義の表領域に対してバージョン10.1で非推奨になり、カタログおよび一時表領域では非推奨ではありません。

データベース管理スペース(DMS):データベースサーバーはストレージスペースを制御します。 ストレージスペースは、DMSテーブルスペースを作成するときに指定するコンテナ定義に基づいて、ファイルシステムに事前に割り当てられます。 ユーザー定義の表領域ではバージョン10.1フィックスパック1から非推奨になりましたが、システム表領域および一時表領域では非推奨ではありません。

自動ストレージテーブルスペース:データベースサーバーは自動的に管理できます。 データベースサーバーは、データベース上のデータに依存してコンテナを作成および拡張します。 自動ストレージ管理では、コンテナ定義を提供する必要はありません。 データベースサーバーは、コンテナを作成および拡張した後、データベースに割り当てられたストレージを利用します。 ストレージグループにストレージスペースを追加すると、既存のコンテナーが最大容量に達すると、新しいコンテナーが自動的に作成されます。 新しく追加したストレージをすぐに使用する場合は、テーブルスペースのバランスを取り直すことができます。

ページ、テーブル、およびテーブルスペースのサイズ:

一時的なDMSおよび自動ストレージのテーブルスペース。データベースに選択したページサイズによって、テーブルスペースサイズの最大制限が決まります。 テーブルSMSおよび一時自動ストレージテーブルスペースの場合、ページサイズはテーブル自体のサイズを制限します。 ページサイズは、4kb、8kb、16kb、または32kbです。

Tablespace type 4K page size limit 8K page size limit 16K page size limit 32K page size limit
DMS, non-temporary automatic storage tablespace regular 64G 128G 256G 512G
DMS, temporary DMS and non- temporary automatic storage table space large 1892G 16384G 32768G 65536G

DB2-ストレージグループ

この章では、データベースストレージグループについて説明します。

ストレージ

前書き

データベーステーブルまたはオブジェクトを格納するためのストレージパスのセットは、ストレージグループです。 ストレージグループにテーブルスペースを割り当てることができます。 データベースを作成すると、すべてのテーブルスペースがデフォルトのstoragegorupを使用します。 データベースのデフォルトのストレージグループは「IBMSTOGROUP」です。 「CREATE DATABASE」コマンドの最後に「AUTOMATIC STOGROUP NO」パラメーターを渡すと、新しいデータベースを作成するときにデフォルトのストレージグループがアクティブになります。 データベースには、デフォルトのストレージグループはありません。

ストレージグループのリスト

データベース内のすべてのストレージグループを一覧表示できます。

構文:[現在のデータベースで使用可能なストレージグループのリストを表示するには]

db2 select * from syscat.stogroups

:[現在のデータベースで使用可能なstoragegorupsのリストを表示するには]

db2 select * from syscat.stogroups

ストレージグループの作成

データベースにストレージグループを作成する構文は次のとおりです。

構文:[新しいstogroupを作成します。 「stogropu_name」は新しいストレージグループの名前を示し、「path」はデータ(テーブル)が保存されている場所を示します]

db2 create stogroup  on ‘path’

:[パス 'data1’フォルダーに新しいstogroup 'stg1’を作成するには]

db2 create stogroup stg1 on ‘/data1’

出力:

DB20000I The SQL command completed succesfully

stogroupを使用して表領域を作成する

storegroupを使用して表領域を作成する方法は次のとおりです。

構文:[既存のストレージグループを使用して新しいテーブルスペースを作成するには]

db2 create tablespace <tablespace_name>  using stogroup <stogroup_name>

:[既存のストレージグループ「stg1」を使用して「ts1」という名前の新しいテーブルスペースを作成するには]

db2 create tablespace ts1 using stogroup stg1

出力:

DB20000I The SQL command completed succesfully

ストレージグループの変更

次の構文を使用して、ストアグループの場所を変更できます。

構文:[ストレージグループを古い​​場所から新しい場所に移動するには]

db2 alter stogroup  add ‘location’, ‘location’

:[「sg1」という名前のストレージグループのロケーションパスを古いロケーションから新しいロケーションに変更するには]

db2 alter stogroup sg1 add ‘/path/data3’, ‘/path/data4’

ストレージグループのフォルダーパスの削除

ストレージグループのフォルダーパスを削除する前に、alterコマンドを使用して、ストレージグループの新しい場所を追加できます。

構文:[ストレージグループの場所から古いパスを削除するには]

db2 alter stogroup  drop ‘/path’

:[ストレージグループの場所を「stg1」から削除するには]

db2 alter stogroup stg1 drop ‘/path/data1’

表領域のリバランス

データベースでトランザクションが実行され、テーブルスペースがいっぱいになったときにストレージグループまたはテーブルスペース用の新しいフォルダを作成する場合、テーブルスペースの再バランスが必要です。 リバランスにより、データベース構成ファイルが新しいストレージグループで更新されます。

構文:[古いストレージグループパスから新しいストレージグループへのテーブルスペースのバランスを再調整するには]

db2 alter tablspace <ts_name> rebalance

:[リバランスする]

db2 alter tablespace ts1 rebalance

ストレージグループの名前を変更する

構文:[既存のストレージ名を変更するには]

db2 rename stogroup <old_stg_name> to <new_stg_name>

:[ストレージグループの名前を「sg1」から新しい名前「sgroup1」に変更するには]

db2 rename stogroup sg1 to sgroup1

ストレージグループの削除

  • ステップ1 *:ストレージグループを削除する前に、テーブルスペースに異なるストレージグループを割り当てることができます。

構文:[表スペースに別のストレージグループを割り当てるには。]

db2 alter tablspace <ts_name> using stogroup <another sto_group_name>

:[テーブルスペース「ts1」の「sg2」という名前の古いstogroupから新しいstogroupに変更するには]

db2 alter tablespace ts1 using stogroup sg2

ステップ2:

構文:[既存のstogroupを削除するには]

db2 drop stogorup <stogroup_name>

:[データベースからstogroup 'stg1’を削除するには]

db2 drop stogroup stg1

DB2-スキーマ

この章では、スキーマの概念を紹介し、説明します。

前書き

スキーマは、データベースで論理的に分類された名前付きオブジェクトのコレクションです。

データベースでは、同じ名前の複数のデータベースオブジェクトを作成できません。 そのために、スキーマはグループ環境を提供します。 1つのデータベースに複数のスキーマを作成でき、異なるスキーマグループで同じ名前の複数のデータベースオブジェクトを作成できます。

スキーマ

スキーマには、テーブル、関数、インデックス、テーブルスペース、プロシージャ、トリガーなどを含めることができます。 たとえば、「employee」データベース用に「Professional」および「Personal」という名前の2つの異なるスキーマを作成します。 同じ名前「Employee」で2つの異なるテーブルを作成することができます。 この環境では、1つのテーブルには専門的な情報があり、もう1つのテーブルには従業員の個人情報があります。 同じ名前の2つのテーブルがありますが、2つの異なるスキーマ「Personal」と「Professional」があります。 したがって、ユーザーは問題に遭遇することなく両方で作業できます。 この機能は、テーブルの命名に制約がある場合に役立ちます。

スキーマに関連するいくつかのコマンドを見てみましょう。

現在アクティブなスキーマを取得する

構文:

db2 get schema

:[現在のデータベーススキーマを取得するには]

db2 get schema

別のスキーマを現在の環境に設定する

構文:

db2 set schema=<schema_name>

:[現在のインスタンス環境に「schema1」を配置するには]

db2 set schema=schema1

新しいスキーマを作成する

構文:[承認されたユーザーIDで新しいスキーマを作成するには]

db2 create schema <schema_name> authroization <inst_user>

:[「db2inst2」で認証された「schema1」スキーマを作成するには]

db2 create schema schema1 authorization db2inst2

運動

同じ名前で2つの異なるスキーマを持つ2つの異なるテーブルを作成してみましょう。 ここでは、2つの異なるスキーマを持つ従業員テーブルを作成します。1つは個人用、もう1つは専門情報用です。

  • ステップ1 *:2つのスキーマを作成します。
  • スキーマ1 *:[professionalというスキーマを作成するには]
db2 create schema professional authorization db2inst2
  • スキーマ2 *:[パーソナルという名前のスキーマを作成するには]
db2 create schema personal authorization db2inst2
  • ステップ2 *:従業員の詳細に同じ名前の2つのテーブルを作成します
  • 表1 *:professional.employee

[スキーマ名「professional」を使用してデータベースに新しいテーブル「employee」を作成するには]

db2 create table professional.employee(id number, name
varchar(20), profession varchar(20), join_date date,
salary number);
  • 表2 *:personal.employee

[スキーマ名が「personal」の新しいデータベース「employee」を同じデータベースに作成するには]

db2 create table personal.employee(id number, name
varchar(20), d_birth date, phone bigint, address
varchar(200));

これらの手順を実行すると、2つの異なるスキーマを持つ、同じ名前「従業員」の2つのテーブルが取得されます。

DB2-データ型

この章では、DB2で使用されるさまざまなデータ型を紹介します。

前書き

DB2データベーステーブルでは、開発者の要件に応じて、各列に独自のデータ型があります。 データ型は、テーブルの列の値の型および範囲と呼ばれます。

組み込みデータ型

  • 日付時刻
  • 時間:時間、分、秒で時刻を表します。
  • TIMESTAMP :年、月、日、時間、分、秒、マイクロ秒の形式で、日付と時刻の7つの値を表します。
  • 日付:年、月、日の形式の3つの部分で日付を表します。
  • 文字列
  • キャラクター
  • * CHAR(固定長)*:文字列の固定長。
  • さまざまな長さ
  • VARCHAR :さまざまな長さの文字列。
  • CLOB :ラージオブジェクト文字列。文字列がVARCHARデータ型の制限を超える可能性がある場合に使用します。
  • グラフィック
  • グラフィック
  • 固定長:2バイト文字を含む固定長のグラフィック文字列
  • さまざまな長さ
  • VARGRAPHIC :ダブルバイ文字を含むさまざまな文字グラフィック文字列。
  • DBCLOB :ラージオブジェクトタイプ
  • バイナリ
  • BLOB (可変長):ラージオブジェクトのバイナリ文字列
  • ブール:0および1の形式。
  • 符号付き数値
  • 正確に
  • バイナリ整数
  • SMALLINT [16BIT] :これを使用すると、小さなint値を列に挿入できます
  • INTEGER [32BIT] :これを使用すると、大きなint値を列に挿入できます
  • BIGINT [64BIT] :これを使用すると、より大きなint値を列に挿入できます
  • * 10進数*
  • DECIMAL(パック)
  • DECFLOAT (10進浮動小数点):これを使用して、10進浮動小数点数を挿入できます
  • 近似
  • 浮動小数点
  • REAL (単精度):このデータ型を使用すると、単精度の浮動小数点数を挿入できます。
  • DOUBLE (倍精度):このデータ型を使用すると、倍精度の浮動小数点数を挿入できます。
  • 拡張マークアップ言語
  • XML :このデータ型の列にXMLデータを保存できます。

DB2-テーブル

テーブルは、データベースマネージャーによって維持される論理構造です。 表では、各垂直ブロックは列(Tuple)と呼ばれ、各水平ブロックは行(Entity)と呼ばれます。 列と行の形式で保存されたデータのコレクションは、テーブルと呼ばれます。 テーブルでは、各列のデータ型は異なります。 テーブルは、永続的なデータを保存するために使用されます。

テーブルの種類

  • 基本テーブル:永続データを保持します。 以下を含むさまざまな種類のベーステーブルがあります。
  • 通常のテーブル:汎用テーブル、インデックス付きの共通テーブルは汎用テーブルです。
  • 多次元クラスタリングテーブル(MDC):このタイプのテーブルは、複数のキーで物理的にクラスター化され、大規模なデータベース環境を維持するために使用されます。 これらのタイプのテーブルは、DB2 pureScaleではサポートされていません。
  • 挿入時間クラスタリングテーブル(ITC):MDCテーブルと同様に、行はテーブルに挿入される時間でクラスタリングされます。 パーティションテーブルにすることができます。 それらも、pureScale環境をサポートしていません。
  • * Range-Clustered tables Table(RCT)*:これらのタイプのテーブルは、データの高速で直接的なアクセスを提供します。 これらは順次クラスターとして実装されます。 テーブル内の各レコードにはレコードIDがあります。 これらのタイプのテーブルは、データがテーブル内の1つ以上の列で緊密にクラスター化されている場合に使用されます。 このタイプのテーブルは、DB2 pureScaleでもサポートされていません。
  • パーティションテーブル:これらのタイプのテーブルは、データ編成スキーマで使用され、テーブルデータは複数のストレージオブジェクトに分割されます。 データパーティションは、パーティションテーブルに追加、アタッチ、およびデタッチできます。 1つのテーブルスペースのテーブルから複数のデータパーティションを保存できます。
  • テンポラルテーブル:データベース内のテーブルの履歴は、以前に行われた変更の詳細などのテンポラルテーブルに格納されます。
  • 一時テーブル:さまざまなデータベース操作の一時作業には、一時テーブルを使用する必要があります。 一時テーブル(DGTT)はシステムカタログに表示されません。作成された一時テーブルではXML列を使用できません。
  • 実体化されたクエリテーブル:MQTを使用してクエリのパフォーマンスを向上させることができます。 これらのタイプのテーブルは、テーブル内のデータを決定するために使用されるクエリによって定義されます。

テーブルを作成する

次の構文はテーブルを作成します。

構文:[新しいテーブルを作成するには]

db2 create table <schema_name>.<table_name>
(column_name column_type....) in <tablespace_name>

:「employee」の詳細を「professional」のスキーマに格納するテーブルを作成します。 このテーブルには「id、name、jobrole、joindate、salary」フィールドがあり、このテーブルデータはテーブルスペース「ts1」に格納されます。

db2 create table professional.employee(id int, name
varchar(50),jobrole varchar(30),joindate date,
salary double) in ts1

出力:

DB20000I The SQL command completed successfully.

リストの詳細

テーブルの詳細をリストするには、次の構文を使用します。

構文:[スキーマで作成されたテーブルのリストを表示するには]

db2 select tabname, tabschema, tbspace from syscat.tables

:[現在のデータベースのテーブルのリストを表示するには]

db2 select tabname, tabschema, tbspace from syscat.tables

出力:

TABNAME      TABSCHEMA     TBSPACE
------------ ------------- --------
EMPLOYEE     PROFESSIONAL    TS1


 1 record(s) selected.

テーブル内の列のリスト

次の構文は、表の列をリストします。

構文:[テーブルの列とデータ型を表示するには]

db2 describe table <table_name>

:[テーブル「従業員」の列とデータ型を表示するには]

db2 describe table professional.employee
  • 出力: *
             Data type                   Column
Column name  schema    Data type name    Length    Scale Nulls
------ ----- --------- ----------------- --------- ----- ------
ID           SYSIBM    INTEGER             4         0     Yes
NAME         SYSIBM    VARCHAR             50        0     Yes
JOBROLE      SYSIBM    VARCHAR             30        0     Yes
JOINDATE     SYSIBM    DATE                4         0     Yes
SALARY       SYSIBM    DOUBLE              8         0     Yes

  5 record(s) selected.

非表示の列

テーブルの列全体を非表示にできます。 「select* from」クエリを呼び出すと、非表示の列は結果のテーブルに返されません。 テーブルにデータを挿入するとき、列リストのない「INSERT」ステートメントは、暗黙的に隠された列の値を期待しません。 これらのタイプの列は、マテリアライズ照会表で高度に参照されます。 これらのタイプの列は、一時テーブルの作成をサポートしていません。

非表示の列を持つテーブルを作成する

次の構文は、非表示の列を持つテーブルを作成します。

構文:[非表示の列を持つテーブルを作成するには]

db2 create table <tab_name> (col1 datatype,col2 datatype
implicitly hidden)

:[非表示の列「電話」を持つ「顧客」テーブルを作成するには]

db2 create table professional.customer(custid integer not
null, fullname varchar(100), phone char(10)
implicitly hidden)

テーブルへのデータ値の挿入

次の構文は、テーブルに値を挿入します。

構文:[値をテーブルに挿入するには]

db2 insert into <tab_name>(col1,col2,...)
 values(val1,val2,..)

:[「customer」テーブルに値を挿入するには]

db2 insert into professional.customer(custid, fullname, phone)
values(100,'ravi','9898989')


db2 insert into professional.customer(custid, fullname, phone)
values(101,'krathi','87996659')


db2 insert into professional.customer(custid, fullname, phone)
values(102,'gopal','768678687')

出力:

DB20000I  The SQL command completed successfully.

テーブルから値を取得する

次の構文は、テーブルから値を取得します。

構文:[値をテーブルから取得するには]

db2 select * from &lttab_name>

:[「顧客」テーブルから値を取得するには]

db2 select * from professional.customer

出力:

CUSTID      FULLNAME
----------- ------------------------
        100 ravi

        101 krathi

        102 gopal

  3 record(s) selected.

非表示の列を含むテーブルから値を取得する

次の構文は、選択した列から値を取得します。

構文:[選択した非表示列の値をテーブルから取得するには]

db2 select col1,col2,col3 from <tab_name>

:[選択した列の値をテーブルから取得するには]

db2 select custid,fullname,phone from professional.customer

出力:

CUSTID  FULLNAME    PHONE
------- ---------   ------------
100     ravi        9898989

101     krathi      87996659

102     gopal       768678687

  3 record(s) selected.

非表示列のデータを表示するには、「DESCRIBE」コマンドを実行する必要があります。

構文

db2 describe table <table_name> show detail

例:

db2 describe table professional.customer show detail

出力:

Column name     Data type schema     Data type name  Column
           column    Partitionkey  code
                                       Length   Scale    Nulls
number     sequence      page     Hidden      Default
--------------- -------------------- --------------- -------- ----
---- -------- ---------- ------------- -------- ----------- ------
---
CUSTID          SYSIBM               INTEGER         4        0
No       0          0         0        No
FULLNAME        SYSIBM               VARCHAR         100      0
Yes      1          0        1208     No

PHONE           SYSIBM               CHARACTER       10       0
Yes      2          0             1208     Implicitly

3 record(s) selected.

テーブル列のタイプを変更する

次のように、この「変更」コマンドを使用してテーブル構造を変更できます。

構文

db2 alter table <tab_name> alter column <col_name> set data type <data_type>

例: [従業員テーブルの列「id」のデータ型を「int」から「bigint」に変更するには]

db2 alter table professional.employee alter column id set data type bigint

出力:

DB20000I The SQL command completed successfully.

列名の変更

以下に示すように、列名を変更できます。

構文:[列名をテーブルの古い名前から新しい名前に変更するには]

db2 alter table <tab_name> rename column <old_name> to <new_name>

例: [「customers」テーブルの列名を「fullname」から「custname」に変更するには。]

db2 alter table professional.customer rename column fullname to custname

テーブルをドロップする

テーブルを削除するには、次のように「DROP」コマンドを使用する必要があります。

構文

db2 drop table <tab_name>

例: [顧客テーブルフォームデータベースを削除するには]

db2 drop table professional.customers

テーブルの階層全体(トリガーとリレーションを含む)を削除するには、「DROP TABLE HIERARCHY」コマンドを使用する必要があります。

構文

db2 drop table hierarchy <tab_name>

例: [テーブル「顧客」の階層全体を削除するには]

db2 drop table hierarchy professional.customers

DB2-エイリアス

この章では、エイリアスの作成と、データベースオブジェクトのエイリアスを使用したデータの取得について説明します。

前書き

エイリアスは、データベースオブジェクトの別名です。 データベースオブジェクトを参照するために使用できます。 言うことができます、それはデータベースオブジェクトのニックネームです。 エイリアスは、オブジェクトの名前を短くするためにオブジェクトに対して定義されます。これにより、クエリサイズが小さくなり、クエリの可読性が向上します。

データベースオブジェクトエイリアスの作成

以下に示すように、データベースオブジェクトのエイリアスを作成できます。

構文

db2 create alias <alias_name> for <table_name>

:テーブル「professional.customer」テーブルのエイリアス名の作成

db2 create alias pro_cust for professional.customer

「SELECT FROM PRO_CUST」または「SELECT FROM PROFESSIONAL.CUSTOMER」を渡すと、データベースサーバーは同じ結果を表示します。

構文:[スキーマ名を使用してテーブルから直接値を取得するには]

db2 select * from <schema_name>.<table_name>

:[テーブルcustomerから値を取得するには]

db2 select * from professional.customer

出力:

CUSTID  FULLNAME    PHONE
------- ---------   ------------
100     ravi        9898989
101     krathi      87996659
102     gopal       768678687

  3 record(s) selected.

テーブルのエイリアス名を使用して値を取得する

以下に示すように、エイリアス名を使用してデータベースから値を取得できます。

構文:[テーブルのエイリアス名を呼び出してテーブルから値を取得するには]

db2 select * from <alias_name>

:[エイリアス名を使用してテーブルcustomerから値を取得するには]

db2 select * from pro_cust

出力:

CUSTID  FULLNAME    PHONE
------- ---------   ------------
100     ravi        9898989
101     krathi      87996659
102     gopal       768678687

  3 record(s) selected.

DB2-制約

この章では、データベースのさまざまな制約について説明します。

前書き

データベースの整合性を強化するために、制約と呼ばれる一連のルールが定義されています。 制約は、列の値を許可または禁止します。

リアルタイムデータベースアクティビティでは、特定の制限付きでデータを追加する必要があります。 たとえば、販売データベースでは、sales-idまたはtransaction-idは一意である必要があります。 制約タイプは次のとおりです。

  • NOT NULL
  • ユニーク
  • 主キー
  • 外部キー
  • チェック
  • 情報提供

制約はテーブルにのみ関連付けられます。 特定のテーブルのみに適用されます。 それらは、テーブルの作成時に定義され、テーブルに適用されます。

各制約の説明:

NOT NULL

テーブル内の1つ以上の列からのNULL値を禁止するルールです。

構文:

db2 create table <table_name>(col_name col_type not null,..)

:[4つの列(id、itemname、qty、price)を含む販売テーブルを作成し、すべての列に「not null」制約を追加して、テーブルにnullセルが形成されないようにします。

db2 create table shopper.sales(id bigint not null, itemname
varchar(40) not null, qty int not null,price double not null)

テーブルへのNOT NULL値の挿入

以下に示すように、テーブルに値を挿入できます。

例: [ERRORoneous Query]

db2 insert into shopper.sales(id,itemname,qty)
values(1,'raagi',12)

出力: [正しいクエリ]

DB21034E  The command was processed as an SQL statement because
it was not a

valid Command Line Processor command.  During SQL processing
it returned:

SQL0407N  Assignment of a NULL value to a NOT NULL column
"TBSPACEID=5,

TABLEID=4, COLNO=3" is not allowed.  SQLSTATE=23502

例: [正しいクエリ]

db2 insert into shopper.sales(id,itemname,qty,price)
values(1,'raagi',12, 120.00)

db2 insert into shopper.sales(id,itemname,qty,price)
values(1,'raagi',12, 120.00)

出力:

DB20000I The SQL command completed successfully.

ユニークな制約

これらの制約を使用して、列の値を一意に設定できます。 このため、テーブルの作成時に一意の制約は「not null」制約で宣言されます。

構文:

db2 create table <tab_name>(<col> <col_type> not null unique, ...)

例:

db2 create table shopper.sales1(id bigint not null unique,
itemname varchar(40) not null, qty int not null,price
double not null)

テーブルへの値の挿入

  • 例:*一意のIDが1、2、3、4の4つの異なる行を挿入する場合
db2 insert into shopper.sales1(id, itemname, qty, price)
values(1, 'sweet', 100, 89)

db2 insert into shopper.sales1(id, itemname, qty, price)
values(2, 'choco', 50, 60)

db2 insert into shopper.sales1(id, itemname, qty, price)
values(3, 'butter', 30, 40)

db2 insert into shopper.sales1(id, itemname, qty, price)
values(4, 'milk', 1000, 12)

例:「id」値が3の新しい行を挿入するには

db2 insert into shopper.sales1(id, itemname, qty, price)
values(3, 'cheese', 60, 80)

出力:既存のID値を持つ新しい行を挿入しようとすると、次の結果が表示されます。

DB21034E  The command was processed as an SQL statement
because it was not a

valid Command Line Processor command.  During
SQL processing it returned:

SQL0803N  One or more values in the INSERT statement,
UPDATE statement, or foreign key update caused by a
DELETE statement are not valid because the primary key,
unique constraint or unique index identified by "1" constrains
table "SHOPPER.SALES1" from having duplicate values for the
index key. SQLSTATE=23505

主キー

一意の制約と同様に、「主キー」と「外部キー」の制約を使用して、複数のテーブル間の関係を宣言できます。

構文:

db2 create table <tab_name>( ,.., primary
key ())

:「sid」を主キーとして「salesboys」テーブルを作成するには

db2 create table shopper.salesboys(sid int not null, name
varchar(40) not null, salary double not null, constraint
pk_boy_id primary key (sid))

外部キー

外部キーは、別のテーブルの行の少なくとも1つの主キーと一致するために必要なテーブル内の列のセットです。 これは、参照制約または参照整合性制約です。 これは、1つ以上のテーブルの複数の列の値に関する論理規則です。 テーブル間の必要な関係を有効にします。

前に、「shopper.salesboys」という名前のテーブルを作成しました。 このテーブルでは、主キーは「sid」です。 ここで、「従業員」という名前の異なるスキーマと「salesboys」という名前のテーブルを持つ営業少年の個人情報を含む新しいテーブルを作成しています。 この場合、「sid」は外部キーです。

構文:

db2 create table <tab_name>(<col> <col_type>,constraint
<const_name> foreign key (<col_name>)
                  reference <ref_table> (<ref_col>)

:[外部キー列「sid」を持つ「salesboys」という名前のテーブルを作成するには]

db2 create table employee.salesboys(
            sid int,
            name varchar(30) not null,
            phone int not null,
            constraint fk_boy_id
            foreign key (sid)
            references shopper.salesboys (sid)
             on delete restrict
                       )

:[主キーテーブル「shopper.salesboys」への値の挿入]

db2 insert into shopper.salesboys values(100,'raju',20000.00),
(101,'kiran',15000.00),
(102,'radha',10000.00),
(103,'wali',20000.00),
(104,'rayan',15000.00)

:[値を外部キーテーブル「employee.salesboys」に挿入する[エラーなし]]

db2 insert into employee.salesboys values(100,'raju',98998976),
(101,'kiran',98911176),
(102,'radha',943245176),
(103,'wali',89857330),
(104,'rayan',89851130)

「shopper.salesboys」テーブルに保存されていない未知の番号を入力した場合、SQLエラーが表示されます。

:[エラー実行]

db2 insert into employee.salesboys values(105,'rayan',89851130)

出力:

DB21034E  The command was processed as an SQL statement because it
was not a valid Command Line Processor command.  During SQL
processing it returned: SQL0530N  The insert or update value of
the FOREIGN KEY "EMPLOYEE.SALESBOYS.FK_BOY_ID" is not equal to any
value of the parent key of the parent table.  SQLSTATE=23503

制約の確認

この制約を使用して、テーブルの特定の列に条件付き制限を追加する必要があります。

構文:

db2 create table
 (
  primary key (),
  constraint  check (condition or condition)
 )

:[制約値を持つemp1テーブルを作成するには]

db2 create table empl
 (id           smallint not null,
  name         varchar(9),
  dept         smallint check (dept between 10 and 100),
  job          char(5)  check (job in ('sales', 'mgr', 'clerk')),
  hiredate     date,
  salary       decimal(7,2),
  comm         decimal(7,2),
  primary key (id),
  constraint yearsal check (year(hiredate) > 1986 or salary > 40500)
 )

値を挿入する

以下に示すように、テーブルに値を挿入できます。

db2 insert into empl values (1,'lee', 15, 'mgr', '1985-01-01' ,
40000.00, 1000.00)

制約の削除

さまざまな制約を削除するための構文を見てみましょう。

UNIQUE制約の削除

構文:

db2 alter table <tab_name> drop unique <const_name>

主キーの削除

構文:

db2 alter table <tab_name> drop primary key

チェック制約の削除

構文:

db2 alter table <tab_name> drop check <check_const_name>

外部キーのドロップ

構文:

db2 alter table <tab_name> drop foreigh key <foreign_key_name>

DB2-インデックス

この章では、インデックスの概要、インデックスの種類、作成と削除について説明します。

前書き

インデックスは、テーブルの行、MDCまたはITCテーブルのブロック、1つ以上のキーの値によって論理的に順序付けられたXMLストレージオブジェクトのXMLデータを参照できるポインターのセットです。 クエリのデータアクセスを高速化し、データを効率的にクラスター化およびパーティション化するために、DB2テーブルの列に作成されます。 また、ビューでの操作のパフォーマンスを向上させることもできます。 一意のインデックスを持つテーブルは、一意のキーを持つ行を持つことができます。 テーブルの要件に応じて、さまざまなタイプのインデックスを使用できます。

インデックスの種類

  • ユニークおよび非ユニークインデックス
  • クラスター化インデックスと非クラスター化インデックス

インデックスを作成する

一意のインデックスを作成するには、次の構文を使用します。

構文:

db2 create unique index <index_name> on
<table_name>(<unique_column>) include (<column_names..>)

:「shopper.sales1」テーブルのインデックスを作成します。

db2 create unique index sales1_indx on
shopper.sales1(id) include (itemname)

インデックスの削除

インデックスを削除するには、次の構文を使用します。

構文:

db2 drop unique index <index_name> on
<table_name>(<unique_column>) include (<column_names..>)

例:

db2 drop index sales_index

DB2-トリガー

この章では、トリガー、そのタイプ、トリガーの作成と削除について説明します。

前書き

トリガーは、データベース内の指定されたテーブルに対するINSERT、UPDATE、またはDELETE操作に応答するために実行される一連のアクションです。 トリガーは一度にデータベースに保存されます。 データのガバナンスを処理します。 それらは、複数のアプリケーション間でアクセスおよび共有できます。 トリガーを使用する利点は、アプリケーションで変更を行う必要がある場合、トリガーで行われることです。トリガーにアクセスしている各アプリケーションを変更する代わりに。 トリガーは保守が簡単で、アプリケーション開発を高速化します。 トリガーは、SQLステートメント「CREATE TRIGGER」を使用して定義されます。

トリガーの種類

トリガーには2つのタイプがあります。

1. BEFOREトリガー

SQL操作の前に実行されます。

2. AFTERトリガー

これらは、SQL操作の後に実行されます。

BEFOREトリガーの作成

トリガーのシーケンスを作成する方法を見てみましょう。

構文:

db2 create sequence <seq_name>

:テーブルshopper.sales1のトリガーのシーケンスを作成する

db2 create sequence sales1_seq as int start with 1 increment by 1

構文:

db2 create trigger <trigger_name> no cascade before insert on
<table_name> referencing new as <table_object> for each row set
<table_object>.<col_name>=nextval for <sequence_name>

:主キー番号を自動的に挿入するためのshopper.sales1テーブルのトリガーの作成

db2 create trigger sales1_trigger no cascade before insert on
shopper.sales1 referencing new as obj for each row set
obj.id=nextval for sales1_seq

次に、値を挿入してみます。

db2 insert into shopper.sales1(itemname, qty, price)
values('bicks', 100, 24.00)

テーブルから値を取得する

テーブルから値を取得する方法を見てみましょう。

  • 構文: *
db2 select* from <tablename>

db2 select * from shopper.sales1

出力

  ID       ITEMNAME       QTY
-------  ------------   ----------
    3      bicks            100
    2      bread            100

  2 record(s) selected.

AFTERトリガーの作成

後トリガーを作成する方法を見てみましょう。

構文:

db2 create trigger <trigger_name> no cascade before insert on
<table_name> referencing new as <table_object> for each row set
 <table_object>.<col_name>=nextval for <sequence_name>

例: [値を挿入および取得するには]

db2 create trigger sales1_tri_after after insert on shopper.sales1
for each row mode db2sql begin atomic update shopper.sales1
set price=qty*price; end

出力:

//inseting values in shopper.sales1
db2 insert into shopper.sales1(itemname,qty,price)
values('chiken',100,124.00)
//output
ID    ITEMNAME       QTY         PRICE
----- -------------- ----------- -----------
    3 bicks          100         2400.00
    4 chiken         100         12400.00
    2 bread          100         2400.00

    3 record(s) selected.

トリガーのドロップ

データベーストリガーが削除される方法は次のとおりです。

構文:

db2 drop trigger <trigger_name>

例:

db2 drop trigger slaes1_trigger

DB2-シーケンス

この章では、シーケンスの概念、シーケンスの作成、シーケンスの表示、およびドロップについて紹介します。

前書き

シーケンスとは、一定の範囲内で昇順または降順で整数を生成して、主キーを生成し、テーブル内の他のキーを調整するソフトウェア関数です。 たとえば、employee_idやtransaction_idのように、整数を使用するためにシーケンスを使用します。 シーケンスは、SMALLINT、BIGINT、INTEGER、およびDECIMALデータ型をサポートできます。 シーケンスは、複数のアプリケーション間で共有できます。 シーケンスは、トランザクションに関係なく増分または減分されます。

シーケンスは、CREATE SEQUENCEステートメントによって作成されます。

シーケンスの種類

使用可能なシーケンスには2つのタイプがあります。

  • NEXTVAL :シーケンス番号の増分値を返します。
  • 前の値:最近生成された値を返します。

シーケンスのパラメーター

シーケンスには次のパラメーターが使用されます。

データ型:これは、返される増分値のデータ型です。 (SMALLINT、BIGINT、INTEGER、NUMBER、DOUBLE)

*START WITH* :シーケンスの開始基準値。
*MINVALUE* :開始するシーケンスの最小値。
*MAXVALUE* :シーケンスの最大値。
*INCREMENT BY* :シーケンスをインクリメントするステップ値。

シーケンスサイクリング:CYCLE句により、シーケンスが繰り返し生成されます。 シーケンス生成は、返された値を参照することで行われます。この値は、以前のシーケンス生成によってデータベースに保存されます。

シーケンスを作成する

次の構文を使用してシーケンスを作成できます。

構文:

db2 create sequence <seq_name>

:[「sales1_seq」という名前で値を1から増やして新しいシーケンスを作成するには]

db2 create sequence sales1_seq as int start
with 1 increment by 1

シーケンスを表示する

次の構文を使用してシーケンスを表示できます。

構文:

db2 value <previous/next> value for <seq_name>

:[シーケンス「sales1_seq」の以前の更新値のリストを表示するには]

db2 values previous value for sales1_seq

出力:

 1
-----------
  4
  1 record(s) selected.

シーケンスのドロップ

シーケンスを削除するには、「DROP SEQUENCE」コマンドを使用する必要があります。 これがあなたのやり方です。

構文:

db2 drop sequence <seq_name>>

:[データベースからシーケンス「sales1_seq」を削除するには]

db2 drop sequence sales1_seq

出力:

 DB20000I The SQL command completed successfully.

DB2-ビュー

この章では、ビューの紹介、ビューの作成、変更、ドロップについて説明します。

前書き

ビューは、テーブルに保存されているデータを表す別の方法です。 これは実際のテーブルではなく、永続的なストレージもありません。 ビューは、1つ以上のテーブルのデータを見る方法を提供します。 結果表の名前付き仕様です。

ビューを作成する

次の構文を使用してビューを作成できます。

構文:

db2 create view <view_name> (<col_name>,
<col_name1...) as select <cols>..
from <table_name>

:shopper.sales1テーブルのビューを作成する

db2 create view view_sales1(id, itemname, qty, price)
as select id, itemname, qty, price from
shopper.sales1

ビューを変更する

次の構文を使用してビューを変更できます。

構文:

db2 alter view <view_name> alter <col_name>
add scope <table_or_view_name>

:[新しいテーブル列を既存のビュー「view_sales1」に追加するには]

db2 alter view view_sales1 alter id add
scope shopper.sales1

ビューをドロップする

次の構文を使用してビューを削除できます。

構文:

db2 drop view <view_name>

例:

db2 drop view sales1_view

DB2-XMLを使用

この章では、DB2でのXMLの使用について説明します。

前書き

PureXML機能を使用すると、整形式のXMLドキュメントをデータベーステーブルの列に格納できます。 これらの列にはXMLデータベースがあります。 XML列にXMLデータを保存することにより、データはネイティブの階層形式で保持されます。 保管されたXMLデータは、DB2データベースサーバー機能によってアクセスおよび管理できます。 XMLデータをネイティブの階層形式で保存することにより、XMLの効率的な検索、取得、および更新が可能になります。 XMLデータの値を更新するには、XQuery、SQL、または両方の組み合わせを使用する必要があります。

XMLデータを保存するためのデータベースとテーブルの作成

次の構文を発行してデータベースを作成します。

構文:

db2 create database xmldb

デフォルトでは、データベースはUTF-8(UNICODE)コードセットを使用します。 データベースをアクティブにして接続します。

構文:

db2 activate db <db_name>
db2 connect to <db_name>

例:

db2 activate db xmldb
db2 connect to xmldb

整形式のXMLファイルを作成し、列のデータ型を「XML」としてテーブルを作成します。 XML構文を含むSQLクエリを二重引用符で囲む必要があります。

構文:

db2 “create table <schema>.<table>(col <datatype>,
col <xml datatype>)”

例:

db2 "create table shope.books(id bigint not null
primary key, book XML)"

XML値をテーブルに挿入します。整形式のXMLドキュメントは、SQLステートメント「INSERT」を使用してXML型の列に挿入されます。

構文:

db2 “insert into <table_name> values(value1, value2)”

例:

db2 "insert into shope.books values(1000, '<catalog>
<book>

<author> Gambardella Matthew</author>
<title>XML Developers Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating application
with XML</description>
</book>

</catalog>')"

テーブル内のXMLデータを更新する

次の構文を使用して、テーブルのXMLデータを更新できます。

構文:

db2 “update <table_name> set <column>=<value> where
<column>=<value>”

例:

db2 "update shope.books set book='<catalog>

<book>
<author> Gambardella, Matthew</author>
<title>XML Developers Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth XML</description>

</book>

</catalog>' where id=1000"

DB2-バックアップとリカバリー

この章では、データベースのバックアップおよび復元方法について説明します。

バックアップ

前書き

バックアップと復元の方法は、情報を安全に保つために設計されています。 バックアップおよび回復ユーティリティを使用するコマンドラインインターフェイス(CLI)またはグラフィカルユーザーインターフェイス(GUI)では、DB2 UDBのデータベースのデータをバックアップまたは復元できます。

ロギング

ログファイルはエラーログで構成され、アプリケーションエラーから回復するために使用されます。 ログには、データベースの変更の記録が保持されます。 以下に説明するように、ロギングには2つのタイプがあります。

循環ログ

これは、新しいトランザクションログファイルを割り当てる必要があるときに古いトランザクションログを上書きし、ログファイルのシーケンスを消去して再利用する方法です。 オフラインモードでは、完全なバックアップのみを取ることができます。 つまり、完全バックアップを取得するにはデータベースをオフラインにする必要があります。

アーカイブログ

このモードは、ロールフォワードリカバリと呼ばれるログファイルを使用したオンラインバックアップとデータベースリカバリをサポートします。 logretainまたはuserexitをONに設定することにより、バックアップのモードを循環からアーカイブに変更できます。 アーカイブロギングの場合、バックアップ設定データベースには、DB2プロセス用に書き込み可能なディレクトリが必要です。

バックアップ

*Backup* コマンドを使用すると、データベース全体のコピーを取得できます。 このバックアップコピーには、データベースシステムファイル、データファイル、ログファイル、制御情報などが含まれます。

バックアップは、オンラインだけでなくオフラインでも作業できます。

オフラインバックアップ

構文: [アクティブなアプリケーション/データベースを一覧表示するには]

db2 list application

出力:

Auth Id  Application    Appl.      Application Id
DB       # of
         Name           Handle
Name    Agents
-------- -------------- ---------- ---------------------
----------------------------------------- -------- -----
DB2INST1 db2bp          39
*LOCAL.db2inst1.140722043938
ONE      1

構文: [アプリを使用してアプリケーションを強制する。 処理済みID]

db2 "force application (39)"

出力:

DB20000I  The FORCE APPLICATION command completed
successfully.

DB21024I  This command is asynchronous and may not
be effective immediately.

構文: [データベース接続を終了するには]

db2 terminate

構文: [データベースを非アクティブ化するには]

db2 deactivate database one

構文: [バックアップファイルを取得するには]

db2 backup database <db_name> to <location>

例:

db2 backup database one to/home/db2inst1/

出力:

Backup successful. The timestamp for this backup image is :
20140722105345

オンラインバックアップ

開始するには、モードを*循環ログ*から*アーカイブログ*に変更する必要があります。

構文: [データベースが循環ログまたはアーカイブログを使用しているかどうかを確認するには]

db2 get db cfg for one | grep LOGARCH

出力:

First log archive method (LOGARCHMETH1) = OFF
 Archive compression for logarchmeth1  (LOGARCHCOMPR1) = OFF
 Options for logarchmeth1              (LOGARCHOPT1) =
 Second log archive method             (LOGARCHMETH2) = OFF
 Archive compression for logarchmeth2  (LOGARCHCOMPR2) = OFF
 Options for logarchmeth2              (LOGARCHOPT2) =

上記の出力では、強調表示された値はオフモードの[logarchmeth1およびlogarchmeth2]です。これは、現在のデータベースが「CIRCULLAR LOGGING」モードであることを意味します。 「アーカイブロギング」モードで作業する必要がある場合は、構成ファイルにある変数logarchmeth1およびlogarchmeth2のパスを変更または追加する必要があります。

必要なアーカイブディレクトリでlogarchmeth1を更新する

構文: [ディレクトリを作成するには]

mkdir backup
mkdir backup/ArchiveDest

構文: [フォルダのユーザー権限を提供するには]

chown db2inst1:db2iadm1 backup/ArchiveDest

構文: [構成LOGARCHMETH1を更新するには]

db2 update database configuration for one using LOGARCHMETH1
'DISK:/home/db2inst1/backup/ArchiveDest'

安全のためにオフラインバックアップを作成し、データベースをアクティブにして、接続できます。

構文: [オンラインバックアップを取る]

db2 backup database one online to
/home/db2inst1/onlinebackup/compress include logs

出力:

db2 backup database one online to
/home/db2inst1/onlinebackup/compress include logs

次のコマンドを使用してバックアップファイルを確認します。

構文:

db2ckbkp <location/backup file>

例:

db2ckbkp
/home/db2inst1/ONE.0.db2inst1.DBPART000.20140722112743.001

バックアップファイルの履歴を一覧表示する

構文:

db2 list history backup all for one

出力:

                    List History File for one

Number of matching file entries = 4

Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log
Backup ID
 -- --- ------------------ ---- --- ------------ ------------
 --------------
  B  D  20140722105345001   F    D  S0000000.LOG S0000000.LOG

 ------------------------------------------------------------
 ----------------

 Contains 4 tablespace(s):
 00001 SYSCATSPACE

 00002 USERSPACE1

 00003 SYSTOOLSPACE

 00004 TS1
  ------------------------------------------------------------
  ----------------
  Comment: DB2 BACKUP ONE OFFLINE

 Start Time: 20140722105345

   End Time: 20140722105347

     Status: A
 ------------------------------------------------------------
 ----------------
 EID: 3 Location:/home/db2inst1


 Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log
 Backup ID
 -- --- ------------------ ---- --- ------------ ------------
 --------------
  B  D  20140722112239000   N       S0000000.LOG S0000000.LOG
 ------------------------------------------------------------
 -------------------------------------------------------------
 -------------------------------

 Comment: DB2 BACKUP ONE ONLINE

 Start Time: 20140722112239

   End Time: 20140722112240

     Status: A
 ------------------------------------------------------------
 ----------------
  EID: 4 Location:
SQLCA Information

 sqlcaid : SQLCA     sqlcabc: 136   sqlcode: -2413   sqlerrml: 0

 sqlerrmc:
 sqlerrp : sqlubIni
 sqlerrd : (1) 0                (2) 0                (3) 0

           (4) 0                (5) 0                (6) 0

 sqlwarn : (1)      (2)      (3)      (4)        (5)       (6)

           (7)      (8)      (9)      (10)       (11)
 sqlstate:

 Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log
 Backup ID
  -- --- ------------------ ---- --- ------------ ------------
  --------------
   B  D  20140722112743001   F    D  S0000000.LOG S0000000.LOG

 ------------------------------------------------------------
 ----------------
 Contains 4 tablespace(s):

 00001 SYSCATSPACE

 00002 USERSPACE1

 00003 SYSTOOLSPACE

 00004 TS1
  -------------------------------------------------------------
  ----------------
  Comment: DB2 BACKUP ONE OFFLINE

 Start Time: 20140722112743

   End Time: 20140722112743

     Status: A
 -------------------------------------------------------------
  ----------------
 EID: 5 Location:/home/db2inst1

 Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log
 Backup ID
  -------------------------------------------------------------
  ----------------

R  D  20140722114519001   F
20140722112743

 ------------------------------------------------------------
 ----------------
 Contains 4 tablespace(s):

 00001 SYSCATSPACE

  00002 USERSPACE1

 00003 SYSTOOLSPACE

 00004 TS1
 ------------------------------------------------------------
 ----------------
Comment: RESTORE ONE WITH RF

 Start Time: 20140722114519

   End Time: 20140722115015
     Status: A

 ------------------------------------------------------------
 ----------------
  EID: 6 Location:

バックアップからデータベースを復元する

バックアップファイルからデータベースを復元するには、指定された構文に従う必要があります。

構文:

db2 restore database <db_name> from <location>
taken at <timestamp>

例:

db2 restore database one from/home/db2inst1/taken at
20140722112743

出力:

SQL2523W  Warning!  Restoring to an existing database that is
different from

the database on the backup image, but have matching names.
The target database

will be overwritten by the backup version.  The Roll-forward
recovery logs

associated with the target database will be deleted.

Do you want to continue ? (y/n) y

DB20000I  The RESTORE DATABASE command completed successfully.

ログドライブに障害が発生する直前の最新の変更を含む、ログディレクトリにあるすべてのログをロールフォワードします。

構文:

db2 rollforward db <db_name> to end of logs and stop

例:

db2 rollforward db one to end of logs and stop

出力:

                                 Rollforward Status
 Input database alias                   = one
 Number of members have returned status = 1
 Member ID                              = 0
 Rollforward status                     = not pending
 Next log file to be read               =
 Log files processed                    = S0000000.LOG -
 S0000001.LOG
 Last committed transaction            = 2014-07-22-
 06.00.33.000000 UTC
DB20000I  The ROLLFORWARD command completed successfully.

DB2-データベースセキュリティ

この章では、データベースのセキュリティについて説明します。

前書き

DB2データベースと機能は、セキュリティ制御の2つの異なるモードで管理できます。

  1. 認証
  2. 承認

認証

認証とは、ユーザーが実行を許可されているアクティビティを実行する権限に従ってのみログインすることを確認するプロセスです。 ユーザー認証は、オペレーティングシステムレベルまたはデータベースレベル自体で実行できます。 網膜や図柄などの生体認証用の認証ツールを使用することにより、ハッカーや悪意のあるユーザーからデータベースを保護します。

データベースセキュリティは、db2データベースシステムの外部から管理できます。 セキュリティ認証プロセスのタイプは次のとおりです。

  • オペレーティングシステム認証に基づきます。
  • ライトウェイトディレクトリアクセスプロトコル(LDAP)

DB2の場合、セキュリティサービスは別個の製品としてオペレーティングシステムの一部です。 認証の場合、ユーザーIDまたはユーザー名、およびパスワードの2つの異なる資格情報が必要です。

承認

DB2データベースマネージャーによって管理されているDB2データベースシステム内のDB2データベースとその機能にアクセスできます。 許可は、DB2データベースマネージャーによって管理されるプロセスです。 マネージャは、現在認証されているユーザーに関する情報を取得します。これは、ユーザーが実行またはアクセスできるデータベース操作を示します。

許可に使用できる許可のさまざまな方法を次に示します。

プライマリ許可:認証IDを直接付与します。

二次許可:ユーザーがメンバーである場合、グループとロールに付与します

パブリック許可:すべてのユーザーにパブリックに許可します。

コンテキスト依存許可:信頼できるコンテキストロールに付与します。

以下のカテゴリーに基づいて、ユーザーに許可を与えることができます。

  • システムレベルの認証
  • システム管理者[SYSADM]
  • システム制御[SYSCTRL]
  • システムメンテナンス[SYSMAINT]
  • システムモニター[SYSMON]

権限は、インスタンスレベルの機能を制御します。 権限は、グループの特権を提供し、メンテナンスと権限の操作を制御します。 たとえば、データベースとデータベースオブジェクト。

  • データベースレベルの承認
  • セキュリティ管理者[SECADM]
  • データベース管理者[DBADM]
  • アクセス制御[ACCESSCTRL]
  • データアクセス[DATAACCESS]
  • SQL管理者。 [SQLADM]
  • ワークロード管理管理者[WLMADM]
  • 説明する[EXPLAIN]

当局は、データベース内でコントロールを提供します。 データベースの他の権限には、LDADおよびCONNECTが含まれます。

  • オブジェクトレベルの承認:オブジェクトレベルの承認では、オブジェクトに対して操作が実行されたときに特権を確認します。
  • コンテンツベースの認証:ユーザーは、ラベルベースのアクセス制御[LBAC]を使用して、特定のテーブルの個々の行および列に読み取りおよび書き込みアクセスできます。

DB2テーブルと構成ファイルは、許可名に関連付けられた許可を記録するために使用されます。 ユーザーがデータにアクセスしようとすると、記録された権限により次の権限が検証されます。

  • ユーザーの許可名
  • ユーザーに属するグループ
  • ユーザーに直接付与されるロールまたはグループに間接的に付与されるロール
  • 信頼されたコンテキストを通じて取得されたアクセス許可。

SQLステートメントの操作中、DB2許可モデルは以下の許可の組み合わせを考慮します。

  • SQLステートメントに関連付けられた1次許可IDに付与された許可。
  • SQLステートメントに関連付けられた2次許可ID。
  • PUBLICに付与
  • トラステッドコンテキストロールに付与されます。

インスタンスレベルの権限

インスタンス関連の権限について説明します。

システム管理権限(SYSADM)

インスタンスレベルでの最高レベルの管理権限です。 SYSADM権限を持つユーザーは、インスタンス内でいくつかのデータベースおよびデータベースマネージャーコマンドを実行できます。 SYSADM権限を持つユーザーは、次の操作を実行できます。

  • データベースをアップグレードする
  • データベースを復元する
  • データベースマネージャーの構成ファイルを更新します。

システム制御権限(SYSCTRL)

これは、システム制御権限の最高レベルです。 データベースマネージャインスタンスおよびそのデータベースに対してメンテナンスおよびユーティリティ操作を実行するために提供されます。 これらの操作はシステムリソースに影響を与える可能性がありますが、データベース内のデータに直接アクセスすることはできません。

SYSCTRL権限を持つユーザーは、次のアクションを実行できます。

  • データベース、ノード、または分散接続サービス(DCS)ディレクトリの更新
  • ユーザーをシステムレベルから強制的に外す
  • データベースレベルの作成または削除
  • 表スペースの作成、変更、またはドロップ
  • 任意の表スペースを使用する
  • データベースの復元

システム保守権限(SYSMAINT)

これは、システム制御権限の第2レベルです。 データベースマネージャインスタンスおよびそのデータベースに対してメンテナンスおよびユーティリティ操作を実行するために提供されます。 これらの操作は、データベース内のデータへの直接アクセスを許可せずにシステムリソースに影響します。 この権限は、ユーザーが機密データを含むデータベースマネージャーインスタンス内でデータベースを維持するために設計されています。

SYSMAINT以上のレベルのシステム権限を持つユーザーのみが、次のタスクを実行できます。

  • バックアップを取る
  • バックアップの復元
  • ロールフォワードリカバリ
  • インスタンスの開始または停止
  • 表領域の復元
  • db2trcコマンドの実行
  • インスタンスレベルのユーザーまたはデータベースレベルのユーザーの場合、システムモニターのスナップショットを取得します。

SYSMAINTを持つユーザーは、次のタスクを実行できます。

  • テーブルスペースの状態を問い合わせる
  • ログ履歴ファイルの更新
  • テーブルの再編成
  • RUNSTATS(コレクションカタログ統計)の使用

システム監視権限(SYSMON)

この権限を使用すると、ユーザーはデータベースマネージャーインスタンスまたはそのデータベースのスナップショットを監視または取得できます。 SYSMON権限により、ユーザーは次のタスクを実行できます。

  • データベースマネージャーモニタースイッチを取得する
  • モニタースイッチを入手する
  • スナップショットを取得する
  • LIST
  • アクティブなデータベースのリスト
  • リストアプリケーション
  • データベースパーティショングループのリスト
  • DCSアプリケーションのリスト
  • リストパッケージ
  • リスト表
  • リストテーブルコンテナ
  • リスト表領域
  • リストの利益
  • モニターのリセット
  • モニタースイッチの更新

データベース権限

各データベース機関は、データベースで何らかのアクションを実行するための許可IDを保持しています。 これらのデータベース権限は、特権とは異なります。 以下は、いくつかのデータベース機関のリストです。

*ACCESSCTRL* :すべてのオブジェクト特権とデータベース権限を付与および取り消すことができます。
*BINDADD* :データベースに新しいパッケージを作成できます。
*CONNECT* :データベースへの接続を許可します。
*CREATETAB* :データベースに新しいテーブルを作成できます。
*CREATE_EXTERNAL_ROUTINE* :アプリケーションおよびデータベースのユーザーが使用するプロシージャを作成できます。
*DATAACCESS* :データベーステーブルに保存されているデータにアクセスできます。
*DBADM* :データベース管理者として機能します。 ACCESSCTRL、DATAACCESS、およびSECADMを除く他のすべてのデータベース権限を付与します。
*EXPLAIN* :テーブル内のデータにアクセスする特権を保持することなく、クエリプランを説明できます。
*IMPLICIT_SCHEMA* :ユーザーは、CREATEステートメントを使用してオブジェクトを作成することにより、暗黙的にスキーマを作成できます。
*LOAD* :データをテーブルにロードできます。
*QUIESCE_CONNECT* :静止中のデータベースへのアクセスを許可します(一時的に無効)。
*SECADM* :データベースのセキュリティ管理者として機能できます。
*SQLADM* :SQLステートメントを監視および調整できます。
*WLMADM* :ワークロード管理者として機能することができます

特権

SETSESSIONUSER

許可ID特権には、許可IDに対するアクションが含まれます。 SETSESSIONUSER特権と呼ばれる特権は1つだけです。 これは、ユーザーまたはグループに付与でき、セッションユーザーがIDを特権が付与された任意の許可IDに切り替えることができます。 この特権は、ユーザーSECADM権限によって付与されます。

スキーマ特権

この権限には、データベース内のスキーマに対するアクションが含まれます。 スキーマの所有者には、テーブル、ビュー、インデックス、パッケージ、データ型、関数、トリガー、プロシージャ、エイリアスなどのスキーマオブジェクトを操作するためのすべての権限があります。 ユーザー、グループ、ロール、またはPUBLICには、次の特権を持つ任意のユーザーを付与できます。

  • CREATEIN :スキーマ内にオブジェクトを作成できます
  • ALTERIN :スキーマ内のオブジェクトを変更できます。

ドロピン

これにより、スキーマ内のオブジェクトを削除できます。

表領域の権限

これらの権限には、データベース内の表領域に対するアクションが含まれます。 ユーザーには、表領域のUSE特権を付与できます。 その後、特権により、テーブルスペース内にテーブルを作成できます。 特権所有者は、表領域の作成時に、表領域に対してWITH GRANT OPTIONコマンドを使用してUSE特権を付与できます。 また、SECADMまたはACCESSCTRL権限には、表スペースに対する特権を使用する権限があります。

テーブルとビューの特権

ユーザーは、テーブルおよびビューの特権を使用できるようにするには、データベースに対するCONNECT権限が必要です。 テーブルとビューの特権は次のとおりです。

コントロール

これは、ドロップおよび付与を含む、テーブルまたはビューのすべての特権を提供し、個々のテーブル特権をユーザーに取り消します。

ALTER

ユーザーはテーブルを変更できます。

DELETE

ユーザーは、テーブルまたはビューから行を削除できます。

インデックス

ユーザーは表またはビューに行を挿入できます。 インポートユーティリティも実行できます。

参考文献

これにより、ユーザーは外部キーを作成および削除できます。

SELECT

ユーザーは、テーブルまたはビューから行を取得できます。

更新

ユーザーは、テーブル、ビューのエントリを変更できます。

パッケージ特権

ユーザーには、データベースに対するCONNECT権限が必要です。 パッケージは、特定のアプリケーションにとって最も効率的な方法でデータにアクセスするためのデータベースマネージャーの情報を含むデータベースオブジェクトです。

コントロール

ユーザーにパッケージの再バインド、ドロップ、実行の権限を提供します。 この特権を持つユーザーには、BINDおよびEXECUTE特権が付与されます。

BIND

ユーザーはそのパッケージをバインドまたは再バインドできます。

実行

パッケージを実行できます。

インデックス特権

この特権は、インデックスに対するCONTROL特権を自動的に受け取ります。

シーケンス特権

シーケンスは、シーケンスに対するUSAGEおよびALTER特権を自動的に受け取ります。

日常的な特権

データベース内の関数、プロシージャ、メソッドなどのルーチンのアクションが含まれます。

DB2-ロール

前書き

ロールは、GRANTステートメントを使用してユーザー、グループ、PUBLICまたはその他のロールに割り当てることができる複数の特権をグループ化するデータベースオブジェクトです。

役割の制限

  • ロールはデータベースオブジェクトを所有できません。
  • 次のデータベースオブジェクトを作成する場合、グループに付与された権限とロールは考慮されません。
  • 静的SQLを含むパッケージ
  • ビュー
  • マテリアライズ照会表(MQT)
  • トリガー
  • SQLルーチン

ロールのメンバーシップの作成と付与

構文: [新しいロールを作成するには]

db2 create role <role_name>

:[「sales」という名前の新しいロールを作成して、ユーザーまたはグループが管理するテーブルを追加するには]

db2 create role sales

出力:

DB20000I The SQL command completed successfully.

DBADMから特定のテーブルへのロールの付与

構文: [ロールの許可をテーブルに付与するには]

db2 grant select on table <table_name> to role <role_name>

:[テーブル「shope.books」を管理する権限をロール「sales」に追加するには]

db2 grant select on table shope.books to role sales

出力:

DB20000I  The SQL command completed successfully.

セキュリティ管理者は、必要なユーザーに役割を付与します。 (このコマンドを使用する前に、ユーザーを作成する必要があります。)

構文: [ユーザーをロールに追加するには]

db2 grant role <role_name> to user <username>

:[ユーザー「mastanvali」をロール「sales」に追加するには]

db2 grant sales to user mastanvali

出力:

DB20000I  The SQL command completed successfully.

ロール階層

ロールの階層を作成するには、各ロールに別のロールの許可/メンバーシップを付与します。

構文: [この構文の前に、 "production"という名前の新しいロールを作成します]

db2 grant role <roll_name> to role <role_name>

:[ロール「販売」の許可を別のロール「生産」に許可する]

db2 grant sales to role production

DB2-LDAP

前書き

LDAPはライトウェイトディレクトリアクセスプロトコルです。 LDAPは、クライアント/サーバーモデルに基づいており、TCP/IPスタックの上のレイヤーで実行される業界標準のプロトコルであるグローバルディレクトリサービスです。 LDAPは、インターネットディレクトリに接続、アクセス、変更、および検索する機能を提供します。

LDAPサーバーには、ディレクトリツリーの形式で編成された情報が含まれています。 クライアントはサーバーに情報を提供するか、特定の情報に対して何らかの操作を実行するように要求します。 サーバーは、必要な情報があればそれを提供することによってクライアントに応答します。または、必要な情報に対するアクションのためにクライアントを別のサーバーに参照します。 その後、クライアントは別のサーバーから必要な情報を取得します。

ディレクトリのツリー構造は、参加するすべてのサーバーで同じに維持されます。 これは、LDAPディレクトリサービスの顕著な機能です。 したがって、クライアントがどのサーバーを参照するかに関係なく、クライアントは常にエラーのない方法で必要な情報を取得します。 ここでは、LDAPを使用して、オペレーティングシステム認証の代わりとしてIBM DB2を認証します。

LDAPには2つのタイプがあります。

  1. トランスペアレント
  2. プラグイン

透過LDAPの構成方法を見てみましょう。

透過的LDAPの構成

透過的なLDAPの構成を開始するには、LDAPサーバーを構成する必要があります。

LDAPサーバーの構成

LDAP内のユーザーおよびグループオブジェクトに関するすべての情報を含むSLAPD.confファイルを作成します。 LDAPサーバーをインストールすると、デフォルトでマシン上の基本的なLDAPディレクトリツリーが設定されます。

以下の表は、変更後のファイル構成を示しています。

コードボックスが黄色で強調表示されているテキストは、次のことを意味します。

DBA user-id =“ db2my1”、group =“ db1my1adm”、password =“ db2my1” Admin user-id =“ my1adm”、group =“ dbmy1ctl”。

# base dn: example.com
dn: dc=example,dc=com
dc: example
o: example
objectClass: organization
objectClass: dcObject
# pc box db
dn: dc=db697,dc=example,dc=com
dc: db697
o: db697
objectClass: organization
objectClass: dcObject
#
# Group: dbadm
#
dn: cn=dbmy1adm,dc=db697,dc=example,dc=com
cn: dbmy1adm
objectClass: top
objectClass: posixGroup
gidNumber: 400
objectClass: groupOfNames
member: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com
memberUid: db2my1
#
# User: db2
#
dn: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com
cn: db2my1
sn: db2my1
uid: db2my1
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
uidNumber: 400
gidNumber: 400
loginShell:/bin/csh
homeDirectory:/db2/db2my1
#
# Group: dbctl
#
dn: cn=dbmy1ctl,dc=db697,dc=example,dc=com
cn: dbmy1ctl
objectClass: top
objectClass: posixGroup
gidNumber: 404
objectClass: groupOfNames
member: uid=my1adm,cn=dbmy1adm,dc=db697,dc=example,dc=com
memberUid: my1adm
#
# User: adm
#
dn: uid=my1adm,cn=dbmy1ctl,dc=db697,dc=example,dc=com
cn: my1adm
sn: my1adm
uid: my1adm
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
uidNumber: 404
gidNumber: 404
loginShell:/bin/csh
homeDirectory:/home/my1adm

上記のファイルを「/var/lib/slapd.conf」という名前で保存し、コマンドに従ってこれらの値を実行して、これらの値をLDAPサーバーに追加します。 これはLinuxコマンドです。 db2コマンドではありません。

ldapadd r- -D ‘cn=Manager,dc=example,dc=com” –W –f
/var/lib/slapd.conf

LDAPサーバーでDB2ユーザーとDB2グループを登録した後、インスタンスとデータベースをインストールした特定のユーザーにログオンします。 サーバーが配置されているクライアントがリモートであろうとローカルであろうと、クライアントに確認するようにLDAPクライアントを構成する必要があります。

LDAPクライアントの構成

LDAPクライアントの構成は、ファイル「ldap.conf」に保存されます。 構成パラメーターに使用できるファイルは2つあり、1つは一般的で、もう1つは特定です。 最初のものは「/etc/ldap.conf」にあり、後者は「/etc/openldap/ldap.conf」にあります。

以下のデータは、一般的なLDAPクライアント構成ファイルで利用可能です

# File:/etc/ldap.conf
# The file contains lots of more entries and many of them
# are comments. You show only the interesting values for now
host localhost
base dc=example,dc=com
ldap_version 3
pam_password crypt
pam_filter objectclass=posixAccount
nss_map_attribute uniqueMember member
nss_base_passwd dc=example,dc=com
nss_base_shadow dc=example,dc=com
nss_base_group dc=example,dc=com

DB2構成に応じて、サーバーおよびドメイン情報の場所を変更する必要があります。 同じシステムでサーバーを使用している場合は、「host」で「localhost」と記述し、「base」でLDAPサーバーの「SLAPD.conf」ファイルに記述されている構成を構成できます。

Pluggable Authentication Model(PAM)は、認証サービス用のAPIです。 これは、暗号化されたパスワードとposixAccount型の特別なLDAPオブジェクトを使用したLDAP認証の一般的なインターフェイスです。 このタイプのすべてのLDAPオブジェクトは、ポータブルオペレーティングシステムインターフェイス(POSIX)属性を持つアカウントの抽象化を表します。

Network Security Services(NSS)は、セキュリティ対応のクライアントおよびサーバーアプリケーションのクロスプラットフォーム開発をサポートするライブラリのセットです。 これには、SSL、TLS、PKCS S/MIME、その他のセキュリティ標準などのライブラリが含まれます。

このインターフェイスのベースDNと2つの追加のマッピング属性を指定する必要があります。 OpenLDAPクライアント構成ファイルには、以下のエントリが含まれます。

host localhost
base dc=example,dc=com

これまでは、LDAPサーバーのホストとベースDNを定義するだけです。

OpenLDAP環境の検証

LDAPサーバーとLDAPクライアントを構成したら、両方の通信を確認します。

  • ステップ1 *:ローカルLDAPサーバーが実行されていることを確認します。 以下のコマンドを使用:
ps -ef | grep -i ldap

このコマンドは、LDAPサーバーを表すLDAPデーモンをリストする必要があります。

/usr/lib/openldap/slapd -h ldap:///-u ldap -g ldap -o slp=on

これは、LDAPサーバーが実行中であり、クライアントからの要求を待っていることを示しています。 前のコマンドにそのようなプロセスがない場合は、「rcldap」コマンドでLDAPサーバーを起動できます。

rcldap start

サーバーが起動したら、次のコマンドを発行して、ファイル「/var/log/messages/」でこれを監視できます。

tail –f/var/log/messages

ldapsearchを使用したLDAPサーバーへの接続のテスト

ldapsearchコマンドは、LDAPサーバーへの接続を開き、バインドし、特別なパラメーター「-x」を使用して指定できる検索クエリを実行します。 Simple Authentication and Security Layer(SASL)のようなより複雑なメカニズム

ldapsearch –x

LDAPサーバーは、LDAPデータ交換形式(LDIF)のすべてのLDAPエントリを含む以下の応答で応答する必要があります。

# extended LDIF
#
# LDAPv3
# base <> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
# example.com
dn: dc=example,
dc=com  dc: example
o: example
objectClass: organization
objectClass: dcObject
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1

DB2の構成

LDAPサーバーとクライアントを使用した後、LDAPで使用するためにDB2データベースを構成する必要があります。 DB2ユーザー認証プロセスにLDAP環境を使用するようにデータベースをインストールおよび構成する方法について説明します。

DB2およびLDAP対話プラグインの構成

IBMは、DB2用のLDAPプラグインを含む無料パッケージを提供しています。 DB2パッケージには、次のそれぞれに対応する3つのDB2セキュリティプラグインが含まれています。

  • サーバー側認証
  • クライアント側認証
  • グループ検索

要件に応じて、3つのプラグインのいずれかまたはすべてを使用できます。 このプラグインは、一部のユーザーがLDAPで定義され、他のユーザーがオペレーティングシステムで定義されている環境をサポートしていません。 LDAPプラグインを使用することにした場合、LDAPサーバーのデータベースに関連付けられているすべてのユーザーを定義する必要があります。 同じ原則がグループプラグインに適用されます。

システムに必須のプラグインを決定する必要があります。 CONNECTまたはATTACHステートメントで指定されたユーザーIDとパスワード検証がクライアントシステムで発生するシナリオで使用されるクライアント認証プラグイン。 そのため、データベースマネージャーの構成パラメーターSRVCON_AUTHまたはAUTHENTICATIONを値CLIENTに設定する必要があります。 クライアント認証は保護するのが難しく、一般的に推奨されません。 クライアントがCONNECTまたはATTACHステートメントを実行し、これが安全な方法である場合、ユーザーIDとパスワードのサーバー側の検証を実行するため、サーバープラグインが一般的に推奨されます。 サーバープラグインは、LDAPユーザーIDとDB2認証IDをマップする方法も提供します。

これで、DB2セキュリティプラグインのインストールと構成を開始できるようになりました。DB2に必要なディレクトリ情報ツリーについて考える必要があります。 DB2は間接認証を使用します。これは、ユーザーがグループに属し、このグループがより少ない権限で付与されたことを意味します。 LDAPディレクトリですべてのDB2ユーザーとDB2グループを定義する必要があります。

画像

LDIFファイルopenldap.ldifには、次のコードが含まれている必要があります。

#
# LDAP root object
# example.com
#
dn: dc=example,
dc=com
dc: example
o: example
objectClass: organization
objectClass: dcObject
 #
 # db2 groups
 #
 dn: cn=dasadm1,dc=example,dc=com
 cn: dasadm1
 objectClass: top
 objectClass: posixGroup
 gidNumber: 300
 objectClass: groupOfNames
 member: uid=dasusr1,cn=dasadm1,dc=example,dc=com
 memberUid: dasusr1
 dn: cn=db2grp1,dc=example,dc=com
 cn: db2grp1
 objectClass: top
 objectClass: posixGroup
 gidNumber: 301
 objectClass: groupOfNames
 member: uid=db2inst2,cn=db2grp1,dc=example,dc=com  memberUid: db2inst2
 dn: cn=db2fgrp1,dc=example,dc=com
 cn: db2fgrp1
 objectClass: top
 objectClass: posixGroup
 gidNumber: 302
 objectClass: groupOfNames
 member: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com
 memberUid: db2fenc1
 #
 # db2 users
 #
 dn: uid=dasusr1,
 cn=dasadm1,
 dc=example,dc=com
 cn: dasusr1
 sn: dasusr1
 uid: dasusr1
 objectClass: top
 objectClass: inetOrgPerson
 objectClass: posixAccount
 uidNumber: 300
 gidNumber: 300
 loginShell:/bin/bash
 homeDirectory:/home/dasusr1
 dn: uid=db2inst2,cn=db2grp1,dc=example,dc=com
 cn: db2inst2
 sn: db2inst2
 uid: db2inst2
 objectClass: top
 objectClass: inetOrgPerson
 objectClass: posixAccount
 uidNumber: 301
 gidNumber: 301
 loginShell:/bin/bash
 homeDirectory:/home/db2inst2
 dn: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com
 cn: db2fenc1
 sn: db2fenc1
 uid: db2fenc1
 objectClass: top
 objectClass: inetOrgPerson
 objectClass: posixAccount
 uidNumber: 303
 gidNumber: 303
 loginShell:/bin/bash
 homeDirectory:/home/db2fenc1

「db2.ldif」という名前のファイルを作成し、上記の例を貼り付けます。 このファイルを使用して、定義済みの構造をLDAPディレクトリに追加します。

DB2ユーザーとDB2グループをLDAPディレクトリに追加するには、ユーザーを「rootdn」としてLDAPサーバーにバインドして、正確な権限を取得する必要があります。

次の構文を実行して、LDAP情報ディレクトリに、LDIFファイル「db2.ldif」で定義されているすべてのオブジェクトを入力します。

ldapadd –x –D “cn=Manager, dc=example,dc=com” –W –f <path>/db2.ldif

より多くのパラメーターで検索結果を実行する

ldapsearch –x |more

DB2を使用するためのファイルシステムの準備

LDAPユーザーdb2inst2のインスタンスを作成します。 このユーザーには、ホームディレクトリ内に2つの空のファイルがあるホームディレクトリが必要です。 新しいインスタンスを作成する前に、インスタンスの所有者になるユーザーを作成する必要があります。

インスタンスユーザーを作成したら、ユーザーのホームディレクトリに「.profile」と「.login」というファイルを作成する必要があります。これらはDB2によって変更されます。 このファイルをディレクトリに作成するには、次のコマンドを実行します。

mkdir/home/db2inst2
mkdir/home/db2inst2/.login
mkdir/home/db2inst2/.profile

LDAPディレクトリーにDB2に関連するすべてのユーザーとグループを登録しました。これで、インスタンス所有者ID「db2inst2」で「db2inst2」という名前のインスタンスを作成し、実行ユーザーに必要なfencedユーザーID「db2fenc1」を使用できます定義済み関数(UDF)またはストアドプロシージャ。

/opt/ibm/db2/V10.1/instance/db2icrt –u db2fenc1 db2inst2
DBI1070I Program db2icrt completed successfully.

次に、インスタンスのホームディレクトリを確認します。 「sqllib」という新しいサブディレクトリと、DB2の使用に合わせてカスタマイズされた.profileおよび.loginファイルを確認できます。

DB2でのLDAPサポート用の認証パブリックインの構成

必要なLDAPプラグインを適切なDB2ディレクトリにコピーします。

cp           ///v10/IBMLDAPauthserver.so
/home/db2inst2/sqllib/security/plugin/server/.

cp           ///v10/IBMLDAPgroups.so
/home/db2inst2/sqllib/security/plugin/group/.

プラグインが指定されたディレクトリにコピーされたら、DB2インスタンスの所有者にログインし、これらのプラグインを使用するようにデータベースマネージャーの構成を変更するように調整します。

Su – db2inst2
db2inst2> db2 update dbm cfg using svrcon_pw_plugin
IBMLDAPauthserver
db2inst2> db2 update dbm cfg using group_plugin
IBMLDAPgroups
db2inst2> db2 update dbm cfg using authentication
SERVER_ENCRYPT
db2inst2> db2stop
db2inst2> db2start

この変更は、DB2インスタンスを起動した後に有効になります。 インスタンスを再起動した後、「IBMLDAPSecurity.ini」という名前のメインDB2 LDAP構成ファイルをインストールして構成し、DB2プラグインが現在のLDAP構成で動作するようにする必要があります。

IBMLDAPSecurity.iniファイルに含まれるもの

;-----------------------------------------------------------
; SERVER RELATED VALUES
;-----------------------------------------------------------
; Name of your LDAP server(s).
; This is a space separated list of LDAP server addresses,
; with an optional port number for each one:
; host1[:port] [host2:[port2] ... ]
; The default port number is 389, or 636 if SSL is enabled.
LDAP_HOST = my.ldap.server
;-----------------------------------------------------------
; USER RELATED VALUES
;-----------------------------------------------------------
rs
; LDAP object class used for use USER_OBJECTCLASS = posixAccount
; LDAP user attribute that represents the "userid"
; This attribute is combined with the USER_OBJECTCLASS and
; USER_BASEDN (if specified) to construct an LDAP search
; filter when a user issues a DB2 CONNECT statement with an
; unqualified userid. For example, using the default values
; in this configuration file, (db2 connect to MYDB user bob
; using bobpass) results in the following search filter:
OrgPerson)(uid=bob)
; &(objectClass=inet USERID_ATTRIBUTE = uid
representing the DB2 authorization ID
; LDAP user attribute, AUTHID_ATTRIBUTE = uid
;-----------------------------------------------------------
; GROUP RELATED VALUES
;-----------------------------------------------------------
ps
; LDAP object class used for grou GROUP_OBJECTCLASS = groupOfNames
at represents the name of the group
; LDAP group attribute th GROUPNAME_ATTRIBUTE = cn
; Determines the method used to find the group memberships
; for a user. Possible values are:
; SEARCH_BY_DN - Search for groups that list the user as
; a member. Membership is indicated by the
; group attribute defined as
; GROUP_LOOKUP_ATTRIBUTE.
; USER_ATTRIBUTE - A user's groups are listed as attributes
; of the user object itself. Search for the
; user attribute defined as
TRIBUTE to get the groups.
; GROUP_LOOKUP_AT GROUP_LOOKUP_METHOD = SEARCH_BY_DN
; GROUP_LOOKUP_ATTRIBUTE
; Name of the attribute used to determine group membership,
; as described above.
llGroups
; GROUP_LOOKUP_ATTRIBUTE = ibm-a GROUP_LOOKUP_ATTRIBUTE = member

次に、現在のインスタンスディレクトリでIBMLDAPSecurity.iniファイルを見つけます。 上記のサンプルの内容を同じものにコピーします。

Cp
//db2_ldap_pkg/IBMLDAPSecurity.ini
/home/db2inst2/sqllib/cfg/

次に、以下に示す2つの構文を使用して、DB2インスタンスを再起動する必要があります。

db2inst2> db2stop

Db2inst2> db2start

この時点で、「db2start」コマンドを試行すると、セキュリティエラーメッセージが表示されます。 なぜなら、DB2セキュリティ構成は、LDAP環境に対してまだ正しく構成されていないからです。

両方の構成をカスタマイズする

slapd.confファイルで構成されているLDAP_HOST名を手元に置いてください。

次に、IMBLDAPSecurity.iniファイルを編集して、LDAP_HOST名を入力します。 上記の両方のファイルのLDAP_HOST名は同一でなければなりません。

ファイルの内容は次のとおりです。

      ;-----------------------------------------------------------
      ; SERVER RELATED VALUES
      ;-----------------------------------------------------------
      LDAP_HOST = localhost
      ;-----------------------------------------------------------
      ; USER RELATED VALUES
      ----------------------------
      ;-------------------------------
      USER_OBJECTCLASS = posixAccount
      USER_BASEDN = dc=example,dc=com
      USERID_ATTRIBUTE = uid
      AUTHID_ATTRIBUTE = uid
      ;-----------------------------------------------------------
      ; GROUP RELATED VALUES
      ;-----------------------------------------------------------
      GROUP_OBJECTCLASS = groupOfNames
      GROUP_BASEDN = dc=example,dc=com
      GROUPNAME_ATTRIBUTE = cn
      GROUP_LOOKUP_METHOD = SEARCH_BY_DN
      GROUP_LOOKUP_ATTRIBUTE = member

これらの値を変更すると、LDAPがすぐに有効になり、LDAPを使用するDB2環境が完全に機能します。

「db2inst2」ユーザーにログアウトして再度ログインできます。

これで、インスタンスはLDAPディレクトリを操作しています。 Db2-questions-answers