国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

oracle 基礎

2024-08-29 13:42:58
字體:
來源:轉載
供稿:網友
1.數據結構
2.數據類型
3.設計數據庫
4.實例(instance)與數據庫(database)
5.數據字典
數據結構數據結構是以表和列的形式實現的。數據類型數據類型(datatype)是列(column)或存儲過程中的一個屬性。 Oracle支持的數據類型可以分為三個基本種類:字符數據類型、數字數據類型以及表示其它數據的數據類型。字符數據類型CHAR
  CHAR數據類型存儲固定長度的子符值。一個CHAR數據類型可以包括1到2000個字符。假如對CHAR沒有明確地說明長度,它的默認長度則設置為1。
     假如對某個CHAR類型變量賦值,其長度小于規定的長度,那么Oracle自動用空格填充。VARCHAR2
  存儲可變長度的字符串。雖然也必須指定一個VARCHAR2數據變量的長度,但是這個長度是指對該變量賦值的的最大長度而非實際賦值長度。不需要用空格填充。最多可設置為4000個字符?! ∫驗閂ARCHAR2數據類型只存儲為該列所賦的字符(不加空格),所以VARCHAR2需要的存儲空間比CHAR數據類型要小。
  Oracle推薦使用VARCHAR2NCHAR和NVARCHAR2
  NCHAR和NVARCHAR2數據類型分別存儲固定長度與可變長度的字符數據,但是它們使用的是和數據庫其他類型不同的字符集。在創建數據庫時,需要指定所使用的字符集,
以便對數據庫中數據進行編碼。還可以指定一個輔助的字符集[即本地語言集(National LanguageSet,簡稱NLS)]。NCHAR和NVARCHAR2類型的列使用輔助字符集。  在Oracle9i中,可以以字符而不是字節為單位來表示NCHAR和NVARCHAR2列的長度。LONG
  LONG數據類型可以存放2GB的字符數據,它是從早期版本中繼續來的。現在假如想存儲大容量的數據,Oracle推薦使用CLOB和NCLOB數據類型。在表和SQL語句中使用LONG類型有許多限制。CLOB和NCLOB
  CLOB和NCLOB數據類型可以存儲多達4GB的字符數據。NCLOB數據類型可存儲NLS數據。數字數據類型Oracle使用標準、可變長度的內部格式來存儲數字。這個內部格式精度可以高達38位。NUMBER數據類型可以有兩個限定符,如:  column NUMBER ( PRecision, scale)precision表示數字中的有效位。假如沒有指定precision的話,Oracle將使用38作為精度。
scale表示數字小數點右邊的位數,scale默認設置為0?! 〖偃绨裺cale設成負數,Oracle將把該數字取舍到小數點左邊的指定位數。日期數據類型Oracle標準日期格式為:DD-MON-YY HH:MI:SS 通過修改實例的參數NLS_DATE_FORMAT,可以改變實例中插入日期的格式。在一個會話期間,可以通過ALTER session SQL命令來修改日期,
或者通過使用SQL語句的TO_DATE表達式中的參數來更新一個特定值。其它的數據類型RAW和LONG RAW
  RAW和LONG RAW數據類型主要用于對數據庫進行解釋。指定這兩種類型時,Oracle以位的形式來存儲數據。RAW數據類型一般用于存儲有特定格式的對象,如位圖。
     RAW數據類型可占用2KB的空間,而LONG RAW數據類型則可以占用2GB大小。ROWID
  ROWID是一種非凡的列類型,稱之為偽列(pseudocolumn)。ROWID偽列在SQL SELECT語句中可以像普通列那樣被訪問。Oracle數據庫中每行都有一個偽列。
    ROWID表示行的地址,ROWID偽列用ROWID數據類型定義。
  ROWID與磁盤驅動的特定位置有關,因此,ROWID是獲得行的最快方法。但是,行的ROWID會隨著卸載和重載數據庫而發生變化,因此建議不要在事務中
  cloudscape 發表于 >2003-12-29 10:00:39 [閱讀全文] [我要評論] [引用文章]
2003-12-17
Oracle(二)設計數據庫考慮一下數據庫的使用目的以及數據庫中包含的數據量。還應該了解所使用的底層硬件——CPU的數目和型號、內存總量、磁盤數目、磁盤控制器等等。采用合適的容量和I/O子系統設計,
可以避免以后許多的優化問題。一些影響數據庫設計和硬件配置的因素:有多少用戶使用數據庫?該數據庫是否支持OLTP應用或數據倉庫?數據庫對象數目和大小是怎樣的?
  即對象在初始化時的大小以及所期望的增長速率。不同數據庫對象采用哪種訪問模式?
  某些對象可能比另一些對象更常用。了解數據庫中的操作類型與容量,這對于設計和優化數據庫是至關重要的。有人使用所謂“CRUD矩陣”,
    即對業務事務中每個要害對象的創建(Create)、讀(Read)、更新(Update)以及刪除(Delete)進行估計。
