PolarDB PostgreSQL版(相容Oracle)中沒有undo日誌,開發或營運人員如果誤操作(例如DROP TABLE)可能會導致資料丟失。PolarDB PostgreSQL版(相容Oracle)支援閃回刪除功能,用於快速恢複已經刪除的表,以及查看和清理資源回收筒等,方便您找回資料。
注意事項
- 建議在刪除重要表時開啟閃回刪除功能,日常業務操作請謹慎使用。
- 閃回刪除是將已刪除的錶轉存到資源回收筒模式空間下,並非真正意義上的刪除表,所以表所佔用的空間並沒有被釋放。因此,資料長期積累可能會導致磁碟空間佔用較大,建議定期清理資源回收筒。
- 閃回刪除功能開啟狀態下,表被刪除後,在執行表的相關依賴項刪除操作時可能會失敗(因為表並未被真正刪除,表依舊依賴這些依賴項)。
- 由於刪除的錶轉存在recyclebin(資源回收筒)模式空間下,因此避免建立名稱為recyclebin的模式,因為recyclebin模式下的表會被
purge recyclebin
文法清理掉。 - 開啟閃回刪除功能後,不支援以下刪除操作:
- 分區表和暫存資料表不支援閃回刪除,會被真正刪除,無法恢複。
- 不支援
sql_drop
事件觸發程序。
參數說明
參數名稱 | 資料類型 | 參數說明 |
polar_enable_flashback_drop | BOOL | 開啟或者關閉閃回刪除功能。取值:
|
文法
閃回刪除功能支援以下SQL文法:
- 刪除策略
drop table table_name; #清除。 drop table table_name purge; #完全刪除,無法恢複。
- 恢複刪除的表
flashback table table_name to before drop; #恢複刪除的表(重名的表則恢複最新的表)。 flashback table table_name to before drop rename to table_name_1; #恢複刪除的表並重新命名。
- 徹底刪除資源回收筒中的表
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)
- 恢複刪除的表。