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

2.3 物理存儲結(jié)構(gòu)

與邏輯存儲結(jié)構(gòu)相比,物理存儲結(jié)構(gòu)相對簡單并且更容易理解,但是物理存儲結(jié)構(gòu)并不是獨立存在的,它與數(shù)據(jù)庫邏輯存儲結(jié)構(gòu)之間有著不可分割的聯(lián)系。從整體上看,Oracle的數(shù)據(jù)在邏輯上存儲在表空間中,而在物理上存儲在表空間所對應的數(shù)據(jù)文件中。數(shù)據(jù)庫邏輯結(jié)構(gòu)與物理結(jié)構(gòu)中的數(shù)據(jù)文件有著十分密切的聯(lián)系,如下圖所示。

數(shù)據(jù)庫物理存儲結(jié)構(gòu)主要包括3類物理文件:數(shù)據(jù)文件、控制文件和重做日志文件。除此之外,Oracle數(shù)據(jù)庫還具有一些參數(shù)文件。

2.3.1 數(shù)據(jù)文件

數(shù)據(jù)庫中的數(shù)據(jù)在物理上保存在若干個操作系統(tǒng)文件中,這些操作系統(tǒng)文件就是數(shù)據(jù)文件。一個表空間在物理上對應一個或多個數(shù)據(jù)文件,而一個數(shù)據(jù)文件只能屬于一個表空間。數(shù)據(jù)文件是操作系統(tǒng)文件,Oracle通過表空間創(chuàng)建數(shù)據(jù)文件,從硬盤中獲取存儲數(shù)據(jù)所需的物理存儲空間,一個數(shù)據(jù)文件只能屬于唯一的表空間。

在存取數(shù)據(jù)時,Oracle數(shù)據(jù)庫首先從數(shù)據(jù)文件中讀取數(shù)據(jù),并存儲在內(nèi)存中的數(shù)據(jù)緩沖區(qū)中。當用戶查詢數(shù)據(jù)時,如果查詢的數(shù)據(jù)不在數(shù)據(jù)緩沖區(qū)中,這時Oracle數(shù)據(jù)庫則啟動相應的進程從數(shù)據(jù)文件中讀取數(shù)據(jù),并保存到數(shù)據(jù)緩沖區(qū)中。當用戶修改數(shù)據(jù)時,用戶對數(shù)據(jù)的修改保存在數(shù)據(jù)緩沖區(qū)中,然后由Oracle的相應后臺進程將數(shù)據(jù)寫入數(shù)據(jù)文件中。這樣的存取方式減少了磁盤的I/O操作,提高了系統(tǒng)的響應性能。

在為數(shù)據(jù)庫創(chuàng)建表空間時,Oracle將同時創(chuàng)建該表空間的數(shù)據(jù)文件。當用戶在表空間中創(chuàng)建數(shù)據(jù)庫對象時,用戶是無法指定使用哪一個數(shù)據(jù)文件來進行存儲的,只能由Oracle負責為數(shù)據(jù)庫對象選擇一個數(shù)據(jù)文件,并在其中分配物理存儲空間。一個數(shù)據(jù)庫對象的數(shù)據(jù)可以全部保存在一個數(shù)據(jù)文件中,也可以分布存放在同一個表空間的多個數(shù)據(jù)文件中。

隨著不斷在表空間中創(chuàng)建和更新數(shù)據(jù)庫對象,表空間對應的數(shù)據(jù)文件中的物理存儲空間將被消耗殆盡,這時就需要為表空間分配更多的物理存儲空間。數(shù)據(jù)文件的大小在創(chuàng)建時確定。當表空間中的物理存儲空間不足時,可以通過3種方式來增加存儲空間。

※ 為表空間追加新的數(shù)據(jù)文件。

※ 通過手工方式擴大現(xiàn)有的數(shù)據(jù)文件。

※ 配置數(shù)據(jù)文件為自動增長方式,當數(shù)據(jù)文件需要更多的存儲空間時,Oracle會自動增大數(shù)據(jù)文件。

可以通過如下方式查看數(shù)據(jù)文件。

      SQL> select name from v$datafile;

      NAME
      ----------------------------------------------
      D:\APP\MANAGER\ORADATA\ORCL\SYSTEM01.DBF
      D:\APP\MANAGER\ORADATA\ORCL\SYSAUX01.DBF
      D:\APP\MANAGER\ORADATA\ORCL\UNDOTBS01.DBF
      D:\APP\MANAGER\ORADATA\ORCL\USERS01.DBF
      D:\APP\MANAGER\ORADATA\ORCL\EXAMPLE01.DBF

從以上代碼可以看出,數(shù)據(jù)文件大致可以分為以下幾類。

※ 系統(tǒng)數(shù)據(jù)文件:系統(tǒng)數(shù)據(jù)文件SYSTEM01.DBF和SYSAUX01.DBF存放了系統(tǒng)表和數(shù)據(jù)字典,一般不放用戶的數(shù)據(jù),但是用戶腳本,如過程、函數(shù)、包等卻是保存在數(shù)據(jù)字典中的。

※ 撤銷段文件:撤銷段文件UNDOTBS01.DBF對應撤銷表空間。如果數(shù)據(jù)庫進行對數(shù)據(jù)的修改,那么就必須使用撤銷段,撤銷段用來臨時存放修改前的數(shù)據(jù)。撤銷段通常都放在一個單獨的表空間中(撤銷表空間),避免表空間碎片化,這個表空間包含的數(shù)據(jù)文件就是撤銷段數(shù)據(jù)文件。

※ 用戶數(shù)據(jù)文件:用戶數(shù)據(jù)文件USERS01.DBF和EXAMPLE01.DBF用于存放用戶數(shù)據(jù)。其中,EXAMPLE01.DBF文件存放了示例方案中的數(shù)據(jù)。

需要注意,上面并沒有顯示臨時表空間所對應的臨時數(shù)據(jù)文件。因為臨時數(shù)據(jù)文件是一類比較特殊的數(shù)據(jù)文件,臨時數(shù)據(jù)文件的信息只能通過數(shù)據(jù)字典視圖DBA_TEMP_FILE和動態(tài)性能視圖V$TEMPFILE來查看,而不能像普通數(shù)據(jù)文件一樣通過DBA_DATA_FILES和V$DATAFILE視圖查看。

      SQL> select name from v$tempfile;

      NAME
      ---------------------------------------------------
      D:\APP\MANAGER\ORADATA\ORCL\TEMP01.DBF

2.3.2 控制文件

數(shù)據(jù)庫控制文件是一個很小的二進制文件,其中包含了關(guān)于數(shù)據(jù)庫物理結(jié)構(gòu)的重要信息。通過在加載數(shù)據(jù)庫時讀取控制文件,Oracle才能找到自己所需的操作系統(tǒng)文件(數(shù)據(jù)文件、重做日志文件等)。

控制文件對于數(shù)據(jù)庫的成功啟動和正常運行是至關(guān)重要的,在加載數(shù)據(jù)庫時,實例必須先找到數(shù)據(jù)庫的控制文件。如果控制文件正常,實例才能加載并打開數(shù)據(jù)庫。但是,如果控制文件中記錄了錯誤的信息,或者實例無法找到一個可用的控制文件,數(shù)據(jù)庫將無法加載,當然也無法打開。

在數(shù)據(jù)庫運行的過程中,Oracle會不斷更新控制文件中的內(nèi)容,因此控制文件必須在整個數(shù)據(jù)庫打開期間始終保持可用狀態(tài)。如果由于某種原因?qū)е驴刂莆募豢捎茫瑪?shù)據(jù)庫將會崩潰。