現在已有哪些硬件是可以使用的,隨著數據庫的增長還必須增加哪些硬件?可用性要求如何?性能要求是怎樣的?系統的安全要求是什么?配置Oracle Net/Net8Oracle Net (在Oracle和Oracle8i中稱為Net8,在Oracle8之前稱為SQL*Net)是一個軟件層,答應不同的物理主機為訪問Oracle數據庫這個共同目標而進行通信。在客戶機和服務器上運行某個版本的Oracle Net,可以使客戶與服務器通過任何通用的網絡協議實現通信。Oracle Net 還能執行網絡協議互換功能。OracleNet 還提供了“位置透明性”,即客戶應用不需要知道服務器的物理位置。Oracle Net層處理這樣的通信,意味著可以把數據庫移到另一臺主機上,而只要簡單地更新相應的Oracle Net配置信息即可。
客戶應用程序仍然可以訪問該數據庫,不需要做任何改變。Oracle Net 引入了服務名(servicename)或別名(alias)的概念??蛻籼峁┮粋€服務名或Oracle Net別名以指定其要訪問的數據庫,而不需要確定該數據庫存放的主機或數據庫實例。
Oracle Net通過提供的服務名查找實際的主機和Oracle實例,,并將客戶請求發送到合適的數據庫。解析Oracle Net 服務名下面的Oracle Net 配置選件可將客戶指定的服務名解析為所要訪問的數據庫主機名和實例名。本地解析名
  使用本地解析名,每個客戶機上都必須安裝文件TNSNAMES.ORA,其中包括了針對每個Oracle Net別名所提供的主機和Oracle實例項,假如底層數據庫位置有所變化,則必須維護客戶機上的TNSNAMES.ORA文件。網絡拓撲一定會隨著時間而變化,所以使用這個選件勢必增加維護的負擔。Oracle Names 服務
  使用Oracle帶的OracleNames軟件可以避免在每個客戶上安裝文件TNANAMES.ORA。當客戶指定一個服務名時,Oracle Net自動地與OracleNames服務器(一般都在其他主機上)聯系。
     Oracle Names軟件為客戶提供了主機和實例信息??梢耘渲枚鄠€OracleNames服務器來提供冗余并提高性能。當Oracle網絡拓撲結構經常發生變化時,
     OracleNames服務可以極大地減輕更新本地TNSNAMES.ORA文件的負擔。對于廣泛分布的復雜網絡很適用。Oracle Internet目錄
  OracleNames服務的優點在于它不需要安裝客戶配置文件,缺點則是它是專用的,即只能應用在Oracle數據庫上。而將名字服務擴展到Oracle環境以外的領域是在所難免的。
     事實上,已經有了訪問這類信息的標準,即LDAP(Lightweight Directory accessProtocol,輕型目錄訪問協議)。
     自從Oracle8i發布以后,Oracle數據庫就裝配了OID(OracleInternet目錄)。OID是一種LDAP類型的目錄,和OracleNames服務作用相同。OID還有其他許多用途,
     如在Oracle9iAS Portal產品中使用單點登錄等。主機名
  客戶可以簡單使用實例運行的主機名。這對TCP/ip網絡是有效的,因為TCP/IP網絡可以將主機名解析成IP地址。例如,DNS將主機名轉換成IP地址,就如同Oracle Names轉換服務名一樣。第三方命名服務
  
這些名字解析選件互不排斥。自動發現和代理在Oracle8i中,通用安裝程序和Oracle Net治理器互相配合,自動地配置Oracle Net網絡。惟一所需的就是INIT.ORA(在Oracle9i中可以為SPFILE),它將實例映射到服務或應用中。Oracle網絡中支持自動發現的要害部分就是Oracle智能代理(IntelligentAgent)。此代理是一個軟件,運行于存放Oracle數據庫的主機上。對于查找或訪問數據庫的其他功能而言.
它起著代理的作用。代理為自動發現提供了一個中心點:Oracle Net需要通過詢問代理來發現實例和數據庫。Oracle Net配置文件Oracle Net需要幾個配置文件。對于用來配置一個Oracle Net網絡的文件,其默認位置如下:Oracle8的路徑為ORACLE_HOME/net80/admin;Oracle8i及其以后版本的路徑為ORACLE_HOME/network/admin可以將這些文件放在其他目錄下,但是必須用環境或系統變量TNS_ADMIN設置非默認路徑,以后Oracle就用TNS_ADMIN來定位這些文件。構成一個簡單Oracle Net配置的文件如下:LISTENER.ORA
  包括配置Oracle Net監聽器的細節信息,例如監聽器正在作用于哪個實例或服務。對于想要通過網絡來訪問數據庫的客戶,監聽器將對其發送來的連接請求進行“監聽”。
TNSNAMES.ORA
  根據連接請求,此文件把服務名解碼成特定主機的地址和Oracle實例(假如正在使用OracleName,就沒必要把TNSNAMES.ORA文件作為配置的一部分)。
這個文件對OracleNet的位置透明性是很要害的。假如把數據庫從一臺主機移到另一臺上,只需修改不同主機上的TNSNAMES.ORA文件,即改為現有的服務名來映射新的主機地址。SQLNET.ORA
  該文件提供重要的默認配置和混合配置細節信息LDAP.ORA
  對于Oracle8i及其以后版本,LDAP.ORA文件包含了需要使用LDAP目錄的配置信息。這個信息包括LDAP目錄服務器的位置和服務器的默認治理環境。通用服務名在Oracle8i之前,配置數據庫服務器上的監聽器用來監聽特定的實例名??蛻羰褂肗et8服務名,可以解析成特定的主機以及實例名。
從Oracle8i以后,則通過服務名或應用名。當數據庫服務器上的實例啟動時,它通過監聽器來注冊所支持的應用/服務。
OracleNet/Net8名字解析文件要使用服務名,它將解析成主機或應用,而非主機與實例。然后主機上的監聽器根據每個實例注冊時所支持的應用,從而引導客戶得到合適的實例。啟動數據庫啟動一個數據庫,以下操作將自動完成:1.啟動實例  Oracle從服務器上的SPFILE或INIT.ORA文件中讀取實例初始化參數,然后Oracle為系統全局區分配內存,啟動實例的后臺進程。在這個階段,數據庫的任何物理文件都沒打開,實例處于NOMOUNT狀態。有些問題會阻止實例的啟動。例如,初始化文件中的錯誤、操作系統不能分配所有的SGA共享內存,等等。而且還應具有SYSOPER或SYSDBA的非凡權限,這是通過操作系統授予的,
其作用就是用于啟動實例。2.安裝數據庫  首先實例打開了數據庫的控制文件,初始化參數CONTROL_FILES會告訴實例在哪里能夠找到這些控制文件。在這個時候只有控制文件是打開的,這稱為MOUNT狀態,此時,只有數據庫治理員可以處理數據庫。3.安裝數據庫  實例會根據控制文件的信息打開日志文件和數據文件。在這個時候,數據庫完全打開,用戶可以訪問。關閉數據庫1.關閉數據庫  Oracle對所有修改過的的數據塊進行刷新,這些數據塊還沒有從SGA緩沖區寫入磁盤的數據文件中。Oracle還將把日志緩沖區內的相關日志信息寫出。
                      然后Oracle檢查點數據文件,標識數據文件頭的當前數據庫關閉時間,接著關閉數據文件和日志文件。此時,用戶不能再訪問數據庫。2.卸載數據庫  Oracle實例卸載數據庫。Oracle刷新了控制文件相關的項,從而記錄完全關閉操作,然后關閉控制文件。這是數據庫完全關閉,只有實例存在。3.關閉實例  Oracle停止了所有的后臺進程,并且釋放SGA的內存共享。在某種情況下,數據庫可能沒有完全關閉。假如發生這種情況,Oracle沒有時間把修改過的數據庫數據塊從SGA寫入數據文件中。當Oracle再次啟動時,實例會察覺到故障的發生,并且自動提交沒有或正在進行的事務會被清除。在應用了日志文件后將確定沒有提交的事務,并且自動回滾。訪問數據庫服務器進程和客戶為了訪問數據庫,用戶需要和實例連接,因為用戶必須通過實例訪問所需的數據庫。訪問問數據庫的程序實際上有兩個部分:客戶程序和服務器進程,它們要與Oracle實例連接。例如:運行Oracle的字符模式工具SQL*Plus包括以下兩個進程:
·SQL*Plus進程本身,它將被作為客戶。
·Oracle服務器進程,有時稱為影子進程(shadow process),它提供與Oracle實例的連接。服務器進程Oracle服務器進程始終運行在實例運行的主機上,服務器進程可以訪問SGA共享內存,并且可以從中讀寫數據。顧名思義,服務器進程是為客戶進行工作的,他的工作包括讀取和返回請求的數據,并代表客戶接受和做出修改等等。但是服務器進程不能把日志緩沖區的日志信息寫入日志文件中,
它也不能把改變的數據庫數據塊從高速緩存寫入數據文件。這些操作分別由LGWR和DBWR進程完成??蛻暨M程客戶進程可以和實例運行在同一臺主機上。兩個進程在同一臺主機上時,Oracle通過IPC(Inter ProcessCommunication,進程間通信)進行本地通信;對于客戶在一臺主機上而數據庫在另一臺主機上的情況,Oracle使用OracleNet在兩個主機間通信。作為客戶的應用服務器和Web服務器當考慮包括Web服務器和應用服務器的多層計算時,客戶的含義就有所改變?!翱蛻簟边M程成為中間層或應用服務器。 
 對于所有與Oracle實例連接的進程,由于它可以獲得數據庫的服務,從這個意義上說,可以認為它們都屬于客戶。  
