色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

Oracle 10G中的回收站(Recycle Bin)

瀏覽:13日期:2023-11-23 13:01:32
在Oracle 10g數據庫中,引入了一個回收站(Recycle Bin)的數據庫對象。 回收站,從原理上來說就是一個數據字典表,放置用戶Drop掉的數據庫對象信息。用戶進行Drop操作的對象并沒有被數據庫刪除,仍然會占用空間。除非是由于用戶手工進行Purge或者因為存儲空間不夠而被數據庫清掉。數據庫有了這樣的功能,能夠減少很多不必要的麻煩。經常看到開發人員誤把表刪除,急急忙忙找DBA 來想辦法的情況。相信隨著10G的大范圍應用,這種情形應該比較少見了,我們可以充分利用10g的閃回(FLASHBACK,閃回,回閃?)功能來避免大量的人工誤操作。 DBA治理上的相關信息可以從USER_recyclebin(DBA_recyclebin)中獲取。 為了便于測試,我們創建了一個表空間Foo,大小為1M,創建了一個用戶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等價于這條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> 當一個表被刪除并移動到'回收站'中,它的名字要進行一些轉換。這樣的目的顯而易見是為了避免同類對象名稱的重復。(這一點和Windows操作系統的回收站不同,Windows中的回收站經過了非凡的處理,操作系統文件可以重名。) 轉換后的名字格式如下: BIN$unique_id$version 其中BIN代表RecycleBin unique_id是數據庫中該對象的唯一標志,26個字符長度 version表示該對象的版本號 注:在10g beta 版本中,名字格式如下: RB$$objn$object_type$version 其中的RB,代表Recycle Bin. objn為表的目錄對象號. object_type表示對象類型. 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> 能看出來,雖然源表名字相同,在回收站里的對象名字是不同的。 針對Recycle Bin對象的操作 已經放到回收站里的表是不能用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> 對象已經清掉。假如直接清空所有的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命令來做到這一點. 有的時候,可能同一個名字的表被刪除到回收站中: 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> 默認的恢復是第一個被刪除的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>
標簽: Oracle 數據庫
主站蜘蛛池模板: 国产特黄特色一级特色大片 | 免费嗨片| 国产日韩欧美网站 | 97capcom超频在线 | 一区二区中文字幕在线观看 | 亚洲精品一区二区三区网址 | 一级做人爱a视频正版免费 一级做性色a爱片久久片 | 2022麻豆福利午夜久久 | 日韩欧美毛片免费看播放 | 97青青草原国产免费观看 | 亚洲伦乱 | 天天摸天天爽视频69视频 | 精品视频一区二区三三区四区 | 色视频网站大全免费 | 亚洲精品综合一区二区三区 | 久草免费网站 | 理论片免费午夜 | 久久综合九九亚洲一区 | 亚洲精品成人a | 黄色三级网 | 中文字幕亚洲 综合久久 | 国产一级久久免费特黄 | 亚洲一区日韩一区欧美一区a | 国产成人精品免费视频大全五级 | 手机在线看a | 欧美日韩顶级毛片www免费看 | 国产亚洲一区二区三区在线观看 | 国内精品久久国产大陆 | 精品国产欧美一区二区最新 | 亚州综合 | 国产小毛片 | 欧美一级精品高清在线观看 | 国产日韩精品欧美一区喷 | freex性日韩 free性chinese国语对白 | 亚洲高清在线观看播放 | 亚洲欧美精品中字久久99 | 亚洲欧美一区二区三区在线 | 大片国产片日本观看免费视频 | 国产精品一久久香蕉国产线看 | 国产在线观看高清不卡 | 美女三级黄 |