學習《Oracle 9i10g編程藝術》的筆記 (七) 文件

 這一章中,我們將分析構成數據庫和實例的8 種文件類型

與實例相關的文件只有:
參數文件(parameter file):這些文件告訴Oracle 實例在哪裏可以找到控制文件,並且指
定某些初始化參數,這些參數定義了某種內存結構有多大等設置。我們還會介紹存儲數據庫參
數文件的兩種選擇。
跟蹤文件(trace file):這通常是一個服務器進程對某種異常錯誤條件做出響應時創建的診
斷文件。
警告文件(alert file):與跟蹤文件類似,但是包含“期望”事件的有關信息,並且通過一
個集中式文件(其中包括多個數據庫事件)警告DBA。
構成數據庫的文件包括:
數據文件(data file):這些文件是數據庫的主要文件;其中包括數據表、索引和所有其他
的段。
臨時文件(temp file):這些文件用於完成基於磁盤的排序和臨時存儲。
控制文件(control file):這些文件能告訴你數據文件、臨時文件和重做日誌文件在哪裏,
還會指出與文件狀態有關的其他元數據。
重做日誌文件(redo log file):這些就是事務日誌。

密碼文件(password file):這些文件用於對通過網絡完成管理活動的用戶進行認證。我們
不打算詳細討論這些文件。
從Oracle 10g 開始,又增加了兩種新的可選文件類型,可以幫助Oracle 實現更快的備份和更快的恢
復操作。這兩類新文件是:
修改跟蹤文件(change tracking file):這個文件有利於對Oracle 數據建立真正的增量備
份。修改跟蹤文件不一定非得放在閃回恢復區(Flash Recovery Area),不過它只與數據庫備
份和恢復有關,所以我們將在介紹閃回恢復區時再討論這個文件。
閃回日誌文件(flashback log file):這些文件存儲數據庫塊的“前映像”,以便完成新增
加的FLASHBACK DATABASE 命令。
我們還會討論通常與數據庫有關的其他類型的文件,如:
轉儲文件(dump file ,DMP file):這些文件由Export(導出)數據庫實用程序生成,並
由Import(導入)數據庫實用程序使用。
數據泵文件(Data Pump file):這些文件由Oracle 10g 新增的數據泵導出(Data Pump
Export)進程生成,並由數據泵導入(Data Pump Import)進程使用。外部表也可以創建和使
用這種文件格式。
平面文件(flat file):這些無格式文件可以在文本編輯器中查看。通常會使用這些文件向
數據庫中加載數據。
以上文件中,最重要的是數據文件和重做日誌文件,因爲其中包含了你辛辛苦苦才積累起來的數據。
只要有這兩個文件,就算是其他文件都沒有了,我也能得到我的數據。如果把重做日誌文件弄丟失了,可
能會丟失一些數據。如果把數據文件和所有備份都丟失了,那麼這些數據就永遠也找不回來了。

 

1.參數文件

與Oracle 數據庫有關的參數文件有很多,從客戶工作站上的tnsnames.ora 文件(用於“查找”網絡
上的一個服務器)到服務器上的listener.ora 文件(用於啓動網絡監聽器),還有sqlnet.ora、cman.ora
和ldap.ora 等文件。不過,最重要的參數文件是數據庫的參數文件,如果沒有這個參數文件,甚至無法啓
動數據庫。

數據庫的參數文件通常稱爲初始文件(init file),或init.ora 文件。這是因爲歷史上它的默認名
就是init<ORACLE_SID>.ora。之所以稱之爲“歷史上”的默認名,原因是從Oracle9i Release 1 以來,
對於存儲數據庫的參數設置,引入了一個有很大改進的新方法:服務器參數文件( server parameter file),
或簡稱爲SPFILE。這個文件的默認名爲spfile<ORACLE_SID>.ora

 

