dポイントプレゼントキャンペーン実施中!

oracleのStatspackレポートに出てくる9iまでの「Hash Value」もしくは10g以降の「Old Hash Value」について教えてください。

この値は「SQLに固有に振られるID」だと考えていたのですがこの認識はあっていますでしょうか?

※大文字小文字・スペースの数・改行の位置が異なるだけでも異なる値になり、別のSQLと判断されてしまうということは知っています。また、oracleのバージョンが異なっても同じアルゴリズムが使用されていることも知っています。


「Hash Value」という言葉から連想する私の想像の範囲に過ぎませんが
・SQLの文字列をhash計算により算出しているのだろう
・基本hash値だけで「ほぼ」一意に定まる
・稀に衝突も起こりうる
・実質的には変化する値であり、実は「ID」ではなく、一貫性は保障されない
ではないかと思います。

なのですが、一意であると保障されなければ実用性が下がってしまうと思います。
例えば再起動したら変化してしまう可能性があるとかだと。


衝突は絶対にありえないのでしょうか?
どんな状況でも変わることのない値なのでしょうか?
再起動しても、インスタンスが異なっても変わることはないのでしょうか?
稀に変化してしまう値なのでしょうか?

この点について教えてください。よろしくお願いします。

A 回答 (1件)

SQL はSQL_ID とHASH_VALUE でユニークになっていたと思いますが。


HASH_VALUE だけでは衝突の可能性が全くないとは言えないことはご認識の
通りだと思います。

もっとも、そんな簡単に衝突するのであればSHA1やMD5などが役に立たないと
いうことにも繋がってくるので、故意に衝突させることは不可能なレベルではありますが。
    • good
    • 0
この回答へのお礼

「Hash Value」はそもそも「ID」では無いのですね。衝突可能性がある値であるということがわかりすっきりしました。それで別途「SQL ID」が用意されているのですね。

参考になりました。ありがとうございました。


個人作成のサイトなので情報の信頼性は十分ではありませんが、近い情報があったので、メモしておきます。

データベースコンサルタントのノウハウちょい見せ
私が使うSQL文の捕まえ方&実行計画取得方法
http://odakeiji.blog33.fc2.com/?mode=m&no=23

お礼日時:2011/05/25 07:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!