データベースがRAC(Real Application Clusters)を実行していることを確認します。それが事実であり、すべてのデフォルト設定でシーケンスを作成すると仮定すると、それは予想される動作です。
デフォルト設定では、20個の値がキャッシュされます。デフォルトでは、RACクラスター内の各ノードには個別のキャッシュがあります。 2つのノードAとBを持つクラスターがあると仮定すると、初めてnextval
がAでリクエストされた場合、Aは値1〜20をキャッシュし、値1を返します。nextval
の次のリクエストの場合 がBで行われると、Bは値21〜40をキャッシュし、値21を返します。そこから取得する値は、接続が実行されているノードによって異なります。
通常、これは問題にはなりません。シーケンスは一意の番号を生成します。通常、番号は連続している必要はありません。シーケンスで生成された値による順序付けなどを行って「最初」または「最後」の行を決定するために、値を順番に返す必要がある場合は、ORDER
を使用できます。 シーケンスを作成して、値を順番に返すように強制する場合の句。ただし、返される値を同期するためにノード間で実行する必要のある通信量が増えるため、RACデータベースのパフォーマンスに悪影響を及ぼします。 「最初」または「最後」の行を決定する必要がある場合は、通常、date
を追加することをお勧めします。 またはtimestamp
主キーが順番に生成されると想定するのではなく、テーブルに列を並べて並べ替えます。