目次


SQLDB データベースを管理するための DB2 CLI コンソールをビルドする

IBM Bluemix で Ruby、Tmate、Dropbox を使用して、軽量のユーティリティー・アプリケーションを作成する

Comments

クイックにビルドして IBM クラウド・プラットフォーム Bluemix にデプロイできるアプリケーションを使用して、SQLDB データベースを簡単に管理します。このチュートリアルで示すアプリケーションを使用すると、IBM Bluemix クラウド・プラットフォーム上で稼働するアプリケーションでコンソールを開き、SQLDB に対して db2 describe table mytabledb2 list tables for all などの使い慣れた DB2 コマンドを実行できます。 また、SQLDB データベースをエクスポートしてクラウドにバックアップを保管したり、さらにはバックアップ・イメージを使用して別の SQLDB インスタンスを複製したりすることもできます。

これらすべての機能は DB2climate アプリケーションで使用でき、ここでは、そのアプリケーションのビルド方法を説明します。

DB2climate は高速で軽量のユーティリティーであり、SQLDB データベースを簡単に管理できます。

DB2climate は Dan Higham の Tmate サーバー・ビルドパックに基づいた CLI コンソール・アプリケーションであり、Bluemix SQLDB サービスの管理に役立てることができます。 これはアプリケーション warden コンテナーへの SSH 接続を開きます。このコンテナーには、DB2 ランタイム・クライアント、Dropbox CLI、Dropbox API クライアントがプリロードされ、構成されています。 このため、ユーザーは SQLDB に対して、サポートされているすべての DB2 コマンドを実行でき、Dropbox クラウド・ストレージを使用して、データを Bluemix に入れたり、Bluemix から出したり、移動することができます。

簡単に言うと、DB2climate は、SQLDB データベースを簡単に管理するのに役立つ高速で軽量のユーティリティーです。また、SQLDB に組み込まれている Web ベースの Managed Database Console では現在使用できない、以下のようなタスクを実行できます。

  1. IXF フォーマットのファイルをデータベースにインポート/ロードする
  2. SQLDB コンソールを使用して表をエクスポートする
  3. バックアップ・イメージを使用して、SQLDB インスタンス間でデータをマイグレーションする
  4. Bluemix に非一時ディスク・スペースを追加する
  5. データを SQLDB と同期させる

アプリケーションの作成に必要となるもの

ステップ 1. Bluemix に DB2climate をデプロイする

  1. Bluemix にログインします。
    usage: cf login [-a API_URL]                                         
    example: cf login -a https://api.ng.bluemix.net
  2. SQL Database サービスのインスタンスを作成します。
    usage: cf create-service SERVICE PLAN SERVICE_INSTANCE_NAME          
    example: cf create-service sqldb sqldb_small SQLDB_001
  3. 次のリポジトリーの git クローンを作成します。
    git clone https://hub.jazz.net/git/felixf/bluemix-db2-cli-mate
  4. 複製されたアプリケーション・ディレクトリーに移動します。
    cd bluemix-db2-cli-mate
  5. 複製された DB2climate app ディレクトリーから、--no-start フラグを使用してアプリケーションをプッシュし、SQLDB サービスを開始前にバインドできるようにします。
    usage: cf push APP [--no-start]                    
    example: cf push db2climate --no-start
  6. SQLDB サービスを新しいアプリケーションにバインドします。
    usage: cf bind-service APP SERVICE_INSTANCE_NAME  
    example: cf bind-service db2climate SQLDB_001
  7. アプリケーションを開始します。
    usage: cf start APP             
    example: cf start db2climate
  8. 開始プロセスには、いくつかのパッケージのダウンロードとインストールが含まれます。それらは、Ruby ランタイム、DB2 v9.7 ランタイム・クライアント、Dropbox Linux クライアント、Dropbox API クライアント、再パッケージされた Tmate サーバーなどです。完全なパッケージをインストールして、操作可能にするのに要する時間は、ほんの数分のはずです。

    アプリケーションが実行されていることを Bluemix が最初に示した時点では、初期化がまだ進行中である可能性がある点に注意してください。完全に初期化されたアプリケーションのサイズは、360 MB 前後になります。 サイズがそれより上の場合はいずれも、アプリケーションの準備ができていないことを示しています。 10 秒間待って、確認のために次のコマンドを実行してください。

    	cf app db2climate
    Screen shot showing disk size of     running app
    Screen shot showing disk size of running app

これで完了です。DB2climate は Bluemix クラウドに正常にデプロイされました。

