DB2の最近の記事

7/24(金)に目黒で行われたSIMさんが講師だった回に参加してきました。

内容は「第80回 初心者歓迎! DB2 9の使い方 【アクセスプランを読んでみよう!編】」でした。
まぁいつも何となく読んでいたアクセスプランでしたが、
へぇ~そういう意味だったんだとか、キチンと理解できていなかった箇所を教えてもらったりと、
大変充実した内容でした。(2時間では本当は収まらないであろう、と思います)

さっそく、会社のDB2がどうなっているか確認したくなっているので、
今日出社したら、まずはアクセスプランを確認してみようっと♪

前回、SIMさんからイイコトを教えて頂いたので、
さっそくやってみました。

db2v97_clpplus02.jpg

無事に"DUAL"だけでSELECTできましたね。
ありがとうございました。
m(_ _)m


>>追記(15:14)
オンラインマニュアルにも色々書いてありますね。(っていうか読んでからやれよ!!)
DB2 互換性フィーチャー:IBM DB2 9.7 for Linux, UNIX and Windows Information Center

昨日読んでいた「DB2 9.7 エバリュエーション・ガイドブック」の中で、
CLPPlusを触っている画面ショットがあったので、kも触ってみようとマシン起動。

通常のDB2へのログインは、

db2v97_db2clp.jpg

こんな感じですが、「CLPPlus」は、

db2v97_clpplus.jpg

こんな感じです。
で、DUAL表を使ったSELECTをして試してみると、

 
SQL> SELECT SYSDATE FROM DUAL;
行 1 の近くでエラー:
SQL0204N "DB2ADMIN.DUAL" は未定義の名前です。
SQL>
 


という感じで怒られました。
あれれ?本ではうまくいってるのになぁ。。。。とちょっと調査。
するとコントロールセンターで手掛かりを発見。


db2v97_ctrlctr.jpg


にゃるほど。
SYSIBMスキーマに居たのね。
気を取り直してもう1回トライ!!

 
SQL> SELECT SYSDATE FROM SYSIBM.DUAL;
1
---------------------
2009-07-18 16:35:26
SQL>
 


出ましたね、期待通りです。
次はPL/SQLを頑張ってみますね。

※ちなみに、、、旧来のDB2でDUAL表に相当するのはSYSIBM.SYSDUMMY1ビューですが、
※ORACLE対応で"SYSDATE"がサポートされたので、こんなこともできるみたいです。
※ちょっと混乱しますね。

 
C:\>db2 "SELECT SYSDATE FROM SYSIBM.SYSDUMMY1"
1
---------------------
2009-07-18-16.41.18
1 レコードが選択されました。
 


※詳しい話は以下にあります。
DB2の基礎: 日付と時刻で遊ぶ

会議と会議の合間や資料作成の気分転換などのスキマ時間を活用して、
会社の自分のマシンに入っているDB2V9.5(Enterprise Server Edition)を
V9.7へアップグレードしてみました。

と言ってもほとんどインストーラー任せなので、自分でやることはあまりありません。

アップグレード後に何もせずに「SAMPLE」データベースに接続しようとすると、

 SQL5035N データベースを現行リリースにアップグレードする必要があります。 
 SQLSTATE=55001 


と怒られますので、

 db2 MIGRATE DB データベース名 


とやってあげて、以下のメッセージが出ればOKです。

 DB20000I UPGRADE DATABASE コマンドが正常に完了しました。 


その後は以下のように普通にやれば(余計なコマンドもありますが)繋がります。

db2v97upgrade01.jpg


まぁ自分で管理しているマシンだし、壊れても全然平気なのでサクッとやってしまいましたが、
業務でやる方はしっかりと計画を立ててやってください。

SIMさんのところで知ったのですが、Express-Cが出ているそうなので、
ダウンロードしてインストールまでしてみました。

db2v97_01.jpg


db2v97_02.jpg

db2v97_03.jpg

db2v97_04.jpg

db2v97_05.jpg

db2v97_06.jpg

皆さん早くも新機能を試されているのですが、
kもPL/SQLのサポート部分が気になっているので、
落ち着いたら試してみたいと思います。

【DB2】9.7の本が出るみたいです。

最近触る機会がめっきり増えたDB2ですが、
最新版V9.7に対応した書籍が7/14に発売されるみたいです。


DB2 9.7 エバリュエーション・ガイドブック


まだ予約段階ですが、発売されたら買おうかな?


