欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
oracle 10g的回收站
oracle 10g的回收站
2007-03-26 14:03

在Oracle 10g數據庫中,引入了一個(gè)回收站(Recycle Bin)的數據庫對象。

回收站,從原理上來(lái)說(shuō)就是一個(gè)數據字典表,放置用戶(hù)Drop掉的數據庫對象信息。用戶(hù)進(jìn)行Drop操作的對象并沒(méi)有被數據庫刪除,仍然會(huì )占用空間。除非是由于用戶(hù)手工進(jìn)行Purge或者因為存儲空間不夠而被數據庫清掉。數據庫有了這樣的功能,能夠減少很多不必要的麻煩。常??吹介_(kāi)發(fā)人員誤把表刪除,急急忙忙找DBA 來(lái)想辦法的情況。相信隨著(zhù)10G的大范圍應用,這種情形應該比較少見(jiàn)了,我們可以充分利用10g的閃回(FLASHBACK,閃回,回閃?)功能來(lái)避免大量的人工誤操作。

DBA管理上的相關(guān)信息可以從USER_recyclebin(DBA_recyclebin)中獲取。

為了便于測試,我們創(chuàng )建了一個(gè)表空間Foo,大小為1M,創(chuàng )建了一個(gè)用戶(hù)Foo,默認的表空間為Foo.

SQL> CONNECT foo/foo;
Connected.
SQL> SELECT table_name FROM user_tables;
no rows selected
SQL>
SQL> DESC user_recyclebin
Name Null? Type
----------------------------------------- -------- -------------------
OBJECT_NAME NOT NULL VARCHAR2(30)
ORIGINAL_NAME VARCHAR2(32)
OPERATION VARCHAR2(9)
TYPE VARCHAR2(25)
TS_NAME VARCHAR2(30)
CREATETIME VARCHAR2(19)
DROPTIME VARCHAR2(19)
DROPSCN NUMBER
PARTITION_NAME VARCHAR2(32)
CAN_UNDROP VARCHAR2(3)
CAN_PURGE VARCHAR2(3)
RELATED NOT NULL NUMBER
BASE_OBJECT NOT NULL NUMBER
PURGE_OBJECT NOT NULL NUMBER
SPACE NUMBER
SQL>

user_recyclebin大多是自解釋的,相對比較容易理解.

SQL> SELECT object_name FROM user_recyclebin;
no rows selected
SQL>
SQL> SELECT object_name FROM user_recyclebin;
no rows selected
SQL> CREATE TABLE foo AS SELECT * FROM DUAL;
Table created.
SQL> SELECT table_name FROM user_tables;
TABLE_NAME
----------------------------------------------
FOO
SQL> DROP TABLE foo;
Table dropped.
SQL> SELECT table_name FROM user_tables;
no rows selected
SQL> SHOW recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO BIN$V3f/oYUITrCEF2cotS5JaA==$0 TABLE 2004-10-30:14:37:39
SQL>

SQL*Plus命令SHOW recyclebin等價(jià)于這條SQL:

SQL> SELECT original_name, object_name, TYPE, droptime FROM user_recyclebin;
ORIGINAL_NAME OBJECT_NAME TYPE DROPTIME
--------------- ------------------------------ ---------- --------------------
FOO BIN$V3f/oYUITrCEF2cotS5JaA==$0 TABLE 2004-10-30:14:37:39
SQL>
SQL> DESC "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
Name Null? Type
----------------------------------------- -------- ----------------
DUMMY VARCHAR2(1)
SQL>

當一個(gè)表被刪除并移動(dòng)到"回收站"中,它的名字要進(jìn)行一些轉換。這樣的目的顯而易見(jiàn)是為了避免同類(lèi)對象名稱(chēng)的重復。(這一點(diǎn)和Windows操作系統的回收站不同,Windows中的回收站經(jīng)過(guò)了特殊的處理,操作系統文件可以重名。)

轉換后的名字格式如下:

BIN$unique_id$version

  • 其中BIN代表RecycleBin
  • unique_id是數據庫中該對象的唯一標志,26個(gè)字符長(cháng)度
  • version表示該對象的版本號

注:在10g beta 版本中,名字格式如下:

RB$$objn$object_type$version

其中的RB,代表Recycle Bin. objn為表的目錄對象號. object_type表示對象類(lèi)型. version表示版本號. 由數據庫指定。

