官术网_书友最值得收藏!

2章 Oracle 11g體系結構

視頻講解:90分鐘

Oracle的體系結構是從某一角度來分析數據庫的組成和工作過程,以及如何管理數據庫和組織數據。對于初學者而言,在學習本章的過程中,會涉及大量的新概念和術語,希望讀者能深入理解這些概念和術語,為后面章節的學習打好基礎。

通過閱讀本章,您可以:

了解Oracle 11g體系結構

掌握邏輯存儲結構

掌握物理存儲結構

熟悉Oracle 11g服務器結構

熟悉Oracle 11g常用的數據字典

2.1 Oracle 11g體系結構概述

Oracle體系結構主要用來分析數據庫的組成、工作過程與原理,以及數據在數據庫中的組織與管理機制。Oracle數據庫是一個邏輯概念,而不是物理概念上安裝了Oracle數據庫管理系統的服務器。

在Oracle數據庫管理系統中有3個重要的概念需要理解,那就是實例(Instance)、數據庫(Database)和數據庫服務器(Database Server)。其中,實例是指一組Oracle后臺進程以及在服務器中分配的共享內存區域;數據庫是由基于磁盤的數據文件、控制文件、日志文件、參數文件和歸檔日志文件等組成的物理文件集合;數據庫服務器是指管理數據庫的各種軟件工具(如SQL*Plus、OEM等)和實例及數據庫3個部分。從實例與數據庫之間的辯證關系來講,實例用于管理和控制數據庫;而數據庫為實例提供數據。一個數據庫可以被多個實例裝載和打開;而一個實例在其生存期內只能裝載和打開一個數據庫。

數據庫的主要功能就是存儲數據,數據庫存儲數據的方式通常稱為存儲結構,Oracle數據庫的存儲結構分為邏輯存儲結構和物理存儲結構。邏輯存儲結構用于描述Oracle內部組織和管理數據的方式,而物理存儲結構用于展示Oracle在操作系統中的物理文件組成情況。

啟動Oracle數據庫服務器實際上是在服務器的內存中創建一個Oracle實例,然后用這個實例來訪問和控制磁盤中的數據文件。當用戶連接到數據庫時,實際上連接的是數據庫的實例,然后由實例負責與數據庫進行通信,最后將處理結果返回給用戶。圖2.1展示了Oracle數據庫的基本體系結構,從圖中可以看出,SQL命令從客戶端發出后,由Oracle的服務器進程進行響應,然后在內存區域中進行語法分析、編譯和執行,接著將修改后的數據寫入數據文件,將數據庫的修改信息寫入日志文件,最后將SQL的執行結果返回給客戶端。

圖2.1 Oracle體系結構

2.2 邏輯存儲結構

邏輯存儲結構是Oracle數據庫存儲結構的核心內容,對Oracle數據庫的所有操作都會涉及其邏輯存儲結構。邏輯存儲結構是從邏輯的角度分析數據庫的構成,是對數據存儲結構在邏輯概念上的劃分。Oracle的邏輯存儲結構是一種層次結構,主要由表空間、段、數據區和數據塊等概念組成。邏輯結構是面向用戶的,當用戶使用Oracle設計數據庫時,其使用的就是邏輯存儲結構。Oracle的邏輯存儲結構中所包含的多個結構對象從數據塊到表空間形成了不同層次的粒度關系,如圖2.2所示。

圖2.2 Oracle的邏輯存儲結構

從圖2.2中可以看到,Oracle數據庫是由多個表空間組成(可見數據庫自身也屬于邏輯概念),而表空間又是由多個段組成,段由多個數據區組成,數據區又是由多個數據塊組成。

2.2.1 數據塊

數據塊(Data Block)是Oracle邏輯存儲結構中的最小的邏輯單位,也是執行數據庫輸入/輸出操作的最小存儲單位。Oracle數據存放在“Oracle數據塊”中,而不是“操作系統塊”中。通常Oracle數據塊是操作系統塊的整數倍,如果操作系統塊的大小為2048B,并且Oracle數據塊的大小為8192B,則表示Oracle數據塊由4個操作系統塊構成。Oracle數據塊有一定的標準大小,其大小被寫入到初始化參數DB_BLOCK_SIZE中。另外,Oracle支持在同一個數據庫中使用多種大小的塊,與標準塊大小不同的塊就是非標準塊。

【例2.1】 通過v$parameter數據字典來查詢Oracle標準數據塊的大小,具體代碼如下。(實例位置:資源包\TM\sl\2\1)

SQL> col name format a30
SQL> col value format a20
SQL> select name,value from v$parameter where name = 'db_block_size' ;

本例運行結果如圖2.3所示。

圖2.3 Oracle標準數據塊的大小

在上面的代碼中,首先格式化name列和value列的大小,以方便在同一行顯示,然后使用SELECT語句獲得參數DB_BLOCK_SIZE的值(即value列的值),該值也就是標準數據塊的大小。

數據塊中可以存放表數據、索引數據和簇數據等,無論存放哪種類型的數據,其結構都是相同的。數據塊由塊頭、表目錄、行目錄、空余空間和行數據這5部分組成,如圖2.4所示。

圖2.4 數據塊的結構

數據塊中各個組成部分的介紹如下。

塊頭:存放數據塊的基本信息,如塊的物理地址、塊所屬的段的類型。

表目錄:存放表的相關信息。如果數據塊中存儲的數據是表數據,則表目錄中存儲有關這些表的相關信息。

行目錄:如果塊中有行數據存在,則這些行的信息將被記錄在行目錄中。這些信息包括行的地址等。

空余空間:空余空間是一個塊中未使用的區域,這片區域用于新行的插入和已經存在的行的更新。

行數據:用于存放表數據和索引數據的地方,這部分空間已被數據行所占用(如表中的若干行數據記錄)。

通常把塊頭、表目錄、行目錄這三部分組合起來稱為頭部信息區,頭部信息區不存放數據,它存放整個塊的引導信息,起到引導系統讀取數據的作用。所以頭部信息區若遭到破壞,則Oracle系統將無法讀取這部分數據。另外,空余空間和行數據公共構成塊的存儲區,用于存放真正的數據記錄。

2.2.2 數據區

數據區(Extent也可稱作數據擴展區)是由一組連續的Oracle數據塊所構成的Oracle存儲結構,一個或多個數據塊組成一個數據區,一個或多個數據區再組成一個段(Segment)。當一個段中的所有空間被使用完后,Oracle系統將自動為該段分配一個新的數據區,這也正符合Extent這個單詞所具有的“擴展”的含義,可見數據區是Oracle存儲分配的最小單位,Oracle就以數據區為單位進行存儲控件的擴展。

