只读表空间对象被删除后对应的对象信息 [转帖]_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3709 | 回复: 0   主题: 只读表空间对象被删除后对应的对象信息 [转帖]        下一篇 
wayne
注册用户
等级:中校
经验:1690
发帖:221
精华:0
注册:2011-7-21
状态:离线
发送短消息息给wayne 加好友    发送短消息息给wayne 发消息
发表于: IP:您无权察看 2011-8-25 18:44:15 | [全部帖] [楼主帖] 楼主

前面写了一篇文章,关于DROP USER过程中,查询DBA_SEGMENTS出现的奇怪的对象信息。而实际上那篇文章介绍的内容是个意外发现,第一次碰到这个现象是当前的问题所引发的,由于当时来不及记录,环境就被删除后。于是在不断尝试重现问题的过程中,引发了昨天问题。

DROP USER过程中出现的奇怪的对象信息:http://yangtingkun.itpub.net/post/468/492422

记得第一次碰到这个现象时,发现表空间存在很多OWNER为SYS的段,这些段的名称很奇怪,都是数字组成的。但是当时没有来得及研究环境就被清除了。唯一可以确定的是,这个问题和当时的DROP USER操作有关。

当然,通过上一篇文章的研究,已经了解这种现象的产生原因了。但是这个由FILE_ID和BLOCK_ID构成的对象名称只是在对象建立或删除的短暂时间内产生,并不会一直存储。而当时碰到的情况是这种数字构成的段名并不会消失,而是一直存在。

其实这时原因已经显而易见了,如果删除的对象处于一个只读表空间中,就会出现这种现象:

SQL> alter tablespace ndmain read only;


表空间已更改。

SQL> drop user ndmain cascade;


用户已删除。

SQL> set pages 100 lines 120
SQL> col segment_name format a30
SQL> select count(*)
2 from dba_segments
3 where tablespace_name = 'NDMAIN';
COUNT(*)
----------
327
SQL> select owner, segment_name
2 from dba_segments
3 where tablespace_name = 'NDMAIN';
OWNER SEGMENT_NAME
------------------------------ ------------------------------
SYS 16.143303
SYS 16.138695
SYS 16.138631
SYS 16.138567
.
.
.
SYS 14.391
SYS 14.327
SYS 14.135
SYS 14.7


已选择327行。

由于DROP USER CASCADE命令删除了用户下的所有对象,因此这些对象信息从数据字典中被清除。但是由于表空间NDMAIN处于只读状态,因此数据库不会真正清除表空间的数据文件上的信息,Oracle通过FILE_ID.BLOCK_ID的这种方式来表示这些被删除的段信息,而这些信息的清除将变成延迟事务,记录在SYS表空间内的系统回滚段中。

SQL> alter tablespace ndmain read write;


表空间已更改。

SQL> select owner, segment_name
2 from dba_segments
3 where tablespace_name = 'NDMAIN';


未选定行

当表空间恢复可写状态后,Oracle自动清除这个表空间上所有的被删除的段信息。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论