Oracle體系結(jié)構(gòu)之-邏輯結(jié)構(gòu)

很多人在學(xué)習(xí)Oracle體系結(jié)構(gòu)的時(shí)候會(huì)遇到各種各樣的問題,我們?cè)谶@里給大家簡(jiǎn)單的介紹一下Oracle體系結(jié)構(gòu)之邏輯結(jié)構(gòu),那么什么是邏輯結(jié)構(gòu);邏輯結(jié)構(gòu)中分為哪些結(jié)構(gòu)呢?讓我們一起來學(xué)習(xí)Oracle 邏輯結(jié)構(gòu)。

一、Oracle 邏輯結(jié)構(gòu)簡(jiǎn)介

oracle的邏輯結(jié)構(gòu)包括表空間(tablespace),段(segment),數(shù)據(jù)塊(data block)以及模式對(duì)象(schema)。

oracle數(shù)據(jù)庫在邏輯上是由多個(gè)表間組成的,表空間中存儲(chǔ)的對(duì)象叫段,比如數(shù)據(jù)段,索引段,和回退段。段由區(qū)組成,區(qū)是磁盤分配的最小單位。段的增大是通過增加區(qū)的個(gè)數(shù)來實(shí)現(xiàn)的。每個(gè)區(qū)的大小是數(shù)據(jù)塊大小的整數(shù)倍,區(qū)的大小可以不相同;數(shù)據(jù)塊是數(shù)據(jù)庫中最小的I/O單位,同時(shí)也是內(nèi)存數(shù)據(jù)緩沖區(qū)的單位,及數(shù)據(jù)文件存儲(chǔ)空間單位。塊的大小由參數(shù)DB_BLOCK_SIZE設(shè)置,其值應(yīng)設(shè)置為操作系統(tǒng)塊大小的整數(shù)倍。

表空間在物理上包含一個(gè)或多個(gè)數(shù)據(jù)文件。而數(shù)據(jù)文件大小是塊大小的整數(shù)倍;

二、表空間

表空間是Oracle數(shù)據(jù)庫最大的邏輯結(jié)構(gòu),一個(gè)Oracle數(shù)據(jù)庫在邏輯上由多個(gè)表空間組成,一個(gè)表空間只隸屬于一個(gè)數(shù)據(jù)庫。Oracle中有一個(gè)稱為SYSTEM的表空間,這個(gè)表空間是在創(chuàng)建或安裝數(shù)據(jù)庫時(shí)自動(dòng)創(chuàng)建的。主要用于存儲(chǔ)系統(tǒng)的數(shù)據(jù)字典,過程,函數(shù),觸發(fā)器等;也可以存儲(chǔ)用戶的表,索引等。

前面我們說過要查詢表空間可以通過

SQL>select * form dba_data_files;

要查詢表空間的空閑信息可以通過

SQL>select * from dba_free_space;

表空間有在線(online)或離線(offline)之說,一旦我們將表空間設(shè)置成離線的狀態(tài),則所有對(duì)該表空間內(nèi)對(duì)象的修改將無法同步到數(shù)據(jù)文件中。我們可以將除SYSTEM和RBS表空間之外的其它表空間設(shè)置成離線狀態(tài)。命令如下:

SQL>alter tablespace ***  offline;

如果我們想限制某個(gè)用戶能夠使用的表空間的大小,則我們可以通過命令:

SQL>alter user *** quota ***m on ***

這表示我們要限制某個(gè)指定用戶的表空間使用限額為***M,on之后的參數(shù)就是要限制的表空間

臨時(shí)表空間用于為用戶排序的ORDER BY語句使用。創(chuàng)建數(shù)據(jù)庫時(shí)可以指定數(shù)據(jù)庫的默認(rèn)臨時(shí)表空間。在創(chuàng)建用戶的時(shí)候可以指定用戶的默認(rèn)臨時(shí)表空間。例如下句就指定temp為用戶的臨時(shí)表空間。

SQL>Create USER *** IDENTIFIED BY **** TEMPORARY TABLESPACE temp;

三、段

