削除されたオブジェクトはごみ箱に移動します。ごみ箱にあるオブジェクトを復元するには、FLASHBACK ステートメントを使用します。
注意事項
テーブルを復元する際、Flashbackオブジェクトの順序は従属関係に従う必要があります。つまり、まずデータベースをFlashbackし、次にテーブルをFlashbackします。
インデックスを直接復元することはサポートされていません。
FLASHBACKステートメントでテーブルを復元すると、そのテーブル上のインデックスも自動的に復元されます。リサイクルビンからオブジェクトを復元する際、復元対象のオブジェクト名を変更できますが、既存のオブジェクトと重複してはなりません。重複するとシステムエラーが発生します。
MySQLテナントの場合、リサイクルビンからテーブルを復元する前に、そのテーブルが属していたデータベースが削除されている場合は、まずデータベースを復元してからテーブルを復元する必要があります。
テーブルがリサイクルビンに入る前に特定のテーブルグループに属していた場合、リサイクルビンから復元された後、そのテーブルはデフォルトで元のテーブルグループに復元されます。ただし、元のテーブルグループがすでに削除されている場合、復元後のテーブルはどのテーブルグループにも属しません。
テナントの復元
現在、テナントを削除できるのはsysテナントのみであるため、ゴミ箱から通常のテナントに復元できるのもsysテナントのみです。復元時にはテナント名を変更できますが、既存のテナントと重複している場合はエラーが発生します。
sysテナントでデータベースにログインします。接続例は以下のとおりです。データベースへの接続時は、実際の環境に基づいてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -Aデータベースへの接続方法の詳細については、データベース接続の概要(MySQLモード)およびデータベース接続の概要(Oracleモード)を参照してください。
SHOW RECYCLEBINステートメントを実行して、ゴミ箱内のオブジェクト名を取得します。obclient [(none)]> SHOW RECYCLEBIN; +-------------------------------------+-------------------+----------+----------------------------+ | OBJECT_NAME | ORIGINAL_NAME | TYPE | CREATETIME | +-------------------------------------+-------------------+----------+----------------------------+ | RECYCLE_$_100017_1672050541224936 | oracle001 | TENANT | 2023-01-16 11:01:40.258000 | | __recycle_$_100017_1673426335319344 | __idx_500788_idx1 | INDEX | 2023-01-11 16:38:55.318878 | | __recycle_$_100017_1673426335331800 | t1 | TABLE | 2023-01-11 16:38:55.331481 | | __recycle_$_100017_1673854707660504 | infotest | DATABASE | 2023-01-16 15:38:27.660436 | +-------------------------------------+-------------------+----------+----------------------------+ 4 rows in setビジネスニーズに応じて、適切なシナリオを選択し、ゴミ箱内のテナントを復元します。
ゴミ箱内のテナントを通常のテナントに復元し、復元後のテナント名はゴミ箱に入る前のテナント名に設定します。
ステートメントは以下のとおりです:
FLASHBACK TENANT tenant_name TO BEFORE DROP;ここで、
tenant_nameにはゴミ箱内の名前またはテナントの元の名前を使用できます。ゴミ箱内の名前はグローバルに一意であるため、ゴミ箱内の名前を使用すると復元されるテナントが明確になります。そのため、テナントを復元する際はゴミ箱内の名前を使用することを推奨します。元の名前を使用する場合、ゴミ箱内に複数のテナントが同じ元の名前を持つと、復元されるテナントはこれらのテナントのうち最後にゴミ箱に入ったテナントになります。例:
obclient [(none)]> FLASHBACK TENANT RECYCLE_$_100017_1672050541224936 TO BEFORE DROP; Query OK, 0 rows affectedゴミ箱内のテナントを通常のテナントに復元し、名前を変更します。
FLASHBACK TENANT tenant_name TO BEFORE DROP RENAME TO new_tenant_name;関連パラメータの説明は以下のとおりです:
tenant_nameにはゴミ箱内の名前またはテナントの元の名前を使用できます。ゴミ箱内の名前はグローバルに一意であるため、ゴミ箱内の名前を使用すると復元されるテナントが明確になります。そのため、テナントを復元する際はゴミ箱内の名前を使用することを推奨します。元の名前を使用する場合、ゴミ箱内に複数のテナントが同じ元の名前を持つと、復元されるテナントはこれらのテナントのうち最後にゴミ箱に入ったテナントになります。new_tenant_nameは、ゴミ箱から復元した後のテナント名、すなわち改名後のテナント名を表します。
例:
obclient [(none)]> FLASHBACK TENANT RECYCLE_$_100017_1672050541224936 TO BEFORE DROP RENAME TO new_oracle; Query OK, 0 rows affected
データベースの復元
sysテナントまたはMySQLユーザーテナントは、ごみ箱からデータベースを復元できます。復元時にデータベース名を変更できますが、既存のデータベースと重複している場合はエラーが発生します。
sysテナントまたはMySQLユーザーテナントのテナント管理者がデータベースにログインします。説明
デフォルトでは、MySQLテナントの管理者ユーザーは
rootユーザーです。接続例は以下のとおりです。データベースへの接続時は、実際の環境に基づいてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -Aデータベースへの接続手順の詳細については、データベース接続の概要(MySQLモード)およびデータベース接続の概要(Oracleモード)を参照してください。
SHOW RECYCLEBINステートメントを実行して、ごみ箱内のオブジェクト名を取得します。obclient [(none)]> SHOW RECYCLEBIN; +-------------------------------------+-------------------+----------+----------------------------+ | OBJECT_NAME | ORIGINAL_NAME | TYPE | CREATETIME | +-------------------------------------+-------------------+----------+----------------------------+ | __recycle_$_100017_1673426335319344 | __idx_500788_idx1 | INDEX | 2023-01-11 16:38:55.318878 | | __recycle_$_100017_1673426335331800 | t1 | TABLE | 2023-01-11 16:38:55.331481 | | __recycle_$_100017_1673854707660504 | infotest | DATABASE | 2023-01-16 15:38:27.660436 | +-------------------------------------+-------------------+----------+----------------------------+ 3 rows in setビジネスニーズに応じて、適切なシナリオを選択し、ごみ箱内のデータベースを復元します。
ごみ箱からデータベースを復元する場合、復元後のデータベース名はごみ箱に入る前の名前になります。
FLASHBACK DATABASE object_name TO BEFORE DROP;ここで、
object_nameはごみ箱内のデータベースオブジェクト名を表します。元の名前を使用することはサポートされていません。このステートメントを実行した後、復元対象のデータベースがテナント内の既存データベースと重複している場合、システムはエラーを報告します。
例:
obclient [(none)]> FLASHBACK DATABASE __recycle_$_100017_1673854707660504 TO BEFORE DROP; Query OK, 0 rows affectedごみ箱からデータベースを復元して、名前を変更します。
FLASHBACK DATABASE object_name TO BEFORE DROP RENAME TO new_database_name;ここで:
object_nameはごみ箱内のデータベースオブジェクト名を表します。元の名前を使用することはサポートされていません。new_database_name:ごみ箱から復元後のデータベース名を表します。
例:
obclient [(none)]> FLASHBACK DATABASE __recycle_$_100017_1673854707660504 TO BEFORE DROP RENAME TO new_infotest; Query OK, 0 rows affected
テーブルの復元
sysテナント、MySQLユーザーテナント、およびOracleユーザーテナントはいずれも、ごみ箱からテーブルを復元できます。復元時にはテーブル名を変更できますが、既存のテーブルと重複する名前にするとシステムエラーが発生します。
sysテナントまたはユーザーテナントのテナント管理者がデータベースにログインします。説明
デフォルトでは、MySQLテナントの管理者ユーザーは
rootユーザー、Oracleテナントの管理者ユーザーはSYSユーザーです。接続例は以下のとおりです。データベースへの接続時は、実際の環境に基づいてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -Aデータベースへの接続手順の詳細については、データベース接続の概要(MySQLモード)およびデータベース接続の概要(Oracleモード)を参照してください。
SHOW RECYCLEBINステートメントを実行して、ごみ箱内のオブジェクト名を取得します。obclient [(none)]> SHOW RECYCLEBIN; +-------------------------------------+-------------------+----------+----------------------------+ | OBJECT_NAME | ORIGINAL_NAME | TYPE | CREATETIME | +-------------------------------------+-------------------+----------+----------------------------+ | __recycle_$_100017_1673426335319344 | __idx_500788_idx1 | INDEX | 2023-01-11 16:38:55.318878 | | __recycle_$_100017_1673426335331800 | t1 | TABLE | 2023-01-11 16:38:55.331481 | | __recycle_$_100017_1673854707660504 | infotest | DATABASE | 2023-01-16 15:38:27.660436 | +-------------------------------------+-------------------+----------+----------------------------+ 3 rows in setビジネスニーズに応じて、適切なシナリオを選択し、ごみ箱内のテーブルを復元します。
ごみ箱からテーブルを復元した場合、復元後のテーブル名はごみ箱に入る前のテーブル名になります。
FLASHBACK TABLE object_name TO BEFORE DROP;ここで、
object_nameはごみ箱内のテーブルオブジェクト名を表します。元の名前を使用することもできますが、ごみ箱内の名前はグローバルに一意であるため、ごみ箱内の名前を使用することを推奨します。例:
obclient [(none)]> FLASHBACK TABLE __recycle_$_100017_1673426335331800 TO BEFORE DROP; Query OK, 0 rows affectedこのステートメントを実行すると、復元後のテーブル名はごみ箱に入る前の名前になり、そのテーブルが属するデータベースまたはスキーマオブジェクトは、テーブル削除前に属していたデータベースまたはスキーマオブジェクトのままになります。ただし、ごみ箱に入る前のテーブル名が既存のテーブルと重複する場合、システムエラーが発生します。
ごみ箱からテーブルを復元して名前を変更します。
FLASHBACK TABLE object_name TO BEFORE DROP RENAME To new_table_name;ここで、
object_nameはごみ箱内のテーブルオブジェクト名を表します。元の名前を使用することもできますが、ごみ箱内の名前はグローバルに一意であるため、ごみ箱内の名前を使用することを推奨します。new_table_nameはテーブル復元後の新しい名前を表します。例:
obclient [(none)]> FLASHBACK TABLE __recycle_$_100017_1673426335331800 TO BEFORE DROP RENAME To infotable; Query OK, 0 rows affectedこのステートメントを実行すると、復元後のテーブル名は新しい名前になり、そのテーブルが属するデータベースまたはスキーマオブジェクトは、テーブル削除前に属していたデータベースまたはスキーマオブジェクトのままになります。ただし、新しい名前のテーブル名が既存のテーブルと重複する場合、システムエラーが発生します。
ごみ箱から指定されたデータベースまたはスキーマオブジェクトにテーブルを復元して名前を変更します。
FLASHBACK TABLE object_name TO BEFORE DROP RENAME To database_name.new_table_name;ここで、
object_nameはごみ箱内のテーブルオブジェクト名を表します。元の名前を使用することもできますが、ごみ箱内の名前はグローバルに一意であるため、ごみ箱内の名前を使用することを推奨します。database_name.new_table_nameは、テーブル復元後の新しい名前と、それが属するデータベースまたはスキーマオブジェクトを表します。Oracleテナントのスキーマオブジェクト名はユーザー名と同じです。例:
obclient [(none)]> FLASHBACK TABLE __recycle_$_100017_1673426335331800 TO BEFORE DROP RENAME To test.infotable; Query OK, 0 rows affectedこのステートメントを実行すると、復元後のテーブル名は新しい名前になり、そのテーブルが属するデータベースまたはスキーマオブジェクトは指定されたデータベースまたはスキーマオブジェクトになります。ただし、新しい名前のテーブル名が既存のテーブルと重複する場合、システムエラーが発生します。
関連ドキュメント
ごみ箱に関する詳細は、以下のドキュメントを参照してください: