0

自動生成された主キーと DateTime フィールドを持つテーブルがあります。また、日付/時刻にクライアント コンピューターの時計を使用してレコードを挿入するクライアントがいくつかあります (つまり、これは真の「TimeStamp」フィールドではありません)。レコードが主キーで並べ替えられている場合、日付/時刻が数時間ずれているインスタンスがたくさんあります。最初は、クライアント コンピューターの時計がずれていたと思います。しかし、データベース上の何らかのキャッシング メカニズムである可能性があるとますます考えています。

これを説明するものはありますか?

4

1 に答える 1

3

Oracle は挿入または更新をキャッシュしません。DML ステートメントが終了すると、変更が完了したことを意味します。コミットすると、それらは永続的です。

ただし、Oracle は識別子の生成をキャッシュできます。主キーがシーケンスによって生成される場合、デフォルトで Oracle は 20 個のキーをキャッシュし、要求された順序でキーが配布されることを保証しません。

ORDER次のキーワードを使用します。

[...] シーケンス番号が要求順に生成されることを保証します。この句は、シーケンス番号をタイムスタンプとして使用している場合に役立ちます。通常、順序の保証は、主キーの生成に使用されるシーケンスでは重要ではありません。

例:

CREATE SEQUENCE your_sequence ORDER

もちろん、これはすべての挿入がSYSTIMESTAMPorも使用することを前提としSYSDATEています。クライアントの日付設定を使用する場合、Oracle は挿入を順序付ける方法がありません。

結局のところ、それは本当に重要ですか?ほとんどのアプリケーションでは、単一性のみが重要であり、自動インクリメンタル フィールドは GUID に置き換えることができます。特に、すでにタイムスタンプ列があるためです。

于 2012-10-10T15:39:30.763 に答える