动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.存储参数(storage子句)含义及设.
.Oracle10g在Solaris10上的安装配.
.Oracle大批量删除数据方法.
.Oracle高级安全性.
.Orcas版C#3.0的新特性.
.优化Oracle库表设计的若干方法.
.Oracle常用脚本备忘.
.改变或关闭Oracle XDB的ftp和htt.
.oracle用存储过程加密一段字符串.
.从四大方面介绍 Oracle 的数据字.
.PL/SQL的一些语法.
.oracle10g,又遭遇了04031错误.
.Connect To Oracle DataBase.
.Oracle新的Linux应用环境测试标准.
.Delphi中BDE直连方式访问Oracle的.
.如何在Oracle 中实现类似自动增加.
.重建密码文件--解决ORA-01991错误.
.Borland C++ Builder 5 企业版使.
.Linux启动过程全接触(2).
.保“库”之路:Oracle数据库性能.

Oracle Database 10g:删除表

发表日期:2008-2-9 |



  
使用 Oracle Database 10g 中的闪回表特性,可以毫不费力地恢复被意外删除的表

以下是一个不该发生却经常发生的情况:用户删除了一个非常重要的表 — 当然是意外地删除 — 并需要尽快地恢复。(在某些时候,这个不幸的用户可能就是 DBA!)

Oracle9i Database 推出了闪回查询选项的概念,以便检索过去某个时间点的数据,但它不能闪回 DDL 操作,如删除表的操作。唯一的恢复方法是在另一个数据库中使用表空间的时间点恢复,然后使用导出/导入或其他方法,在当前数据库中重新创建表。这一过程需要 DBA 进行大量工作并且耗费宝贵的时间,更不用说还要使用另一个数据库进行克隆。

请使用 Oracle Database 10g 中的闪回表特性,它使得被删除表的恢复过程如同执行几条语句一样简单。让我们来看该特性是如何工作的。

删除那个表!

首先,让我们查看当前模式中的表。



SQL> select * from tab;TNAME TABTYPE CLUSTERID------------------------ ------- ----------RECYCLETEST TABLE


现在,我们意外地删除了该表:



SQL> drop table recycletest;Table dropped.


现在让我们来查看该表的状态。



SQL> select * from tab;TNAME TABTYPE CLUSTERID------------------------------ ------- ----------BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE


表 RECYCLETEST 已不存在,但是请注重出现新表 BIN$04LhcpndanfgMAAAAAANPw==$0。这就是所发生的事情:被删除的表 RECYCLETEST 并没有完全消失,而是重命名为一个由系统定义的名称。它存在于同一个表空间中,具有与原始表相同的结构。假如在该表上定义了索引或触发器,则它们也被重命名,使用与表相同的命名规则。任何相关源(如过程)都失效;原始表的触发器和索引被改为放置在重命名的表 BIN$04LhcpndanfgMAAAAAANPw==$0 上,保持被删除表的完整对象结构。


表及其相关对象被放置在一个称为“回收站”的逻辑容器中,它类似于您 PC 机中的回收站。但是,对象并没有从它们原先所在的表空间中删除;它们仍然占用那里的空间。回收站只是一个列出被删除对象目录的逻辑结构。在 SQL*Plus 提示符处使用以下命令来查看其内容(您需要使用 SQL*Plus 10.1 来进行此操作):


SQL> show recyclebinORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME---------------- ------------------------------ ------------ ------------------RECYCLETEST BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE 2004-02-16:21:13:31



结果显示了表的原始名称 RECYCLETEST,并显示了回收站中的新名称,该名称与我们看到的删除后所创建的新表名称相同。(注重:确切的名称可能因平台不同而不同。)为恢复该表,您所需要做的就是使用 FLASHBACK TABLE 命令:


SQL> FLASHBACK TABLE RECYCLETEST TO BEFORE DROP;FLASHBACK COMPLETE.SQL> SELECT * FROM TAB;TNAME TABTYPE CLUSTERID------------------------------ ------- ----------RECYCLETEST TABLE



