国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Oracle Database 10 g : 為 DBA 提供的最佳前 20 位的特性(五)
閃回表

使用 Oracle Database 10 g 中的閃回表特性,可以毫不費力地恢復被意外刪除的表

以下是一個不該發(fā)生卻經(jīng)常發(fā)生的情況:用戶刪除了一個非常重要的表 當然是意外地刪除 并需要盡快地恢復。(在某些時候,這個不幸的用戶可能就是 DBA !)

Oracle9 i Database 推出了閃回查詢選項的概念,以便檢索過去某個時間點的數(shù)據(jù),但它不能閃回 DDL 操作,如刪除表的操作。唯一的恢復方法是在另一個數(shù)據(jù)庫中使用表空間的時間點恢復,然后使用導出 / 導入或其他方法,在當前數(shù)據(jù)庫中重新創(chuàng)建表。這一過程需要 DBA 進行大量工作并且耗費寶貴的時間,更不用說還要使用另一個數(shù)據(jù)庫進行克隆。

請使用 Oracle Database 10 g 中的閃回表特性,它使得被刪除表的恢復過程如同執(zhí)行幾條語句一樣簡單。讓我們來看該特性是如何工作的。

刪除那個表!

首先,讓我們查看當前模式中的表。

SQL> select * from tab;

TNAME TABTYPE CLUSTERID

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

RECYCLETEST TABLE

現(xiàn)在,我們意外地刪除了該表:

SQL> drop table recycletest;

Table dropped.

現(xiàn)在讓我們來查看該表的狀態(tài)。

SQL> select * from tab;

TNAME TABTYPE CLUSTERID

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

BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE

表 RECYCLETEST 已不存在,但是請注意出現(xiàn)新表 BIN$04LhcpndanfgMAAAAAANPw==$0 。這就是所發(fā)生的事情:被刪除的表 RECYCLETEST 并沒有完全消失,而是重命名為一個由系統(tǒng)定義的名稱。它存在于同一個表空間中,具有與原始表相同的結(jié)構(gòu)。如果在該表上定義了索引或觸發(fā)器,則它們也被重命名,使用與表相同的命名規(guī)則。任何相關源(如過程)都失效;原始表的觸發(fā)器和索引被改為放置在重命名的表 BIN$04LhcpndanfgMAAAAAANPw==$0 上,保持被刪除表的完整對象結(jié)構(gòu)。

表及其相關對象被放置在一個稱為 “ 回收站 ” 的邏輯容器中,它類似于您 PC 機中的回收站。但是,對象并沒有從它們原先所在的表空間中刪除;它們?nèi)匀徽加媚抢锏目臻g?;厥照局皇且粋€列出被刪除對象目錄的邏輯結(jié)構(gòu)。在 SQL*Plus 提示符處使用以下命令來查看其內(nèi)容(您需要使用 SQL*Plus 10.1 來進行此操作):

SQL> show recyclebin

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME

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

RECYCLETEST BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE 2004-02-16 :21:13:31

結(jié)果顯示了表的原始名稱 RECYCLETEST ,并顯示了回收站中的新名稱,該名稱與我們看到的刪除后所創(chuàng)建的新表名稱相同。(注意:確切的名稱可能因平臺不同而不同。)為恢復該表,您所需要做的就是使用 FLASHBACK TABLE 命令:

SQL> FLASHBACK TABLE RECYCLETEST TO BEFORE DROP;

FLASHBACK COMPLETE.

SQL> SELECT * FROM TAB;

TNAME TABTYPE CLUSTERID

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

RECYCLETEST TABLE

!表毫不費力地恢復了。如果現(xiàn)在查看回收站,它將是空的。

記住,將表放在回收站里并不在原始表空間中釋放空間。要釋放空間,您需要使用以下命令清空回收站:

PURGE RECYCLEBIN;

但是如果您希望完全刪除該表而不需要使用閃回特性,該怎么辦?在這種情況下,可以使用以下命令永久刪除該表:

DROP TABLE RECYCLETEST PURGE;

此命令不會將表重命名為回收站中的名稱,而是永久刪除該表,就象 10 g 之前的版本一樣。

管理回收站

如果在該過程中沒有實際刪除表 因而沒有釋放表空間 那么當被刪除的對象占用了所有空間時,會發(fā)生什么事?

答案很簡單:這種情況根本不會出現(xiàn)。當表空間被回收站數(shù)據(jù)完全占滿,以至于必須擴展數(shù)據(jù)文件來容納更多數(shù)據(jù)時,可以說表空間處于 “ 空間壓力 ” 情況下。此時,對象以先進先出的方式從回收站中自動清除。在刪除表之前,相關對象(如索引)被刪除。

