naobe @ ウィキ

DB2 Express-C ver 9.7

最終更新:

Bot(ページ名リンク)

- view
管理者のみ編集可
DB2に戻る

参考URL


制限


DB2インストール(Linux)


マニュアル


DB2権限


CSEとの接続

ローカルのデータベース

  • 構成アシスタントを起動
  • ODBC登録したいデータベースをダブルクリック
  • プロトコル:TCP/IP
  • TCP/IP:ホスト名、ポート番号(50000)を設定
  • データソース:CLI/ODBC用にこのデータベースを登録。システムデータソース選択。
  • AdminでCLPを開く
  • catalog system odbc data source データベース名

リモートデータベース

あああ

スキーマ

ユーザ名などを使って、テーブル、シーケンスなどのDBオブジェクトをグループ化するもの。スキーマにユーザ名を使うと、1つのデータベースに同じ名前のテーブルを作成できる。

テーブルにアクセスするときは、スキーマ.テーブルでアクセスする。スキーマを省略したときは、データベースに接続するユーザ名が使われる。

コマンド

インスタンスの起動

  • インスタンスオーナでログイン。(Linuxの場合、デフォルトユーザはdb2inst1)
  • db2start

インスタンスの構成パラメータの、SYSADM_GROUP,SYSCTRL_GROUPをユーザが属するグループに設定しておくこと。(SYSADM_GROUPのデフォルトはdb2ladm1、SYSCTRL_GROUPのデフォルトは設定なし)
構成パラメータは、コントロールセンターからインスタンスを選択してポップアップメニューから修正可能。

インスタンスの停止

  • インスタンスオーナでログイン。(Linuxの場合、デフォルトユーザはdb2inst1)
  • db2stop

インスタンスの起動状況確認



Linuxでのコマンド

db2inst1でログイン

GUIツールのコマンド起動

項目 コマンド起動
コントロールセンター db2cc
構成アシスタント db2ca

デフォルトスキーマを表示

 $db2 "values current schema"

デフォルトスキーマを変更

 $db2 "set current schema = 'hoge'"

データのexport

 EXPORT TO ファイル名 OF IXF SELECT * FROM テーブル名;

データのimport

 IMPORT FROM ファイル名 OF IXF INSERT_UPDATE INTO テーブル名;

SQLファイルの実行

 db2 connect to データベース
 db2 -tvf SQLファイル
 db2 terminate

DDL出力

 db2look -d sampledb -e -o a.out


DBへの接続

db2 => connect to データベース user ユーザ
userはOSのユーザでよい

データベース作成

 db2 create database データベース

プライマリーキー作成

 CREATE TABLE aaa (
   id1 	CHAR(10),
   id2 	CHAR(10),
   value		CHAR(15),
   CONSTRAINT vwam07_pkey PRIMARY KEY (id1, id2)
 );

テーブルスキーマの修正

【列の追加】
 ALTER TABLE テーブル名 ADD COLUMN 列名 データタイプ オプション
 <例>
 alter table INOUTDETAIL add column NAMEID char(12)
以下を実行するとエラーが発生する。
 alter table INOUTDETAIL add column NAMEID char(12) not null
 
 DB21034E  The command was processed as an SQL statement because it was not a
 valid Command Line Processor command.  During SQL processing it returned:
 SQL0193N  In an ALTER TABLE statement, the column "NAMEID" has been specified
 as NOT NULL and either the DEFAULT clause was not specified or was specified
 as DEFAULT NULL.  SQLSTATE=42601
これは、成功するとNULLカラムができてしまうため。よって列を作成しupdate後に以下のコマンドを実行する。
 alter table INOUTDETAIL alter NAMEID set not null

【外部キー制約の追加】
 alter table テーブル名 add constraint 制約名 foreign key(列名,・・) references 親テーブル名(列名,・・)
各列名は、親テーブルの各列名に対応する。親テーブルの行を削除するとエラーになる。