假設使用一個init.ora 參數文件,而且這個init.ora 參數文件確實在服務器的默認位置上,
那麼只需發出CREATE SPFILE 命令,並重啓服務器實例就行了:
spfile$ORACLE_SID.ora (Unix environment variable)
spfile%ORACLE_SID%.ora (Windows environment variable)
sys@ORA10G> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
sys@ORA10G> create spfile from pfile;
File created.
sys@ORA10G> startup force;
ORACLE instance started.
Total System Global Area 603979776 bytes
Fixed Size 780300 bytes
Variable Size 166729716 bytes
Database Buffers 436207616 bytes
這裏使用SHOW PARAMETER 命令顯示出原先沒有使用SPFILE,但是創建SPFILE 並重啓實例後,確實
使用了這個SPFILE,而且它採用了默認名。
注意在集羣環境中,通過使用Oracle RAC,所有實例共享同一個SPFILE,所以要以一種受控的方式完
成這個轉換過程(從PFILE 轉換爲SPFILE)。這個SPFILE 可以包含所有參數設置,甚至各個實例
特有的設置都可以放在這一個SPFILE 中,但是必須把所有必須的參數文件合併爲一個有以下格
式的PFILE。
在集羣環境中,爲了從使用各個PFILE 轉換爲所有實例都共享一個公共的SPFILE,需要把各個PFILE
合併爲如下一個文件:
Redo Buffers 262144 bytes
Database mounted.
Database opened.
sys@ORA10G> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /home/ora10g/dbs/spfil
eora10g.ora
*.cluster_database_instances=2
*.cluster_database=TRUE
*.cluster_interconnects='10.10.10.0'
*.compatible='10.1.0.2.0'
*.control_files='/ocfs/O10G/control01.ctl','/ocfs/O10G/control02.ctl'
*.db_name='O10G'
...
*.processes=150
*.undo_management='AUTO'
O10G1.instance_number=1
O10G2.instance_number=2
O10G1.local_listener='LISTENER_O10G1'
O10G2.local_listener='LISTENER_O10G2'
O10G1.remote_listener='LISTENER_O10G2'
O10G2.remote_listener='LISTENER_O10G1'
O10G1.thread=1
O10G2.thread=2
O10G1.undo_tablespace='UNDOTBS1'
O10G2.undo_tablespace='UNDOTBS2'

也就是說, 集羣中所有實例共享的參數設置都以*. 開頭。單個實例特有的參數設置( 如
INSTANCE_NUMBER 和所用的重做THREAD)都以實例名(Oracle SID)爲前綴。在前面的例子中,
PFILE 對應包含兩個節點的集羣,其中的實例分別爲O10G1 和O10G2。
*.db_name = 'O10G'這個賦值指示,使用這個SPFILE 的所有實例會裝載一個名爲O10G 的
數據庫。
O10G1.undo_tablespace='UNDOTBS1'指示,名爲O10G1 的實例會使用這個特定的撤銷(undo)
表空間,等等

 

2.跟蹤文件

如果開發人員設置了SQL_TRACE=TRUE,服務器就會生成一個包含性能相關信息的跟蹤文件。

Oracle 數據庫(以及應用服務器和Oracle 應用)都是可以充分測量的。數據庫中這種測量性反映在
以下幾方面:
V$視圖:大多數V$視圖都包含“調試”信息。V$WAITSTAT、V$SESSION_EVENT 還有其他許
多V$視圖之所以存在,就是爲了讓我們知道內核內部到底發生了什麼。
審計命令:利用這個命令,你能指定數據庫要記錄哪些事件以便日後分析。
資源管理器(DBMS_RESOURCE_MANAGER):這個特性允許你對數據庫中的資源( CPU、I/O 等)
實現微管理。正是因爲數據庫能訪問描述資源使用情況的所有運行時統計信息,所以纔可能有
資源管理器。
Oracle“事件”:基於Oracle 事件,能讓Oracle 生成所需的跟蹤或診斷信息。
DBMS_TRACE:這是PL/SQL 引擎中的一個工具,它會全面地記錄存儲過程的調用樹、所產生
的異常,以及遇到的錯誤。
數據庫事件觸發器:這些觸發器(如ON SERVERERROR)允許你監控和記錄你覺得“意外”
或非正常的情況。例如,可以記錄發生“臨時空間用盡”錯誤時正在運行的SQL。
SQL_TRACE:這個SQL 跟蹤工具還可以採用一種擴展方式使用,即通過10046 Oracle 事件。

 