ステップ 2. DB2climate アプリケーション・コンテナーに SSH 接続する

  1. 次のコマンドを発行します。
    cf files db2climate logs/tmate.log
  2. tmate.log の最後の 4 行は、以下のようになるはずです。 Screen shot of tmate log
    Screen shot of tmate log
  3. 接続 URL は、ログの最後の行です。2 つの 1000 という数値はユーザーのターミナルの高さと幅で、その後に接続 URL が続きます。

    Windows PC を使用している場合は、Cygwin のようなターミナル・プログラムが必要になります。私は Babun Windows シェルを使用しています。このシェルは、https://github.com/babun/babun からダウンロードできます。

    注: 初めて SSH 接続を試みる前に、必ずホーム・ディレクトリーで ssh-keygen プログラムを実行してください。そうしないと、connection denied エラーになります。

    Screen shot of Permission denied     error
    Screen shot of Permission denied error
    Screen shot of running the ssh-keygen program
    Screen shot of running the ssh-keygen program
  4. ssh-keygen プログラムを実行した後、アプリケーション・コンテナーに SSH 接続することができます。 Screen shot of SSH into the app container
    Screen shot of SSH into the app container
  5. PuTTY を使用したい場合は、この「秘密鍵の生成と接続の作成に関するブログ」を参照してください。

ステップ 3. Dropbox を非一時ストレージとしてセットアップする

デフォルトでは、DB2climate に使用可能な永続ストレージはありません。このため、ディスクに書き込まれたすべての変更は、アプリケーションが停止されたり再始動されたりすると失われます。したがって、データベース・バックアップやエクスポートされた表のために、何らかの非一時ストレージを追加する必要があります。

このチュートリアルでは、Dropbox を永続ストレージとして使用する方法を示します。これは唯一の解決策ではありませんが、アプリケーションを手っ取り早く稼働させる 1 つの方法です。Dropbox Linux クライアント上の Dropbox API を使用する利点は、Dropbox API がクラウド・ストレージと自動的には同期しないので、既存の Dropbox アカウントを使用しても安全であることです。

  1. DB2climate には、Dropbox コア API クライアントのコピーがインストールされて付属しています。DB2climate を再始動するたびに Dropbox API キーを入力しなくても済むよう、Dropbox API キーは、DB2climate アプリケーションにバインドされた SQLDB の内部に安全に保管できます。

    set_dbox_api.rb スクリプトを実行し、プロンプトに従って API keyAPI secret を入力してください。次に、適切な access type を選択します。この access type は、API アプリケーションが作成されたときの API アプリケーションの permission type に一致する必要があります。

    Screen shot of entering your Dropbox     API key and secret
    Screen shot of entering your Dropbox API key and secret
    Screen shot of app key and secret
    Screen shot of app key and secret
  2. Dropbox API キーをデータベースに保管したら、Dropbox API プログラムの使用を開始できます。

    dropbox-api コマンドを実行してください。画面に表示された URL をブラウザーにコピー・アンド・ペーストします。Dropbox アカウントにログオンし、「Allow」をクリックします。それを行った後、SSH コンソールに戻り、Enter を押してセットアップを終了します。

    Screen shot of linking to a Dropbox     account
    Screen shot of linking to a Dropbox account

    おめでとうございます。これでアプリケーション・コンテナーが Dropbox アカウントに正しくリンクされました。

  3. dropbox.api help を実行して、使用可能なコマンドのリストを取得します。例えば、local.tar ファイルをコンテナーから Dropbox ルート・ディレクトリーにアップロードするには、次のコマンドを発行します。
    $   dropbox-api put local.tar dropbox:/

    Dropbox アカウントにあるすべてのファイルをリストするには、次のコマンドを発行します。

    $   dropbox-api ls

ステップ 4. DB2climate を DB2 クライアントとして使用する

SSH を使用して warden コンテナーにアクセスした後、SQLDB に対して、サポートされているすべての DB2 CLI コマンドを実行できます。すべての TCPIP ノードおよびデータベースは、自動的にカタログされます。

さらに、DB2 コマンドを実行するときにユーザーに VCAP_SERVICE ファイルでデータベース資格情報を参照させるのを避けるために、以下のスクリプトでデータベースを簡単に管理することができます。

