公司把數据保在計算机和磁帶上,數据庫的軟件管理著這些數据。如果數据庫失效,公司就可能丟失它的數据。恢复這些數据几乎是不可能的。大多數情況,即使有可能恢复數据,那也是一個艱難和冗長乏味的過程。因為數据庫損坏而導致的生產率降低,會使公司損失一大筆金錢。
[@more@]Oracle 服務器包含Oracle數据庫和Oracle實例。Oracle數据庫是存儲在文件中作為一個單元來處理的數据的集合。Oracle實例是後台進程和內存結构的集合。Oracle實例的系統標識符是SID。
加入到Oracle管理員隊伍的DBA首要學習任務之一就是了解SGA(System Global Area)的組成。在實例啟動時分配的這一內存區域分成三個主要部分:
共享池(Shared Pool): 也分為庫緩存(包含共享SQL區域)、字典和行緩存(包含了數据字典內的數据)。另外還有兩個 池,分別是 Large Pool 和 Java Pool。 Large Pool用來處理RMAN操作、并行執行(并行查詢)、多線程服務器的分時記憶。Java Pool 則被Java代碼和數据所使用。
緩沖存儲區(Buffer Cache) 保存剛使用過的,從磁盤上的數据文件內讀取的數据塊。當一個數据塊被更新時(例如,在表內插入新行),這個塊必須放置在緩存裡,然後才能被更新。過了一些時間,數据塊才被寫回磁盤,反映這個新的更新。
當數据修改後不會直接寫到數据文件(修改是指提交的情況下),很多數据庫都是採用no_force-on_commit 机制,如果採用實時更新到數据文件的話,數据庫的效率就會比較低,計算机系統最繁忙的是I/O操作,所以修改的數据保存在內存,當滿足一定的情況,再批量寫到數据文件。
重做日誌緩衝區(redo log buffer): 當數据塊被更新後,對它們所做的修改被保存在重做日誌緩衝區裡,這些改變都被記錄下來,當出現故障的時候可以使用這些記錄。在對實際的數据塊進行操作之前,就進行了這些重做記錄。當這個日誌緩衝區已經有了1/3滿了或者已經有了1MB的重做記錄時,這個日誌緩衝區的內容就執行一個處理動作,被拷貝到聯机重做日誌中。存在也是為了避免經常性的I/O操作。
Oracle 數据庫的体系結构:
表空間(Tablespace): 一個表空間是相關對象的邏輯存儲區域。每一個數据庫對象都保存在表空間裡。可以定義一個表空間,在那裡建立表和索引等對象,一個臨時表空間有效地為排序操作安排空間。一個可遷移的表空間可以在數据庫之間遷移。
段(Segment): 一個段可以是數据、索引、臨時數据或者回退段。
域/區間(Extent): 域是同一定數量的連續的數据塊組成的,是數据庫存儲空間分配的邏輯單元,一旦一個域裝了數据,Oracle則為段(Segment)安排新的域,一個 Segment 包括了最初的 Extent, 并且根据要求安排額外的 Extend;
數据塊(Data Block): 數据塊是 Oracle 中最小的存儲單元,在 Oracle 9i 中,一個數据庫可以包含不同的數据塊大小,這使得在數据庫之間傳輸數据變得很容易。
行(Row): 一個行被包含在一個或多個數据塊(Data Block) 中。
行標識(RowID): Oracle使用行標識來定位數据庫內的每一個行。這個行標識標誌出一個數据文件內的一個數据裡的一行。
系統更改號(SCN System Change Number / System Commit Number): 每一個數据庫事務執行時都被分配了一個單獨的SCN,這個不斷增加的數字在整個數据庫裡用來控制并發和一致性,進行重做和恢复。SCN代表一個協調執行著的數据庫版本,也可以把數据庫想像成一個時鐘。
SYS@HUIYI>select segment_name,bytes,blocks,extents 2 from dba_segments 3 where segment_name='GEN'; SEGMENT_NAME BYTES BLOCKS EXTENTS ---------------------------------------- ---------- ---------- ---------- GEN 65536 16 1 SYS@HUIYI>show parameter db_block_size NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------------ db_block_size integer 4096 -- 當前數据庫塊大小為 4096Bytes -- 創建gen表佔了16個數据塊(65536Bytes) SYS@HUIYI>select segment_name,block_id,bytes,blocks 2 from dba_extents 3 where segment_name='GEN'; SEGMENT_NAME BLOCK_ID BYTES BLOCKS ---------------------------------------- ---------- ---------- ---------- GEN 83121 65536 16 SYS@HUIYI>insert into gen select * from ds1.gen_file@tiptop; 155 rows created. SYS@HUIYI>insert into gen select * from gen; 155 rows created. SYS@HUIYI>/ 310 rows created. SYS@HUIYI>/ 620 rows created. SYS@HUIYI>commit; Commit complete. SYS@HUIYI>select segment_name,blocks,extents 2 from dba_segments 3 where segment_name='GEN'; SEGMENT_NAME BLOCKS EXTENTS ---------------------------------------- ---------- ---------- GEN 32 2 SYS@HUIYI>select segment_name,block_id,blocks 2 from dba_extents 3 where segment_name='GEN'; SEGMENT_NAME BLOCK_ID BLOCKS ---------------------------------------- ---------- ---------- GEN 83121 16 GEN 83137 16 -- 由於Insert了記錄,所以擴展了Extent -- 2 = 1 + 1 -- 32 = 16 + 16 -- 可以看出block是數据庫中最小的存儲單元 -- 而創建對象都是以Extent來擴展的 SYS@HUIYI>create index gen_gen01_idx on gen(gen01); Index created. SYS@HUIYI>select segment_name,block_id,blocks 2 from dba_extents 3 where segment_name='GEN_GEN01_IDX'; SEGMENT_NAME BLOCK_ID BLOCKS ---------------------------------------- ---------- ---------- GEN_GEN01_IDX 83153 16
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8799875/viewspace-902967/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8799875/viewspace-902967/