使用數據區的目的是用來保存特定數據類型的數據,也是表中數據增長的基本單位。在Oracle數據庫中,分配存儲空間就是以數據區為單位的。一個Oracle對象至少包含一個數據區。設置一個表或索引的存儲參數包含設置它的數據區大小。

2.2.3 段

段(Segment)是由一個或多個數據區構成,它不是存儲空間的分配單位,而是一個獨立的邏輯存儲結構,用于存儲表、索引或簇等占用空間的數據對象,Oracle也把這種占用空間的數據對象統一稱為段。一個段只屬于一個特定的數據對象,每當創建一個具有獨立段的數據對象時,Oracle將為它創建一個段。

段是為特定的數據對象(如表、索引、回滾等)分配的一系列數據區。段內包含的數據區可以不連續,并且可以跨越多個文件,使用段的目的是用來保存特定對象。一個Oracle數據庫通常有以下4種類型的段。

(1)數據段:數據段中保存的是表中的數據記錄。在創建數據表時,Oracle系統將為表創建數據段。當表中的數據量增大時,數據段的大小自然也隨著變大,數據段的增大過程是通過向其添加新的數據區來實現的。當創建一個表時,系統自動創建一個以該表的名字命名的數據段。

(2)索引段:索引段中包含了用于提高系統性能的索引。一旦建立索引,系統自動創建一個以該索引的名字命名的索引段。

(3)回滾段:回滾段(也可稱作撤銷段)中保存了回滾條目,Oracle將修改前的舊值保存在回滾條目中。利用這些信息,可以撤銷未提交的操作,以便為數據庫提供讀入一致性和回滾未提交的事務,即用來回滾事務的數據空間。當一個事務開始處理時,系統為之分配回滾段,回滾段可以動態創建和撤銷。Oracle 11g系統有個默認的回滾段,其管理方式既可以是自動的,也可以是手工的。

(4)臨時段:當執行創建索引、查詢等操作時,Oracle可能會使用一些臨時存儲空間,用于暫時性地保存解析過的查詢語句以及在排序過程中產生的臨時數據。Oracle系統將在專門用于存儲臨時數據的表空間中為操作分配臨時段。

在執行CREATE INDEX、SELECT ORDER BY、SELECT DISTINCT和SELECT GROUP BY等幾種類型的SQL語句時,Oracle系統就會在臨時表空間中為這些語句的操作分配一個臨時段。

在數據庫管理過程中,若經常需要執行上面這類SQL語句,最好調整SORT_AREA_SIZE初始化參數來增大排序區,從而使排序操作盡量能夠在內存中完成,以獲得更好的執行效率,但同時這對數據庫服務器的內存空間提出了更大的要求。

2.2.4 表空間

Oracle使用表空間(Tablespace)將相關的邏輯結構(如段、數據區等)組合在一起,表空間是數據庫的最大邏輯劃分區域,通常用來存放數據表、索引、回滾段等數據對象(即Segment),任何數據對象在創建時都必須被指定存儲在某個表空間中。表空間(屬邏輯存儲結構)與數據文件(屬物理存儲結構)相對應,一個表空間由一個或多個數據文件組成,一個數據文件只屬于一個表空間;Oracle數據的存儲空間在邏輯上表現為表空間,而在物理上表現為數據文件。舉個例子來說,表空間相當于操作系統中的文件夾,而數據文件就相當于文件夾中的文件。每個數據庫至少有一個表空間(即SYSTEM表空間),表空間的大小等于所有從屬于它的數據文件大小的總和。

由于表空間在物理上(即磁盤上)包含操作系統中的一個或多個數據文件,因此在表空間中創建的數據對象就存在以下兩種情況。

(1)若表空間只包含一個數據文件,則該表空間中的所有對象都存儲在這個數據文件中。

(2)若表空間包含多個數據文件,則Oracle即可將數據對象存儲在該表空間的任意一個數據文件中,也可以將同一個數據對象中的數據分布在表空間的多個數據文件中。

在創建數據庫時,Oracle系統會自動創建多個默認的表空間,這些表空間除了用于管理用戶數據的表空間之外,還包括用于管理Oracle系統內部數據(如數據字典)的表空間,下面列舉了Oracle 11g版本默認創建的主要表空間。

(1)SYSTEM表空間——系統表空間。它用于存放Oracle系統內部表和數據字典的數據,如表名、列名、用戶名等。Oracle本身不贊成將用戶創建的表、索引等存放在系統表空間中。表空間中的數據文件個數不是固定不變的,可以根據需要向表空間中追加新的數據文件。

【例2.2】 通過dict查看數據庫中數據字典的信息,具體代碼如下。

SQL> col table_name for a30
SQL> col comments for a30
SQL> select * from dict;

【例2.3】 通過v$fixed_view_definition查看數據庫中內部系統表的信息,具體代碼如下。

SQL> col view_name format a30
SQL> col view_definition format a30
SQL> select * from v$fixed_view_definition;

(2)SYSAUX表空間。它是Oracle 11g新增加的表空間,是隨著數據庫的創建而創建的,它充當SYSTEM的輔助表空間,降低了SYSTEM表空間的負荷,主要存儲除數據字典以外的其他數據對象。SYSAUX表空間一般不存儲用戶的數據,由Oracle系統內部自動維護。

(3)UODO表空間——撤銷表空間。它用于存儲撤銷信息的表空間。當用戶對數據表進行修改操作(包括插入、更新、刪除等操作)時,Oracle系統自動使用撤銷表空間來臨時存放修改前的舊數據。當所做的修改操作完成并執行提交命令后,Oracle根據系統設置的保留時間長度來決定何時釋放掉撤銷表空間的部分空間。一般在創建Oracle實例后,Oracle系統自動創建一個名字為UNDOTBS1的撤銷表空間,該撤銷表空間對應的數據文件是UNDOTBS01.DBF。

(4)USERS表空間——用戶表空間。它是Oracle建議用戶使用的表空間,可以在這個表空間上創建各種數據對象。例如,創建表、索引、用戶等數據對象。Oracle系統的樣例用戶scott對象就存放在USERS表空間中。

除了Oracle系統默認創建的表空間外,用戶可根據應用系統的實際情況及其所要存放的對象類型創建多個自定義的表空間,以區分用戶數據與系統數據。此外,不同應用系統的數據應存放在不同的表空間上,而不同表空間的文件應存放在不同的盤上,從而減少I/O沖突,提高應用系統的操作性能。

2.3 物理存儲結構

邏輯存儲結構是為了便于管理Oracle數據而定義的具有邏輯層次關系的抽象概念,不容易理解;但物理存儲結構比較具體和直觀,它用來描述Oracle數據在磁盤上的物理組成情況。從大的角度來講,Oracle的數據在邏輯上存儲在表空間中,而在物理上存儲在表空間所包含的物理文件(即數據文件)中。

Oracle數據庫的物理存儲結構由多種物理文件組成,主要有數據文件、控制文件、重做日志文件、歸檔日志文件、參數文件、密碼文件和警告日志文件等,如圖2.5所示。下面將對這些物理文件進行講解。

圖2.5 Oracle的物理存儲結構

2.3.1 數據文件

數據文件是用于保存用戶應用程序數據和Oracle系統內部數據的文件,這些文件在操作系統中就是普通的操作系統文件,Oracle在創建表空間的同時會創建數據文件。Oracle數據庫在邏輯上由表空間組成,每個表空間可以包含一個或多個數據文件,一個數據文件只能隸屬于一個表空間,如圖2.5所示。

在創建表空間的同時,Oracle會創建該表空間的數據文件。在表空間中創建數據對象(如表、索引、簇等)時,用戶是無法指定使用哪一個數據文件來進行存儲的,只能由Oracle系統負責為數據對象選擇具體的數據文件,并在其中分配物理存儲空間。一個數據對象的數據可以全部存儲在一個數據文件中,也可以分布存儲在同一個表空間的多個數據文件中。

在讀取數據時,Oracle系統首先從數據文件中讀取數據,并將數據存儲在內存的高速數據緩沖區中。如果用戶要讀取數據庫中的某些數據,而請求的數據又不在內存的高速數據緩沖區中,則需要從相應的數據文件中讀取數據并存儲在緩沖區中。當修改和插入數據時,Oracle不會立即將數據寫入數據文件,而是把這些數據保存在數據緩沖區中,然后由Oracle的后臺進程DBWR決定如何將其寫入相應的數據文件。這樣的存取方式減少了磁盤的I/O操作,提高了系統的相應性能。

【例2.4】 通過查詢dba_data_files或v$datafile數據字典來了解Oracle系統的數據文件信息,具體代碼如下。(實例位置:資源包\TM\sl\2\2)

SQL> col file_name for a50;
SQL> set linesize 100;
SQL> select file_name,tablespace_name from dba_data_files;

本例運行結果如圖2.6所示。

圖2.6 Oracle系統的數據文件信息

在上面的代碼中,可以看到3種類型的數據文件:系統數據文件(SYSTEM01.DBF和SYSAUX01.DBF)、撤銷數據文件(UNDOTBS01.DBF)和用戶數據文件(USERS01.DBF、EXAMPLE01.DBF、TBSP_1.DBF和TBSP_2.DBF),下面對這3種類型的數據文件進行介紹。

(1)系統數據文件。用于存放“特殊”的用戶數據和Oracle系統本身的數據,如用戶建立的表名、列名及字段類型等,這些屬于用戶數據范疇,這些數據被存放在系統表空間所包含的數據文件中;而Oracle系統內部的數據字典、系統表(如dba_data_files、dba_temp_files等)中所存儲的數據屬于Oracle系統的內部數據,這些數據也存放在系統表空間所包含的數據文件中。

(2)撤銷數據文件。撤銷數據文件隸屬于撤銷表空間。如果修改Oracle數據庫中的數據,那么就必須使用撤銷段,撤銷段用來臨時存放修改前的舊數據,而撤銷段通常存放在一個單獨的撤銷表空間中,這個撤銷表空間所包含的數據文件就是撤銷數據文件。

(3)用戶數據文件。用戶數據文件用于存放用戶應用系統的數據,這些數據包括與應用系統有關的所有相關信息,例如,上述TBSP_1.DBF和TBSP_2.DBF文件就是一個具體應用系統的兩個數據文件。

在上面的代碼中并沒有看到臨時表空間所包含的數據文件,這是由于臨時數據文件本身的特殊性,從Oracle 9i以后,Oracle將臨時表空間所對應的臨時數據文件與一般數據文件分開,要了解Oracle系統的臨時數據文件信息,可以從dba_temp_files或v$tempfile數據字典中查詢。

【例2.5】 通過查詢dba_temp_files或v$tempfile數據字典來查看臨時文件的信息,具體代碼如下。(實例位置:資源包\TM\sl\2\3)

SQL> col file_name format a50;
SQL> col tablespace_name format a20;
SQL> select file_name,tablespace_name from dba_temp_files;

本例運行結果如圖2.7所示。

圖2.7 查看臨時文件的信息

2.3.2 控制文件

控制文件是一個二進制文件,它記錄了數據庫的物理結構,其中主要包含數據庫名、數據文件與日志文件的名字和位置、數據庫建立日期等信息。控制文件一般在Oracle系統安裝時或創建數據庫時自動創建,控制文件所存放的路徑由服務器參數文件SPFILEORCL.ORA的CONTROL_FILES參數值來指定。

由于控制文件存放有數據文件、日志文件等的相關信息,因此,Oracle實例在啟動時必須訪問控制文件。如果控制文件正常,實例才能加載并打開數據庫;但若控制文件中記錄了錯誤的信息,或者實例無法找到一個可用的控制文件,則實例無法正常啟動。

當Oracle實例在正常啟動時,系統首先要訪問的是初始化參數文件SPFILE,然后Oracle為系統全局區(SGA)分配內存。這時,Oracle實例處于安裝狀態,并且控制文件處于打開狀態;接下來Oracle會自動讀出控制文件中的所有數據文件和日志文件的信息,并打開當前數據庫中所有的數據文件和所有的日志文件以供用戶訪問。

每個數據庫至少擁有一個控制文件,一個數據庫可以同時擁有多個控制文件,但是一個控制文件只能屬于一個數據庫。控制文件內部除了存放數據庫名及其創建日期、數據文件、日志文件等的相關信息之外,在系統運行過程中,還存放有系統更改號、檢查點信息及歸檔的當前狀態等信息。

Oracle數據庫系統出于安全考慮,在安裝Oracle數據庫或創建數據庫時,系統會自動創建2個或3個控制文件,每個控制文件記錄相同的信息。這樣可確保在數據庫運行時,如果某個控制文件損壞,Oracle會自動使用另外一個控制文件,當所有控制文件都損壞時,系統將無法工作。

