« エスプレッソーダ | トップページ | 改正著作権法 »

2012年9月16日 (日)

DB2 表スペース作成関連 その1

さて、データベースも作ったことだし、さくさくテーブルでも作って、テストすることにする。

あ、敢えてユーザとスキーマを分けたので、DBに接続した後は、「おまじない」が必要。

C:\Program Files\IBM\SQLLIB\BIN>db2 "CONNECT TO SAMPLEDB USER DB2USER USING db2u
ser"

   データベース接続情報

 データベース・サーバー = DB2/NT 10.1.0
 SQL 許可 ID            = DB2USER
 ローカル・データベース別名 = SAMPLEDB


C:\Program Files\IBM\SQLLIB\BIN>db2 "SET PATH=SYSIBM,SYSFUN,SYSPROC,SYSIBMADM,SA
MPLESCH1"
DB20000I  SQL コマンドが正常に完了しました。

C:\Program Files\IBM\SQLLIB\BIN>db2 "SET SCHEMA SAMPLESCH1"
DB20000I  SQL コマンドが正常に完了しました。

C:\Program Files\IBM\SQLLIB\BIN>

「SET PATH」と「SET SCHEMA」がミソです。

こうしないと、接続ユーザのデフォルトスキーマ「DB2USER」に各種オブジェクトが作成され、

かつ、参照されてしまいます。(明示的にスキーマを指定すれば別ですが。)

 

さて、テストテーブルでも作るか。

C:\Program Files\IBM\SQLLIB\BIN>db2 ^
More? CREATE TABLE XXTBL1 ^
More? (^
More?     COL1                           CHAR(8) NOT NULL,^
More?     COL2                           INTEGER NOT NULL,^
More?     COL3                           VARCHAR(20) NOT NULL,^
More?     COL4                           VARCHAR(1000),^
More?     COL5                           VARCHAR(1000),^
More?     COL6                           VARCHAR(1000),^
More?     PRIMARY KEY (COL1, COL2, COL3)^
More? )
DB20000I  SQL コマンドが正常に完了しました。

C:\Program Files\IBM\SQLLIB\BIN>db2 ^
More? CREATE TABLE XXTBL2 ^
More? (^
More?     COL1                           CHAR(8) NOT NULL,^
More?     COL2                           INTEGER NOT NULL,^
More?     COL3                           VARCHAR(20) NOT NULL,^
More?     COL4                           VARCHAR(1000),^
More?     COL5                           VARCHAR(1000),^
More?     COL6                           VARCHAR(1000),^
More?     COL7                           VARCHAR(1000),^
More?     PRIMARY KEY (COL1, COL2, COL3)^
More? )
DB21034E  コマンドが、有効なコマンド行プロセッサー・コマンドでないため、 SQL
ステートメントとして処理されました。 SQL 処理中に、次のエラーが返されました。
SQL0286N  許可 ID "DB2USER" が使用を許可されている少なくとも "8192"
のページ・サイズを持つ表スペースが検出されませんでした。  SQLSTATE=42727

C:\Program Files\IBM\SQLLIB\BIN>

「^」はDOS系の継続行文字です。気にしないように。

「XXTBL1」は作成できたのに、「XXTBL2」が作成できない。。。

調べてみると、表スペースのページサイズ(Oracleのブロックサイズに相当)が、デフォルトの

「4k」(最大行長4005バイト)しかないので、格納できないらしい。

http://www.ibm.com/developerworks/jp/data/library/dataserver/j-d_db2design02/

Oracleのブロックサイズの場合は、データベース共通で、設定後に変更することは出来ませんが、

DB2の場合は、複数のページサイズを持つ表スペースを混在出来るようです。

Oracleだと、長かろうが、勝手に行移行・行連鎖して格納してくれいているので気を遣う必要がない

(それはそれでパフォーマンスが落ちるが・・)のに、

DB2は、そんな気の利いたことはしてくれないので、行サイズに合わせて作る必要があるようです。

