2009年10月21日

[DB2]インストールログ

サイレントインストールした場合のログ保存先

http://www.ibm.com/developerworks/jp/data/library/dataserver/techdoc/installtranspa.html#6_2

インストールのロギング

ログ・ファイルのパスと名前は、DB2セットアップ・プログラムのオプショナル・パラメーターです。ログ・ファイルのパスと名前を指定しない場合は、デフォルトのディレクトリーにデフォルトのログ・ファイルが作成されます。

* Windowsでは、デフォルトのファイルは、DB2インストールが実行されたユーザーIDの下のMy Documents\DB2LOGディレクトリー内のdb2.logです。

* LinuxおよびUNIXプラットフォームでは、デフォルトのファイルは/tmp/db2setup.logです。

これらのログ・ファイル以外に、他の補助ログ・ファイルおよびダンプまたはトレース・ファイルが、デフォルトのディレクトリーに作成されます。

* Windowsでは、指定したパスまたは上記のデフォルトのパスに、db2wi.logという名前の別のログ・ファイルがWindowsインストーラーから作成されます。インストールの間に、現在のインストールのログ・エントリーがdb2wi.logファイルに記録されます。db2.logファイルには、 Windowsの現在および過去のインストールに関する情報が保管されます。この情報は、DB2インストールの終了時に更新されます。

* Linux およびUNIXシステムでは、ほかにもDB2生成ファイルが/tmpディレクトリーに作成される場合があります。db2setup.hisログ・ファイルには、現在および過去のインストールの履歴情報が維持されます。db2setup.errログ・ファイルには、すべてのエラー・エントリーが保管されます。