每個數(shù)據(jù)庫必須至少擁有一個控制文件,一個數(shù)據(jù)庫雖然可以同時擁有多個控制文件,但是一個控制文件只能屬于一個數(shù)據(jù)庫。在數(shù)據(jù)庫的控制文件中包含關(guān)于該數(shù)據(jù)庫物理結(jié)構(gòu)的信息,控制文件中的主要信息包括:數(shù)據(jù)庫的名稱、檢查點信息、數(shù)據(jù)庫創(chuàng)建的時間戳、所有的數(shù)據(jù)文件、重做日志文件、歸檔日志文件信息和備份信息等。

有了控制文件中的這些信息,Oracle便可以確定哪些文件屬于數(shù)據(jù)文件了,例如現(xiàn)在的重做日志文件,由于它們是系統(tǒng)的啟動和運行的基本條件,因此也屬于數(shù)據(jù)文件。這些都是系統(tǒng)啟動和運行的基本條件。由于控制文件非常重要,因此一般采用多個復本的方式來保護控制文件,或采用RAID來保護控制文件。控制文件的丟失,將使數(shù)據(jù)庫的恢復變得很復雜。控制文件信息可以從V$CONTROLFILE中查詢獲得。

      SQL> select name from v$controlfile;
      NAME
      -------------------------------------------------
      D:\APP\MANAGER\ORADATA\ORCL\CONTROL01.CTL
      D:\APP\MANAGER\ORADATA\ORCL\CONTROL02.CTL
      D:\APP\MANAGER\ORADATA\ORCL\CONTROL03.CTL

提示:

控制文件中的內(nèi)容只能由Oracle本身來修改,任何數(shù)據(jù)庫管理員都不能直接編輯控制文件中的內(nèi)容。

2.3.3 其他文件

除了上述3種類型的文件外,Oracle還提供了一些其他類型的文件,如參數(shù)文件、歸檔日志文件、跟蹤和密碼文件等。本節(jié)將對這些文件進行簡單介紹。

1. 歸檔日志文件

Oracle利用重做日志文件記錄對數(shù)據(jù)庫所做的修改,但是重做日志文件是以循環(huán)方式使用的,在重新寫入重做日志文件時,原來保存的信息將被覆蓋。如果能夠?qū)⑺械闹刈鲇涗浻谰玫乇A粝聛恚涂梢酝暾赜涗洈?shù)據(jù)庫的全部修改過程,可以通過對重做日志文件進行歸檔來實現(xiàn)。

在重做日志文件被覆蓋之前,Oracle能夠?qū)⒁呀?jīng)寫滿的重做日志文件,通過復制操作系統(tǒng)文件的方式保存到指定的位置。保存下來的重做日志文件的集合稱為“歸檔重做日志”,復制的過程稱為“歸檔”。

Oracle數(shù)據(jù)庫可以運行在兩種模式中—歸檔模式和不歸檔模式。只有數(shù)據(jù)庫處于歸檔模式下,系統(tǒng)才會對重做日志文件執(zhí)行歸檔操作,歸檔操作由后臺進程ACRn自動完成。當數(shù)據(jù)庫運行在歸檔模式下,歸檔重做日志文件會占用大量的硬盤空間。也就是說,數(shù)據(jù)庫在歸檔模式下是以犧牲硬盤空間的方式來獲取數(shù)據(jù)的安全性的。

2. 參數(shù)文件

在Oracle數(shù)據(jù)庫系統(tǒng)中,參數(shù)文件包含了數(shù)據(jù)庫的配置信息。數(shù)據(jù)庫實例在啟動之前,Oracle數(shù)據(jù)庫系統(tǒng)首先會讀取這些參數(shù)文件中設置的參數(shù),并根據(jù)初始化參數(shù)文件中設置的參數(shù)來配置實例的啟動。

參數(shù)文件包括文本參數(shù)文件和服務器參數(shù)文件兩種類型。在Windows平臺中,服務器參數(shù)文件的名稱格式為SPFILE<SID>.ora,文本參數(shù)的名稱格式為init<SID>.ora,其中SID為數(shù)據(jù)庫實例名。

