oracle怎麼恢復drop的表

2021-06-23 07:07:04 字數 3631 閱讀 3592

檢視**站中表

select object_name,original_name,partition_name,type,ts_name,createtime,droptime from recyclebin;

恢復表sql>flashback table test_drop to before drop;或

sql>flashback table "bin$b+xkko1rs5k10uko9bfmua==$0" to before drop;

管理**站

如果在該過程中沒有實際刪除表 ― 因而沒有釋放表空間 ― 那麼當被刪除的物件占用了所有空間時,會發生什麼事?

答案很簡單:這種情況根本不會出現。當表空間被**站資料完全佔滿,以至於必須擴充套件資料檔案來容納更多資料時,可以說表空間處於"空間壓力"情況下。此時,物件以先進先出的方式從**站中自動清除。在刪除表之前,相關物件(如索引)被刪除。

同樣,空間壓力可能由特定表空間定義的使用者限額而引起。表空間可能有足夠的空餘空間,但使用者可能將其在該錶空間中所分配的部分用完了。在這種情況下,oracle 自動清除該錶空間中屬於該使用者的物件。

此外,有幾種方法可以手動控制**站。如果在刪除名為 test 的特定表之後需要從**站中清除它,可以執行

purge table test;

或者使用其**站中的名稱:

purge table "bin$04lhcpndanfgmaaaaaanpw==$0";

此命令將從**站中刪除表 test 及所有相關物件,如索引、約束等,從而節省了空間。但是,如果要從**站中永久刪除索引,則可以使用以下命令來完成工作:

purge index in_test1_01;

此命令將僅僅刪除索引,而將表的拷貝留在**站中。

有時在更高階別上進行清除可能會有用。例如,您可能希望清除表空間 users 的**站中的所有物件。可以執行:

purge tablespace users;

您也許希望只為該錶空間中特定使用者清空**站。在資料倉儲型別的環境中,使用者建立和刪除許多臨時表,此時這種方法可能會有用。您可以更改上述命令,限定只清除特定的使用者:

purge tablespace users user scott;

諸如 scott 等使用者可以使用以下命令來清空自己的**站

purge recyclebin;

dba 可以使用以下命令清除任何表空間中的所有物件

purge dba_recyclebin;

可以看到,可以通過多種不同方法來管理**站,以滿足特定的需要。

表版本和閃回功能

使用者可能會經常多次建立和刪除同乙個表,如:

create table test (col1 number);

insert into test values (1);

commit;

drop table test;

create table test (col1 number);

insert into test values (2);

commit;

drop table test;

create table test (col1 number);

insert into test values (3);

commit;

drop table test;

此時,如果您要對錶 test 執行閃回操作,那麼列 col1 的值應該是什麼?常規想法可能認為從**站取回表的第乙個版本,列 col1 的值是 1。實際上,取回的是表的第三個版本,而不是第乙個。因此列 col1 的值為 3,而不是 1。

此時您還可以取回被刪除表的其他版本。但是,表 test 的存在不允許出現這種情況。您有兩種選擇:

使用重新命名選項:

flashback table test to before drop rename to test2;

flashback table test to before drop rename to test1;

這些語句將表的第乙個版本恢復到 test1,將第二個版本恢復到 test2。 test1 和 test2 中的列 col1 的值將分別是 1 和 2。或者,

使用表的特定**站名稱進行恢復。為此,首先要識別表的**站名稱,然後執行:

flashback table "bin$04lhcpnoanfgmaaaaaanpw==$0" to before drop rename to test2;

flashback table "bin$04lhcpnqanfgmaaaaaanpw==$0" to before drop rename to test1;

這些語句將恢復被刪除表的兩個版本。

警告......

取消刪除特性使表恢復其原始名稱,但是索引和觸發器等相關物件並沒有恢復原始名稱,它們仍然使用**站的名稱。在表上定義的源(如檢視和過程)沒有重新編譯,仍然保持無效狀態。必須手動得到這些原有名稱並應用到閃回表。

資訊保留在名為 user_recyclebin 的檢視中。在對錶進行閃回操作前,請使用以下查詢來檢索原有名稱。

select object_name, original_name, type

from user_recyclebin

where base_object = (select base_object from user_recyclebin

where original_name = 'recycletest')

and original_name != 'recycletest';

object_name

original_n type

--------------------------- - -- --- - -- ----

bin$04lhcpnianfgmaaaaaanpw==$0 in_rt_01

index

bin$04lhcpnganfgmaaaaaanpw==$0 tr_rt

trigger

在表進行閃回操作後,表 recycletest 上的索引和觸發器將按照 object_name 列中所示進行命名。根據以上查詢,可以使用原始名稱重新命名物件,如下所示:

alter index "bin$04lhcpnianfgmaaaaaanpw==$0" rename to in_rt_01;

alter trigger "bin$04lhcpnganfgmaaaaaanpw==$0" rename to tr_rt;

乙個值得注意的例外情況是點陣圖索引。當刪除位圖索引時,它們並不放置在**站中 ― 因此無法檢索它們。約束名稱也無法從檢視中檢索。必須從其他**對它們進行重新命名。

閃回表的其他用途

閃回刪除表功能不僅限於恢復表的刪除操作。與閃回查詢類似,您還可以使用它將表恢復到不同的時間點,形如flashback table tmm2076 to timestamp to_timestamp('2007-05-22

12:00:00','yyyy-mm-dd hh24:mi:ss')

彈出ora-08189錯誤,需要執行以下命令先:

alter table tmm2076 enable row movement這個命令的作用是,允許oracle修改分配給行的rowid。

然後再flashback,資料被恢復完畢。

問題:對undo和歸檔的恢復怎麼用?

oracle恢復被drop掉的表

以前只知道windows有個 站,今天聽說oracle也有個 站!在oracle中可能不小心會drop掉乙個表,如果沒有定期做備份的話,將會帶來很大的麻煩。如果有的情況下,每天的資料都很重要,而定期備份的週期又稍長,情況恐怕也不容樂觀!不過還好oracle有個 站,概念就跟windows裡的 站一模...

Oracle恢復誤操作drop刪除的表

1.刪除表中資料兩種方法 a.delete from my table b.truncate table my table 2.刪除整個表 drop table my table 如何恢復不小心 drop 掉的表呢,其實 oracle 中也有類似的 站 比如不小心刪除了表 my table drop...

Oracle恢復誤操作drop刪除的表

1.刪除表中資料兩種方法 a.delete from my table b.truncate table my table 2.刪除整個表 drop table my table 3.如何恢復不小心 drop 掉的表呢,其實 oracle 中也有類似的 站 比如不小心刪除了表 my table.dr...