sql >> データベース >  >> RDS >> Oracle

Oracle での ORA_ROWSCN の動作を理解する

    デフォルトでは、ORA_ROWSCN 行レベルではなく、ブロック レベルで格納されます。テーブルが最初に ROWDEPENDENCIES で構築された場合、行レベルでのみ保存されます 有効にします。テーブルの多くの行を 1 つのブロックに収めることができ、APPEND を使用していないと仮定すると、 テーブルの既存の最高水準点より上に新しいデータを挿入するようにヒントすると、既存のデータが既に含まれているブロックに新しいデータを挿入する可能性があります。デフォルトでは、これにより ORA_ROWSCN が変更されます

    ORA_ROWSCN以降 行に最後に DML があったときの上限であることが保証されているだけです。 CREATE_DATE を追加して、今日挿入された行数を判断する方がはるかに一般的です。 SYSDATE にデフォルト設定されるテーブルへの列 または SQL%ROWCOUNT に依存する INSERT の後 実行しました (もちろん、単一の INSERT を使用していると仮定します) すべての行を挿入するステートメント)。

    通常、ORA_ROWSCN を使用して と SCN_TO_TIMESTAMP この関数は、テーブルが ROWDEPENDENCIES で構築されていても、行がいつ挿入されたかを特定する方法として問題があります。 . ORA_ROWSCN システム変更番号である Oracle SCN を返します。これは、特定の変更 (つまり、トランザクション) の一意の識別子です。そのため、SCN と時間の間に直接のリンクはありません。私のデータベースは、あなたのデータベースよりも 100 万倍も速く SCN を生成している可能性があり、私の SCN 1 はあなたの SCN 1 とは年数が異なる可能性があります。Oracle バックグラウンド プロセス SMON SCN 値をおおよそのタイムスタンプにマップするテーブルを維持しますが、限られた期間のみそのデータを維持します。そうしないと、データベースは、SCN からタイムスタンプへのマッピングを格納するだけの数十億行のテーブルになってしまいます。行がたとえば 1 週間以上前に挿入された場合 (正確な制限はデータベースとデータベースのバージョンによって異なります)、SCN_TO_TIMESTAMP SCN をタイムスタンプに変換できず、エラーが返されます。




    1. MySQLのテーブル名では大文字と小文字が区別されますか?

    2. ストアドプロシージャを実行する場合、CommandType.Textを使用するのと比較してCommandType.StoredProcedureを使用する利点は何ですか?

    3. MySQLのutf8mb4とutf8文字セットの違いは何ですか?

    4. Slickで生成されたクエリのエイリアスを削除する