下面我們驗證一下回收站里數據庫對象名字的唯一性:

SQL> CREATE TABLE foo AS SELECT * FROM DUAL;
Table created.
SQL> SELECT table_name FROM user_tables;
TABLE_NAME
------------------------------------------------------------
FOO
SQL> DROP TABLE foo;
Table dropped.
SQL> SHOW recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO BIN$VL+ZsqVlQF6R2nYnwAqtvw==$0 TABLE 2004-10-30:15:01:42
FOO BIN$V3f/oYUITrCEF2cotS5JaA==$0 TABLE 2004-10-30:14:37:39
SQL>

能看出來(lái),雖然源表名字相同,在回收站里的對象名字是不同的。

針對Recycle Bin對象的操作

已經(jīng)放到回收站里的表是不能用drop 命令刪除的(注意對象名字上的雙引號):

SQL> DROP table "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
2 /
DROP table "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
*
ERROR at line 1:
ORA-38301: can not perform DDL/DML over objects in Recycle Bin
SQL>

如果要清掉該對象,使用purge命令:

SQL> PURGE table "BIN$V3f/oYUITrCEF2cotS5JaA==$0"
2 /
Table purged.
SQL> SELECT object_name, original_name FROM user_recyclebin;
OBJECT_NAME ORIGINAL_NAME
------------------------------ ---------------
BIN$VL+ZsqVlQF6R2nYnwAqtvw==$0 FOO
SQL>

對象已經(jīng)清掉。如果直接清空所有的Recycle Bin中的對象:

SQL> PURGE RECYCLEBIN;
Recyclebin purged.
SQL> SELECT object_name, original_name FROM user_recyclebin;
no rows selected
SQL>

恢復表,用回閃表的功能:

SQL> FLASHBACK TABLE foo TO BEFORE DROP;
Flashback complete.
SQL>SELECT table_name FROM user_tables;
TABLE_NAME
------------------------------------------------------------
FOO
SQL>

注:在10g Beta版本中,使用Undrop命令來(lái)做到這一點(diǎn).

有的時(shí)候,可能同一個(gè)名字的表被刪除到回收站中:

SQL> DROP TABLE FOO;
Table dropped.
SQL> SHOW RECYCLEBIN
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO BIN$lfTbzOjISXaw8u0BIO7pNA==$0 TABLE 2004-10-30:15:18:03
SQL> CREATE TABLE foo AS SELECT * FROM DUAL;
Table created.
SQL> DROP TABLE foo;
Table dropped.
SQL> SHOW RECYCLEBIN
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO BIN$J63QaUaKTmC1glat+imjeg==$0 TABLE 2004-10-30:15:18:50
FOO BIN$lfTbzOjISXaw8u0BIO7pNA==$0 TABLE 2004-10-30:15:18:03
SQL> FLASHBACK TABLE FOO TO BEFORE DROP;
Flashback complete.
SQL> SHOW RECYCLEBIN
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
FOO BIN$lfTbzOjISXaw8u0BIO7pNA==$0 TABLE 2004-10-30:15:18:03
SQL>

默認的恢復是第一個(gè)被刪除的FOO表。如果要恢復指定的表,可以在FLASHBACK TABLE 后面加上指定的RECYCLEBIN 參數指定其他的名字:

SQL> FLASHBACK TABLE "BIN$lfTbzOjISXaw8u0BIO7pNA==$0" TO BEFORE DROP;
FLASHBACK TABLE "BIN$lfTbzOjISXaw8u0BIO7pNA==$0" TO BEFORE DROP
*
ERROR at line 1:
ORA-38312: original name is used by an existing object
SQL> FLASHBACK TABLE "BIN$lfTbzOjISXaw8u0BIO7pNA==$0" TO BEFORE DROP
2 RENAME TO foo2;
Flashback complete.
SQL>

以下幾種drop不會(huì )將相關(guān)對象放進(jìn)RecycleBin:

  • drop tablespace:會(huì )將RecycleBin中所有屬于該tablespace的對象清除
  • drop user:會(huì )將RecycleBin中所有屬于該用戶(hù)的對象清除
  • drop cluster:會(huì )將RecycleBin中所有屬于該cluster的成員對象清除
  • drop type:會(huì )將RecycleBin中所有依賴(lài)該type的對象清除