瞧!表毫不费力地恢复了。假如现在查看回收站,它将是空的。

记住,将表放在回收站里并不在原始表空间中释放空间。要释放空间,您需要使用以下命令清空回收站:


PURGE RECYCLEBIN;


但是假如您希望完全删除该表而不需要使用闪回特性,该怎么办?在这种情况下,可以使用以下命令永久删除该表:


DROP TABLE RECYCLETEST PURGE;


此命令不会将表重命名为回收站中的名称,而是永久删除该表,就象 10g 之前的版本一样。

治理回收站

假如在该过程中没有实际删除表 — 因而没有释放表空间 — 那么当被删除的对象占用了所有空间时,会发生什么事?

答案很简单:这种情况根本不会出现。当表空间被回收站数据完全占满,以至于必须扩展数据文件来容纳更多数据时,可以说表空间处于“空间压力”情况下。此时,对象以先进先出的方式从回收站中自动清除。在删除表之前,相关对象(如索引)被删除。



同样,空间压力可能由特定表空间定义的用户限额而引起。
表空间可能有足够的空余空间,但用户可能将其在该表空间中所分配的部分用完了。在这种情况下,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, TYPEFROM USER_RECYCLEBINWHERE BASE_OBJECT = (SELECT BASE_OBJECT FROM USER_RECYCLEBINWHERE ORIGINAL_NAME = 'RECYCLETEST')AND ORIGINAL_NAME != 'RECYCLETEST';OBJECT_NAME ORIGINAL_N TYPE------------------------------ ---------- --------BIN$04LhcpnianfgMAAAAAANPw==$0 IN_RT_01 INDEXBIN$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;


一个值得注重的例外情况是位图索引。当删除位图索引时,它们并不放置在回收站中 — 因此无法检索它们。约束名称也无法从视图中检索。必须从其他来源对它们进行重命名。

闪回表的其他用途

闪回删除表功能不仅限于恢复表的删除操作。与闪回查询类似,您还可以使用它将表恢复到不同的时间点,利用表的“过去”版本来替代整个表。
例如,以下语句将表恢复到系统更改号 (SCN) 2202666520。


FLASHBACK TABLE RECYCLETEST TO SCN 2202666520;


此特性使用 Oracle 数据泵技术来创建不同的表,使用闪回功能将该 SCN 处的数据版本填充到表中,然后用新表替代原始表。为找出能够在何种程度上对表进行闪回操作,可以使用 Oracle Database 10g 的版本控制特性。(更多具体信息请参见本系列第 1 周的内容。)在闪回子句中也可以指定时间戳记而不是指定 SCN。
上一篇:Oracle Database 10g:闪回版本查询 人气:448
下一篇:Oracle Database 10g:回滚监视 人气:383
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-8-19 久溜溜电影系统(免维护+小偷) v5
2008-8-19 晴天免费电影系统完整版(带迅雷采
2008-8-19 Twinklous File Manager v1.5
2008-8-19 千米旅游网站管理系统 v2.0
2008-8-19 资阳人才网 v2.0
2008-8-19 全球商务B2B网站系统 v1.0 asp版
2008-8-19 动域网主机代理管理系统 v1.0
2008-8-19 JH2008-企业网站(全站生成html)
2008-8-19 GlobalEC C2C管理系统 v1.0
2008-8-16 iLaba Player(小喇叭播放器) v2.
2008-8-16 DoubleClickFix 鼠标双击修正工具
2008-8-16 CrystalCPUID 4.15.2.451
2008-8-16 VeryCD 电驴(easyMule) 1.0.4 Bu
2008-8-16 uTorrent 1.8 Build 11813 - Sta
2008-8-16 比特精灵(BitSpirit) v3.3.2.287
2008-8-16 StayInTune音叉 v1.0 破解版
2008-8-16 iChing《周易》汉化补丁 v1.0
2008-8-16 Starmap星空图v1.0汉化破解版
  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