naobe @ ウィキ
DB2 Express-C ver 9.7
最終更新:
Bot(ページ名リンク)
-
view
DB2に戻る
参考URL
http://good-stream.com/goodstream/database/db2/tips.html 参照
http://www.altus5.co.jp/wordpress/db2_memo/#toc-dbddl 参照
http://db2watch.com/wiki/index.php/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8 参照
http://www.altus5.co.jp/wordpress/db2_memo/#toc-dbddl 参照
http://db2watch.com/wiki/index.php/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8 参照
制限
http://publib.boulder.ibm.com/infocenter/db2luw/v8//index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0001029.htm
SQLステートメントの最大文字数:2MB
SQLステートメントの最大文字数:2MB
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」参照。
列を変更するとペンディング状態になり、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(反復可能読取り)
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に設定する。
未コミット更新中データが更新されるまで待つように変更するには、CUR_COMMIT=DISABLEDに設定する。
【現在の状態表示】
コマンドプロセッサから、get db cfg show detailを実行すると表示する。
コマンドプロセッサから、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
http://www.atmarkit.co.jp/flinux/rensai/db2_03/db2_03a.html 参照
http://www-01.ibm.com/support/docview.wss?uid=std34d77226f5607fa2e4925758a0012c617 参照
http://www-01.ibm.com/support/docview.wss?uid=std34d77226f5607fa2e4925758a0012c617 参照
${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- |