欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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和索引

转载于:https://www.cnblogs.com/wangduqiang/p/4180957.html

总结

以上是生活随笔为你收集整理的oraclenbsp;一个稍微大点数据库的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。