めんどくさ。。。まあ、「USERSPACE32K」という32kの表スペースを作ろう。

とりあえず、最大サイズで作っておけば、後々文句も出ないだろ。

本番では、こんな安直に作らないように。それなりにパフォーマンスを考える必要があるんだろうな。。

C:\Program Files\IBM\SQLLIB\BIN>db2 "CREATE TABLESPACE USERSPACE32K PAGESIZE 32K
 MANAGED BY AUTOMATIC STORAGE"
DB21034E  コマンドが、有効なコマンド行プロセッサー・コマンドでないため、 SQL
ステートメントとして処理されました。 SQL 処理中に、次のエラーが返されました。
SQL0552N  "DB2USER" は、操作 "CREATE TABLESPACE"
を実行する特権を持っていません。  SQLSTATE=42502

おっと、失敗。DB設定系は、一般ユーザではなく、管理者権限で実行する必要があるんだった。

接続し直して、再トライ。

C:\Program Files\IBM\SQLLIB\BIN>db2 "CONNECT TO SAMPLEDB"

   データベース接続情報

 データベース・サーバー = DB2/NT 10.1.0
 SQL 許可 ID            = ADMINIST...
 ローカル・データベース別名 = SAMPLEDB


C:\Program Files\IBM\SQLLIB\BIN>db2 "CREATE TABLESPACE USERSPACE32K PAGESIZE 32K
 MANAGED BY AUTOMATIC STORAGE"
DB21034E  コマンドが、有効なコマンド行プロセッサー・コマンドでないため、 SQL
ステートメントとして処理されました。 SQL 処理中に、次のエラーが返されました。
SQL1582N  表スペース "USERSPACE32K" の PAGESIZE
は、表スペースと関連しているバッファー・プール "IBMDEFAULTBP" の PAGESIZE
と一致しません。  SQLSTATE=428CB

今度は何だよ!!(怒)

どうも、表スペースのページサイズに対応したバッファー・プール(メモリ領域)が欲しいらしい。

怒ってもしようがないので、「USERBP32K」という名前でさくさく作る。サイズは適当。。

C:\Program Files\IBM\SQLLIB\BIN>db2 "CREATE BUFFERPOOL USERBP32K SIZE 256 PAGESI
ZE 32K"
DB20000I  SQL コマンドが正常に完了しました。

でもって、再度、表スペースを作成。

C:\Program Files\IBM\SQLLIB\BIN>db2 ^
More? CREATE TABLESPACE USERSPACE32K ^
More? PAGESIZE 32K ^
More? MANAGED BY AUTOMATIC STORAGE ^
More? BUFFERPOOL USERBP32K
DB20000I  SQL コマンドが正常に完了しました。

このままでは、一般ユーザ「DB2USER」は使用できないので、権限を与えておく。

C:\Program Files\IBM\SQLLIB\BIN>db2 ^
More? GRANT USE OF TABLESPACE USERSPACE32K ^
More? TO DB2USER
DB20000I  SQL コマンドが正常に完了しました。

さて、準備が整いました。改めて「DB2USER」で接続して、テーブルを作ってみる。

C:\Program Files\IBM\SQLLIB\BIN>db2 ^
More? CREATE TABLE XXTBL2 ^
More? (^
More?     COL1                           CHAR(8) NOT NULL,^
More?     COL2                           INTEGER NOT NULL,^
More?     COL3                           VARCHAR(20) NOT NULL,^
More?     COL4                           VARCHAR(1000),^
More?     COL5                           VARCHAR(1000),^
More?     COL6                           VARCHAR(1000),^
More?     COL7                           VARCHAR(1000),^
More?     PRIMARY KEY (COL1, COL2, COL3)^
More? )
DB20000I  SQL コマンドが正常に完了しました。

無事作成できました。

長かった。。。

|

« エスプレッソーダ | トップページ | 改正著作権法 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/538346/55271411

この記事へのトラックバック一覧です: DB2 表スペース作成関連 その1:

« エスプレッソーダ | トップページ | 改正著作権法 »