【例2.6】 通過查詢v$controlfile數據字典來查看Oracle系統的控制文件信息,具體代碼如下。(實例位置:資源包\TM\sl\2\4)

SQL> col name format a60;
SQL> select name from v$controlfile;

本例運行結果如圖2.8所示。

圖2.8 Oracle系統的控制文件信息

說明

當數據庫的物理組成更改時,Oracle自動更改該數據庫的控制文件。數據恢復時,也要使用控制文件。

2.3.3 日志文件

日志文件的主要功能是記錄對數據所做的修改,對數據庫所做的修改幾乎都記錄在日志文件中。在出現問題時,可以通過日志文件得到原始數據,從而保證不丟失已有操作成果。Oracle的日志文件包括重做日志文件(Redo Log File)和歸檔日志文件(Archive Log File),它們是Oracle系統的主要文件,尤其是重做日志文件,它是Oracle數據庫系統正常運行所不可或缺的。下面將介紹這兩種日志文件。

1.重做日志文件

重做日志文件用來記錄數據庫所有發生過的更改信息(修改、添加、刪除等信息)及由Oracle內部行為(創建數據表、索引等)而引起的數據庫變化信息,在數據庫恢復時,可以從該日志文件中讀取原始記錄。在數據庫運行期間,當用戶執行COMMIT命令(數據庫提交命令)時,數據庫首先將每筆操作的原始記錄寫入日志文件中,寫入日志文件成功后,才把新的記錄傳遞給應用程序,所以,在日志文件上可以隨時讀取原始記錄以恢復某些數據。

技巧

通過對表或者整個表空間設定NOLOGGING屬性,使基于表或表空間中所有的DML操作(如創建表、刪除視圖、修改索引等)都不會生成日志信息,這樣就會減少日志信息的產生。

為了保障數據庫系統的安全,每個Oracle實例都啟用一個日志線程來記錄數據庫的變化。日志線程由若干“日志組”構成,而每個日志組又由一個或者多個日志文件構成。

【例2.7】 若要了解Oracle系統的日志文件信息,可以通過查詢v$logfile視圖來實現,代碼如下。(實例位置:資源包\TM\sl\2\5)

SQL> col member for a50
SQL> select member from v$logfile;

本例運行結果如圖2.9所示。

圖2.9 Oracle系統的日志文件信息

Oracle系統在運行過程中產生的日志信息,首先被臨時存放在系統全局區(SGA)的重做日志緩沖區中,當發出COMMIT命令(或日志緩沖區信息滿1/3)時,日志寫入(LGWR)進程將日志信息從重做日志緩沖區中讀取出來,并將讀取的日志信息寫入日志文件組中序列號較小的文件里,一個日志組寫滿后接著寫另外一個日志組。當LGWR進程將所有能用的日志文件都使用過一遍之后,它將再次轉向第一個日志組重新覆寫。

2.歸檔日志文件

在所有的日志文件被寫入一遍之后,LGWR進程將再次轉向第一個日志組進行重新覆寫,這樣勢必會導致一部分較早的日志信息被覆蓋掉,但Oracle通過歸檔日志文件解決了這個問題。

Oracle數據庫可以運行在兩種模式下,即歸檔模式和非歸檔模式。非歸檔模式是指在系統運行期間,所產生的日志信息不斷地記錄到日志文件組中,當所有重做日志組被寫滿后,又重新從第一個日志組開始覆寫。歸檔模式就是在各個日志文件都被寫滿而即將被覆蓋之前,先由歸檔(ARCH)進程將即將被覆蓋的日志文件中的日志信息讀出,并將讀出的日志信息寫入歸檔日志文件中,而這個過程又被稱為歸檔操作。

在歸檔操作進行的過程中,LGWR進程需要等待ARCH進程的結束才能開始覆寫日志文件,這樣就延遲了系統的響應時間,而且歸檔日志文件本身又會占用大量的磁盤空間,這些都會影響系統的整體性能。所以在默認情況下,Oracle系統不采用歸檔模式運行。

【例2.8】 可以通過v$database視圖來查看當前Oracle系統是否采用歸檔模式,代碼如下。(實例位置:資源包\TM\sl\2\6)

SQL> col name format a30;
SQL> select dbid,name,log_mode from v$database;

本例運行結果如圖2.10所示。

圖2.10 查看當前Oracle系統是否采用歸檔模式

如果將Oracle數據庫系統設置成在歸檔模式下運行,則可以通過服務器參數文件SPFILE的log_archive_dest參數來確定歸檔日志文件的所在路徑。

【例2.9】 可以使用下面的語句來查詢歸檔日志文件的所在路徑,代碼如下。(實例位置:資源包\TM\sl\2\7)

SQL> set pagesize 30;
SQL> show parameter log_archive_dest;

本例運行結果如圖2.11所示。

圖2.11 歸檔日志文件的所在路徑

技巧

若顯示SPFILE的指定參數的信息,則只需要使用SHOW PARAMETER+參數名即可。

2.3.4 服務器參數文件

服務器參數文件(Server Parameter File,SPFILE)是二進制文件,用來記錄Oracle數據庫的基本參數信息(如數據庫名、控制文件所在路徑、日志緩沖大小等)。數據庫實例在啟動之前,Oracle系統首先會讀取SPFILE中設置的這些參數,并根據這些初始化參數來配置和啟動實例。例如,設置標準數據塊的大小(即參數DB_BLOCK_SIZE的值)、設置日志緩沖區的大小(即參數log_buffer的值)等,所以SPFILE非常重要。SPFILE在安裝Oracle數據庫系統時由系統自動創建,文件的名稱為SPFILEsid.ora,sid為所創建的數據庫實例名。

與早期版本的初始化參數文件INITsid.ora不同的是,SPFILE中的參數由Oracle系統自動維護,如果要對某些參數進行修改,則盡可能不要直接對SPFILE進行編輯,最好通過Oracle企業管理器(OEM)或ALTER SYSTEM命令來修改,所修改過的參數會自動寫到SPFILE中。

1.查看服務器參數

用戶可以通過如下兩種方式查看數據庫的服務器參數。

(1)查詢視圖v$parameter,可利用該動態性能視圖來確定參數的默認值是否被修改過,以及是否可以用ALTER SYSTEM和ALTER SESSION命令修改。

【例2.10】 查詢視圖v$parameter中的name、value、ismodified列的值,代碼如下。(實例位置:資源包\TM\sl\2\8)

