開発環境構築のお手伝いをしている時にDB2でDBが作れない!という方に遭遇。
みんな作れているのになんでその環境だけ作れないのさ?と思い調査した時のお話。
環境
Windows7
DB2 Express-C 10.1.0.872
CREATE DB実行時に発生したエラー
CREATE DB DB_NAME USING CODESET UTF-8 TERRITORY JP
SQL1005N データベース別名 "DB_NAME"は、すでにローカル・データベース・ディレクトリーまたはシステム・データベース・ディレクトリーのどちらかに存在しています。
解析
いや、もうDBできてるんでしょ?
db2 list db directory
してみる。
あれ?出てこない。
何かゴミが残ってるのかな?
DROP DB DB_NAME
してみる。
SQL1013N データベース別名またはデータベース名 "DB_NAME"が見つかりませんでした。 SQLSTATE=42705
DBは見つからない。
じゃあ作れるでしょ?もう一回
CREATE DB DB_NAME USING CODESET UTF-8 TERRITORY JP
してみる。
同じ存在していますエラーが発生。
OK。状況は理解できた。DBがないのにあると言われる。トンチですか?
対応
LIST DATABASE DIRECTORY ON C:
するとカタログされていないがディスク上に存在するDB_NAMEが表示された。
(C:
ドライブでなければ別のドライブにいたかもしれない)
一旦、DB2 CATALOG DATABASE DB_NAME ON C:
でカタログしてあげると
db2 list db directory
で表示されるようになったのでDROPしてからCREATE DBを実行して解決。
原因
エラーが発生した端末では過去に偶然、同名のDBを作成し削除した事があった模様。
(DB_NAMEは検証環境として誰でも思いつきそうな恐ろしく無難な名前だった)
もっとオリジナティ溢れる名前を指定しておけばこんな事にはならなかったのだろうな、
と思いつつも勉強になったので感謝。