※注意
列を変更するとペンディング状態になり、SQLCODE=-668, SQLSTATE=57016, SQLERRMC=7のエラーが発生する。よって以下を実行する。メッセージの意味は「DB2メッセージレファレンス2」参照。
 reorg table テーブル名

【UNIQUE制約の追加】
 alter table テーブル名 add constraint 制約名 unique (列名,・・・)

【UNIQUE制約の削除】
 alter table テーブル名 drop unique 制約名 

terminate

接続を終了し、クライアントのバックエンドプロセス(db2bp)を終了する。db2 connect resetは接続のみ終了する

データベースへの接続

db2 => connect to sample

  Database Connection Information

Database server        = DB2/LINUX 9.7.1
SQL authorization ID   = DB2INST1
Local database alias   = SAMPLE

終了

db2 => quit

データベース一覧

db2 => list db directory    
 
System Database Directory

Number of entries in the directory = 1

Database 1 entry:

Database alias                       = SAMPLE
Database name                        = SAMPLE
Local database directory             = /home/db2inst1
Database release level               = d.00
Comment                              =
Directory entry type                 = Indirect
Catalog database partition number    = 0
Alternate server hostname            =
Alternate server port number         =

テーブル一覧

【全てのテーブル】
 db2 => list tables for all
 
 Table/View                      Schema          Type  Creation time             
 ------------------------------- --------------- ----- --------------------------
 ACT                             DB2INST1        T     2010-09-06-20.44.43.170519
 ADEFUSR                         DB2INST1        S     2010-09-06-20.44.46.721536
 CL_SCHED                        DB2INST1        T     2010-09-06-20.44.41.958568
    ・                              ・           ・              ・
    ・                              ・           ・              ・
    ・                              ・           ・              ・
【スキーマ指定】
 db2 => list tables for schema スキーマ

テーブル構造

 db2=> DESCRIBE TABLE テーブル名

文字セットの確認

 db2 get db config for データベース名

分離レベル

表示

values current isolation

設定

【セッション内】
set current isolation 分離レベル

db2 terminateでリセット

【JDBC】

Connection.TRANSACTION_READ_UNCOMMITED = Uncommitted Read(非コミット読取り)
Connection.TRANSACTION_READ_COMMITTED = Cursor Stability(カーソル固定)
Connection.TRANSACTION_REPEATABLE_READ = Read Stability(読み取り固定)
Connection.TRANSACTION_SERIALIZABLE = Repeatable Read(反復可能読取り)


未コミット中のデータ参照動作

ver9.7から設定が可能。ver9.7のデフォルト動作は、update前の状態を表示(CUR_COMMIT=ON)。
未コミット更新中データが更新されるまで待つように変更するには、CUR_COMMIT=DISABLEDに設定する。

【現在の状態表示】
コマンドプロセッサから、get db cfg show detailを実行すると表示する。

Currently Committed                        (CUR_COMMIT) = DISABLED                   DISABLED            

左が現在の値。右側が、次回インスタンスが有効になったときの値。

【設定の変更】

項目 内容
待つ db2 update db cfg using CUR_COMMIT DISABLED
update前を表示 db2 update db cfg using CUR_COMMIT ON

ロック監視

ロックインターバル

db2 update db cfg using DLCHKTIME 監視間隔(msec)

ロックタイムアウト

db2 update db cfg using LOCKTIMEOUT タイムアウト(sec)

ユーザの表示

コントロールセンターから可能

ユーザへの権限の付与

コントロールセンターから可能

静的SQL,動的SQL


SQL

項目 内部サイズ(バイト) 説明
DATE 4 年、月、日。最初の2バイトが年、3バイト目が月、4バイト目が日
TIMESTAMP 7~13 年、月、日、時、分、秒
TIME 3 時、分、秒
CHAR 1~254 固定長の文字。
VARCHAR 最大32k 可変長文字
CLOB 最大2G 可変長文字。
BLOB 最大2G バイナリラージオブジェクト
SMALLINT 2 短精度整数
INTEGER 4 超精度整数
BIGINT 8 64ビット整数

コメント