サイレントのコマンドも環境によって異なる。
(これぐらい合わせられないものか・・(´-ω-`))

win  setup.exe /u resp.file
unix  db2setup -r resp.file
posted by koteitan at 16:25| Comment(0) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

2009年06月24日

[DB2]runstatsがメモリ不足

db2にて大量のレコード(1000万件以上)あるテーブルを
普通にrunstatsすると

SQL2310N The utility could not generate statistics. Error "-930" was returned

diagにはOSERR : ENOMEM (12) "Not enough space"とかあるし。
物理メモリは笑える数字ぐらい積んでるのにね。何十GBだぜ。
空きも一杯ある。

いろいろ調べてはみたんだが、
・ulimitのOS制限じゃね?
→ 全て-1の無制限
・4ktempの容量じゃね?
→何百GB空いてる

sampledを付けて実行すれば問題無く完了するので、それで急場は
凌いだのだけれども。
原因がわからんとモヤットボールが貯まる。

DB2の設定の何かの制限にはまってそう。
考えられるものはUTIL_HEAP。しかし、これだとメッセージが違うはず。

海外のBBSやblogからstat_heap_szだよって記事はあったけど
これだとSQL2312N じゃないの?(´-ω-`)

sampledで実行したあとはもう出なくなるし検証できん。
更新する内容が変わったのかな。

再現しなくなったし、もうヽ(`Д´)ノ モヤットモヤットモヤットモヤット

http://db2forum.jp/viewtopic.php?p=6414&sid=f6f928f7ad23ae1308001206909264ba
http://www-01.ibm.com/support/docview.wss?uid=std35119d73eeac791d6492573440004742c
http://www.channeldb2.com/profiles/blogs/runstats-sql2310n-the-utility
http://database.ittoolbox.com/groups/technical-functional/db2-l/runstats-problems-2455931?cv=expanded
http://www.lazydba.com/db2/2__16785.html

posted by koteitan at 18:49| Comment(0) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

2009年03月19日

[DB2]db2look

lookは意図してみること、see は視界に入るようなものを指す。
と中学とかで習った記憶がよみがえったりしませんか。
lookチョコレートの方ですか?そうですか、すみません。

開発や、DB保守などで

「このVIEW定義、本当にこの仕様書と合ってるんだろうな・・?」
とか
「仕様書?( ゚Д゚)ハァ?それ食い物?うまい?」
みたいな時に役に立つツール、それがdb2look。

http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/core/r0002051.htm?resultof=%22%64%62%32%6c%6f%6f%6b%22%20

DB名 hoge スキーマ名 fuga view名 hage だとすると、

db2look -d hoge -e -z fuga -v hage -o out.file

とすれば、カレントディレクトリにout.fileというテキストが作成され、
その中身にcreate view 文がある。
一括でだしたり、複数指定もできるので、詳しくはリンク先の
マニュアル参照。

ちなみに私は不二家事件ではカントリーマァムよりLOOKチョコレートが心配だった派だ。
あれでウイスキー呑むと( ゚д゚)ウマーだよな。
posted by koteitan at 11:45| Comment(0) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

2009年02月17日

[DB2]現在日時の取得

oracleのdualがsysibm.sysdummy1

db2 "select current date from sysibm.sysdummy1"

こういう使い方もできる。
30日以上前のレコードを取得する。
select * from sample_table where (days(current date) - days(hoge)) >= 30

余談だが、間違っても日付操作のためだけにSQL投入なんてのはNGな。APPサーバー側でやるべき。ConnectionPoolであれどうであれ、
コストが甚大じゃないぜ。


posted by koteitan at 10:59| Comment(0) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

2008年12月25日

[DB2]コマンドメモ(1)

いちいち調べるの面倒なので、ここにメモ

テーブルスペース一覧
db2 "list tablespaces show detail"

テーブルスペースコンテナ列挙
db2 "list tablespace containers for [TBS_ID]"

TBSサイズ変更
db2 "alter tablespace [TBS_NAME] resize ( FILE '/hoge/fuga.dat' [Page数])"

TBSコンテナ追加
db2 "alter tablespace [TBS_NAME] add (FILE '/hage/hoge.dat' [Page数])"

----
再編の要否をチェック+runstats
REORGCHK UPDATE STATISTICS ON TABLE ALL

再編の要否をチェックのみ
REORGCHK CURRENT STATISTICS ON TABLE ALL

テーブルを再編
REORG TABLE [TABLE名]

あるテーブルに属するindexを全て再編
REORG INDEXES ALL FOR TABLE [TABLE名]

あるテーブルのデータを特定のindex順に再編する
REORG TABLE [TABLE名] INDEX [INDEX名]

あるテーブルに対して統計情報更新
RUNSTATS ON TABLE [TABLE名]

 → データが100万件以上の場合は
  RUNSTATS ON TABLE [TABLE名] AND SAMPLED DETAILED INDEXES ALL 

データベースをリバインド
db2rbind [DB名] -l [ログファイル名] ALL

※runstats後、静的SQLがある環境なら(ストアドなどがあるのなら)
実施しないと更新された統計情報が更新されない。

-----
作成すべきインデックスについてアドバイスを得る
db2advis -d [DB名]-s "SQL文"
or
db2advis -d [DB名]-i ワークロードファイル

※ワークロードファイルは複数SQL+重みづけの情報を持つ
テキストファイル。複数のSQLの相関を考慮したIndex指南が
欲しい場合に使用



posted by koteitan at 17:59| Comment(0) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

[DB2]db2exfmt

実行計画を取得しようとして、

DB2 Universal Database Version 9.1, 5622-044 (c) Copyright IBM Corp. 1991, 2006
Licensed Material - Program Property of IBM
IBM DATABASE 2 Explain Table Format Tool

Enter Database Name ==> mydb
Connecting to the Database.
Connect to Database Successful.
Binding package - Error during Bind, near line 1412.

Error Message =
SQL0035N ファイル "db2exfmt.msg" がオープンできません。


SQLCA
Size = 136
SQLCODE = -35
Tokens = db2exfmt.msg
Function= sqlabndx
RC = 0x0000 = 0
Reason = 0x0000 = 0
Reason2 = 0x0000 = 0
Warning flags =

Press ENTER to Continue ...
Error during bind.
Bind messages can be found in db2exfmt.msg

と、わけのわからんメッセージが出た場合、
一旦インスタンスオーナーから抜けて、
もう一度オーナーへsuするとうまくいく。
EXPLAIN.DDLを流した直後に出やすい。しかもV9でしか出たことない。
posted by koteitan at 16:56| Comment(0) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

2008年12月16日

[DB2]続・ログがいっぱい

このDB見積もったヤツ出てこい。(゚Д゚ )ゴルァ!!
そのSQLCODE覚えたぞ・・・!!とアヌビスのスタンドが出そうだ。

アーカイブログなら動かせばいいんだが、アクティブが溢れたときが
やばい。マニュアルの対策がはっきり言って意味フ。

http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/core/rsql1700.htm

(SQL1762を検索)


合っているかわからんけど、こうなった場合のアクション
・archivelog コマンドでアクティブログをクローズする
→ http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/core/r0004476.htm?resultof=%22%41%72%63%68%69%76%65%22%20%22%61%72%63%68%69%76%65%22%20

・archivelog コマンドのための接続すらできない場合
空き容量を広げる
・空き容量を広げられない場合(HA停止できないなど)は
のこりの容量に収まるようにログの設定を変える。(小さくする)
しかし、これは最後の手段である。
(LOGPRIMARY または LOGFILSIZ を変える)

・ログの設定を変更した時点でログが初期化されるので、diagで確認する

・オフラインバックアップを取得し、データを保全
・LIST HISTORYコマンドでバックアップ時のアクティブログを確認する
→ http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/core/r0001991.htm?resultof=%22%4c%49%53%54%e3%80%80%48%49%53%54%4f%52%59%22%20
( Earliest Log からCurrent Logのこと)

・db2stopし、不要なアクティブログを捨てる
・db2startし、diagにエラーが無いことを確認する。
・ログの設定を戻す(LOGPRIMARY または LOGFILSIZ)
・db2stop & db2start

アーカイブが溢れた時、LOGPRIMARY の数を超えて容量いっぱいまで
アクティブが溢れるのは何故だろうな。なんか設定あるんだろうか。

参考リンク
http://db2watch.com/wiki/index.php/%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%95%E3%82%A9%E3%83%AF%E3%83%BC%E3%83%89%E5%9B%9E%E5%BE%A9%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF
http://coredump.news-site.net/tech/db2/recovery/db2_recovery_contents.html


posted by koteitan at 15:36| Comment(3) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

[DB2]小技メモ

小力じゃないぞ。(最近、みないね。)

ストアドなど「;」がコマンド区切りに使われると都合が
悪い場合のddl実行するとき 左斜め下

「@」などのあまり使わない文字を区切り文字として作成し、
実行時には db2 -td@ -vf hoge.ddl と実行

参考リンク
http://www16.atwiki.jp/rinn/pages/55.html
http://okwave.jp/qa1890125.html
http://blog.goo.ne.jp/nokonoko2006/e/cd1cc2bedbe3975e4e8d9fa0bf815e73
posted by koteitan at 15:00| Comment(1) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

2008年11月25日

[DB2]停止手順

DB2の止め方

db2stop
db2gcf -d
db2stop force
db2_kill ( WSE の場合は db2nkill V7以前は db2stop -kill)

kill -9 [PID] (PIDはdb2agent db2sysc などの番号を指定)

上の方が安全。下に行けば行くほど、整合性破壊などの危険がある。
停止効力は下の方が強い。

バックアップ無ければ、killとかもう((((;゚Д゚)))ガクガクブルブルで
エンター押すしかない。

このハンドブックとか この破壊体験☆ とか見て
予行練習しておけばちょっとは震えが止まるかもしれない。

まぁ、それでもdiagに Crash Recovery faildとかでたら
泣きそうになるんだけどねッ!


11/26 SIMさん、情報提供感謝します。
posted by koteitan at 11:10| Comment(2) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

2008年11月21日

[DB2]ログが溢れる件

そりゃ、BLOBとかログとればあっという間に溢れるわな。
SQLSTATEでいうと、SQL0968とかSQL964、SQL1004とか。


ロールフォワードとかシラネなら、アーカイブログとアクティブログを
別の場所に逃がせばなんとかなる。

12/02修正 
アクティブを逃がすをdiagにえらい怒りのログがでてクラッシュすることが
稀によくあるので、逃がすのはアーカイブだけが安全。
完全バックアップリストアも辞さない覚悟なら
アクティブも逃がしても動くことは動くけどね。
USEREXITを作って自動に逃がすとか循環ログに設定を代えるとかが
安全策ではあるか。姑息法には違いないがね。


原因は基本的にログ容量の見積もり不備

参考
http://www-06.ibm.com/jp/domino01/mkt/dminfo.nsf/499721c3388537bd49256b1a001aab28/49256dcd002669c7492570ec00580090/$FILE/%E4%BB%98%E5%B1%9Elogging.pdf
posted by koteitan at 11:34| Comment(1) | TrackBack(1) | DB2 | このブログの読者になる | 更新情報をチェックする

2008年10月31日

[DB2]DIA8555C とか SQLO_OUE_BAD_HANDOLEとか

|‘ε ’)ノィョゥ

db2 CLI 9.xxあたりからだったか忘れたが、diagに

FUNCTION: DB2 UDB, oper system services, sqlowqueInternal, probe:40
MESSAGE : ZRC=0x870F003E=-2029060034=SQLO_QUE_BAD_HANDLE "Bad Queue Handle"
          DIA8555C An invalid message queue handle was encountered.
CALLED  : OS, -, write
OSERR   : EINVAL (22) "Invalid argument"
DATA #1 : system V message queue identifier., PD_TYPE_SYSV_QUEUE_ID, 4 bytes
0x1DD001B8
DATA #2 : Pointer, 8 bytes
0x0000000110035760
DATA #3 : unsigned integer, 8 bytes


こんなのが出る場合、大概はdb2のcliコマンド結果を
中途半端にパイプに食わせている。(headとか)

×"db2 list tablespaces show detail | head -81" 
○"db2 list tablespaces show detail | awk '{print $0}' | head -81 "

であるから、アプリケーションがエラーを吐いたり、
変な挙動が確認されない場合は、あまり気にする必要はない。

http://www-01.ibm.com/support/docview.wss?uid=swg21259051
posted by koteitan at 17:48| Comment(0) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

[DB2] シーケンスの確認・削除

シーケンス一覧の列挙

SELECT SEQSCHEMA, SEQNAME FROM SYSCAT.SEQUENCES WHERE SEQSCHEMA='YOUR SCHEMA'

シーケンスの削除
DROP SEQUENCE YOURSEQUENCE


selectの表示が横に間延びして(´Α`)ウザイときは、
substr(seqschema,1,30) とかにしておくと幸せかも。
posted by koteitan at 11:13| Comment(0) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

2008年09月04日

[DB2]UniversalDriver でのJDBCトレース

|‘ε ’)ノィョゥ