SQL> col name for a30;
SQL> col value for a30;
SQL> select name,value,ismodified from v$parameter;

本例運行結果如圖2.12所示。

圖2.12 查詢視圖v$parameter

(2)可以使用SQL*Plus的SHOW PARAMETER命令顯示服務器的參數。

【例2.11】 通過SHOW PARAMETER命令顯示服務器參數,代碼如下。

SQL> show parameter

本例運行結果如圖2.13所示。

圖2.13 顯示服務器參數

2.修改服務器參數

修改數據庫的服務器參數,主要通過Oracle企業管理器(OEM)或ALTER SYSTEM命令來實現。

(1)通過企業管理器OEM修改,首先使用system用戶登錄OEM,然后選擇“服務器”頁面中的“初始化參數”項,將打開如圖2.14所示的“初始化參數”頁面,在該頁面的“值”列中就可以修改參數值,然后保存就可以。

圖2.14 OEM中的初始化參數

(2)使用ALTER SYSTEM命令修改服務器參數。

【例2.12】 通過ALTER SYSTEM命令修改標準數據塊的大小為4096B,代碼及運行結果如下。

alter system set db_block_size=4096;

系統已更改。

2.3.5 密碼文件、警告文件和跟蹤文件

Oracle系統運行時,除了必要的數據文件、控制文件、日志文件及服務器參數文件外,還需要一些輔助文件,如密碼文件、警告文件和跟蹤文件,下面對這些輔助文件進行簡單的介紹。

1.密碼文件

密碼文件是Oracle系統用于驗證sysdba權限的二進制文件,當遠程用戶以sysdba或sysoper連接到數據庫時,一般要用密碼文件驗證。

Oracle 11g(這里以發行版2為例)密碼文件的默認存放位置在%dbhome_1%\database目錄下,密碼文件的命名格式為PWD<sid>,其中sid表示數據庫實例名。創建密碼文件既可以在創建數據庫實例時自動創建,也可以使用ORAPWD.mp4工具手動創建,創建密碼文件的命令格式如下。

C:\>ORAPWD FILE=<filename> PASSWORD=<password> ENTRIES=<max_users>

filename:表示密碼文件名稱。

password:表示設置internal/sys賬戶口令。

max_users:表示密碼文件中可以存放的最大用戶數,對應允許以sysdba/sysoper權限登錄數據庫的最大用戶數。

創建了密碼文件后,需要設置初始化參數remote_login_passwordfile來控制密碼文件的使用狀態,通常有3種狀態值:NONE表示只要通過操作系統驗證,就不用通過Oracle密碼文件驗證;SHARED表示多個數據庫實例都可以采用此密碼文件驗證;EXCLUSIVE表示只有一個數據庫實例可以使用此密碼文件驗證。

【例2.13】 創建一個密碼文件,其sys口令為012345,代碼如下。

C:\>ORAPWD FILE=E:\app\Admin\product\11.2.0\dbhome_1\database\PWDorcl.ora password=012345 entries
=40

2.警告文件

警告文件(即警告日志文件)是一個存儲在Oracle系統目錄下的文本文件(名稱通常為alert_orcl.log),它用來記錄Oracle系統的運行信息和錯誤信息。運行信息一般包括Oracle實例的啟動與關閉、建立表空間、增加數據文件等;錯誤信息包括空間擴展失敗、啟動實例失敗等。

當Oracle系統安裝完畢后,其實例日常運行的基本信息都會記錄在警告文件中。警告文件的路徑可通過Oracle系統的BACKGROUND_DUMP_DEST參數值來查看,并且該參數值由服務器進程和后臺進程寫入。

【例2.14】 在v$parameter視圖中查看當前實例的警告文件的路徑,代碼及運行結果如下。

注意

隨著時間的推移,警告文件會越來越大,數據庫管理員應該定期刪除警告文件。

3.跟蹤文件

跟蹤文件包括后臺進程跟蹤文件和用戶進程跟蹤文件。后臺進程跟蹤文件用于記錄后臺進程的警告或錯誤消息。后臺進程跟蹤文件的磁盤位置由初始化參數BACKGROUND_DUMP_DEST確定,后臺進程跟蹤文件的命名格式為<sid>_<processname>_<spid>.trc,如orcl_cjq0_5172.trc。用戶進程跟蹤文件用于記載與用戶進程相關的信息,它主要用于跟蹤SQL語句。通過用戶進程跟蹤文件,可以判斷SQL語句的執行性能。用戶進程跟蹤文件的位置由初始化參數USER_DUMP_DEST確定,用戶進程跟蹤文件的命名格式為<sid>_ora_<spid>.trc,如orcl_ora_4888.trc。

除了.trc文件之外,還有.trm文件。.trm文件為跟蹤元數據文件,伴隨著.trc文件產生,一個.trm對應一個.trc文件,.trm文件包含.trc文件的結構化信息。

【例2.15】 在v$parameter視圖中查看當前實例的用戶跟蹤文件的路徑,代碼及運行結果如下。

SQL> select value from v$parameter where name = 'user_dump_dest';
VALUE
--------------------------------------------------
e:\app\administrator\diag\rdbms\orcl\orcl\trace

說明

每個后臺進程都有對應的后臺進程跟蹤文件。

2.4 Oracle 11g服務器結構

Oracle服務器主要由實例、數據庫、程序全局區和前臺進程組成,如圖2.15所示。其中,實例就是圖2.15中的例程區域,用來提供管理數據庫的功能;數據庫就是圖2.15中的數據庫區域,由Oracle數據庫文件組成,用來存儲系統數據。

圖2.15 Oracle服務器結構模型

實例可以進一步劃分為系統全局區(SGA)和后臺進程(PMON、SMON等)兩部分,其中,SGA使用操作系統的內存資源,而后臺進程需要使用CPU與內存資源;數據庫(Database)中包含數據文件(Data File)、控制文件(Control File)和重做日志文件(Redo Log File),數據庫文件存放在硬盤中;程序全局區(PGA)是一個非共享的內存區域,用于管理用戶進程的私有資源;前臺進程可以再劃分為用戶進程和服務器進程,它們需要使用CPU與內存資源。2.3節已經對數據庫的3種物理文件進行過詳細講解,本節主要對實例、程序全局區和前臺進程進行詳細的講解。

2.4.1 系統全局區

系統全局區(System Global Area,SGA)是所有用戶進程共享的一塊內存區域,也就是說,SGA中的數據資源可以被多個用戶進程共同使用。SGA主要由高速數據緩沖區、重做日志緩沖區、共享池、大型池和Java池等內存結構組成。SGA隨著數據庫實例的啟動而加載到內存中,當數據庫實例關閉時,SGA區域也就消失了。