用戶可以通過如下3種方法查看數(shù)據(jù)庫中的參數(shù)值。

※ 查看init<SID>.ora文件:該參數(shù)文件是以文本形式存儲參數(shù)的,用戶可以直接打開該參數(shù)文件查看數(shù)據(jù)庫參數(shù)。

※ 查詢視圖V$PARAMETER:可利用該動態(tài)性能視圖來確定參數(shù)的默認值是否修改過,以及是否可以用alter system和alter session命令修改。

提示:

應該特別注意ISMODIFIED、ISDEFAULT、ISADJUSTED、ISSYS_MODIFIABLE和ISSES_MODIFIABLE列中的值。

※ 使用SQL命令:使用*Plus的show parameter命令可查看。

用戶通過修改init<SID>.ora文件,可以修改所有的參數(shù),但是必須關(guān)閉數(shù)據(jù)庫,然后再重啟數(shù)據(jù)庫實例才能生效。另外,也可以使用ALTER SYSTEM、ALTER SYSTEM DEFERRED和ALTER SESSION命令修改參數(shù),修改參數(shù)后無須重新啟動實例即可立即生效,但是這樣不能修改所有參數(shù)。

3. 密碼文件

在Oracle數(shù)據(jù)庫系統(tǒng)中,用戶如果要以特權(quán)用戶身份(INTERNAL、SYSDBA、SYSOPER)登錄Oracle數(shù)據(jù)庫,可以使用兩種身份驗證方法—使用與操作系統(tǒng)集成的身份驗證和使用Oracle數(shù)據(jù)庫的密碼文件進行身份驗證。因此,對密碼文件的管理可以控制授權(quán)用戶從遠端或本地登錄Oracle數(shù)據(jù)庫系統(tǒng)。

Oracle密碼文件的默認存放位置在%ORACLE_HOME%\Database目錄下,密碼文件為pwd<SID>.ora,其中SID代表數(shù)據(jù)庫實例名。數(shù)據(jù)庫管理員也可以根據(jù)需要,使用工具ORAPWD.exe手工創(chuàng)建密碼文件,命令格式如下。

     C:\>ORAPWD FILE=<FILENAME> PASSWORD=<PASSWORD> ENTRIES=<MAX_USERS>

各命令參數(shù)的含義為:

※ FILENAME:密碼文件名。

※ PASSWORD:設置INTERNAL/SYS賬戶的口令。

※ MAX_USERS:密碼文件中可以存放的最大用戶數(shù),對應于允許以SYSDBA/ SYSOPER權(quán)限登錄數(shù)據(jù)庫的最大用戶數(shù)。

創(chuàng)建密碼文件后,需要設置初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE來控制密碼文件的使用狀態(tài)。在Oracle數(shù)據(jù)庫實例的初始化參數(shù)文件中,此參數(shù)控制著密碼文件的使用及其狀態(tài)。該參數(shù)的取值包括:

※ NONE:指示Oracle系統(tǒng)不使用密碼文件,特權(quán)用戶的登錄通過操作系統(tǒng)進行身份驗證。

※ EXCLUSIVE:指示只有一個數(shù)據(jù)庫實例可以使用此密碼文件。

※ SHARED:指示多個數(shù)據(jù)庫實例可以使用此密碼文件。在此設置下只有INTERNAL/SYS賬戶能被密碼文件識別,即使文件中存在其他用戶的信息,也不允許他們以SYSOPER/SYSDBA的權(quán)限登錄。

當初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE設置為EXCLUSIVE時,系統(tǒng)允許除INTERNAL/SYS以外的用戶以管理員身份從遠端或本地登錄到Oracle數(shù)據(jù)庫系統(tǒng),并執(zhí)行數(shù)據(jù)庫管理工作。但是,這些用戶名必須存在于密碼文件中,這樣系統(tǒng)才能識別它們。無論是在創(chuàng)建數(shù)據(jù)庫實例時自動創(chuàng)建的密碼文件,還是使用ORAPWD.exe手工創(chuàng)建的密碼文件,都只包含INTERNAL/SYS用戶的信息。為此,在實際操作中,可能需要向密碼文件中添加或刪除其他用戶賬戶。