Type2のCLIだと、db2cli.iniにごにょごにょ書けば良かった。


TRACE=1
TRACEFILENAME=/TRACE/clitrc/db2cli.trc
TRACECOMM=1
TRACEFLUSH=1
TRACETIMESTAMP=1
TRACESCRIPT=1
JDBCTRACE=1
JDBCTRACEPATHNAME=/TRACE/jdbctrc
JDBCTRACEFLUSH=1

http://www-06.ibm.com/jp/software/data/developer/library/techdoc/db2traces.html
http://publib.boulder.ibm.com/infocenter/db2luw/v8//topic/com.ibm.db2.udb.doc/ad/c0007959.htm


JCCドライバ(TYPE4)の場合は、この設定は読まないので
プログラマブルに対応する。

接続文字列に入れたり
String databaseUrl = "jdbc:db2://localhost:50000/sample"
+ ":traceDirectory=c:\\temp"
+ ";traceFile=trace"
+ ";traceFileAppend=false"
+ ";traceLevel="
+ com.ibm.db2.jcc.DB2BaseDataSource.TRACE_ALL
+ ";";
DataSourceの設定値で行う
// set trace properties
ds.setTraceDirectory("c:\\temp");
ds.setTraceFile("trace");
ds.setTraceFileAppend(false);
ds.setTraceLevel(com.ibm.db2.jcc.DB2BaseDataSource.TRACE_ALL);