1.高速數據緩沖區

高速數據緩沖區中存放著Oracle系統最近訪問過的數據塊(數據塊在高速緩沖區中也可稱為緩存塊)。當用戶向數據庫發出請求時(如檢索某一條數據),如果在高速數據緩沖區中存在請求的數據,則Oracle系統會直接從高速數據緩沖區中讀取數據并返回給用戶,否則,Oracle系統會打開數據文件讀取請求的數據。

若無法在高速數據緩沖區中找到所需要的數據,則Oracle首先從數據文件中讀取指定的數據塊到緩沖區,然后再從緩沖區中將請求的數據返回給用戶。由于高速數據緩沖區被所有的用戶所共享,只要數據文件中的某些數據塊被當前用戶或其他用戶請求過,因此這些數據塊就會被裝載到高速數據緩沖區中。這樣當任何用戶再次訪問相同的數據時,Oracle就不必再從數據文件中讀取數據,而是可以直接將緩沖區中的數據返回給用戶。經常或最近被訪問的數據塊會被放置到高速數據緩沖區前端,不常被訪問的數據塊會被放置到高速數據緩沖區的后端,當高速數據緩沖區填滿時,會自動擠掉一些不常被訪問的數據塊。

以存取速度來看,內存的讀取速度遠快于物理硬盤,所以高速數據緩沖區的存在可大大降低對物理磁盤的讀取頻率,從而達到提高數據庫服務器性能的目的。為了便于管理SGA的內存數據,Oracle把高速數據緩沖區分為以下3個部分。

臟數據區

臟數據區中存放著已被修改過的數據,這些數據等待被寫入數據文件中。當一條更新或刪除語句對某些數據塊中的數據修改后,那么這些數據塊就被標記為“臟”,然后等待提交命令并通過后臺進程DBWR將其寫入數據文件中。

空閑區

空閑區中的數據塊不包含任何數據,這些數據塊可以被寫入數據,Oracle可以從數據文件中讀取數據塊,并將其存放到該區中。

保留區

保留區包含那些正在被用戶訪問的數據塊和明確保留以作為將來使用的數據塊(即緩存塊),這些數據塊將被保留在緩沖區中。

2.重做日志緩沖區

重做日志緩沖區用于存放對數據庫進行修改操作時所產生的日志信息,這些日志信息在寫入重做日志文件之前,首先存放到重做日志緩沖區中,然后,在檢查點發生或重做日志緩沖區中的信息量到達一定峰值時,最后由日志寫入(LGWR)進程將此緩沖區的內容寫入到重做日志文件。

重做日志緩沖區的大小由LOG_BUFFER參數指定,該參數也可以在實例啟動后動態修改。相對于高速數據緩沖區而言,重做日志緩沖區的大小對數據庫性能的影響較小,通常較大的重做日志緩沖區能減少重做日志文件對I/O的讀寫次數,對數據庫的整體性能有一定的提高。

3.共享池

共享池是SGA保留的內存區域,用于緩存SQL語句、PL/SQL語句、數據字典、資源鎖、字符集以及其他控制結構等。共享池包含庫高速緩沖區(LIBRARY CACHE)和字典高速緩沖區(DICTIONARY CACHE)。

(1)庫高速緩沖區

庫高速緩沖區是共享池的一部分,主要包括共享SQL區和私有SQL區兩個組成部分。庫高速緩沖區中存放最近用過的SQL語句、PL/SQL語句的文本和執行計劃。當下一次執行相同的SQL語句或PL/SQL語句時,可以直接在庫高速緩沖區中找到之前已生成的執行計劃,而不需要再次解析相同的SQL語句或PL/SQL語句,從而提高系統執行效率。

每條被緩存的SQL或PL/SQL語句都被分成兩個部分,分別被存放在共享SQL區和私有SQL區中。共享SQL區存放SQL或PL/SQL語句的語法分析結果和執行計劃,如果以后要再次執行類似的語句,則可以利用共享SQL區中已緩存的語法分析結果和執行計劃。私有SQL區存放SQL語句中的綁定變量、環境和會話等信息,這些信息屬于執行該語句的用戶的私有信息,其他用戶則無法共享這些信息。

(2)字典高速緩沖區

用于存放Oracle系統內部管理所需要的數據字典信息,如用戶名、數據對象和權限等。

共享池的內存空間大小是可以動態改變的,一般通過修改參數SHARED_POOL_SIZE的值來實現。

【例2.16】 修改Oracle共享池的內存空間大小為30MB,代碼及運行結果如下。

SQL> alter system set shared_pool_size=30m;

系統已更改。

注意

Oracle共享池的空間不是越大越好,因為系統的內存資源是有限的,而且操作系統本身也要消耗一定的內存空間。


互動練習:改變數據庫高速緩沖區的大小。

4.大型池

大型池在SGA區中不是必需的內存結構,只在某些特殊情況下,實例需要使用大型池來減輕共享池的訪問壓力,常用的情況有以下幾種。

當使用恢復管理器進行備份和恢復操作時,大型池將作為I/O緩沖區使用。

使用I/O Slave仿真異步I/O功能時,大型池將被當作I/O緩沖區使用。

執行具有大量排序操作的SQL語句。

當使用并行查詢時,大型池作為并行查詢進程彼此交換信息的地方。

大型池的緩存區大小是通過LARGE_POOL_SIZE參數定義的,在Oracle 11g中,用戶可以使用ALTER SYSTEM命令動態地修改其緩存區的大小。

【例2.17】 修改Oracle大型池的緩存區大小為16MB,代碼及運行結果如下。

注意

如果在SGA區中沒有設置大型池,則在實例需要時,Oracle系統會在共享池或PGA中分配一定的緩存空間,這樣勢必會影響到共享池或PGA的工作效率。

5.Java池

用來提供內存空間給Java虛擬機使用,目的是支持在數據庫中運行Java程序包,其大小由JAVA_POOL_SIZE參數決定。

6.流池

Oracle流池用于在數據庫與數據庫之間進行信息共享。如果沒有用到Oracle流,就不需要設置該池。流池的大小由參數STREAMS_POOL_SIZE決定。

2.4.2 程序全局區

程序全局區(Program Global Area,PGA)也可稱作用戶進程全局區,它的內存區在進程私有區而不是共享區中。雖然PGA是一個全局區,可以把代碼、全局變量和數據結構都可以存放在其中,但區域內的資源并不像SGA一樣被所有的用戶進程所共享,而是每個Oracle服務器進程都只擁有屬于自己的那部分PGA資源。

