Oracleモードでサポートされている分離レベル
OceanBaseデータベースは、Oracleモードで以下の分離レベルをサポートしています:
Read Committed:あるトランザクションが実行するクエリは、そのクエリ開始前にコミットされたデータしか見ることができません。Read Committedでは、不重复読み取りと幻覚読み取りの2種類の異常状態を防ぐことはできません。
Serializable:あるトランザクションのクエリは、トランザクション開始前にコミットされたデータしか見ることができません。これは最も厳密な分離レベルであり、ダーティーリード、不重复読み取り、幻覚読み取りの3種類の異常状態を防ぐことができます。トランザクションは直列実行されているかのように見えます。
OceanBaseデータベースのデフォルトの分離レベルはRead Committedです。
分離レベルの動作比較
OracleデータベースはRead CommittedとSerializableの2つの分離レベルをサポートしており、OceanBaseデータベースのOracleモードは、これら2つの分離レベルにおける動作がOracleデータベースと一致します。
分離レベルの設定方法
分離レベルの設定には、トランザクションレベルとセッションレベルの2つの方法があります。
トランザクションレベル
SET TRANSACTION ISOLATION LEVEL [READ COMMITTED | SERIALIZABLE];このステートメントは新しいトランザクションを開始し、そのトランザクションの分離レベルを設定します。
セッションレベル
ALTER SESSION SET ISOLATION_LEVEL = [READ COMMITTED | SERIALIZABLE];
分離レベルの使用制限
トランザクションの実行中に分離レベルを設定することは許可されていません。その場合、以下のエラーが発生します:
ERROR:OBE-01453: SET TRANSACTION must be first statement of transactionSerializable分離レベルを有効にする際は、グローバルタイムスタンプサービス(Global Timestamp Service)が有効であることを確認する必要があります。
セッションはセッションレベルのトランザクション分離レベルを維持します。トランザクション開始時には、セッションレベルのトランザクション分離レベルを取得します。この分離レベルは、トランザクションレベルの分離レベルによって上書きされる可能性があります。