不要把正在使用的術語“客戶”和多層結構中的實際客戶相混淆。在多層結構中的終端客戶是某種類型的程序,
它們可以提供用戶接口,例如運行java的瀏覽器等。Oracle Net以及建立網絡連接服務器進程通過某些類型的網絡與客戶進程連接,那么客戶進程是如何與Oracle服務器進程聯系并開始工作的呢?聯系Oracle客戶和服務器的中介是OracleNet監聽器。監聽器可為一個或多個實例“監聽”連接請求。監聽器不是Oracle實例的一部分,它的作用是將連接請求導向相應的實例。
監聽器的啟動和停止都獨立與實例。假如監聽器關閉而實例仍在運行,則沒有監聽器的導向,客戶通過網絡訪問數據庫時就找不到實例。
監聽器功能比較簡單:1.客戶通過網絡與監聽器聯系。
2.監聽器檢測到請求,把請求的客戶介紹給一個Oracle服務器進程。
3.監聽器將服務介紹給客戶,以便兩者都知道彼此的地址。
4.監聽器退出,讓客戶和服務器直接通信。共享服務器/多線程服務器為了支持對于可伸縮性的不斷增長的需求,Oracle在Oracle7中引入了多線程服務器(Multi-Threaded Server,MTS)。  在Oracle中,多線程服務器稱為共享服務器。針對大量用戶,多線程服務器答應Oracle實例共享服務器進程集合。在多線程服務器中,不是每個客戶都與一個專用的服務器相連并且可以使用,而是由客戶使用共享服務器,
這樣在為大量的用戶服務時,就可以大大降低資源需求。在共享服務器模型中,共享服務器可以在一個客戶不需要時為另一個客戶提供服務。對于實例,無需在共享服務器進程和專用服務器進程之間進行排他式的選擇。Oracle可以完成專用服務器和共享服務器的混合和匹配,
即客戶可以與其中一個連接,也可以與另一個連接。這個基于OracleNet配置文件。在配置文件中,存在一個服務名把客戶導向一個專用的服務器
,同時可以有另一個服務名,以此建立通過共享的服務器的連接。客戶使用的服務器進程的類型對客戶是一樣的。從客戶角度,處理專用或多線程連接的監聽器都是一樣的。對于建立與共享服務器進程的連接,監聽器采用了不太一樣的步驟,這包括一些用于實例調度程序以及共享服務器本身的的后臺進程:調度程序
  因為共享服務器進程可能為其他客戶服務,客戶應該與調度程序連接,調度程序隨時都可以接受任何客戶請求。對于每個所使用的網絡協議,都有著自己的調度程序 。
   對客戶來說,調度程序好象一個專用的服務器,并且每個調度可為多個客戶服務。客戶直接與調度程序連接,而不是與一個服務器連接。調度程序接受客戶請求
,把它放在請求隊列中,這是在SGA中的一個內存結構。每個實例有一個請求隊列。共享服務器
  共享服務器進程從請求隊列中讀取請求,并處理請求,最后將處理結果放在響應調度程序的響應隊列中。每個調度程序都有一個響應隊列。
    此后,調度程序將讀取響應隊列中的結果,將它們發送回客戶進程。Oracle根據初始化參數MTS_DISPATCHERS和MTS_SERVERS啟動一定數目的調度程序和共享服務器。  
可以啟動的最大調度程序數目由MTS_MAX_DISPATCHERS參數規定。啟動共享服務器的數目由MTS_MAX_SERVERS規定。共享服務器進程與專用服務器進程的會話內存的對照在Oracle中有一個成為會話內存(sessionmemory)或狀態(state)的概念。狀態的信息是描述一個Oracle中會話當前狀態的基本數據。使用專用服務器時,
這個狀態存儲在每個專用服務器的私有內存中。因為每個專用服務器只為一個客戶工作,所以所需要的大小很輕易計算。對應這個私有內存的術語為PGA(Program GlobalArea,程序全局區)。但是,假如正在使用多線程服務器,那么任何服務器都可能作為特定的客戶。會話狀態不能存儲在每個共享服務器進程的PGA中。因為會話可以在不同的共享服務器之間移動,
所以所有的服務器都必須能夠訪問會話狀態。由于這個原因,Oracle把狀態信息放在SGA中。請求和響應隊列,以及回話狀態,都在SGA中要求額外的內存,因此使用多線程服務器時需要分配更多的內存。在默認情況下,多線程服務器的會話狀態內存從共享池中分配。關于多線程服務器的數據字典信息V$MTS
  這個視圖包括有關多線程服務器的動態信息,如連接的高峰標志,以及由于負載發生變化而已經啟動和停止的共享服務器的數量。V$DISPATCHER
  這個視圖包含多線程服務器調度程序進程的具體信息。它可以確定調度程序的繁忙程度,以便幫助設置合適的最大值和最小值。V$SHARED_SERVER
  這個視圖包含了多線程服務器的使用共享服務器進程的具體信息。它可以確定服務器的繁忙程度,以便幫助設置有關共享服務器進程的合適的最大值和最小值。V$CIRCUIT
  可以將客戶到調度程序以及調度程序到共享服務器(使用隊列)的路線看做是虛擬線路。這個視圖就是包括了這些用于用戶連接的虛擬線路的信息。Oracle的工作Oracle和事務事務具有邏輯性和完整性
  數據庫術語中的事務是指工作的邏輯單元,它包含一個或多個數據更改的操作。一個事務可能由多個INSERT、UPDATE和/或DELETE語句組成,
     這些語句會對多個表中的數據產生影響。整個更改集必須以一個完整的工作單元形式得到成功執行或完全不執行。事務從第一個DML語句開始,以提交或回滾結束。提交或回滾
  一旦用戶為其事務輸入數據,他既可以提交事務使得改變永久保存,也可以取消事務,相應地取消改變。SCN(系統改變號)
  確保數據庫望整性的一個要害要素就是要知道哪個事務先發生。Oracle采用的機制是SCN(System Change Number,系統改變號),它是用于跟蹤事務發生順序的邏輯時間戳。
     Oracle還利用SCN來實現多版本的讀一致性?;貪L段
  回滾段是Oracle數據庫在回滾的情況下用于保存事務“取消”信息的結構。取消信息將把數據庫數據塊恢復到事務開始之前的狀態。
    當事務開始改變數據塊中的數據時,它首先將原有的數據寫到回滾段。存放在回滾段中的信息有兩個主要用途:為取消事務提供必要的信息,以及支持多版本的讀一致性?! 』貪L段和日志是不同的。日志用來記錄數據庫的所有事務,當系統失敗是用于恢復數據庫;而回滾段則為事物提供回滾操作,并且提供讀一致性。  和表、索引和存儲一樣,回滾段的內存是在SGA中分配的。假如回滾段在一個時間段未使用,它們可能從緩沖區內被清楚,并寫到磁盤上。
  Oracle9i引入了回滾段的自動治理機制。在Oracle9i中,通過使用UNDO表空間,可以選擇對所有回滾進行自動治理??焖偬峤?br />  無論用戶什么時候提交事務,Oracle都必須寫日志文件,因此它們可用來加速數據庫的操作。當用戶提交一個事務,Oracle可以通過下面兩種方法之一將數據庫改變寫到磁盤上。
  ·將事務改變的所有數據庫塊寫到各自的數據文件中。
  ·只寫日志信息,比起寫數據庫數據塊來說,這里涉及的I/O操作要少得多。
  為了提供最佳性能,Oracle只寫日志信息。當用戶提交事務時,Oracle將確保把改變的日志信息立即寫到磁盤日志文件中。
     而有關數據庫數據塊的改變信息則在以后才寫入數據文件中。錯誤發生時,假如改變的數據塊還沒有從緩沖區寫到數據文件中,
     那么日志文件就回重新生成所有的改變, 因為計算機系統中磁盤是速度最慢的設備,Oracle快速提交機制減少了提交事務的開銷,并且提供了避免風險的最佳性能。
