oracle 乙個稍微大點資料庫

2021-06-27 19:37:58 字數 1552 閱讀 5404

公司有個水電收費系統,在包頭試執行, 給了我乙個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 *** compute statistics 來更新 ***表的統計

涉及使用者資訊的表 裡 使用者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和索引

建立乙個Oracle 資料庫

由於oracle是大型的關係型資料庫系統 rdbms 所以在建立資料庫時需要設定許多環境引數,有時候這些設定環境的準備工作會讓人覺得很繁瑣,問題出得也很多,但也正是oracle公司給出了讓使用者能靈活的設定資料庫環境引數的做法,使得oracle變得很靈活和高效,能適應不同檔次的機器 作業系統。這裡只...

手動建立乙個Oracle資料庫

系統環境 1 作業系統 windows 2000 pro 2 資料庫 oracle9i release 9.2.0.3.0 3 安裝路徑 d oracle 建庫步驟 1 手工建立相關目錄 d oracle admin ora92 d oracle admin ora92 adhoc d oracle...

資料庫 乙個題目

求至少用了 商 s1 所 的全部零件的工程號 的兩種解法 這個問題存在歧義,博主的是一種理解,我的理解是選擇的工程嚴格地用了 商 s1 所 的全部零件,且這些零件不是由其他 商 的。select distinct jno from select jno from spj where sno s1 a...