参考URL
DB2 9.7 新バージョン・テクニカル・プレビュー - developerWorks

以前、

【DB2】DB2でLINQを使う(のに失敗)
【DB2】DB2でLINQを使う(準備が整う)

というのを書きました。
で、もしかすると別の案件で.NET+DB2っていうのが出てきそうな感じなので、
今日は仕事中に堂々と"調査"しました。

基本はこの↓ページに書かれていることをやります。
Develop a sample application using LINQ programming and the ADO.NET Entity Framework with IBM DB2, IDS, and U2 servers


まず、新規プロジェクトを作成します。
※設定する値等は、参照するdeveloperWorksの記事に極力合わせます。

testef01.jpg

作成するWindowsFormはこんな感じになります。
ComboBox:1コ
DataGridView:1コ
Button:2コ

testef02.jpg

Entity Data Modelはこんな感じで進めていきます。

testef03.jpg

「データベースから生成」を選択。

testef04.jpg

「新しい接続」ボタンをクリック。

testef05.jpg

下記画面のように選択します。

testef06.jpg

接続先のサーバーはとりあえずlocalhost。
ユーザーはdb2admin。
接続先データベースはSAMPLEに変更。
設定が終わった「テスト接続」をクリック。

testef07.jpg

問題が無ければ、接続テスト完了。

testef08.jpg

「次へ」ボタンを押すとDBと接続を開始します。

testef09.jpg

接続中・・・・

testef10.jpg

データベースオブジェクトを選択。

testef11.jpg

Entityモデルが生成されました。

testef12.jpg

で、こっからはソースコードの補足。