在程序全局區中,一個服務進程只能訪問屬于它自己的那部分PGA資源區,各個服務進程的PGA的總和即為實例的PGA的大小。通常PGA由私有SQL區和會話區組成。

1.私有SQL區

私有SQL區用于存儲變量以及SQL語句運行時的內存結構信息,當每個用戶連接到實例時,都會在實例中創建一個會話。這些會話可能會在SGA區中創建一個共享SQL區,但在PGA區中可能會創建多個私有SQL區。把一個私有SQL區與對應的共享SQL區合并在一起,就可以獲得一條SQL語句的完整緩存數據。

另外,每個會話的私有SQL區可以再分為靜態區和動態區兩部分。靜態區的信息在會話過程中保持不變,只有當會話結束時,靜態區才會被釋放掉;而動態區的信息在整個會話過程中是不斷變化的,一旦SQL語句指定完畢,即使會話還沒有結束,動態區就被釋放掉。

2.會話區

會話區用于存放用戶的會話信息(如登錄用戶名)。如果數據庫處于共享服務器連接模式下,則會話區將位于SGA中,而不是PGA中,這點需要用戶特別注意。

查看程序全局區的信息可以通過顯示PGA參數的內容來實現。

【例2.18】 顯示當前用戶進程的PGA信息,代碼及運行結果如下。

2.4.3 前臺進程

前臺進程包括用戶進程和服務器進程,它不屬于實例的一部分,但是用戶在不知不覺中經常會用到它,使用前臺進程能夠實現用戶與實例的溝通,下面對這兩種前臺進程進行講解。

1.用戶進程

用戶進程是指那些能夠產生或執行SQL語句的應用程序,無論是SQL*Plus,還是其他應用程序,只要是能生成或執行SQL語句,都被稱作用戶進程。

在用戶進程中有兩個非常重要的概念:連接和會話。連接是一個用戶進程與實例之間建立的通信渠道,這個渠道可以通過操作系統上的相關通信機制或網絡連接來實現。會話是指在用戶進程與實例之間建立連接后形成的用戶與實例之間的交互方式,一般是用戶發出請求,數據庫實例為用戶返回響應消息的方式。例如,用戶在SQL*Plus中發出connect system/1qaz2wsx的請求命令,若用戶名和密碼都正確,則數據庫實例返回“已連接”的響應消息。

2.服務器進程

服務器進程是用于處理用戶會話過程中向數據庫實例發出的SQL語句或SQL*Plus命令,它可以分為專用服務器模式和共享服務器模式。在專用服務器模式下,每個用戶進程都有一個專用的服務器進程,這個服務器進程代表用戶進程執行SQL語句,必要時還可以回傳執行結果給用戶進程。在共享服務器模式下,每個用戶進程不直接與服務器進程連接,而是連接到分派程序,每個分派程序可以同時連接多個用戶進程。

2.4.4 后臺進程

Oracle后臺進程是一組運行于Oracle服務器端的后臺程序,是Oracle實例的重要組成部分。這組后臺進程有若干個,它們分工明確——分別完成不同的系統功能,如圖2.16所示。其中SMON、PMON、DBWR、LGWR和CKPT這5個后臺進程必須正常啟動,否則將導致數據庫實例崩潰。此外,還有很多輔助進程,用于實現相關的輔助功能,如果這些輔助進程發生問題,只是某些功能受到影響,一般不會導致數據庫實例崩潰。下面對其中的主要進程進行講解。

圖2.16 主要后臺進程

1.數據寫入進程

數據寫入(DBWR)進程的主要任務是負責將內存中的“臟”數據塊回寫到數據文件中。所謂的“臟”數據塊是指高速數據緩沖區中被修改過的數據塊,這些數據塊的內容與數據文件的數據塊內容不一致。但DBWR并不是隨時將所有的“臟”數據塊都寫入數據文件,只有滿足一定的條件時,DBWR進程才開始成批量地將“臟”數據塊寫入數據文件,Oracle這樣做的目的是盡量減少I/O操作,提高Oracle服務器性能。通常在以下幾種情況發生時,DBWR進程會將“臟”數據塊寫入數據文件。

當用戶進程執行插入或修改等操作時,需要將“新數據”寫入到高速數據緩沖區,如果在高速數據緩沖區中沒有找到足夠用的空閑數據塊來存放這些“新數據”,這時,Oracle系統將啟動DBWR進程并將“臟”數據塊寫入到數據文件,以獲得空閑數據塊來存儲這些“新數據”。

檢查點進程啟動后,它會強制要求DBWR將某些“臟”數據塊寫入數據文件。

當“臟”數據塊在高速數據緩沖區中存放超過3秒鐘,DBWR進程會自行啟動并將某些“臟”數據塊寫入數據文件。

在某些比較繁忙的應用系統中,可以修改服務器參數文件SPFILE的DB_WRITER_PROCESSES參數,以允許使用多個DBWR進程。但是DBWR進程的數量不應當超過系統處理器的數量,否則多余的DBWR不但無法發揮作用,反而會耗費系統資源。

2.檢查點進程

檢查點(CKPT)進程可以看作是一個事件,當檢查點事件發生時,CKPT會要求DBWR將某些“臟”數據塊回寫到數據文件。當用戶進程發出數據請求時,Oracle系統從數據文件中讀取需要的數據并存放到高速數據緩沖區中,用戶對數據的操作是在緩沖區中進行的。當用戶操作數據時,就會產生大量的日志信息并存儲在重做日志緩沖區,當Oracle系統滿足一定條件時,日志寫入(LGWR)進程會將日志信息寫入重做日志文件組中,當發生日志切換時(寫入操作正要從一個日志文件組切換到另一組時),就會啟動檢查點進程。

另外,數據庫管理員(DBA)還可以通過修改初始化參數文件SPFILE中的CHECKPOINT_PROCESS參數為TRUE來啟動檢查點進程。

3.日志寫入進程

日志寫入(LGWR)進程用于將重做日志緩沖區中的數據寫入重做日志文件。Oracle系統首先將用戶所做的修改日志信息寫入日志文件,然后再將修改結果寫入數據文件。

