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

Oracleでのグローバル一時テーブルの作成

    -Oracleでは、一時テーブルの作成が許可されています 。

    -一時テーブルの定義はすべてのセッションに表示されますが、一時テーブルのデータは、データをテーブルに挿入するセッションにのみ表示されます。

    -一時テーブルを作成するには、CREATE GLOBALTEMPORARYTABLEステートメントを使用する必要があります。

    -ON COMMIT句は、テーブル内のデータがトランザクション固有(デフォルト)であるかセッション固有であるかを示します

    行を削除

    これにより、トランザクション固有の一時テーブルが作成されます。セッションは、トランザクションが最初にテーブルに挿入されると、一時テーブルにバインドされます。バインディングは、トランザクションの終了時になくなります。データベースは、コミットするたびにテーブルを切り捨てます(すべての行を削除します)。

    行を保存する

    これにより、セッション固有の一時テーブルが作成されます。セッションは、セッション内のテーブルへの最初の挿入で一時テーブルにバインドされます。このバインディングは、セッションの終了時、またはセッションでテーブルのTRUNCATEを発行することで解消されます。セッションを終了すると、データベースはテーブルを切り捨てます。

    一時テーブルは、結果セットがバッファリングされるアプリケーションで役立ちます。おそらく、複数のDML操作を実行して構築されているためです。

    CREATE GLOBAL TEMPORARY TABLE GL_DATA_TEMP
    (startdate DATE、
    enddate DATE、
    gl_id CHAR(20))
    ON COMMIT DELETE ROWS;

    インデックスは一時テーブルに作成できます 。これらも一時的なものであり、インデックス内のデータは、基になるテーブル内のデータと同じセッションまたはトランザクションスコープを持ちます。

    TRUNCATEステートメントが一時テーブルに対して発行された場合、セッション固有のデータのみが切り捨てられます。他のセッションのデータへの影響はありません。

    トランザクションをロールバックすると、テーブル定義は保持されますが、入力したデータは失われます。

    一時テーブルのデータは、REDOを生成しない一時テーブルスペースの一時セグメントに格納されるため、グローバル一時テーブルを使用した操作は比較的高速です。ただし、UNDOは、REDOログが設定されているUNDOテーブルスペースで引き続き生成されます。したがって、やり直し操作はグローバル一時テーブルで完全に排除されるわけではありませんが、比較的低くなります

    一時テーブルのデータは、異常終了した場合でも、データベースセッションの終了時に自動的に削除されます。

    ビューは、一時テーブルおよび一時テーブルと永続テーブルの組み合わせに対して作成できます。トリガーを関連付けることができます

    12.1(12cデータベース)Oracleリリースでは、一時的な取り消しの概念が導入されました。これにより、グローバル一時テーブルの取り消しセグメントを一時表領域に格納できます。これにより、グローバル一時テーブルをフィジカル・スタンバイ・データベースおよび読み取り専用データベースで使用できるようになり、REDOを作成する必要がなくなります。

    ALTER SYSTEM SET TEMP_UNDO_ENABLED =TRUE;
    ALTER SYSTEM SET TEMP_UNDO_ENABLED =FALSE;


    1. テーブル名の適切な挿入

    2. 挿入無視をエミュレートし、postgresqlを使用して重複キー更新(SQLマージ)を行う方法は?

    3. MySQLはデータベースにインデックスを表示します

    4. SQLCipherとgreenDAOの統合