Sunday, January 11, 2009

使用EVENT 38003来重建BOOTSTRAP$对象

主题:使用EVENT 38003来重建BOOTSTRAP$对象 发表时间:2008-9-30 18:30:40

作者:白鳝 离线 回复:3 浏览:589

Size of Sys.C_obj#_intcol# cluster in system tablespace is growing
Doc ID: Note:463226.1 中说
CLUSTER C_OBJ#_INTCOL#增长导致数据库的SYSTEM 表空间被大量占用,如何缩小呢?该文档说除了重建数据库无别的办法。
因为这个CLUSTER是一个BOOTSTRAP$对象。首先我们看看这个CLUSTER里包含些什么内容:
SQL> select obj# from obj$ where name='C_OBJ#_INTCOL#';
OBJ#
----------
251
SQL> SELECT OBJ#,NAME,TYPE# FROM OBJ$ WHERE DATAOBJ#=251;
OBJ# NAME TYPE#
---------- ------------------------------ ----------
251 C_OBJ#_INTCOL# 3
253 HISTGRM$ 2
看样子只有HISTGRM$存储在这个CLUSTER中。按理说这个对象是可以TRUNCATE的
SQL> truncate cluster c_obj#_intcol#;
truncate cluster c_obj#_intcol#
*
第 1 行出现错误:
ORA-00701: 无法变更热启动数据库所需的对象
由于是BOOTSTRAP$对象,所以无法TRUNCATE.由于这个对象是251>56,因此不是核心BOOTSTRAP$对象,所以我们用得上EVENT 38003了。
SQL> alter system set EVENT="38003 trace name context forever, level 10"
2 SCOPE=SPFILE;
系统已更改。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 448790528 bytes
Fixed Size 1297220 bytes
Variable Size 163579068 bytes
Database Buffers 276824064 bytes
Redo Buffers 7090176 bytes
数据库装载完毕。
数据库已经打开。
SQL> truncate cluster c_obj#_intcol#;
簇已截断。
SQL> exec DBMS_STATS.GATHER_TABLE_STATS(ownname=>'scott', tabname=>'t2', estimate_percent=>30, -
> method_opt=>'for all indexed columns size skewonly',cascade=>true, degree=>2);
PL/SQL 过程已成功完成。
看样子一切正常。不过要注意的是,这是不被支持的方法,建议在生产库中不要轻易实施,如果要实施,千万记住几点:
1、备份数据库
2、最好操作后要对重要的表进行一次分析,否则柱状图信息确实,可能影响系统中的一些SQL的执行计划。




本文链接:http://www.oraclefans.cn/blog/showblog.jsp?rootid=9065

网友评论
─ 评论人 白鳝 08-09-30 18:43
建议如下步骤:
SQL> select count(*) from dba_extents where segment_name = 'C_OBJ#_INTCOL#'

and owner = 'SYS';

SQL> create table sys.histgrm_tmp as select * from sys.histgrm$;

SQL> truncate cluster sys.C_OBJ#_INTCOL#;

SQL> select count(*) from dba_extents where segment_name = 'C_OBJ#_INTCOL#'

and owner = 'SYS';

SQL> insert into sys.histgrm$ select * from sys.histgrm_tmp;

SQL> commit;

不过还是要注意,一旦你做了这种操作,如果发生与之相关的BUG,ORACLE将不再提供技术支持

─ 评论人 battleman 08-10-15 10:12
除了采用38003事件之外,如果把数据库直接启动到migrate模式也应该可以

─ 评论人 白鳝 08-10-15 14:35
migrate模式就是激活38003的,因为UPGRADE的时候需要更新部分BOOTSTRAP$对象。

No comments: