- PR -

IBM DB2のアクセス不能のDBについて

1
投稿者投稿内容
IanBrown
会議室デビュー日: 2003/10/17
投稿数: 8
投稿日時: 2003-10-18 11:31
DB2のアクセス不能のDBについて

はじめて投稿いたします、IanBrownと申します。
IBM DB2の操作について教えていただきたいのですが、どこの掲示板が適切なのか分から
ないため、ここに投稿させていただきました。
# javaに関係ない質問で申し訳ありません。

今回、ある業務システムのメンテナンス作業を担当することになりました。
環境は、Windows2000server + IIS です。
データベースは、IBM DB2 UDB7.2 を使用しています。
今回ご質問させていただきたいのは、このUDB7.2についてです。
DB2の使用経験が全然ないため、書籍やネット上の情報を頼りに作業しておりますが、
どうしても解決できないことがあり困っております。
(書籍、ネット上の情報が、oracleに比較してかなり少ないです。)

コントロールセンターで参照した場合の構成は以下のようになっています。

コード:
[インスタンス] 
     └−DB2
          └−[データベース]
                   └− XY_DB  (←業務システムで使用している既存のDB)
                   └− XY_TEST(←テスト用に作成したDB(アクセス不能))
                   └− XY_TEST0(←同上)


今回の業務システムのテスト環境が存在しないため、以下の手順でDBのテスト環境を作成
しようとしました。
目的は、上記の「XY_DB」と同じデータベース(スキーマ、データ共)の構築です。
# コントロールセンターにて、クライアント側から操作。

1) 既存のDB(「XY_DB」)をバックアップ。

2) 「XY_DB」の”新規に復元する”を実行して、バックアップ・イメージとして1)で作成したデータを
指定して、「XY_TEST」という名前のDBの作成を実行。
その際にコントロールセンター内部で生成(実行)されたコマンドは以下のとおりです。
コード:
RESTORE DATABASE XY_DB FROM D:\\DB2Backup\\20030924 TAKEN AT 20030924131155 
TO C: INTO XY_TEST WITH 2 BUFFERS BUFFER 1024 
WITHOUT ROLLING FORWARD WITHOUT PROMPTING 



3) 実行後、しばらくしても、正常終了、異常終了の何れのメッセージも表示されません。
”新規に復元”のダイアログを閉じて、コントロールセンターから参照してみると、[データベース]に
新しいDB「XY_TEST」が存在していました。
しかし、それにアクセスしても、以下のようなエラーメッセージが表示されてアクセスできません。
コード:
[IBM][CLI Driver] SQL0902C  システム・エラー (理由コード = "118") が発生しました。
後続の SQL ステートメントは処理されません。   SQLSTATE=58005



ネット上で調査しましたが、上記のエラーを解決するための有効な情報は得られませんでした。
※ 一度失敗した(と思われる)後に、再度2)、3)を実行して「XY_TEST0」というDBを作成しましたが、
やはり同様の結果でした。

# ここからは、DB2コマンドによるサーバ側での操作。
そこで、クライアント側ではなく、サーバ側で「新規に復元」を実行しようと考え、クライアント側から
作成してアクセス不能となっている「XY_TEST」を削除しようとしましたが、以下のメッセージが表示されて
削除できません。
コード:
db2 => drop database BP_TEST       (実行コマンド)
SQL1035N  データベースは現在使用中です。  SQLSTATE=57019



次に、アプリケーションの状況を参照してみると以下のような表示でした。
コード:
db2 => list applications
Auth Id  Application    Appl.      Application Id                 DB       # of
         Name           Handle                                    Name    Agents
-------- -------------- ---------- ------------------------------ -------- -----
DB2ADMIN javaw.exe      347        0A0A3979.4207.031016090303     XY_TEST0 1
DB2ADMIN javaw.exe      289        0A0A3979.2507.031014021646     XY_TEST  1
DB2ADMIN IWH2LOG.EXE    0          *LOCAL.DB2.030917145819        DWCTRLDB 1
DB2ADMIN IWH2SERV.EXE   1          *LOCAL.DB2.030917145825        DWCTRLDB 1



そこで、ハンドル347、289を強制終了させようとしました。
コード:
db2 => force application  (347,289)
DB20000I  FORCE APPLICATION コマンドが正常に終了しました。
DB21024I  このコマンドは非同期であり、即時に有効にならない場合もあります。



強制終了は正常終了したように見えたのですが、list applications の結果は先ほどと変わりません。

さらに詳細な情報を見ると、以下のような表示でした。
コード:
db2 => list applications show detail
Auth Id  Application    DB Name    Coordinator     Status             Status Change Time    
         Name                      pid/thread
-------- ------------- ---------   --------------- ------------------ ----------------------
DB2ADMIN javaw.exe      XY_TEST0   1872            Commit Active      収集されませんでした  
DB2ADMIN javaw.exe      XY_TEST    928             Commit Active      収集されませんでした  
DB2ADMIN IWH2LOG.EXE    DWCTRLDB   1328            UOW Waiting        収集されませんでした  
DB2ADMIN IWH2SERV.EXE   DWCTRLDB   1424            UOW Waiting        収集されませんでした  
(※問題解決に有効と思われる情報を抜粋。)


※ ちなみに、windowsのタスクマネージャのプロセスには、javaw.exe は存在せず。

最後の手段として、DB2を停止しようとしましたが、以下のようなメッセージが出て停止できません。
コード:
db2 => db2stop
SQL1025N  データベースがまだ活動状態になっているために、データベース・マネージャーが
停止されませんでした。



