Oracle 10G 中的"回收站"
在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 10G 中的"回收站"的更多相关文章
- 【Oracle学习笔记-3】关于Oracle 10g中各种服务解析
[原创]关于oracle 10g中各种服务解析 (2014/10/16 8:39:40) 时间:2014-10-16 8-58-30 作者:ssslinppp 1. 当首次安装oracle 1 ...
- 通过OCI 处理 Oracle 10g 中处理Clob大字段写入
Oracle数据库中, 通过存储过程写入Clob字段 , 当数据大于4k时, 报错 ORA-01460: 转换请求无法实施或不合理 经过排查, 数据Bind方式不对, 不能采用字符串的Bind方式 原 ...
- 深入解析Oracle 10g中SGA_MAX_SIZE和SGA_TARGET参数的区别和作用
原文链接:http://m.blog.csdn.net/blog/aaron8219/40037005 SGA_MAX_SIZE是从9i以来就有的作为设置SGA大小的一个参数,而SGA_TARGET则 ...
- Oracle 10g和11g中的自动统计任务
1) 先来看下oracle 10g中的自动统计任务的问题. 从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动 ...
- oracle 10G以上版本 树形查询新加的几个功能
1.判断当前节点是否叶子节点 在 Oracle 10g 中,还有其他更多关于层次查询的新特性 .例如,有的时候用户更关心的是每个层次分支中等级最低的内容.那么你就可以利用伪列函数CONNECT_BY_ ...
- RAC 常用维护工具和命令(oracle 10g)
Oracle 的管理可以通过OEM或者命令行接口. Oracle Clusterware的命令集可以分为以下4种: 节点层:osnodes 网络层:oifcfg 集群层:crsctl, ocrchec ...
- 使用分析函数实现Oracle 10G提供的CONNECT_BY_ISLEAF和CONNECT_BY_ROOT的功能(转载)
文章转载至:http://blog.csdn.net/wzy0623/article/details/1644049 如果,有侵犯您权益的地方,烦请及时的告知我,我会即刻停止侵权行为 Oracle 1 ...
- oracle 11g中的自动维护任务管理
因为人员紧缺,最近又忙着去搞性能优化的事情,有时候真的是不想再搞这个事情,只是没办法,我当前的绩效几乎取决于这个项目的最终成绩,所以不管是人的事还是事的事,都得去让他顺利推进. 前段时间发生还有几台服 ...
- win10 管理工具中添加 oracle 10g驱动
重装了系统,在应用oracle 10g时,一直在管理工具中没有添加成功ODBC驱动,今天找到解决方法了. 状态如下: 解决方法: c盘——windows——SysWOW64——odbcad32.exe ...
随机推荐
- Android HTTP下载文件并保存到本地或SD卡
想把文件保存到SD卡中,一定要知道SD卡的路径,获取SD卡路径: Environment.getExternalStorageDirectory() 另外,在保存之前要判断SD卡是否已经安装好,并且可 ...
- angular js shopping
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- 2A课程笔记分享_StudyJams_2017
课程2A 概述 课程2A.2B的内容主要是关于创建交互式应用的基础知识.之前的L1课程主要是Android UI的基础设计知识,基本上没涉及到编程. 2A的讲解主要包括:使用变量来更新欲显示在屏幕上的 ...
- java Web(4)
Web 应用程序状态管理 通过隐藏表单域 hidden,cookie,session,重写URL来实现: cookie存在于客户端,浏览器关闭时失效 cookie原理:服务器在响应请求时将一些数据以“ ...
- CXF-JAX-WS开发(一)入门案例
一.Web Service 1.定义 W3C定义,Web服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作. 2.作用 多系统间数据通信 二.CXF是什么? CXF是目 ...
- change project compliance and jre to 1.5
这个主要检查一下几点 项目的jdk为1.7 java版本设置为1.7 java compiler 的页面设置为以下,并且去掉勾选java compiler 下面的 enableproject spec ...
- iOS https 证书链获取
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)chall ...
- C# 去掉代码前边空格(格式化代码)
private void button1_Click(object sender, EventArgs e) { textBox2.Text = ""; string str = ...
- 微信小程序例子-保存图片到手机相册
微信小程序例子-保存图片到手机相册 1.关键代码 1)WXML文件 2)JS文件 saveImgToPhotosAlbumTap: function(){ // 图片必须是 https 的 var I ...
- C#写上位机中写曲线图的知识点(VS2019-WPF)
最近在写一个上位机,为了与下位机软件串口进行通信以及一些数据的形象显示,做到曲线图这一块的时候出现了一些问题,我用的是VS2019(个人不能吐槽VS2019新版本,因为平时也很少用VS,下载的时候就直 ...