"--"または/* */。行に対するコメント。開始位置はどこからでも良い。"--"は行末までがコメント。

プライマリーキー列、UNIQUEキー表示

 select colnames, uniquerule from syscat.indexes where tabname = '<テーブル名>' 

外部キーの表示

select constname, tabname, refkeyname, reftabname, colcount, deleterule, updaterule, fk_colnames, pk_colnames from syscat.references

syscat.referencesについては「DB2_管理の概念および構成リファレンス.pdf」参照

制約一覧表示

 SELECT TABSCHEMA, TABNAME, CONSTNAME FROM SYSCAT.TABCONST WHERE TABSCHEMA='スキーマ名' AND TABNAME='テーブル名'


ビュー一覧

 SELECT TABSCHEMA, TABNAME FROM SYSCAT.TABLES WHERE TYPE='V'

SELECT操作

db2 => select * from ACT

 ACTNO  ACTKWD ACTDESC             
 ------ ------ --------------------
   10 MANAGE MANAGE/ADVISE       
   20 ECOST  ESTIMATE COST       
        ・
        ・
  180 DOC    DOCUMENT            
 
 18 record(s) selected.

シーケンス作成

コマンドエディタから
 connect to SUNA;
 CREATE SEQUENCE inc_seq AS INT
  START WITH 1
  INCREMENT BY 1
  MINVALUE 1
  NO MAXVALUE
  NO CYCLE
  NO CACHE
  ORDER;
 quit;

シーケンスをIDに適用

シーケンスを適用するカラムをGENERATED BY DEFAULTに設定(初期作成時は、GENERATED BY ALWAYS)。
 ALTER TABLE INCIDENCE
   ALTER COLUMN INCID SET GENERATED BY DEFAULT;

INSERTするときに、IDにNEXT VALUE FORを使ってシーケンスの次の値を設定する。
 INSERT INTO INCIDENCE VALUES
  (NEXT VALUE FOR inc_seq, 値1,値2, ・・・)

シーケンスをIDに適用(2)

IDの一部にシーケンスを適用。現在の日付にシーケンスを追加してみる。
【例】
 insert into inoutname 
   (nameid, name, nametype)
   values (concat('T', concat(to_char(current date, 'yyyymmdd'), LPAD(inc_seq.nextval, 3, '0'))), '食費', 0);

シーケンスに値を設定

 ALTER SEQUENCE INOUT_NAME_SEQ
  RESTART WITH 7;

シーケンスの取得(次のシーケンス)

db2==>values nextval for シーケンス名

シーケンスの取得(前のシーケンス)

db2==>values prevval for シーケンス名

シーケンスのテーブル

SYSSEQUENCES

コントロールセンターのTABLEから参照する。

JDBC


${INSTANCE_DIR}/sqllib/java 下に以下のjarファイルがあってJDBCドライバに使う。

jarファイル 説明 プロバイダタイプ(WAS)
db2jcc.jar JDBC3.0以前の機能。JDK1.4以上。 DB2 Universal JDBC Driver Provider
db2jcc4.jar JDBC4.0以前の機能。JDK1.6以上 DB2 Using IBM JCC Driver

【JDBCを使ったアクセス】
 // DB2 JDBC Driverのロード
 Class.forName("com.ibm.db2.jcc.DB2Driver");
 // DB2に接続
 Connection conn = DriverManager.getConnection(
    "jdbc:db2://localhost:50000/db名", "ユーザ", "パスワード");
 
 ユーザ、パスワードはOSのものを使う

その他


項目 説明
静的SQL アプリケーション・プログラムの実行前に準備される。アプリケーション・プログラムが実行された後も残る。ホスト言語(COBOL)のアプリケーションプログラム内部に組み込まれる。
動的SQL SQL アプリケーションの実行時に準備される。
BIND
データベース構成パラメータ表示 get db cfg
データベースマネージャ構成パラメータ表示 get dbm cfg
オートコミットオフで起動 db2 -c-
人気記事ランキング
ウィキ募集バナー