不論是使用SQL_TRACE 還是擴展的跟蹤工具,Oracle 都會在數據庫服務器主機的以下兩個位置生成
一個跟蹤文件:
如果使用專用服務器連接,會在USER_DUMP_DEST 參數指定的目錄中生成跟蹤文件。
如果使用共享服務器連接,則在BACKGROUND_DUMP_DEST 參數指定的目錄中生成跟蹤文件。
要想知道跟蹤文件放在哪裏,可以從SQL*Plus 執行SHOW PARAMETER DUMP_DEST 命令來查看,也可以
直接查詢V$PARAMETER 視圖:

ops$tkyte@ORA10G> select name, value
2 from v$parameter
3 where name like '%dump_dest%'
4 /

 

3.警告文件

4.數據文件

數據文件和重做日誌文件是數據庫中最重要的文件。你的數據最終就是要存儲在數據文件中。每個數
據庫都至少有一個相關的數據文件,通常還不止一個。最簡單的“測試”數據庫只有一個數據文件。實際
上,在第2 章中我們已經見過一個例子,其中用最簡單的CREATE DATABASE 命令根據默認設置創建了一個
數據庫,這個數據庫中有兩個數據文件,其中一個對應SYSTEM 表空間(真正的Oracle 數據字典),另一個
對應SYSAUX 表空間(在10g 及以上版本中,非字典對象都存儲在這個表空間中)。不過,所有實際的數據
庫都至少有3 個數據文件;一個存儲SYSTEM 數據,一個存儲SYSAUX 數據,還有一個存儲USER 數據。

5.臨時文件

Oracle 中的臨時數據文件(Temporary data files)即臨時文件(temp files)是一種特殊類型的
數據文件。Oracle 使用臨時文件來存儲大規模排序操作和散列操作的中間結果,如果RAM 中沒有足夠的空
間,還會用臨時文件存儲全局臨時表數據,或結果集數據。永久數據對象(如表或索引)不會存儲在臨時
文件中,但是臨時表及其索引的內容要存儲在臨時文件中。所以,你不可能在臨時文件中創建表,但是使
用臨時表時完全可以在其中存儲數據。
Oracle 以一種特殊的方式處理臨時文件。一般而言,你對對象所做的每一個修改都會存儲在重做日
志中;這些事務日誌會在以後某個時間重放以“重做事務”,例如,失敗後進行恢復時就可能需要“重做事
務”。臨時文件不包括在這個重放過程內。對臨時文件並不生成redo 日誌,不過可以生成undo 日誌。由於
UNDO 總是受redo 的“保護”,因此,這就會生成使用臨時表的redo 日誌,有關詳細內容見第9 章。爲全
局臨時表生成undo 日誌的目的是爲了回滾在會話中所做的一些工作,這可能是因爲處理數據時遇到一個錯
誤,也可能因爲某個一般性的事務失敗。DBA 不需要備份臨時數據文件,實際上,備份臨時數據文件只會
浪費時間,因爲你無法恢復臨時數據文件。

 

6.控制文件

控制文件(control file)是一個相當小的文件(最多能增長到64 MB 左右),其中包含Oracle 需要
的其他文件的一個目錄。參數文件告知實例控制文件的位置,控制文件則告知實例數據庫和在線重做日誌
文件的位置。
控制文件還告知了Oracle 其他一些事情,如已發生檢查點的有關信息、數據庫名(必須與DB_NAME
參數匹配)、創建數據庫的時間戳、歸檔重做日誌的歷史(有時這會讓控制文件變大)、RMAN 信息等。

開發人員實際上可能不會接觸到控制文件。對於DBA 來說,控制文件是數據庫中一個非常重要的部分,
但是對於軟件開發人員,它們並不是太重要

 

7.重做日誌文件

