すべてのプロダクト
Search
ドキュメントセンター

PolarDB:フラッシュバックを落とす

最終更新日:Sep 29, 2024

PolarDB for PostgreSQL (Oracleと互換) はアンドゥログを提供しません。 偶発的な操作により、データが失われる可能性があります。 たとえば、DROP TABLEステートメントの実行後にデータが失われる可能性があります。 PolarDB for PostgreSQL (Oracleと互換) のドロップフラッシュバック機能を使用すると、削除されたテーブルをすばやく復元し、ごみ箱を表示および消去できます。 これらは、データを回復する目的を果たします。

注意事項

  • 重要なテーブルを削除するときは、ドロップフラッシュバック機能を有効にすることを推奨します。 ルーチン操作を実行するときは注意してください。

  • ドロップフラッシュバック機能を有効にすると、削除されたテーブルはごみ箱モードで実行されるスペースに移動します。 テーブルは真の意味で削除されないため、テーブルが占有しているスペースは解放されません。 したがって、大量のデータが蓄積されると、大きなディスク空間が占有される可能性があります。 定期的にごみ箱をクリアすることをお勧めします。

  • この場合、削除されたテーブルの依存関係を削除する試みは失敗する可能性があります。これは、テーブルが実際には削除されず、テーブルがこれらの依存関係を使用するためです。

  • 削除されたテーブルは、recyclebinモードで実行されるスペースに移動されるためです。 recyclebinモードのテーブルはpurge recyclebinステートメントによってクリアされるため、recyclebinという名前のモードを作成しないようにしてください。

  • ドロップフラッシュバック機能が有効になっている場合、次の操作はサポートされません。

    • 削除されたパーティションテーブルと一時テーブルはフラッシュバックできません。 パーティションテーブルと一時テーブルは実際に削除され、復元できません。

    • sql_dropイベントトリガーはサポートされていません。

パラメーター

パラメーター

データ型

説明

polar_enable_flashback_drop

BOOL

ドロップフラッシュバック機能を有効にするかどうかを指定します。 デフォルト値: OFF。 有効な値:

  • ON

  • OFF

構文

ドロップフラッシュバック機能は、次のSQL文をサポートします。

  • 削除ポリシー

    drop table table_name;         # Move the table to the space which runs in recycle bin mode. 
    drop table table_name purge;   # Delete the table, which cannot be restored. 
  • 削除されたテーブルを削除する前にフラッシュバックテーブルtable_nameに復元

    flashback table table_name to before drop;                        # Restore the deleted table (the latest table is restored if the table has the same name as other tables). 
    flashback table table_name to before drop rename to table_name_1; # Restore and rename the deleted table. 
  • ごみ箱からファイルを完全に削除

    purge table table_name;       
    説明

    テーブルが他のテーブルと同じ名前である場合、最も古いテーブルは削除されます。

  • ごみ箱をクリア

    purge recyclebin;   
    説明

    polar_super_user権限は、ごみ箱をクリアするときに必要です。

  • ごみ箱情報の表示

    show recyclebin;      

  • テスト用のデータを準備する:

    test1テーブルとテーブルtest2テーブルを作成し、それらにデータを挿入します。

    CREATE TABLE test1(id int primary key, name text);
    
    CREATE TABLE test2(id int primary key, name text);
    
    INSERT INTO test1 select t,repeat('test1',1024) from generate_series(1, 10000) as t;
    
    INSERT INTO test2 select t,repeat('test2',1024) from generate_series(1, 10000) as t;
    \dt

    同様の出力が表示されます:

             List of relations
     Schema | Name  | Type  |  Owner
    --------+-------+-------+----------
     public | test1 | table | postgres
     public | test2 | table | postgres
    (2 rows)
  • テーブルを削除し、ごみ箱を表示します。

    • test1およびtest2テーブルを削除します。

      DROP TABLE test1;
      
      DROP TABLE test2;
      
      \dt

      同様の出力が表示されます。

      Did not find any relations.
    • ごみ箱を表示します。

      show recyclebin;

      同様の出力が表示されます:

       table_catalog |         table_name          | table_type
      ---------------+-----------------------------+------------
       postgres      | public$test1$69461331094004 | BASE TABLE
       postgres      | public$test2$69461332967609 | BASE TABLE
      (2 rows)
  • 削除されたテーブルをフラッシュバックする:

    • 削除されたテーブルを復元します。

      FLASHBACK TABLE test1 TO BEFORE DROP;
      
      FLASHBACK TABLE test2 TO BEFORE DROP RENAME TO test3;
      
      \dt

      同様の出力が表示されます:

         List of relations
       Schema | Name  | Type  |  Owner
      --------+-------+-------+----------
       public | test1 | table | postgres
       public | test3 | table | postgres
      (2 rows)
      説明

      test2テーブルの名前がtest3に変更されました。

    • 復元されたデータを表示します。

      test1テーブルのデータを表示します。

      SELECT count(*) FROM test1;

      同様の出力が表示されます:

       count
      -------
       10000
      (1 row)

      test3テーブルのデータを表示します。

      SELECT count(*) FROM test3;

      同様の出力が表示されます:

       count
      -------
       10000
      (1 row)