当前位置:
首页 >
oraclenbsp;一个稍微大点数据库
发布时间:2023/12/13
42
豆豆
生活随笔
收集整理的这篇文章主要介绍了
oraclenbsp;一个稍微大点数据库
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
公司有个水电收费系统,在包头试运行, 给了我一个dmp让熟悉一下业务. dmp是压缩过的.80多兆好像.解压下300多兆好像. 导入, 有几个表是50万行的,几个30万左右,200多个表(没数).很多表是0行, 设计居民用户单位用户一堆一堆的.用户有几万个. 问题是这样的: 收费系统每个月要结算一个,但要测试这个流程的话要核算所有用户,核算几千个就花的时间很多,因为是自己的库,所有我开始删了. 先删了大部分组织层次和网络层次只剩一个.然后删用户档案.所属不是剩的一个的都删了 select table_name,num_rows,owner from dba_tables where owner = 'WANG' order by num_rows 这是看所有表的行数,开始哪个大删删哪个.顺便说下dba_table不是实时的 ,准确来说一天也不更新一下.要,analyze table XXX compute statistics 来更新 xxx表的统计 涉及用户信息的表 里 用户id not in 用户档案都删了. 记录delete信息的表都truncate了(truncate无法回滚,delete可以,这个还要详细说,涉及表空间的释放) 表示删了之后系统没什么异常,核算10分钟搞定,归档也很快. 之前的没试,但只是一个部门的核算就10多分钟好像,有好几个部门呢.估计得几个小时.
删了很多东西就要想到delete的表空间释放问题. 发现导出的话50兆左右.很好确实小了.导出的话好像就没没有的表空间的事了. select ROUND(u.BYTES / (1024 * 1024), 2) MB from user_segments u where u.segment_name = 'S_YHFYMX_HISTORY' //表占用表空间的大小 //空间以段(segment)为单位分配给对象(如表、群集和索引) 这个是费用明细历史.50多万行,删得好像剩一万多行, 但占用的空间删之前跟之后是一样大的. // Select owner,segment_name,Sum(bytes)/1024/1024||'MB' as sizes From dba_extents HERE segment_name='TTT1' //这个也可以, 不知什么区别,这些特殊的表需要查下用途//TODO 但查了下资料.觉得并不必在意.就像某块内存不使用了.但他内容不会清空(相当于修改了),只需标记为已删就行,这样他占用的空间就可以分配给别的程序. 别的程序用的时候就修改这个内存块的内容.,只有修改内容只需一次 (删除时候清空 算是一次多余的修改) oracle的表空间管理 还涉及到高水标记的问题, high water mark (高水标记除了truncate操作以外,只会增大,不会减小。虽然高水标记里的块可能有空块,这个块也要被放到freelist中,但是这个块只能被重用,也就是说它只能被这个表使用,而不能彻底释放给别的数据对象使用) 怎么降低表空间占用,没找到好的方法,这个方法是可以用的,先export 再drop表,在import. 应该还有别的方法注意rowid和索引
删了很多东西就要想到delete的表空间释放问题. 发现导出的话50兆左右.很好确实小了.导出的话好像就没没有的表空间的事了. select ROUND(u.BYTES / (1024 * 1024), 2) MB from user_segments u where u.segment_name = 'S_YHFYMX_HISTORY' //表占用表空间的大小 //空间以段(segment)为单位分配给对象(如表、群集和索引) 这个是费用明细历史.50多万行,删得好像剩一万多行, 但占用的空间删之前跟之后是一样大的. // Select owner,segment_name,Sum(bytes)/1024/1024||'MB' as sizes From dba_extents HERE segment_name='TTT1' //这个也可以, 不知什么区别,这些特殊的表需要查下用途//TODO 但查了下资料.觉得并不必在意.就像某块内存不使用了.但他内容不会清空(相当于修改了),只需标记为已删就行,这样他占用的空间就可以分配给别的程序. 别的程序用的时候就修改这个内存块的内容.,只有修改内容只需一次 (删除时候清空 算是一次多余的修改) oracle的表空间管理 还涉及到高水标记的问题, high water mark (高水标记除了truncate操作以外,只会增大,不会减小。虽然高水标记里的块可能有空块,这个块也要被放到freelist中,但是这个块只能被重用,也就是说它只能被这个表使用,而不能彻底释放给别的数据对象使用) 怎么降低表空间占用,没找到好的方法,这个方法是可以用的,先export 再drop表,在import. 应该还有别的方法注意rowid和索引
转载于:https://www.cnblogs.com/wangduqiang/p/4180957.html
总结
以上是生活随笔为你收集整理的oraclenbsp;一个稍微大点数据库的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 问题:循环元素,被选中元素个数,全选
- 下一篇: Oracle(3)——Oracle图形界