cloudscape 發表于 >2003-12-17 22:51:58 [閱讀全文] [我要評論] [引用文章]
2003-12-16
Oracle(一)實例(instance)與數據庫(database)數據庫是物理概念:它包括存儲在磁盤中的文件。實例是邏輯概念:它包括服務器中的內存結構與進程一個實例能夠而且只能與一個數據庫連接實例是暫時存在的實體,而數據庫只要正確維護則永久存在用戶一般不會直接訪問Oracle數據庫的信息,而是通過Oracle實例來訪問信息假如實例掛起,雖然數據庫仍然存在,用戶卻無法對它進行訪問。此時數據庫是靜態的:其數據不會改變。當實例重新服務時,數據庫中的數據則隨時做好預備,即可以對它進行訪問
表空間(tablespace)表空間是一個邏輯結構,它和操作系統一樣,是不可見的表空間由數據文件這樣的物理結構組成;每個表空間包括一個或多個數據文件,但每個數據文件只能屬于一個表空間。創建一個表時,必須說明是在哪個表空間內創建的。這樣,Oracle才能在組成該表空間的數據文件中為它找到空間。表空間是Oracle數據庫信息物理存儲的一個邏輯視圖。
Oracle數據庫中的物理文件一個Oracle數據庫實際上是由以下三種基本類型的物理文件組成:控制文件  數據文件  日志文件控制文件控制文件包含組成該數據庫的其他文件(例如,數據文件和日志文件)的列表,它還包括數據庫內容和狀態的要害信息控制文件參數控制文件的大小主要受下述的初始化參數所影響,這些初始化參數是初始文件的組成部分,并在創建數據庫時得到設置MAXLOGFILES
表示數據庫日志組的最大數目MAXLOGMEMBERS
每個日志文件組的最大成員數目MAXLOGHISTORY
表示控制文件所包含的歷史日志文件的數目。這個歷史文件可以用于簡化自動恢復,它通過識別一個歸檔日志文件中事務的范圍來使用有關的日志文件。MAXDATAFILES
表示控制文件能夠跟蹤的數據文件數目。在創建數據庫時,該參數決定了對應于數據文件的控制文件中設置的空間總量。
假如增加的數據文件數目比MAXDATAFILES參數所指定的要大,控制文件則會自動擴展。MAXINSTANCES
表示控制文件能夠跟蹤的實例總量和數目[color=Blue]多重控制文件[/b]一個數據庫至少應該有兩個控制文件。建立一個控制文件的多個復本是一個好辦法,通過對初始化文件中實例的CONTROL_FILES參數指定多個控制文件的位置,可以實現控制文件的多個復本:  CONTROL_FILES=(/u00/oradata/prod/prodctl1.ctl,
         /u01/oradata/prod/prodctl2.ctl,
         /u02/oradata/prod/prodctl3.ctl)這個參數會告訴實例在哪里能夠找到控制文件。Oracle對控制文件的改變同時進行。數據文件數據文件包括存儲在數據庫中的實際數據,其中包括:存儲數據的表和索引;維護這些數據結構信息的的數據字典,以及用于實現數據一致機制的回滾段一個數據文件由Oralce數據庫數據塊(block)組成,而Oracle數據庫數據塊又是由磁盤中操作系統數據塊組成。一個Oracle數據塊的大小可從2KB到32KB。