WebSphereからConnectionPool経由で利用の場合、
DataSourceがJCCなクラスじゃなく、WebSphereなクラスで
ラップされている為、このようなメソッドは受け付けない。
親子関係も無いので強引なキャストしても例外になるだけである。
(DataSourceのsetLogWriter()で多少は取れるかもしれないが)

よって、WebSphereの場合、データソースのカスタムプロパティで
設定する方法しかない。
(あればコメントしてヽ(`Д´)ノクレヨ)

http://www-06.ibm.com/jp/services/its/support/svcdoc/db2/jdbc_jcc.html
http://www-06.ibm.com/jp/software/data/developer/library/techdoc/db2traces.html
http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0506fechner/index.html
http://db2watch.com/wiki/index.php/JDBC_%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9%E3%82%92%E3%81%A8%E3%82%8B%E3%81%AB%E3%81%AF
http://www-01.ibm.com/support/docview.wss?rs=71&context=SSEPGG&q1=DRDA&uid=swg21181878&loc=en_US&cs=utf-8&lang=en

posted by koteitan at 11:35| Comment(0) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

2008年08月07日

[DB2]行長の見積もりについて

単純に見積もった長さの合計ではない事を念頭に置く必要がある。
4kページだから、4096までデータが詰め込めるかというとそうではない。

サイズプランニングについてはこのPDF がわかりやすい。

また、InfoCenter-SQL解説-create table の項
各データ型がデータ以外で使用する領域情報について詳しく載っている。

読むの('A`)マンドクセって人用にショートカット情報
ページ・サイズ行サイズの制限列数の制限
4K 4005 500
8K 8101 1012
16K 16293 1012
32K 32677 1012

Total Columns * 8 + Number of LOB Columns * 12 +
Number of Datalink Columns * 28 <= row size limit for page size.
バイトカウント(例外も有り)
データ長さ+Null可の場合は(+1)。
可変長の場合は(+4 長さ情報)
参考リンク
posted by koteitan at 11:27| Comment(0) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

2008年08月06日

[DB2]データ消去について

だから、データベースは嫌いなのだぁあ!
(東方不敗のように叫ぶ)

高速にデータを削除する方法
truncateはoracleでしかできないので、/dev/null をreplace load / import


import from /dev/null of del replace into tbl

import だとログを書くから、でかいテーブルは溢れる。
そんときはloadで。制約があるときはチェックする。
このロードはバックアップペンディングにしないようにしている。
バックアップしたい場合は最後のnonrecoverable を外す。

load from /dev/null of del replace into tbl nonrecoverable
set integrity for tbl immediate checked


http://www-1.ibm.com/support/docview.wss?uid=std3564fcf4026b534b1492570d5000a2785

posted by koteitan at 12:09| Comment(0) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

2008年07月11日

[DB2]Loadペンディングの解除

(゚Д゚ )アラヤダ!!
Load中に俺のシェルが暴走したとおもって、Ctrl+Cしちゃったら
順調にロード中だったじゃねぇか! てな場合、そのテーブルは
Load中断状態になり、アクセスできなくなる。

これを解除するには、そのLoadを再開するか、terminateするか。
再開は同じLoadをもう一回流せばよろしい、terminateは

db2 load from tbl1.del of del terminate into tbl1

強制ロールバックになり前回のSAVEポイントまで戻るらしいぜ。


詳しくはここ↓読んでくれ。
http://www-1.ibm.com/support/docview.wss?uid=std36e0f7346dc97c71049256f1c0013ec74

俺は今からそのシェルのバグを取らねばならん。
有識者()笑 に確認したのに、やっぱset integrityの順番は
全部LOADしたあとに親子関係の順番にで合ってるじゃねーかo(`ω´*)o
LOAD毎にやっても同じとか嘘いうな、コストばっかりとりやがって。
( ´ー`)フゥー...つべこべ言う前にさっさと直そう。
何、こんなの大した問題じゃない。このあとのドキュメント修正とか
UTケースのやり直しとかが(´Α`)ウゼーヨ
posted by koteitan at 16:05| Comment(0) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

2008年07月10日

[DB2]属しているテーブルスペースの確認

なんの設計資料もないとか、紙と実物が合っていないカオスな時には
実機から資料を起こすという謎な作業もあるでしょう。
設計がそんなに工数を積む意味に悩むこともあるでしょう。

しかし、技術者たるもの、そんな細かいことでめげてはならない。
愛と勇気と知識と愚痴で突破するのだ。ワケワカラン。


あるテーブルが、どのテーブルスペースを利用しているのか
わからぬ場合、システムテーブルから取り出すことができる。

SELECT TBSPACE FROM SYSCAT.TABLES
WHERE TABSCHEMA='スキーマ' AND TABNAME='テーブル'

インデックスの場合はテーブルがSYSCAT.INDEXES 
カラムがINDNAME TBSPACEで結合してね。

あー、テーブルスペース名一覧は

db2 list tablespaces show detail な。

しかし、なんだこのマイナスの仕事をゼロに戻している感の
作業・・。不毛だ・・。
銀河英雄伝説の名セリフ
「無害だけならまだしも有害とあっては・・」
言いたい。超言いたい('A`)続きを読む
posted by koteitan at 17:34| Comment(0) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする

2008年06月18日

[DB2]db2start で TCPIPエラー

なんぞ、表題の様な事象らしい。
普通にインスタンスを./db2icrt で作成して、
DB2COMM=TCPIP、/etc/services にもちゃんとサービスポートを
登録したとのこと。( ・ω・)ハテ?

diagにはTCPIPの接続に失敗したとの記載がある。
接続先は自分自身のはずなんだが、FW等で閉じている気配はない。
似た事例をgoogle先生に聞いてみると、

ホスト名を変更した時にdb2startできない場合
http://db2.jugem.cc/?eid=88


というblog記事が事例に酷似している。てか、この状態になっている。
db2nodes.cfgを見てみると、確かにこのサーバーの実ホスト名が記載されているが
この名前では通信出来ない。何故ならば、このDBサーバーはHACMP構成であり
代表名がホスト名になるため、本来のサーバー名では通信がブロックされているのだ。
ここを代表名になおして万事解決。
posted by koteitan at 14:03| Comment(0) | TrackBack(0) | DB2 | このブログの読者になる | 更新情報をチェックする