要進行此項授權(quán)操作,需使用SYSDBA權(quán)限連接數(shù)據(jù)庫,并且初始化參數(shù)REMOTE_ LOGIN_PASSWORDFILE必須被設置為EXCLUSIVE。具體操作步驟如下。

① 創(chuàng)建相應的密碼文件。

② 修改初始化參數(shù)REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE。

③ 使用SYSDBA權(quán)限登錄。

      SQL> connect sys/password as sysdba;
      已連接。

④ 向用戶授予SYSOPER和SYSDBA權(quán)限。

      SQL> grant sysdba to hr;
      授權(quán)成功。

⑤ 現(xiàn)在,用戶HR可以以管理員身份登錄數(shù)據(jù)庫系統(tǒng)了。

      SQL> connect hr/hr as sysdba
      已連接。

提示:

收回權(quán)限的語句為:REVOKE SYSDBA FROM user_name。

可以通過查詢視圖V$PWFILE_USERS來獲取擁有SYSOPER/SYSDBA系統(tǒng)權(quán)限的用戶的信息,表中SYSOPER/SYSDBA列的取值TRUE/FALSE,表示此用戶是否擁有相應的權(quán)限。

4. 預警日志文件

預警日志文件記錄了數(shù)據(jù)庫啟動、關(guān)閉和一些重要的出錯信息,這些信息是按照時間順序存放的。通過使用預警日志文件,數(shù)據(jù)庫管理員可以查看Oracle的內(nèi)部錯誤和數(shù)據(jù)塊損壞的錯誤,還可以監(jiān)視特權(quán)用戶的操作,以及監(jiān)視數(shù)據(jù)庫物理結(jié)構(gòu)的改變。

預警日志文件的位置由初始化參數(shù)BACKGROUND_DUMP_DEST確定,名稱為alert<SID>. log,其中SID為實例名,并且其信息由服務器進程和后臺進程(DBWR、LGWR)寫入。例如:

      SQL> select value from v$parameter
           2  where name ='background_dump_dest';
      VALUE
      -------------------------------------
      d:\app\manager\diag\rdbms\orcl\orcl\trace

提示:

因為預警日志文件所記載的消息和錯誤是按照時間順序存放的,所以當查看預警日志文件時應從文件尾部查看。由于隨著時間的推移,預警日志文件會越來越大,DBA應該定期刪除預警日志文件。

5. 后臺或用戶跟蹤文件

后臺進程跟蹤文件用于記錄后臺進程的警告或錯誤消息,每個后臺進程都有相應的跟蹤文件。后臺進程跟蹤文件的位置由初始化參數(shù)BACKGROUND_DUMP_DEST確定,名稱格式為<SID>_<processname>_<SPID>.trc。

用戶進程跟蹤文件用于記載與用戶進程相關(guān)的信息,它主要用于跟蹤SQL語句。通過用戶進程跟蹤文件,可以診斷SQL語句的性能,并為調(diào)整SQL語句提供支持。同樣,用戶進程跟蹤文件的位置由初始化參數(shù)USER_DUMP_DEST確定,名稱格式為<SID>_ora_<SPID>.trc。

主站蜘蛛池模板: 连城县| 崇明县| 陵川县| 建始县| 平阳县| 泸州市| 桃园县| 河北区| 东乡族自治县| 巴彦县| 浮山县| 乌鲁木齐县| 青岛市| 岱山县| 新宁县| 始兴县| 莲花县| 无极县| 如东县| 太仆寺旗| 丰县| 汶川县| 丹棱县| 绥滨县| 安顺市| 和顺县| 建平县| 上思县| 桦川县| 澄迈县| 抚远县| 津市市| 都匀市| 和政县| 临海市| 许昌县| 惠来县| 资源县| 苍梧县| 通江县| 乌苏市|