重做日誌文件(redo log file)對於Oracle 數據庫至關重要。它們是數據庫的事務日誌。通常只用
於恢復,不過也可以用於以下工作:
系統崩潰後的實例恢復
通過備份恢復數據文件之後恢復介質
ops$tkyte@ORA10G> !df
Filesystem 1K-blocks Used Available Use% Mounte
d on
/dev/hda2 74807888 44099396 26908460 63% /
/dev/hda1 102454 14931 82233 16% /b
oot
none 1030804 0 1030804 0%
/dev/shm
備用(standby)數據庫處理
輸入到流中,這是一個重做日誌挖掘過程,用於實現信息共享(這也是一種奇特的複製)
重做日誌文件的主要目的是,萬一實例或介質失敗,重做日誌文件就能派上用場,或者可以作爲一種
維護備用數據庫(standby database)的方法來完成故障恢復。如果數據庫所在主機掉電,導致實例失敗,
Oracle 會使用在線重做日誌將系統恢復到掉電前的那個時刻。如果包含數據文件的磁盤驅動器出現了永久
性故障,Oracle 會使用歸檔重做日誌以及在線重做日誌,將磁盤驅動器的備份恢復到適當的時間點。另外,
如果你“無意地”刪除了一個表,或者刪掉了一些重要的信息,而且提交了操作,則可以恢復一個備份,
並讓Oracle 使用這些在線和歸檔重做日誌文件將其恢復到意外發生前的那個時刻。

 

你在Oracle 中完成的每個操作幾乎都會生成一定的redo 信息,並寫入在線重做日誌文件。向表中插
入一行時,插入的最終結果會寫入重做日誌。刪除一行時,則會在重做日誌中寫入你刪除了這一行這一事
實。刪除一個表時,刪除的效果會寫入重做日誌。從表中刪除的數據不會寫入;不過,Oracle 刪除表時執
行的遞歸SQL 確實會生成redo。例如,Oracle 從SYS.OBJ$表(和其他內部字典對象)中刪除一行時,這
就會生成redo,另外如果支持不同模式的補充日誌(supplemental logging ),還會把具體的DROP TABLE
語句寫入重做日誌流。

 

8.密碼文件

密碼文件(password file)是一個可選的文件,允許遠程SYSDBA 或管理員訪問數據庫。
啓動Oracle 時,還沒有數據庫可以用來驗證密碼。在“本地”系統上啓動Oracle 時(也就是說,不
在網絡上,而是從數據庫實例所在的機器啓動),Oracle 會利用操作系統來執行這種認證。

 

9.修改跟蹤文件

修改跟蹤文件(change tracking file)是一個可選的文件,這是Oracle 10g 企業版中新增的。這
個文件惟一的目的是跟蹤自上一個增量備份以來哪些塊已經修改。採用這種方式,恢復管理器(Recovery
Manager,RMAN)工具就能只備份確實有變化的數據庫塊,而不必讀取整個數據庫。

 

10.閃回日誌文件

閃回日誌文件(flashback log file)簡稱爲閃回日誌(flashback log),這是Oracle 10g 中爲支
持FLASHBACK DATABASE 命令而引入的,也是Oracle 10g 企業版的一個新特性。閃回日誌包含已修改數據
庫塊的“前映像”,可用於將數據庫返回(恢復)到該時間點之前的狀態。

 

11.DMP 文件(EXP/IMP 文件)

導出工具(Export)和導入工具(Import)是年頭已久的Oracle 數據抽取和加載工具,很多個版本
中都有這些工具。導出工具的任務是創建一個平臺獨立的DMP 文件(轉儲文件),其中包含所有必要的元數
據(CREATE 和ALTER 語句形式),可能還有數據本身,可以用於重新創建表、模式甚至整個數據庫。導入
工具的惟一作用就是讀取這些DMP 文件,執行其DDL 語句,並加載它找到的所有數據。

 

12.數據泵文件

Oracle 10g 中至少有兩個工具使用數據泵(data pump)文件格式。外部表(external table)可以
加載和卸載數據泵格式的數據,新的導入/導出工具IMPDP 和EXPDP 使用這種文件格式的方式與IMP 和EXP
使用DMP 文件格式的方式完全一樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章