假如在Oracle中支持巨大內存(Very Large Memory,VLM),一個Oracle數據塊能達到64KB。每個表空間的數據塊大小要一致,但在整個數據庫中數據塊的大小可以不同。根據需要,數據從數據文件中以數據庫的數據塊為單位讀到內存中,數據塊也可以從內存中被寫入磁盤的數據文件中,從而確保數據庫真實地記錄了用戶所做的改變。Oracle數據庫與操作系統聯系最緊密的是數據文件。在I/O子系統中布置數據庫,能放置在任何位置的最小部分就是數據文件。數據文件結構數據文件的第一個數據塊稱為數據文件首部(datafileheader),它包含了維護整個數據庫完整性的要害信息。
其中最重要的信息之一就是檢查點結構(checkpointstrUCture)。這是一個邏輯時間戳,表示改變寫入數據文件的最后時刻。
這個時間戳對恢復數據庫來說是非常要害的,Oracle恢復過程就是用數據文件首部中的這個時間戳來確定:到底應該用哪個日志文件將數據文件及時地恢復到當前點數據范圍與段從物理角度看,一個數據文件作為操作系統數據塊加以存儲。從邏輯角度看,數據文件有三個中間結構層:數據塊(block)、數據范圍(extent)和段(segment)。
數據范圍是指一個Oracle數據文件中相鄰的數據塊集合。段表示在Oralce數據庫中占據空間的對象,例如由一個或多個數據范圍組成的表或索引。當Oracle修改數據時,它要修改的是同一數據塊中的數據。假如該數據塊沒有足夠的空間存放新信息,那么Oracle把它寫到另一個新的數據塊中,兩個數據塊可能在不同的數據范圍內。
Oracle默認數據塊大小為2KB
日志文件日志文件用于存儲由事務處理或Oracle內部行為而引起的數據庫變化。在一般的操作中,Oracle會將改變的數據塊存儲到內存中;
這樣當實例發生故障時,有些改變的數據塊可能還沒來的及寫到數據文件中。此時,利用日志文件中記錄的信息可以恢復丟失的改變。可以對表或整個表空間設定NOLOGGING屬性。這樣,基于表或表空間中所有表的操作都將抑制生成日志信息多重日志文件每個Oracle實例用一個日志線程(thread)來記錄數據庫的變化。日志線程由若干日志組構成,日志組又由一個或多個日志成員構成。從邏輯上講可以將一個日志組理解成一個獨立的日志文件。但是,Oracle答應指定日志的多個復本來保護日志文件的完整性。在控制文件丟失的情況下,還有重建控制文件靜態部分的方法,但是對丟失的日志文件就沒有重新生成的方法,因此必須保證日志文件有多個復本。Oracle同步執行對所有日志成員的寫操作。在確認了磁盤上所有的日志文件復本都正確地修改后,寫日志操作才算已經執行。Oracle如何使用日志當服務器將所有能用的日志文件都使用過一次,它將再次轉向第一個并重新使用。Oracle用日志文件序列號來跟蹤不同的日志文件。
這個序列號記錄正在使用的日志文件中操作系統用日志文件名來識別物理文件,而Oracle用日志文件序列號來確定日志文件填寫和循環使用的順序。
因為Oracle會自動重復使用日志文件,因此并不需要用日志文件名來確定它在日志文件序列的位置。歸檔日志Oralce兩種日志文件類型:聯機日志文件  這是Oracle用來循環記錄數據庫改變的操作系統文件歸檔日志文件  這是指為避免聯機日志文件重寫時丟失重復數據而對聯機日志文件所做的備份Oracle有兩種歸檔日志模式,Oracle數據庫可以采用其中任何一種模式:NOARCHIVELOG  不對日志文件進行歸檔。這種模式可以大大減少數據庫備份的開銷,但可能回導致數據的不可恢復ARCHIVELOG  在這種模式下,當Oracle轉向一個新的日志文件時,將以前的日志文件進行歸檔。為了防止出現歷史“缺口”的情況,
     一個給定的日志文件在它成功歸檔之前是不能重新使用的。歸檔的日志文件,加上聯機日志文件,為數據庫的所有改變提供了完整的歷史信息?! ≡贠racle利用日志文件和歸檔日志文件來恢復數據庫時,內部序列號可以起一個向導的作用。ARCHIVELOG模式和自動歸檔Oracle自動歸檔分成兩步。首先,用SQL命令來轉向歸檔日志模式  ALTER DATABASE ARCHIVELOG假如數據庫在ARCHIVELOG模式下,在Oracle寫日志時,它會標識出用于歸檔的日志。但是標記為用于歸檔的日志并不意味著它們會自動歸檔。必須在初始化文件中設置如下參數:  LOG_ARCHIVE_START=TURE這樣就啟動了歸檔進程,由Oracle調用該進程,將完整的日志文件拷貝到歸檔日志的目標位置。歸檔日志的目標位置以及歸檔日志文件名的形式需使用另兩個參數來指定,即LOG_ARCHIVE_DEST和LOG_ARCHIVE_FORMAT。以下是一個設置的例子:  LOG_ARCHIVE_DEST = C: /ORANT/DATABASE/ARCHIVE該語句指定了Oracle存放歸檔日志的目錄。  LOG_ARCHIVE_FORMAT = "ORCL%S.ARC"這個語句指定了Oracle對歸檔日志文件的命名形式。此例中,文件名必須以ORCL開始,以.ARC結束。Oracle自動用左邊補零的日志文件序列號來替代通配符%S。
