Oliverの日記: K.O. 9
日記 by
Oliver
明朝、データベース実習の最終プロジェクト(簡易な在庫/仕入れ/注文管理システムの設計と実装)の検収なのだが、今の気分を一言であらわすと、
もうだめぽ。
だ。単位がもらえそうなくらいにはパッチワークしたが、GUI担当のコードをチェックしていて、マジで頭痛がしてきたので早退した。いくら提出以後はバージョンアップもしなければ、バグ潰しもしない、といっても、いくばかは構造があってもいいじゃないか。あなた、GUI担当のクラスでコンストラクタしかないって、なんですか。(数百行におよぶこともあるコールバック等はコールバックを設定する場でインライン定義) Javaって気を使わない場合はデフォルトで読めないコードが出てくるんだから、気をつかぇぇぇぇ。
この実習の教訓:
- 可能な限り、オラクルは使わない。履歴書にも決してオラクル経験あり、とは書かない。
挙動が素直じゃないスギ、ちったぁPostgreSQLを見習って欲しい。 - Trust was good, Control would have been better.
数回の小さなものをみて、コードが信用できそうと思っても信用するな。誰もが人にみられる/人にメンテされることを前提にコードを書けるわけではない。オープンソースソフトウェアのコード品質って実はかなり高い。
心底疲れたので、検収が終ったら週末はノートも持たずに旅に出ることにした。週明けまでは探さないでください。
追記(月曜深夜):ただいま。すっきり。
挙動 (スコア:1)
Oracle が非難されても別になんとも思いません。ただ、そうやってひっかかるところってのは、何か直感的じゃない、設計やインタフェースのマズさがあるように思えるし、Oracle ならではのバッドノウハウかもしれないので、知りたいなぁと。
もし、旅から戻ってきてもまだ「くそぅ!」なんて思うところがあったら是非。
# 僕なら履歴書には「Oracle 経験者」と書きます :-)
-- cooper
Re:挙動 (スコア:1)
あとオプティマイザの挙動はなぞかも。
Re:挙動 (スコア:2, 参考になる)
# PostgreSQL も遅延してたような...
オプティマイザに関しては、遅いなぁと思う時は大抵 explain plan で事前に確認しているので、その段階で最適化手法はわかります。おかしなパスになっているのは、正規化ができてなかったり、インデックスの張り忘れっていうような基本的なチョンボが多いですね、僕の場合。
気になったのが「通常エラーを返す~」の下り。これって、饌療?砲呂匹鵑塀萢?任靴腓Δ?
-- cooper
Re:挙動 (スコア:1)
気になったのが「通常エラーを返す~」の下り。これって、具体的にはどんな処理なんでしょうか?
-- cooper
Re:挙動 (スコア:1)
なんかそういうのが素直じゃないな、と。
あと遅延書き込み云々はOSレベルのそういうのじゃなくて、Redoやらなんやらの仕組みでcommitした時点でデータファイルに反映されてないってのがリカバリの時にわかりにくいかな、と。
まあ、これはPostgresとかも同じなのかもしれませんが。
Re:挙動 (スコア:1)
- PL/SQLでミスると"Success with compilation error"。どこがSuccessじゃい。
- 絶対にこのセッション以外にユーザがいないテーブルを何十分もロックされていると言われてDROP TABLEできん。
- 同一セッション内なのに変更がすぐに見えない。DELETEで全部消した直後にSELECT count(*)すると>0だなんて。sleep 15入れるとOK。いくら遅延書き込みでもREAD COMMITEDな別セッションならまだしも、同一セッションはダメだろう。
- なんで DUAL ?
というのが消し去られた忌まわしき記憶から発掘されてきました。
データベース管理者は希望職種じゃないし、書かなくても採用されるようなスキルをもった人になりたいので、履歴書には書かないつもりです。
Re:挙動 (スコア:1)
なんとなく予想していたのは、デフォルトでトランザクションが有効になっているところかなぁと思っていたのですが、違ったみたいですね。dual は僕も最初「???」でしたが、特殊な値を SELECT のインタフェースで得るために都合がいいんだな、ぐらいに思ってます。ネーミングセンスは別にして。
まあでも、すっきりしたようでなによりです。
-- cooper
Re:挙動 (スコア:1)
思いっきり外していそうですが、nologgingを明示的に指定してやれば改善されたりしないかな、と。
# drop tableでも引っかかっているというのなら、redoじゃなくてcontrolファイルへのi/oがネックのような気もしますが^^;似たような遅延が頻発するOracle8iの環境で、結局、redoがボトルネックだったってことが何度かありましたので。機会があればお試しください。
Re:挙動 (スコア:1)
エラーなんやったらエラーコードだせっちゅーねん。
>- 絶対にこのセッション以外にユーザがいないテーブルを何十分もロックされていると言われてDROP TABLEできん。
絶対にってどうやって確認しました?
案外切ったはずのセッションが残ってたりするのかも。
もしくはロックだけ残ったかな・・・。
- 同一セッション内なのに変更がすぐに見えない。DELETEで全部消した直後にSELECT count(*)すると>0だなんて。sleep 15入れるとOK。いくら遅延書き込みでもREAD COMMITEDな別セッションならまだしも、同一セッションはダメだろう。
>- 同一セッション内なのに変更がすぐに見えない。DELETEで全部消した直後にSELECT count(*)すると>0だなんて。sleep 15入れるとOK。いくら遅延書き込みでもREAD COMMITEDな別セッションならまだしも、同一セッションはダメだろう。
これは聞いたこと無いですね。
遅延書き込み云々の問題じゃないし。
なんでしょうね。
>- なんで DUAL ?
謎ですね。