Oracle實例在運行中會產生大量日志信息,這些日志信息首先被記錄在SGA的重做日志緩沖區中,當發生提交命令,或者重做日志緩沖區的信息滿1/3,或者日志信息存放超過3秒鐘時,LGWR進程就將日志信息從重做日志緩沖區中讀出并寫入日志文件組中序號較小的文件中,一個日志組寫滿后接著寫另外一組。當LGWR進程將所有的日志文件都寫過一遍之后,它將再次轉向第一個日志文件組重新覆蓋,如圖2.17所示。當LGWR進程寫滿一個日志文件組而轉向寫另外一組時,稱之為日志切換。

圖2.17 通過LGWR寫日志文件

4.歸檔進程

歸檔(ARCH)進程是一個可選擇的進程,只有當Oracle數據庫處于歸檔模式時,該進程才可能起到作用。若Oracle數據庫處于歸檔模式,當各個日志文件組都被寫滿而即將被覆蓋之前,先由ARCH把即將被覆蓋的日志文件中的日志信息讀出,然后再把這些“讀出的日志信息”寫入到歸檔日志文件中,如圖2.18所示。

圖2.18 通過ARCH寫歸檔文件

當系統比較繁忙而導致LGWR進程處于等待ARCH進程時,可通過修改LOG_ARCHIVE_MAX_PROCESSES參數啟動多個歸檔進程,從而提高歸檔寫磁盤的速度。

5.系統監控進程

系統監控(SMON)進程是在數據庫系統啟動時執行回復工作的強制性進程。例如,在并行服務器模式下,SMON可以回復另一條處于失敗的數據庫,使系統切換到另外一臺正常的服務器上。

6.進程監控進程

進程監控(PMON)進程用于監控其他進程的狀態,當有進程啟動失敗時,PMON會清除失敗的用戶進程,釋放用戶進程所用的資源。

7.鎖進程

鎖(LCKN)進程是一個可選進程,并行服務器模式下可以出現多個鎖定進程以利于數據庫通信。

8.恢復進程

恢復(RECO)進程是在分布式數據庫模式下使用的一個可選進程,用于數據不一致時進行恢復工作。

9.調度進程

調度(DNNN)進程是一個可選進程,在共享服務器模式下使用,可以啟動多個調度進程。

10.快照進程

快照(SNPN)進程用于處理數據庫快照的自動刷新,并通過DBMS_JOB包運行預定的數據庫存儲過程。

以上講解了Oracle 11g中的若干個典型進程,不同版本Oracle的后臺進程也不同,默認情況下,Oracle 11g會啟動200多個后臺進程。

【例2.19】 從v$bgprocess數據字典中查詢當前實例進程信息,代碼如下。(實例位置:資源包\TM\sl\2\9)

SQL> set pagesize 50;
SQL> select name,description from v$bgprocess;

本例運行結果如圖2.19所示。

圖2.19 當前實例進程信息

互動練習:Oracle執行SQL查詢語句的步驟。

2.5 數據字典

數據字典是Oracle存放關于數據庫內部信息的地方,用來描述數據庫內部的運行和管理情況。例如,一個數據表的所有者、創建時間、所屬表空間、用戶訪問權限等信息,這些信息都可以在數據字典中查找到。當用戶操作數據庫遇到困難時,就可以通過查詢數據字典來提供幫助信息。

2.5.1 Oracle數據字典簡介

Oracle數據字典的名稱由前綴和后綴組成,使用下畫線“_”連接,其代表的含義如下。

dba_:包含數據庫實例的所有對象信息。

v$_:當前實例的動態視圖,包含系統管理和系統優化等所使用的視圖。

user_:記錄用戶的對象信息。

gv_:分布式環境下所有實例的動態視圖,包含系統管理和系統優化使用的視圖。

all_:記錄用戶的對象信息機被授權訪問的對象信息。

2.5.2 Oracle常用數據字典

雖然通過Oracle企業管理器(OEM)操作數據庫比較方便,但它不利于讀者了解Oracle系統的內部結構和應用系統對象之間的關系,所以建議讀者盡量使用SQL*Plus來操作數據庫。為了方便讀者了解Oracle系統內部的對象結構和進行高層次的數據管理,下面給出最常用的數據字典及其說明。

1.基本數據字典

基本數據字典主要包括描述邏輯存儲結構和物理存儲結構的數據表,另外,還包括一些描述其他數據對象信息的表,如dba_views、dba_triggers、dba_users等。基本數據字典及其說明如表2.1所示。

表2.1 基本數據字典及其說明

2.常用動態性能視圖

Oracle系統內部提供了大量的動態性能視圖,之所以說是“動態”,是因為這些視圖的信息在數據庫運行期間會不斷地更新。動態性能視圖以v$作為名稱前綴,這些視圖提供了關于內存和磁盤的運行情況,用戶只能進行只讀訪問而不能修改它們。常用的動態性能視圖及其說明如表2.2所示。

表2.2 常用動態性能視圖

上面介紹了Oracle數據字典的基本內容,實際上Oracle數據字典的內容非常豐富,這里因篇幅有限,不能一一列舉,需要讀者在學習和工作中逐漸積累。運用好數據字典技術,可以使用戶能夠更好地了解數據庫的全貌,這樣對于數據庫優化、管理等有極大的幫助。

注意

Oracle數據字典是一個不斷發展和變化的內部表,讀者在參考某些資料時,要注意所使用的數據庫版本是否與資料內容一致。

2.6 小結

Oracle體系結構是一個復雜的結構,了解Oracle體系結構對于管理數據庫很有幫助。本章重點講解了邏輯存儲結構(包括數據塊、數據區、段、表空間)和物理存儲結構(包括數據文件、控制文件、日志文件、參數文件、密碼文件等)的組成。另外,本章最后還對服務器結構(SGA、PGA、前臺進程、后臺進程)和數據字典進行了詳細介紹。

2.7 實踐與練習

1.嘗試通過dba_segments數據字典查詢數據庫中所有段的存儲空間信息。

2.嘗試通過v$datafile動態性能視圖查詢數據庫所使用的數據文件信息。

主站蜘蛛池模板: 泰安市| 平和县| 舞钢市| 项城市| 博乐市| 高邮市| 犍为县| 九龙县| 双城市| 济阳县| 河池市| 焉耆| 温泉县| 顺义区| 通山县| 洪江市| 达孜县| 武威市| 六枝特区| 湟中县| 花莲市| 白朗县| 托克逊县| 隆尧县| 河津市| 彭阳县| 汶川县| 偃师市| 鱼台县| 佛冈县| 右玉县| 洪泽县| 丘北县| 华池县| 金阳县| 福海县| 清流县| 台北市| 德化县| 织金县| 汪清县|