削除されたオブジェクトはごみ箱に移動し、その後 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このステートメントを実行した後、復元対象のデータベースがテナント内の既存データベースと同名の場合、システムはエラーを返します。
obclient [(none)]> FLASHBACK DATABASE __recycle_$_100017_1673854707660504 TO BEFORE DROP; ERROR 1007 (HY000): Can't create database 'infotest'; database existsごみ箱からデータベースを復元して名前を変更します。
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このステートメントを実行すると、復元後のテーブル名はごみ箱に入る前の名前になり、そのテーブルが属するデータベースまたはSchemaオブジェクトは、テーブル削除前に属していたデータベースまたはSchemaオブジェクトのままになります。テーブルがごみ箱に入る前の名前が既存のテーブルと同名の場合、システムはエラーを返します。
ごみ箱からテーブルを復元して名前を変更します。
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このステートメントを実行すると、復元後のテーブル名は新しい名前になり、そのテーブルが属するデータベースまたはSchemaオブジェクトは、テーブル削除前に属していたデータベースまたはSchemaオブジェクトのままになります。名前を変更したテーブル名が既存のテーブルと同名の場合、システムはエラーを返します。
ごみ箱からテーブルを指定されたデータベースまたはSchemaオブジェクトに復元して名前を変更します。
FLASHBACK TABLE object_name TO BEFORE DROP RENAME To database_name.new_table_name;ここで、
object_nameはごみ箱内のテーブルオブジェクト名を表します。元の名前を使用することもできますが、ごみ箱内の名前はグローバルに一意であるため、ごみ箱内の名前の使用を推奨します。database_name.new_table_nameはテーブル復元後の新しい名前およびそれが属するデータベースまたはSchemaオブジェクトを表します。Oracleテナントでは、Schemaオブジェクト名はユーザー名と同じになります。例:
obclient [(none)]> FLASHBACK TABLE __recycle_$_100017_1673426335331800 TO BEFORE DROP RENAME To test.infotable; Query OK, 0 rows affectedこのステートメントを実行すると、復元後のテーブル名は新しい名前になり、そのテーブルが属するデータベースまたはSchemaオブジェクトは指定されたデータベースまたはSchemaオブジェクトになります。名前を変更したテーブル名が既存のテーブルと同名の場合、システムはエラーを返します。
関連ドキュメント
ごみ箱に関する詳細は、以下の情報を参照してください: