免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2944 | 回复: 9
打印 上一主题 下一主题

关于SYSTEM表空间整理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-12 13:34 |只看该作者 |倒序浏览
不小心弄了个用户在SYSTEM表空间,结果造成SYSTEM表空间剧增
现已将所有非SYS的对象都REBUILD至其它表空间
用ALTER DATABASE DATEFILE '/ORADATA/SYSTEM01.DBF' RESIZE 1024M;
缩小表空间时,提示

ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据

SYSTEM表空间MAP如下图所示
ALTER TABLESPACE SYSTEM COALESCE 没有效果
将后面那几个对象REBUILD提示

ORA-00701: 无法改变热启动数据库所需的对象

请问我还有办法挽救吗?

未命名.JPG (179.88 KB, 下载次数: 30)

未命名.JPG

论坛徽章:
0
2 [报告]
发表于 2006-10-12 13:47 |只看该作者
把这个用户下的对象导出放到别的表空间去啊。

论坛徽章:
0
3 [报告]
发表于 2006-10-12 13:53 |只看该作者
已经没有别的用户的对象了,现在表空间里只有数据字典,最后一个对象是个索引 I_col2

另外环境: SOLARIS8 ORACLE8.1.7

论坛徽章:
0
4 [报告]
发表于 2006-10-12 14:34 |只看该作者
system表空间能不能收回要取决运气,如果extent被allocated在文件尾部,基本无法收回,除非recreate database(通过exp/imp),下面是asktom上的一段脚本,判断各个表空间的情况:
sqlplus中运行:

set verify off
column file_name format a50 word_wrapped
column smallest format 999,990 heading "Smallest|Size|Poss."
column currsize format 999,990 heading "Current|Size"
column savings  format 999,990 heading "Poss.|Savings"
break on report
compute sum of savings on report

column value new_val blksize
select value from v$parameter where name = 'db_block_size'
/

select file_name,
       ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) smallest,
       ceil( blocks*&&blksize/1024/1024) currsize,
       ceil( blocks*&&blksize/1024/1024) -
       ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) savings
from dba_data_files a,
     ( select file_id, max(block_id+blocks-1) hwm
         from dba_extents
        group by file_id ) b
where a.file_id = b.file_id(+)
/

具体连接:
http://asktom.oracle.com/pls/ask ... PLAYID:153612348067

如果要对system作修改性操作,做好全备是必要的。

[ 本帖最后由 numenhuang 于 2006-10-12 14:37 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-10-12 18:33 |只看该作者
除了重新建库没有别的方法吗?
还有,如果重新建库,对于NOARCHIVELOG,是否关闭数据库后备份数据文件,控制文件,重做日志文件3部分就可以完全恢复呢?

论坛徽章:
0
6 [报告]
发表于 2006-10-12 18:37 |只看该作者
原帖由 寒鸦 于 2006-10-12 18:33 发表
除了重新建库没有别的方法吗?
还有,如果重新建库,对于NOARCHIVELOG,是否关闭数据库后备份数据文件,控制文件,重做日志文件3部分就可以完全恢复呢?

还有配置文件,以上就差不多了吧!^0^

论坛徽章:
0
7 [报告]
发表于 2006-10-12 22:24 |只看该作者
原帖由 寒鸦 于 2006-10-12 18:33 发表
除了重新建库没有别的方法吗?
还有,如果重新建库,对于NOARCHIVELOG,是否关闭数据库后备份数据文件,控制文件,重做日志文件3部分就可以完全恢复呢?


上面那条语句执行的结果显示system tablespace的最小size多少?

如果要重建数据库,要通过full export/full import方式来进行。

论坛徽章:
0
8 [报告]
发表于 2006-10-13 09:03 |只看该作者
最小SIZE 10G,数据不到100M,就是后面有几个BLOCK被写上东西了,而且对象还不允许REBUILD,才导致表空间无法回缩。
可不可以通过其它的办法把它移走呢?

论坛徽章:
0
9 [报告]
发表于 2006-10-13 09:20 |只看该作者
所以说设置AUTOEXTENT是有利有弊的,虽然可以让DBA少些麻烦(不用加FILE),但也可能使DBA忽略一些异常情况(如LZ遇到的,如果不是AUTOEXTENT的话,很早就发现问题了).
当然,不管用何种方式,作为DBA对DB定期的检查还是必要的.
另外,人个以为SYSTEM表空间,应该不必设置成AUTOEXTENT,当然SIZE不要设置的太小

论坛徽章:
0
10 [报告]
发表于 2006-10-13 15:30 |只看该作者
终于发现autoextent也有缺点
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP