oraclenbsp;一个稍微大点数据库
生活随笔
收集整理的這篇文章主要介紹了
oraclenbsp;一个稍微大点数据库
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
公司有個(gè)水電收費(fèi)系統(tǒng),在包頭試運(yùn)行, 給了我一個(gè)dmp讓熟悉一下業(yè)務(wù). dmp是壓縮過的.80多兆好像.解壓下300多兆好像. 導(dǎo)入, 有幾個(gè)表是50萬行的,幾個(gè)30萬左右,200多個(gè)表(沒數(shù)).很多表是0行, 設(shè)計(jì)居民用戶單位用戶一堆一堆的.用戶有幾萬個(gè).? 問題是這樣的: 收費(fèi)系統(tǒng)每個(gè)月要結(jié)算一個(gè),但要測試這個(gè)流程的話要核算所有用戶,核算幾千個(gè)就花的時(shí)間很多,因?yàn)槭亲约旱膸?所有我開始刪了. 先刪了大部分組織層次和網(wǎng)絡(luò)層次只剩一個(gè).然后刪用戶檔案.所屬不是剩的一個(gè)的都刪了 select table_name,num_rows,owner from dba_tables where owner = 'WANG' order by num_rows? 這是看所有表的行數(shù),開始哪個(gè)大刪刪哪個(gè).順便說下dba_table不是實(shí)時(shí)的 ,準(zhǔn)確來說一天也不更新一下.要,analyze table XXX compute statistics 來更新 xxx表的統(tǒng)計(jì) 涉及用戶信息的表 里 用戶id not in 用戶檔案都刪了. 記錄delete信息的表都truncate了(truncate無法回滾,delete可以,這個(gè)還要詳細(xì)說,涉及表空間的釋放) 表示刪了之后系統(tǒng)沒什么異常,核算10分鐘搞定,歸檔也很快. 之前的沒試,但只是一個(gè)部門的核算就10多分鐘好像,有好幾個(gè)部門呢.估計(jì)得幾個(gè)小時(shí).
刪了很多東西就要想到delete的表空間釋放問題. 發(fā)現(xiàn)導(dǎo)出的話50兆左右.很好確實(shí)小了.導(dǎo)出的話好像就沒沒有的表空間的事了. select ROUND(u.BYTES / (1024 * 1024), 2) MB from user_segments u where u.segment_name = 'S_YHFYMX_HISTORY' //表占用表空間的大小 //空間以段(segment)為單位分配給對象(如表、群集和索引) 這個(gè)是費(fèi)用明細(xì)歷史.50多萬行,刪得好像剩一萬多行, 但占用的空間刪之前跟之后是一樣大的. //?Select owner,segment_name,Sum(bytes)/1024/1024||'MB' as sizes ?From dba_extents ?HERE ?segment_name='TTT1' ?//這個(gè)也可以, 不知什么區(qū)別,這些特殊的表需要查下用途//TODO 但查了下資料.覺得并不必在意.就像某塊內(nèi)存不使用了.但他內(nèi)容不會(huì)清空(相當(dāng)于修改了),只需標(biāo)記為已刪就行,這樣他占用的空間就可以分配給別的程序. 別的程序用的時(shí)候就修改這個(gè)內(nèi)存塊的內(nèi)容.,只有修改內(nèi)容只需一次 (刪除時(shí)候清空 算是一次多余的修改) oracle的表空間管理 還涉及到高水標(biāo)記的問題,?high?water?mark? (高水標(biāo)記除了truncate操作以外,只會(huì)增大,不會(huì)減小。雖然高水標(biāo)記里的塊可能有空塊,這個(gè)塊也要被放到freelist中,但是這個(gè)塊只能被重用,也就是說它只能被這個(gè)表使用,而不能徹底釋放給別的數(shù)據(jù)對象使用) 怎么降低表空間占用,沒找到好的方法,這個(gè)方法是可以用的,先export 再drop表,在import.? 應(yīng)該還有別的方法注意rowid和索引
刪了很多東西就要想到delete的表空間釋放問題. 發(fā)現(xiàn)導(dǎo)出的話50兆左右.很好確實(shí)小了.導(dǎo)出的話好像就沒沒有的表空間的事了. select ROUND(u.BYTES / (1024 * 1024), 2) MB from user_segments u where u.segment_name = 'S_YHFYMX_HISTORY' //表占用表空間的大小 //空間以段(segment)為單位分配給對象(如表、群集和索引) 這個(gè)是費(fèi)用明細(xì)歷史.50多萬行,刪得好像剩一萬多行, 但占用的空間刪之前跟之后是一樣大的. //?Select owner,segment_name,Sum(bytes)/1024/1024||'MB' as sizes ?From dba_extents ?HERE ?segment_name='TTT1' ?//這個(gè)也可以, 不知什么區(qū)別,這些特殊的表需要查下用途//TODO 但查了下資料.覺得并不必在意.就像某塊內(nèi)存不使用了.但他內(nèi)容不會(huì)清空(相當(dāng)于修改了),只需標(biāo)記為已刪就行,這樣他占用的空間就可以分配給別的程序. 別的程序用的時(shí)候就修改這個(gè)內(nèi)存塊的內(nèi)容.,只有修改內(nèi)容只需一次 (刪除時(shí)候清空 算是一次多余的修改) oracle的表空間管理 還涉及到高水標(biāo)記的問題,?high?water?mark? (高水標(biāo)記除了truncate操作以外,只會(huì)增大,不會(huì)減小。雖然高水標(biāo)記里的塊可能有空塊,這個(gè)塊也要被放到freelist中,但是這個(gè)塊只能被重用,也就是說它只能被這個(gè)表使用,而不能徹底釋放給別的數(shù)據(jù)對象使用) 怎么降低表空間占用,沒找到好的方法,這個(gè)方法是可以用的,先export 再drop表,在import.? 應(yīng)該還有別的方法注意rowid和索引
轉(zhuǎn)載于:https://www.cnblogs.com/wangduqiang/p/4180957.html
總結(jié)
以上是生活随笔為你收集整理的oraclenbsp;一个稍微大点数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 问题:循环元素,被选中元素个数,全选
- 下一篇: Oracle(3)——Oracle图形界