命名形式中可選的通配符還有:%S  以序列號替代,但左邊不補零%T  用補零的日志線程號來替代%t  用不補零的日志線程號來替代每個Oracle實例開始運行時,都要首先讀初始化文件,在此之后對參數的改變不會影響此實例的運行。只有在再次啟動實例時,改變的參數才會起作用。盡管打開了自動歸檔模式也不會使數據庫處于ARCHIVELOG模式。同樣,僅僅將數據庫設置為ARCHIVELOG模式是不會自動啟動歸檔進程的。LOG_ARCHIVE_START參數默認設置為FALSE。有時由于ARCHIVELOG模式和LOG_ARCHIVE_START設置不一致,會導致一個Oracle實例無止境地等待。
假如設置了歸檔模式,但是沒有啟動自動歸檔進程,這樣因為不能寫一個沒有歸檔的日志文件,Oracle實例就會停止。換句話說,不能自動執行該文件的歸檔進程。
為了避免這樣的問題,首先修改初始化參數,然后設置ALTER DATABASE ARCHIVELOG命令。在自動歸檔進程中應該確保歸檔目錄中有足夠的空間。假如歸檔日志文件目標空間已滿,Oracle不能對其他的日志文件進行歸檔,它將會掛起。歸檔日志對Oracle數據庫的恢復很重要,Oracle8及其以后的版本答應為歸檔日志指定多個目標位置。Oracle將日志文件寫入每個指定的路徑中,
還可以指定每個復本是否必須成功。用于該功能的初始化參數如下:LOG_ARCHIVE_DUPLEX_DEST
  為冗余的日志文件指定其他的存放位置
LOG_ARCHIVE_MIN_SUCCEED_DEST
  表示日志文件是否必須成功寫入某個或全部的存儲位置從Oracle8i開始,用戶可以指定五個必需的或可選的歸檔日志存放位置,包括用于災難性恢復的遠程系統。Oracle自動支持多個歸檔進程,并對多個歸檔位置同時進行相同的歸檔。
實例的組件Oracle實例可以定義為一個共享內存區和后臺進程的集合。為實例分配的內存被稱為SGA(System Global Area,系統全局區)。SGA并不是一個不加區分的大內存段,它由許多組件構成。實例的所有進程共享SGA,包括系統進程以及用戶進程。在Oracle9i之前,實例開始時就要設置SGA的大小。改變SGA大小或者改變SGA中任何組件唯一辦法就是修改初始化參數,然后停止實例再重新運行。
Oracle9i中,在實例運行中可以改變SGA的大小,也可以調整其組件。Oracle9i引入了粒度(granule)的概念,這是在SGA中可以改變(增加或刪除)的最小內存量。
后臺進程要與操作系統進行交互,而且后臺進程互相之間也需要交互,從而治理實例的內存結構。這些進程還要治理磁盤上的實際數據庫,并對實例做一般性的內部治理。還有一些物理文件,也可以將它們認為是實例的組成部分:實例的初始化文件
  初始化文件中包括許多配置實例運行的參數:可使用多大的內存,可連接的用戶數目,實例訪問的數據庫等等。在Oracle之前,
     只有一個初始化文件——INIT.ORA。在Oracle9i中引入了SPFILE,它不僅具有和INIT.ORA相同的功能,
     而且能夠連續地存儲Oracle9i運行過程中初始化參數的變化。SPFILE是一個二進制文件,它保存在服務器中,這樣就無需在客戶主機上保留INIT.ORA文件了。
當一個Oracle9i實例開始啟動時,它首先尋找SPFILE文件,然后再查找INIT.ORA文件。實例的配置文件
  CONFIG.ORA是可選的參數文件。假如希望分離一個初始化文件參數集(例如,用于Oracle并行服務器/實時應用集群的參數集),那么可以選擇這個文件。口令文件
  口令文件是Oracle的一個可選文件,這是一個操作系統文件,可以為治理Oracle數據庫提供附加的靈活性。
     口令文件是加密的,包括用于執行治理任務(例如,啟動或停止實例)的用戶ID和口令。
實例的內存結構SGA由三個主要區組成:數據庫高速緩存、共享池和日志文件緩沖區。大池(Larger Pool),內存池的另一種類型,是在Oracle8中引入的。這個SGA的可選區可用于為不同服務器進程緩存I/O操作,
其中包括那些用于恢復和備份的進程。還可以為多線程服務器保存會話內存。
由于這個備用池的存在,需要分配大內存時可以降低對共享池的要求。配置大池的初始化參數:LARGE_POOL_SIZE數據庫高速緩存數據庫高速緩存用來存儲從數據庫獲取的數據塊。這個介于用戶請求和實際數據文件之間的緩沖區改進了數據庫的性能。
假如數據存放在緩沖區中,可以從內存中直接獲取,而不用去磁盤中讀取。Oracle用LRU(least recentlyused,最近最少使用)算法來治理緩沖區。
假如一個用戶請求的數據是最近才使用過的,那么這個數據最有可能存放在數據庫高速緩存中;存放在緩沖區的數據能夠直接傳送,不用執行磁盤讀操作。當用戶要讀的數據不在緩沖區時,該數據塊必須從磁盤中讀出,并加載到緩沖區中。當用戶修改數據時,首先是改變緩沖區中的數據,
稍后這些改變才寫入數據所駐留的數據文件中。這樣做的目的在于,當Oracle往磁盤中寫入所該變的數據塊時用戶不必等待。磁盤是計算機系統中執行速度最慢的部分,因此I/O執行得越少,系統的運行速度就越快。通過延期而不是立即執行非要害性的I/O操作可以使一個Oracle數據庫獲得更好的性能。在Oracle8及其以后的版本中有三個可用的緩沖池:DEFAULT
  這是標準的Oracle數據庫高速緩存。假如沒有非凡指出的話,所有的對象都使用該緩沖區。KEEP
  用來存放經常使用的對象RECYCLE
  用于存放很少再訪問的對象可以標記表或索引從而在一個特定的緩沖池內緩存。這將有助于在緩沖區內保存更多所需的對象,而避免了在一個中心緩沖區內所有對象“竟用”緩沖區。共享池共享池中存放的是用戶共享結構。日志文件緩沖區日志信息首先存放在日志文件緩沖區內,然后才寫入磁盤上的物理日志文件中。