同樣,空間壓力可能由特定表空間定義的用戶限額而引起。表空間可能有足夠的空余空間,但用戶可能將其在該表空間中所分配的部分用完了。在這種情況下, Oracle 自動清除該表空間中屬于該用戶的對象。

此外,有幾種方法可以手動控制回收站。如果在刪除名為 TEST 的特定表之后需要從回收站中清除它,可以執(zhí)行

PURGE TABLE TEST;

或者使用其回收站中的名稱:

PURGE TABLE "BIN$04LhcpndanfgMAAAAAANPw==$0";

此命令將從回收站中刪除表 TEST 及所有相關對象,如索引、約束等,從而節(jié)省了空間。但是,如果要從回收站中永久刪除索引,則可以使用以下命令來完成工作:

purge index in_test1_01;

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

有時在更高級別上進行清除可能會有用。例如,您可能希望清除表空間 USERS 的回收站中的所有對象??梢詧?zhí)行:

PURGE TABLESPACE USERS;

您也許希望只為該表空間中特定用戶清空回收站。在數(shù)據(jù)倉庫類型的環(huán)境中,用戶創(chuàng)建和刪除許多臨時表,此時這種方法可能會有用。您可以更改上述命令,限定只清除特定的用戶:

PURGE TABLESPACE USERS USER SCOTT;

諸如 SCOTT 等用戶可以使用以下命令來清空自己的回收站

PURGE RECYCLEBIN;

DBA 可以使用以下命令清除任何表空間中的所有對象

PURGE DBA_RECYCLEBIN;

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

表版本和閃回功能

用戶可能會經(jīng)常多次創(chuàng)建和刪除同一個表,如:

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 執(zhí)行閃回操作,那么列 COL1 的值應該是什么?常規(guī)想法可能認為從回收站取回表的第一個版本,列 COL1 的值是 1 。實際上,取回的是表的第三個版本,而不是第一個。因此列 COL1 的值為 3 ,而不是 1 。

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

  • 使用重命名選項:

•  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 ?;蛘?,

  • 使用表的特定回收站名稱進行恢復。為此,首先要識別表的回收站名稱,然后執(zhí)行:

•  FLASHBACK TABLE "BIN$04LhcpnoanfgMAAAAAANPw==$0" TO BEFORE DROP RENAME TO TEST2;

•  FLASHBACK TABLE "BIN$04LhcpnqanfgMAAAAAANPw==$0" TO BEFORE DROP RENAME TO TEST1;

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

警告 ……

取消刪除特性使表恢復其原始名稱,但是索引和觸發(fā)器等相關對象并沒有恢復原始名稱,它們?nèi)匀皇褂没厥照镜拿Q。在表上定義的源(如視圖和過程)沒有重新編譯,仍然保持無效狀態(tài)。必須手動得到這些原有名稱并應用到閃回表。

信息保留在名為 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 上的索引和觸發(fā)器將按照 OBJECT_NAME 列中所示進行命名。根據(jù)以上查詢,可以使用原始名稱重新命名對象,如下所示:

ALTER INDEX "BIN$04LhcpnianfgMAAAAAANPw==$0" RENAME TO IN_RT_01;

ALTER TRIGGER "BIN$04LhcpnganfgMAAAAAANPw==$0" RENAME TO TR_RT;

一個值得注意的例外情況是位圖索引。當刪除位圖索引時,它們并不放置在回收站中 因此無法檢索它們。約束名稱也無法從視圖中檢索。必須從其他來源對它們進行重命名。

閃回表的其他用途

閃回刪除表功能不僅限于恢復表的刪除操作。與閃回查詢類似,您還可以使用它將表恢復到不同的時間點,利用表的 “ 過去 ” 版本來替代整個表。例如,以下語句將表恢復到系統(tǒng)更改號 (SCN) 2202666520 。

FLASHBACK TABLE RECYCLETEST TO SCN 2202666520;

此特性使用 Oracle 數(shù)據(jù)泵技術來創(chuàng)建不同的表,使用閃回功能將該 SCN 處的數(shù)據(jù)版本填充到表中,然后用新表替代原始表。為找出能夠在何種程度上對表進行閃回操作,可以使用 Oracle Database 10 g 的版本控制特性。(更多詳細信息請參見本系列第 1 周的內(nèi)容。)在閃回子句中也可以指定時間戳記而不是指定 SCN 。

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
閃回丟棄(Flashback Drop)
oracle-11g-R2-備份與恢復
Recyclebin 對象刪除機制, 空間釋放
Oracle 表刪除大量數(shù)據(jù)后查詢變慢問題
Oracle刪除表恢復
用Oracle閃回功能(flashback)恢復刪除的數(shù)據(jù)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服