汎用スクリプト

  • スクリプト名: ls_db.rb
    目的: アプリケーションにバインドされているすべてのデータベースをリストし、その資格情報を表示します。
    syntax: $ ls_db.rb                                                                                 
    Example: ls_db.rb
    Screen shot of listing bound     databases
    Screen shot of listing bound databases
  • スクリプト名: catalog_db.rb
    目的: TCPIP ノードおよびデータベースをカタログします。
    Syntax: $ catalog_db.rb db_name (where db_name is the instance name of your created SQLDB service) 
    Example: $ catalog_db.rb SQLDB_001

    注: このスクリプトは、データベース環境をセットアップするために SSH 接続上で自動的に実行されます。したがって、別個に実行する必要はありません。

  • スクリプト名: connect_db.rb
    目的: データベースに接続します。
    Syntax: $ connect_db.rb db_name (where db_name is the instance name of your created SQLDB service) 
    Example: $ connect_db.rb SQLDB_001
  • スクリプト名: gen_dbSchema.rb
    目的: データベース・スキーマを生成します。
    Syntax: $ gen_dbSchema.rb [database_db_name] schema_name                                      
    Example 1: $ gen_dbSchema.rb BX (single db instance bound to the app) 
    Example 2: $ gen_dbSchema.rb SQLDB_002 BX (multi db instances bound to the app)
  • スクリプト名: cr_sample_tables.rb
    目的: エクスポート・スクリプトとインポート・スクリプトをテストするために、2 つのサンプルの表を作成し、それらの表にデータを入力します。
    syntax: $ cr_sample_tables.rb db_Name                                                         
    Example: $ cr_sample_tables.rb SQLDB_001
  • スクリプト名: ls_tables.rb
    目的: 指定したスキーマ名の表をすべてリストします。
    syntax: $ ls_tables.rb [db_name] schema_name                                                   
    Example 1: $ ls_tables.rb BX (single db instance bound to the app) 
    Example 2: $ ls_tables.rb SQLDB_002 BX (multi db instances bound to the app)

表をエクスポートおよびインポートするスクリプト

  • スクリプト名: export_table.rb
    目的: サポートされているフォーマット (.ixf または .del) で表をエクスポートします。
    Output file: the name of exported table with export format as extension  
    syntax: $ export_table.rb [db_name] schema_name table_Name export_format                          
    Example 1: $ export_table.rb BX country ixf (single db instance bound to the app) 
    Output file name is country.ixf                                                                       
    Example 2: $ export_table.rb SQLDB_002 BX CITY del (multi db instances bound to the app) 
    Output file name is CITY.del
  • スクリプト名: import_table.rb
    目的: サポートされているフォーマット (.ixf または .del) の表をサポートされているすべてのインポート・モードでインポートします。
    syntax: $ import_table.rb [db_name] schema_name table_file_name [import_mode]                            
    Supported Import mode are: 1=insert(default), 2=insert_update, 3=replace, 4=replace_create (ixf only),  5=create (ixf only)                                                                                      
    Example 1: $ import_table.rb BX country.ixf (single db instance bound to the app with default insert mode)
    Example 2: $ import_table.rb SQLDB_002 BX country.ixf 2 (multi db instances bound to the
    app with insert_update mode)

データベースのバックアップとリストアを行うスクリプト

残念なことに、DB2climate では組み込みの db2 backup ユーティリティーや db2 restore ユーティリティーを実行できません。その理由は、db2 get authorizations コマンドが「すべてを暴露する」ためです。したがって、デフォルト・ユーザーはバックアップとリストアを実行するための十分な権限を持っていません。

Screen shot showing no authority to     backup and restore
Screen shot showing no authority to backup and restore

DB2 バックアップ/リストア・ユーティリティーを使用するには、SYSADM、SYSCTRL、SYSMAINT など、インスタンス・レベルの権限が必要です。しかし、デフォルト・ユーザーは DBADM 権限しか持っていないため、バックアップやリストアを実行しようとすると、必ず次のエラーが発生します。

Screen shot showing backup and     restore error
Screen shot showing backup and restore error

私がお勧めする回避策は、db2move コマンドを使用することです。私はこれを定期的に使用して、1 つの OS から別の OS にデータベースをマイグレーションしています。このコマンドは、すべての表を IXF フォーマットでエクスポートするので、それらの表を再び新しいデータベースへインポートすることができます。これは完全に自動化されており、非常に使いやすいです。db2move は、DB2 ランタイム・クライアントに付属していない点に注意してください。これは、サーバー・エディションにのみ付属していますが、無料で DB2 Express-C をダウンロードすることができます。

Bluemix アプリケーション・コンテナーは、サイズを最大 2 GB までに制限しているため、DB2 Express-C サーバーのフルコピーをインストールすると、過度に多くのコンテナー・スペースを使い切ってしまいます。さいわい、db2move ユーティリティーを稼働するために必要になるのは、db2movedb2common.bnddb2move.bnd の 3 つのファイルだけです。

db2movesqllib/bin ディレクトリーに入れ、2 つの .bnd ファイルを sqllib/bnd ディレクトリーに入れてください。これで、完全に機能する db2move ユーティリティーが得られます。

注:db2move ユーティリティーは既に DB2climate アプリケーションにパッケージされているので、このサンプル・アプリケーションでは、上記のタスクを実行する必要はありません。

