第一章 保護數据

公司把數据保在計算机和磁帶上,數据庫的軟件管理著這些數据。如果數据庫失效,公司就可能丟失它的數据。恢复這些數据几乎是不可能的。大多數情況,即使有可能恢复數据,那也是一個艱難和冗長乏味的過程。因為數据庫損坏而導致的生產率降低,會使公司損失一大筆金錢。

[@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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值