oracle中的段可以分成4種類型:數(shù)據(jù)段、索引段、回滾段、臨時(shí)段。

數(shù)據(jù)段用來存儲(chǔ)用戶的數(shù)據(jù),每個(gè)表都有一個(gè)對(duì)應(yīng)的回滾段,其名稱和數(shù)據(jù)表的名字相同。我們可以用下列的SQL語句來查詢用戶的數(shù)據(jù)段信息:

SQL>select  * from user_extents;

索引段用來存儲(chǔ)系統(tǒng)、用戶的索引信息:

SQL>select * from all_indexs / user_indexs;

回滾段用來存儲(chǔ)用戶數(shù)據(jù)修改前的值,回退段與事務(wù)是一對(duì)多的關(guān)系,一個(gè)事務(wù)只能使用一個(gè)回退段,而一個(gè)回退段可存放一個(gè)或多個(gè)事務(wù)的回退數(shù)據(jù)。

臨時(shí)段用于order by語句的排序以及一些匯總。四、區(qū)

區(qū)是磁盤空間分配的最小單位。磁盤按區(qū)劃分,每次至少分配一個(gè)區(qū)。區(qū)存儲(chǔ)于段中,它由連續(xù)的數(shù)據(jù)塊組成。

區(qū)的分配過程中,每次至分配5個(gè)區(qū)。如果所剩的空閑空間不夠5個(gè)區(qū),就會(huì)出現(xiàn)錯(cuò)誤:ORA-01653。

可以通過字典dba_tablespaces查詢表空間中區(qū)的信息。可以通過字典user_tables查詢段中區(qū)的信息??梢酝ㄟ^字典user_extents查詢區(qū)的分配狀況。

SQL>select * from dba_tablespaces;

通過這個(gè)查詢我們可以看到各個(gè)表空間的:

·BLOCK_SIZE :數(shù)據(jù)塊的大小

·INITIAL_EXTENT :初始化時(shí)分配的區(qū)的大小,其值為BLOCK_SIZE的整數(shù)倍

·NEXT_EXTENT:當(dāng)初始化時(shí)分配的區(qū)不夠時(shí),下一次擴(kuò)展的區(qū)的大小

·MIN_EXTENTS:區(qū)大小的下限

·MAX_EXTENTS:區(qū)大小的上限

我們可以通過以下SQL語句分別查詢表空間、段、區(qū)中區(qū)的分配信息

SQL>select  *  from dba_tablespaces;

SQL>select table_name, tablespace_name, min_extents, max_extents from user_tables;

SQL>select  *  from user_extents;

五、數(shù)據(jù)塊

數(shù)據(jù)塊是數(shù)據(jù)中中最小的數(shù)據(jù)組織單位與管理單位,是數(shù)據(jù)文件磁盤存儲(chǔ)空間單位,也是數(shù)據(jù)庫I/O 的最小單位,數(shù)據(jù)塊大小由DB_BLOCK_SIZE參數(shù)決定,不同的oracle版本DB_BLOCK_SIZE的默認(rèn)值是不同的。

六、模式對(duì)象(Schema Object)

oracle 模式對(duì)象包括了表,索引,約束,過程,函數(shù),觸發(fā)器等等應(yīng)用結(jié)構(gòu)。我們可以通過以下語句查詢表空間或當(dāng)前用戶下的所有schema對(duì)象:

SQL>select  *  from dba_source;

SQL>select  *  from user_source;

以上就是Oracle體系結(jié)構(gòu)之邏輯結(jié)構(gòu)的一個(gè)介紹,希望能幫助到你們。

評(píng)論: 0 | 引用: 0 | 查看次數(shù): -
發(fā)表評(píng)論
昵 稱:
密 碼: 游客發(fā)言不需要密碼.
郵 箱: 支持Gravatar頭像.
網(wǎng) 址: 輸入網(wǎng)址便于回訪.
內(nèi) 容:
驗(yàn)證碼:
選 項(xiàng):
雖然發(fā)表評(píng)論不用注冊(cè),但是為了保護(hù)您的發(fā)言權(quán),建議您注冊(cè)帳號(hào).