■closeボタンの実装(C#)

private void closeForm_Click(object sender, EventArgs e)
{
    m_context.Dispose();
    Close();
}


■フォームのロード処理の実装(C#)

private void Form1_Load(object sender, EventArgs e)
{
    m_context = new SAMPLEEntities();
    // SELECT * FROM EMPLOYEE のイメージ
    var query = from d in m_context.EMPLOYEE
                select d;
    try
    {
        // ComboBoxに設定するカラム(データ)
        this.comboBox.DisplayMember = "FIRSTNME";
        this.comboBox.DataSource = query;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

}


■ComboBoxが選択された際の実装(C#)

private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    try
    {
        EMPLOYEE empList = (EMPLOYEE)this.comboBox.SelectedItem;
        // SELECT * FROM EMPLOYEE E, EMP_PHOTO EP
        // WHERE EP.EMPNO = E.EMPNO のイメージ
        var query = from o in m_context.EMP_PHOTO
                    where o.EMPNO == empList.EMPNO
                    select o;
        // データグリッドビューに設定
        dataGridView.DataSource = query;
        dataGridView.AutoResizeColumns(
                        DataGridViewAutoSizeColumnsMode.AllCells);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}


この実装で、画面に何が出てくるかはお楽しみです♪

今日、会社で若手に「DB2では既存表の列に対してNOT NULL制約を付けられないと聞いたのですが、本当ですか?」と質問されました。

え?そんなことないでしょー、と"DB2 NOT NULL 付与"でググってみると、
検索結果のトップに質問掲示板でのやり取りがヒット。
中を覗いてみると「ALTER TABLEではできない」という結論に至っていました。

疑り深い昨今のkは気になったので自分でやってみました。
(※以下はコントロールセンターのコマンド・エディターのログ)

まず簡単な表を作成。

------------------------------ 入力コマンド ------------------------------
CREATE TABLE TEST.SAMPLETBL (COLUMN1 VARCHAR(10), COLUMN2 VARCHAR(10));
------------------------------------------------------------------------------
CREATE TABLE TEST.SAMPLETBL (COLUMN1 VARCHAR(10), COLUMN2 VARCHAR(10))
DB20000I SQL コマンドが正常に完了しました。


続いて定義を確認。

------------------------------ 入力コマンド ------------------------------
DESCRIBE TABLE TEST.SAMPLETBL;
------------------------------------------------------------------------------
DESCRIBE TABLE TEST.SAMPLETBL

Data type Column
Column name schema Data type name Length Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
COLUMN1 SYSIBM VARCHAR 10 0 はい
COLUMN2 SYSIBM VARCHAR 10 0 はい

2 レコードが選択されました。


続いて、NOT NULL属性をCOLUMN2に付与。

------------------------------ 入力コマンド ------------------------------
ALTER TABLE TEST.SAMPLETBL ALTER COLUMN2 SET NOT NULL;
------------------------------------------------------------------------------
ALTER TABLE TEST.SAMPLETBL ALTER COLUMN2 SET NOT NULL
DB20000I SQL コマンドが正常に完了しました。


再度定義を確認。

------------------------------ 入力コマンド ------------------------------
DESCRIBE TABLE TEST.SAMPLETBL;
------------------------------------------------------------------------------
DESCRIBE TABLE TEST.SAMPLETBL

Data type Column
Column name schema Data type name Length Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
COLUMN1 SYSIBM VARCHAR 10 0 はい
COLUMN2 SYSIBM VARCHAR 10 0 いいえ

2 レコードが選択されました。


続いて、NOT NULL属性をCOLUMN2から削除。

------------------------------ 入力コマンド ------------------------------
ALTER TABLE TEST.SAMPLETBL ALTER COLUMN2 DROP NOT NULL;
------------------------------------------------------------------------------
ALTER TABLE TEST.SAMPLETBL ALTER COLUMN2 DROP NOT NULL
DB20000I SQL コマンドが正常に完了しました。


再々度定義を確認。

------------------------------ 入力コマンド ------------------------------
DESCRIBE TABLE TEST.SAMPLETBL;
------------------------------------------------------------------------------
DESCRIBE TABLE TEST.SAMPLETBL

Data type Column
Column name schema Data type name Length Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
COLUMN1 SYSIBM VARCHAR 10 0 はい
COLUMN2 SYSIBM VARCHAR 10 0 はい

2 レコードが選択されました。


当然、COLUMN2列にNULLデータの有無が付与・削除に関わってきますが、
何てことはなくV9.1ではちゃんとできます。

kも時々間違ったことを書いている場合もありますが、
この掲示板、訂正した方がいいのかな?
でも2005年だなぁ。。。

※komikoniさんからのご指摘により調査した結果、2005年当時はV8だったと思われ、
※V8で当該内容を動作させてみると、エラーとなりました。
※ALTER TABLE テーブル名 ALTER 列名 SET NOT NULLはV9以降に追加された機能です。
※訂正・補足しておきます。

【DB2】スマートな?DB復旧方法

| コメント(27)

昨日のエントリで、
Windows版DB2のFixpak当て直し(と呼べるかどうか微妙ですが)を紹介しましたが、
もっとカンタンにDBの復旧方法を教えてもらったのでやってみました。

まずFixpakが当たっている状態を解除したいので、DB2をアンインストールします。
その際にデータベースのファイルは下記のようにファイルシステム上に残るので、
それを使ってリストアします。

node0000.jpg

DB2のコントロールセンターを利用して、データベースファイルを追加していきます。

dbcatalog1.jpg

「データベースの追加」ダイアログでホスト名を指定してデータベースを検索し、
見つけたデータベースを選択します。

dbcatalog2.jpg

カンタンに追加されました。

dbcatalog3.jpg

もちろんアクセスも可能です。
これなら安心してDB2をアンインストール&再インストールできますね。

以前、

【DB2】DB2でLINQを使う(のに失敗)

というのを書きましたが、

【DB2】Fixpakを当て直す(結局、アンインストール&再インストール)

というエントリでDB2側の問題を修正したので、
改めてDB2 <=> LINQを試してみようと、クライアント側の環境を諸々セットアップし直しました。

Develop a sample application using LINQ programming and the ADO.NET Entity Framework with IBM DB2, IDS, and U2 servers
  ↑
環境セットアップの詳細等が記載されています。
今回のkがセットアップし直した環境は以下の通り。

■物理マシン■
・Windows XP Home SP3
・Visual Studio 2008 Professional SP1

■データベース仮想マシン■
・Windows Server 2003 SE R2 SP2(32bit)
・DB2V9.5 EE FP3b

前回失敗していたテスト接続の結果は、
以下の画面ショットの通りに見事に成功しました!!

testconn20.jpg

いやいや。
まさかこんな結果になるとは思いませんでしたが、
やりたかったことの事前準備が整ったので、今後時間を見つけて、
DB2 <=> LINQの実装をやってみます!!

カテゴリ

ウェブページ

  • /img
Powered by Movable Type 6.0.1

このアーカイブについて

このページには、過去に書かれた記事のうちDB2カテゴリに属しているものが含まれています。

次のカテゴリはFirebirdです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。