データベースのバックアップとリストアのスクリプトを以下に示します。

  • スクリプト名: export_db.rb
    目的: db2move export コマンドを使用して、すべてのデータベース表を .ixf フォーマットでエクスポートします。
    出力ファイル: 現行ディレクトリー内の .tar.gz 拡張子を持つ db_name
    Syntax:    $   export_db.rb db_name 
    Example:  $   export_db.rb SQLDB_001 
    Sample output file : `$   SQLDB_001.tar.gz
  • スクリプト名: import_db.rb script
    目的: db2move import コマンドを使用して、すべてのデータベース表をインポートします。これは、既存の DB へリストアする場合、または新しい DB を複製するために使用します。
    Syntax:  $   import_db.rb  db_name  db_backup_file_name
    Example: $   import_db.rb SQLDB_001  SQLDB_001.tar.gz

DB2climate のヒントと既知の問題

ヒント

  • Bluemix では、複数のアプリケーションを同じサービスにバインドしたり、その逆を行ったりすることができます。このため、DB2climate は、1 次アプリケーションのバインド先と同じ SQLDB サービスにバインドするためのユーティリティー・アプリケーションとして使用できます。次の図に示すように、ここでは SQLDB_001 インスタンスを Bluemix101-FF と DB2climate の両方のアプリケーションにバインドしました。この例では、Bluemix101-FF は 1 次アプリケーションであり、これは SQLDB_001 をバックエンド・データベースとして使用します。一方、DB2climate は、その DB インスタンスの管理を支援するために使用するユーティリティー・アプリケーションです。Screen shot showing the         SQLDB_001 instance bound to both the Bluemix101-FF and the DB2climate apps
    Screen shot showing the SQLDB_001 instance bound to both the Bluemix101-FF and the DB2climate apps
  • 重要: 端末の使用を終了したら、X アイコンをクリックして「OK」で確認し、端末プログラムをシャットダウンしてください。これにより、実行されている Tmate セッションが終了するので、同じ Tmate 資格情報を使用して Tmate セッションに再接続できます。

    Tmate 端末で exit を入力すると、Tmate サーバーがシャットダウンされ、DB2climate アプリケーションの再始動が必要になります。その場合、新しい Tmate 資格情報が生成されます。その冒頭で、Dropbox アカウントを再びセットアップし、すべてのデータベースを再カタログすることが必要になります。

    Screen shot of shutting down         your terminal program
    Screen shot of shutting down your terminal program

既知の問題

  • SQLDB インスタンスを DB2climate アプリケーションからアンバインドした後に再バインドすると、一部の DB2 コマンドを正常に実行できなくなります。db2 get dbm cfgdb2 get authorization などのコマンドは引き続き機能しますが、他の db2 list tablesdb2 select * from ... などのコマンドでは、次に示すように、エラーが発生します。 Screen shot showing errors from certain commands
    Screen shot showing errors from certain commands

    上記の制約事項があるので、どのようなときも SQLDB インスタンスを DB2climateアプリケーションからアンバインドしないでください。誤ってアンバインドした場合、DB2climate を介して SQLDB インスタンスを管理できる状態を復元する唯一の方法は、SQLDB インスタンスを削除し、新しいインスタンスを再作成し、Dropbox クラウド・ストレージ・バックアップからデータベースをリストアすることです。

  • たまに、DB2climate アプリケーションをデプロイまたは開始したときに、Tmate サーバーが正しく初期化されず、結果として Tmate URL が表示されない場合があります。そうなった場合は、単に DB2climate アプリケーションを停止して、再始動してください。それで問題は解決するはずです。 Screen shot showing the Tmate server not initializing
    Screen shot showing the Tmate server not initializing

まとめ

このチュートリアルの手順を使用してビルドできる DB2climate アプリケーションは、SQLDB データベースの管理に役立つ軽量のユーティリティー・アプリケーションです。これを使用すると、アプリケーション・コンテナーに SSH 接続し、そこから DB2 ランタイム・クライアントを使用して、使い慣れた DB2 コマンドを実行できます。

また、DB2climate は、現行のデフォルトの Bluemix SQLDB Web 管理コンソールにない、いくつかの追加機能を備えています。例えば、IXF フォーマットでの表のインポート/エクスポート、さまざまなインスタンスの SQLDB データベースへのデータベースのバックアップ/リストアなどです。さらに、DB2climate は Dropbox を使用して、Bluemix 上で永続ストレージを提供します。


ダウンロード可能なリソース


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Information Management, Cloud computing
ArticleID=1010388
ArticleTitle=SQLDB データベースを管理するための DB2 CLI コンソールをビルドする
publish-date=08272015