RecycleBin中的對象會(huì )被系統自動(dòng)按照規則重命名,這是為了防止命名沖突。命名格式為:BIN$unique_id$version

其中unique_id是26個(gè)字符的對象唯一標識符,version則是對象在數據庫中的版本號。

SQL> create table t(id int);

表已創(chuàng )建。

SQL> drop table t;

表已刪除。

SQL> select object_name,original_name from recyclebin;

OBJECT_NAME ORIGINAL_NAME
------------------------------ --------------------------------
BIN$+7J5MgT2RbCX+tka+zjpgA==$0 T

SQL> create table t(id int);

表已創(chuàng )建。

SQL> drop table t;

表已刪除。

SQL> select object_name,original_name from recyclebin;

OBJECT_NAME ORIGINAL_NAME
------------------------------ --------------------------------
BIN$+7J5MgT2RbCX+tka+zjpgA==$0 T
BIN$pc+kkUM7QjuQeCDGtwlzgQ==$0 T

可以看到,刪除table t后,重建一個(gè)名為t的table,再次刪除,其unique_id是不一樣的。

這時(shí),做一個(gè)還原看看:

SQL> select object_name,original_name from recyclebin;

OBJECT_NAME ORIGINAL_NAME
------------------------------ --------------------------------
BIN$+7J5MgT2RbCX+tka+zjpgA==$0 T

這里,Oracle選擇了最后一次刪除的T表還原。

再次刪除:
SQL> drop table t;

表已刪除。

SQL> select object_name,original_name from recyclebin;

OBJECT_NAME ORIGINAL_NAME
------------------------------ --------------------------------
BIN$4bNgZiMGTA63iwA5xflh5A==$0 T
BIN$+7J5MgT2RbCX+tka+zjpgA==$0 T

可以看到unique_id又變了。所以,通過(guò)這種命名方式,避免了對于刪除table后又重建了同名table的情況可能造成的命名沖突。

2.如何啟用/禁用RecycleBin

通過(guò)設置初始化參數recyclebin,可以控制是否啟用回收站功能,默認是開(kāi)啟的。
SQL> alter system set recyclebin=off;

系統已更改。

SQL> alter system set recyclebin=on;

系統已更改。

SQL> alter session set recyclebin=off;

會(huì )話(huà)已更改。

SQL> alter session set recyclebin=on;

會(huì )話(huà)已更改。

3.如何查看RecycleBin中的信息

前面已經(jīng)提到,用戶(hù)可以通過(guò)查詢(xún)r(jià)ecyclebin來(lái)查看屬于自己的被drop的對象。
SQL> select object_name,object_type from dba_objects where object_name='RECYCLEB
IN';

OBJECT_NAME OBJECT_TYPE
------------------------------ -------------------
RECYCLEBIN SYNONYM

SQL> select owner,synonym_name,table_owner,table_name from dba_synonyms where sy
nonym_name='RECYCLEBIN';

OWNER SYNONYM_NAME TAB TABLE_NAME
---------- -------------------- --- --------------------
PUBLIC RECYCLEBIN SYS USER_RECYCLEBIN

可以發(fā)現,實(shí)際上recyclebin是user_recyclebin的一個(gè)公共同義詞。還可以通過(guò)dba_recyclebin查看系統中所有被drop的對象,但這里沒(méi)有all_recyclebin視圖。

另外,Sqlplus也提供了一個(gè)專(zhuān)門(mén)的命令:
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------

TEST BIN$xJlIkIFVR/yau1Qb8ocxxQ==$0 TABLE 2006-12-13:22:00:33

但該命令只能看到被drop的table,該table對應的index等只能通過(guò)查詢(xún)獲取。
SQL> create table t(id int);

表已創(chuàng )建。

SQL> create index ix_t on t(id);

索引已創(chuàng )建。

SQL> alter table t add constraint con_t_pk primary key(id) using index ix_t;

表已更改。

SQL> drop table t;

表已刪除。


SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------

T BIN$w0Os4BFTSE+N81RO1pUHaw==$0 TABLE 2006-12-13:22:45:58

SQL> select object_name,original_name,type from recyclebin;

OBJECT_NAME ORIGINAL_NAME TYPE
------------------------------ -------------------------------- ----------
BIN$dw0vOefrQPC5AAaFn7rkPg==$0 IX_T INDEX
BIN$w0Os4BFTSE+N81RO1pUHaw==$0 T TABLE