實例的后臺進程DBWR(Database Writer,數據庫寫進程)  DBWR將數據庫塊從SGA中的數據庫高速緩存寫入磁盤的數據文件中。每個Oracle實例最多可以擁有10個DBWR進程,
     即從DBWR0到DBWR9,用于處理多個數據文件的I/O操作。大多數實例只運行一個DBWR進程。若需要DBWR進程從緩存把數據塊寫到磁盤中,往往有兩個主要原因:  ·假如Oracle需要執行一個檢查點(例如,修改數據文件的數據塊以便與日志的記錄一致)。當一個事務提交時,
     Oracle先寫日志,稍后才寫實際的數據塊。Oracle定期地執行檢查點,以保證數據文件的內容符合日志為提交事務所做的記錄?!  ぴ陧憫脩舻恼埱髸r,Oracle需要將數據塊讀到高速緩存內,但是緩存內沒有富余的空間,這個時候根據最近最少使用原則將某些數據塊寫入磁盤。
      這種順序執行寫數據塊可以極大地減少在高速緩存中丟失數據的可能。LGWR(Log Writer,日志寫進程)  LGWR把日志信息從SGA中的日志緩沖區寫到當前日志所有的復本中。當事務在進行是,相關的日志信息存放在SGA的日志文件緩沖區內。
    事務提交時,Oracle通過調用LGWR將日志信息寫到磁盤作為永久保存。SMON(System Monitor,系統監控進程)  系統監控進程為一個Oracle實例維護其整體安全性。在一個實例失敗后重新啟動時,SMON執行緊急災難恢復;在Oracle并行服務器/實時應用集群中,
     當有多個實例同時訪問同一數據庫時,SMON為其中一個失敗的實例進行協調并執行恢復操作。SMON還可以把數據文件中相鄰的空閑內存合并為一塊,
     并且對用于記錄排序的空間,假如不需要還可以將此空間釋放。PMON(Process Monitor,進程監控進程)  PMON進程監控數據庫所有用戶進程。假如一個用戶進程非正常中斷,PMON負責釋放其余所有資  源(如:內存),并且釋放失敗進程所加的鎖。ARCH(Archiver,歸檔進程)  一旦Oracle寫好日志文件,歸檔進程將讀出日志文件,并且為所有使用的日志文件建立復本,寫入  到指定歸檔日志的目錄中。
  采用ARCn的記法,Oracle8i可支持的多達10個歸檔進程。LGWR可能會根據負載的需要啟動其他的歸檔進程,啟動的進程數目受初始化參數LOG_ARCHIVE_MAX_PROCESSES所限。
CKPT(Checkpoint,檢查點進程)  檢查點進程和DBWR協同工作來執行檢查點。當檢查點完成時,CKPT會更新控制文件和數據文件首部中的檢查點數據。RECO(Recover,恢復進程)  RECO會自動清除錯誤的或者掛起的分布式事務
數據字典每個Oracle數據庫包括一個被稱為“元數據”的集合,或者說包含用來描述數據庫有關數據結構的數據。包含這些元數據的表和視圖稱為Oracle數據字典。數據字典中有前綴V$或GV$的表是動態表,它們會不斷更新以反映出Oracle數據庫當前的狀態。靜態數據字典表都有一個形如DBA_、ALL_或USER_的前綴,表示該視圖中列出的對象范圍。數據庫組件      數據庫字典中的表和視圖
數據庫        V$DATABASE
表空間        DBA_TABLESPACE,DBA_DATA_FILES,
           DBA_FREE_SPACE
控制文件       V$CONTROLFILE,V$PARAMETER,
           V$CONTROLFILE_RECORD_SECTION
數據文件       V$DATAFILE,V$DATAFILE_HEADER,V$FILESTAT,
           DBA_DATA_FILES
段          DBA_SEGMENTS
數據范圍       DBA_EXTENTS
日志線程、日志組和  V$THREAD,V$LOG,V$LOGFILE
日志序列號
歸檔狀態       V$DATABASE,V$LOG,V$ARCHIVED_LOG,
           V$ARCHIVE_DEST
數據庫實例      V$INSTANCE,V$PARAMETER,
           V$SYSTEM_PARAMETER
內存結構       V$SGA,V$SGASTAT,V$DB_OBJECT_CACHE,V$SQL,
           V$SQLTEXT,V$SQLAREA
后臺進程       V$BGPROCESS,V$SESSION




發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平塘县| 兴山县| 玛沁县| 汾阳市| 庆安县| 延庆县| 武山县| 乳山市| 海淀区| 石台县| 广宁县| 吉林省| 河南省| 彭州市| 个旧市| 大连市| 龙山县| 辉县市| 漠河县| 封丘县| 司法| 江孜县| 诸暨市| 莫力| 年辖:市辖区| 淮南市| 定日县| 曲松县| 临城县| 恩平市| 西畴县| 凌云县| 四会市| 屏南县| 益阳市| 新化县| 石棉县| 卓资县| 夏津县| 澄江县| 太白县|