さて、一体どのようにして、「XY_TEST」、「XY_TEST0」 に接続中(?)のアプリを終了させて、
これらのアクセス不能のDB(ゴミ?)を削除(DROP DATABASE)すればよろしいのでしょうか。
まとまりのない文章で申し訳ありませんが、ご教授よろしくお願いいたします。
秀人
常連さん
会議室デビュー日: 2003/02/19
投稿数: 22
お住まい・勤務地: 東京都
投稿日時: 2003-10-19 08:26
とりあえず、db2 force applications allで一度全てのプロセスを落としてみてはどうでしょうか。
IanBrown
会議室デビュー日: 2003/10/17
投稿数: 8
投稿日時: 2003-10-20 10:38
秀人さん、回答ありがとうございます。

ここへの投稿前に、db2 force applications all の実行を考えたのですが、
ちょっと怖かったので躊躇していました。
で、先ほど思い切って実行してみたのですが、やはりダメでした。

結果としては、以下のリストのハンドル347、289は残ったままで、ハンドル0、1が終了してしまいました。

コード:
Auth Id  Application    Appl.      Application Id                 DB       # of
         Name           Handle                                    Name    Agents
-------- -------------- ---------- ------------------------------ -------- -----
DB2ADMIN javaw.exe      347        0A0A3979.4207.031016090303     XY_TEST0 1
DB2ADMIN javaw.exe      289        0A0A3979.2507.031014021646     XY_TEST  1
DB2ADMIN IWH2LOG.EXE    0          *LOCAL.DB2.030917145819        DWCTRLDB 1
DB2ADMIN IWH2SERV.EXE   1          *LOCAL.DB2.030917145825        DWCTRLDB 1



IWH2LOG.EXE、IWH2SERV.EXE が何者か理解していないため、焦って調査しましたところ、
「コントロール パネル」-->「サービス」から「Warehouse logger」を再起動することにより、
どうにか起動できたようです。(理解不足のため、ちょっと不安ですが。)

taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2003-10-20 12:10
IanBrownさん、IBMのサイトのDB2Forumはご存知ですか?
(IanBrownさんと同様の質問があるかどうかは確認していませんが、
 有益な情報は多いと思います。)

ご質問の件ですが、私もあまり詳しくはないのですが気づいた点だけですが、
引用:

3) 実行後、しばらくしても、正常終了、異常終了の何れのメッセージも表示されません。


この時点では、復元が終わっていなかったのではないかと思います。
この復元コマンドが現在も走りっぱなしで、以下のエラーになるのではないでしょうか。
(復元はDBの大きさにもよりますが、最低でも数時間はかかります)
引用:

SQL1035N データベースは現在使用中です。 SQLSTATE=57019


私に考えられる方法は、
・復元作業が終わるのを気長に待つ
・タスクマネージャでプロセスをKILLして、サービスからDB2の停止行う
 (よく行いますが、不具合は出ないようです・・・)
くらいです。
お役に立てなくてすみません。
IanBrown
会議室デビュー日: 2003/10/17
投稿数: 8
投稿日時: 2003-10-20 21:06
taroさん、回答ありがとうございます。
引用:
IanBrownさん、IBMのサイトのDB2Forumはご存知ですか?


知らなかったので、ネットで検索してみました。
たぶん、↓ここでしょうか?
http://wsp01.alpha-mail.ne.jp/FRM/DB2/

後ほど、似たような質問があるかどうか探してみようと思います。

引用:
引用:
SQL1035N データベースは現在使用中です。 SQLSTATE=57019


私に考えられる方法は、
・復元作業が終わるのを気長に待つ
・タスクマネージャでプロセスをKILLして、サービスからDB2の停止行う
 (よく行いますが、不具合は出ないようです・・・)
くらいです。


db2 list applications を実行した際の結果リストに表示される javaw.exe という
プロセス(今回問題としているプロセス)については、windowsのタスクマネージャには
表示されません。
表示されれば、Killしようと思ったのですが。
(たぶん、そのプロセスは既に存在していない??)

最後の手段として、思い切って、win2000severのリブートも考えようと思います。
(できれば、リブートせずに解決したかったのですが。)

引用:
お役に立てなくてすみません。


いいえ、とんでもございません。
どんな情報でもありがたいです。
秀人
常連さん
会議室デビュー日: 2003/02/19
投稿数: 22
お住まい・勤務地: 東京都
投稿日時: 2003-10-21 01:54
javaw.exeですが、たしか実態はコントロールセンターだったと思います。
コントロールセンターはJavaで動いていると聞いたことがありますので。

データベースが使用中であるということは、DB2上はまだ復元中であるというメッセージではないかと思います。
これを消すには、インスタンスを消すしかないのですが、インスタンスを管理しているディレクトリーを削除したらうまくいったことがあります。
ただどうやってそのディレクトリーを見つけたかはすみません、忘れてしまいました。
DB2フォーラムで検索してみてはどうでしょうか。
IanBrown
会議室デビュー日: 2003/10/17
投稿数: 8
投稿日時: 2003-10-21 14:33
最後の手段として、win2000serverをリブートしました。
その結果、db2 list applications で表示されていた不要なプロセスは表示されなくなりました。
そして、それが原因で drop database できなかった不要なDBを削除できました。
以上、とりあえず、ここで質問させていただきました問題は解決しました。

その後、サーバ側のコントロールセンターにて”新規に復元する”を実行しましたところ、
無事に成功しました。
# 所要時間5分ぐらい。データ量が少なかったため、大した時間は掛からなかったようです。
リストア後に、無事にクライアント側からも接続できました。

結局、原因は分からなかったですが、リストア関係の操作は、クライアント側ではなく、
サーバ側で実施するようにした方が良さそうです。

ご意見をいただきましたみなさま、どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)