4.如何清除RecycleBin中的對象

回收站中的東西多了,自然要清除。Oracle10g增加了一個(gè)新的關(guān)鍵字purge來(lái)執行清除recyclebin的功能。

purge table table_name可以清除指定的table,這里的table_name既可以是table原來(lái)的名字,也可以是回收站中按規則自動(dòng)命名的名字。
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------

T BIN$+7J5MgT2RbCX+tka+zjpgA==$0 TABLE 2006-12-13:22:11:49

TEST BIN$RwhOW+KvTSmOznDipO+BOw==$0 TABLE 2006-12-13:22:30:38

SQL> purge table test;

表已清除。

SQL> purge table BIN$+7J5MgT2RbCX+tka+zjpgA==$0;
purge table BIN$+7J5MgT2RbCX+tka+zjpgA==$0
*
第 1 行出現錯誤:
ORA-00933: SQL 命令未正確結束

SQL> purge table "BIN$+7J5MgT2RbCX+tka+zjpgA==$0";

表已清除。

Purge tablespace tablespace_name可以清除RecycleBin屬于指定tablespace的所有對象。
SQL> purge tablespace users;

表空間已清除。

Purge tablespace tablespace_name user user_name則可以清除Recycle中屬于指定tablespace和指定user的所有對象。
SQL> purge tablespace users user ning;

表空間已清除。

Purge recyclebin可以清除執行該命令的用戶(hù)所能看到的所有recyclebin對象。也就是普通用戶(hù)能清除屬于自己的對象,而sysdba用戶(hù)則能清除所有recyclebin中的對象。
SQL> purge recyclebin;

回收站已清空。

另外,purge index可以清除index對象。
SQL> select object_name,original_name,type from recyclebin;

OBJECT_NAME ORIGINAL_NAME TYPE
------------------------------ -------------------------------- ----------
BIN$dw0vOefrQPC5AAaFn7rkPg==$0 IX_T INDEX
BIN$w0Os4BFTSE+N81RO1pUHaw==$0 T TABLE

SQL> purge index ix_t;
purge index ix_t
*
第 1 行出現錯誤:
ORA-00604: 遞歸 SQL 級別 1 出現錯誤
ORA-02429: 無(wú)法刪除用于強制唯一/主鍵的索引

這里由于ix_t是table主鍵的索引,所以無(wú)法單獨清除。

SQL> purge recyclebin;

回收站已清空。

SQL> create table t1(id int);

表已創(chuàng )建。

SQL> create index ix_t1 on t1(id);

索引已創(chuàng )建。

SQL> drop table t1;

表已刪除。

SQL> select object_name,original_name,type from recyclebin;

OBJECT_NAME ORIGINAL_NAME TYPE
------------------------------ -------------------------------- ----------
BIN$s6zn2IT+Ree2+slP2dpa0A==$0 IX_T1 INDEX
BIN$j2O8O52CT3aoakF4LlAGfg==$0 T1 TABLE

SQL> purge index ix_t1;

索引已清除。

5.如何還原RecycleBin中的對象

前面的試驗中已經(jīng)使用Flashback table來(lái)還原過(guò)被刪除的table。

SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------

TEST BIN$xJlIkIFVR/yau1Qb8ocxxQ==$0 TABLE 2006-12-13:22:00:33

SQL> flashback table test to before drop rename to test;

閃回完成。

SQL> desc test
名稱(chēng) 是否為空? 類(lèi)型
----------------------------------------- -------- ----------------------------

ID NUMBER(38)

如果多次刪除同名的table,則使用上面的語(yǔ)句還原的是最后一個(gè)被刪除的test表,這里也可以使用RecycleBin給table的名字來(lái)做還原。
SQL> flashback table "BIN$GoZUqZ6GS222JZdcCtFlHQ==$0" to before drop rename to t
est;

閃回完成。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Oracle10G中的“回收站”
Oracle10g?flashback系列新特性之flashback?drop
Recyclebin 對象刪除機制, 空間釋放
DROP TABLE ** CASCADE CONSTRAINTS PURGE刪除表的時(shí)候級聯(lián)刪除從...
Oracle 閃回特性(FLASHBACK DROP & RECYCLEBIN)
Oracle 刪除表中記錄 如何釋放表及表空間大小
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久