--==========================================
--Oracle 實(shí)例和 Oracle 數(shù)據(jù)庫(kù) (Oracle 體系結(jié)構(gòu) )
--==========================================
/*
??? 對(duì)于初接觸 Oracle 數(shù)據(jù)庫(kù)的人來(lái)講,很容易混淆的兩個(gè)概念即是 Oracle 實(shí)例和 Oracle 數(shù)據(jù)庫(kù)。這兩
概念不同于 SQL sever 下的實(shí)例與數(shù)據(jù)庫(kù),當(dāng)然也有些相似之處。只是在 SQL server 我們根本不需要花費(fèi)太
多的精力去搞清 SQL 實(shí)例和數(shù)據(jù)庫(kù),因?yàn)樗?jiǎn)單易于理解。下面簡(jiǎn)要說(shuō)明一下 SQL 實(shí)例、數(shù)據(jù)庫(kù),更多的是講
述 Oracle 下的實(shí)例及數(shù)據(jù)庫(kù)。
?
一、 SQL server 中的實(shí)例與數(shù)據(jù)庫(kù)
?????? 1.SQL 中的實(shí)例指的是一個(gè) SQL server 服務(wù)器上僅有一個(gè)缺省實(shí)例。缺省實(shí)例名即為機(jī)器名 ServerName
?????? ? ( 或 IP) ,如果在同一臺(tái)機(jī)器上再安裝 SQL server ,我們可以對(duì)實(shí)例命名如 ServerName/InstanceName 。
?????? ? 即一臺(tái) SQL server 服務(wù)器上可以存在多個(gè)不同的實(shí)例。一個(gè)實(shí)例下可以存在多個(gè)不同的數(shù)據(jù)庫(kù)。
?????? ? 對(duì)于不同實(shí)例下的數(shù)據(jù)庫(kù)的訪問(wèn),使用 ServerName/InstanceName : PortNo 即可實(shí)現(xiàn)訪問(wèn),缺省實(shí)例
?????? ? 為 ServerName : PortNo 。
?????? 2. 對(duì)不同的實(shí)例配置 IP 地址,相關(guān)的訪問(wèn)協(xié)議,端口等等。
?????? 3. 實(shí)例的可訪問(wèn)性需要啟動(dòng)該實(shí)例對(duì)應(yīng)的相關(guān)服務(wù)。此處需要注意的是實(shí)例名和實(shí)例的服務(wù)名并不是相
?????? ? 同的。缺省的實(shí)例的服務(wù)名為 MSSQLSERVER ,而命名實(shí)例的服務(wù)名為 MSSQL$INSTANCE_NAME 。
?????? 4. 實(shí)例的相關(guān)功能性的設(shè)置可以通過(guò)外圍應(yīng)用配置來(lái)實(shí)現(xiàn)。
?????? 5. 上述完成后,即可實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。
二、 Oracle 實(shí)例
??? ??? 一個(gè) Oracle Server 由一個(gè) Oracle 實(shí)例和一個(gè) Oracle 數(shù)據(jù)庫(kù)組成。
?????? ??? 即: Oracle Server = Oracle Instance + Oracle Database
?????? Oracle 實(shí)例
?????? ??? 包括了內(nèi)存結(jié)構(gòu) (SGA) 和一系列后臺(tái)進(jìn)程 (Background Process), 兩者合起來(lái)稱(chēng)為一個(gè) Oracle 實(shí)例
?????????? 即: Oracle Instance = SGA + Background Process
?????? Oracle 內(nèi)存結(jié)構(gòu)
?????? ??? 包含系統(tǒng)全局區(qū) (SGA) 和程序全局區(qū) (PGA)
?????? ??? 即 Oracle Memory Structures = SGA + PGA
?????????? SGA 由服務(wù)器和后臺(tái)進(jìn)程共享
?????????? PGA 包含單個(gè)服務(wù)器進(jìn)程或單個(gè)后臺(tái)進(jìn)程的數(shù)據(jù)和控制信息 , 與幾個(gè)進(jìn)程共享的 SGA 正相反, PGA 是
?????????? ?? 只被一個(gè)進(jìn)程使用的區(qū)域, PGA 在創(chuàng)建進(jìn)程時(shí)分配在終止進(jìn)程時(shí)回收。即由服務(wù)器進(jìn)程產(chǎn)生。
??????
??? 1.SGA
?????? 系統(tǒng)全局區(qū) SGA , SGA = 數(shù)據(jù)緩沖區(qū) + 重做日志緩沖區(qū) + 共享池 + 大池 + Java 池 + 流池
?????????? 系統(tǒng)全局區(qū)是動(dòng)態(tài)的,由參數(shù) SGA _ MAX _ SIZE 決定。
?????????? 查看當(dāng)前系統(tǒng)的 SGA 大小: show parameter sga_max_size;
?????????? 要修改: alter system set sga_max_size=1200m scope=spfile;
?????????? 因?yàn)閷?shí)例內(nèi)存的分配是在數(shù)據(jù)庫(kù)啟動(dòng)時(shí)進(jìn)行的,所以要讓修改生效,要重啟數(shù)據(jù)庫(kù)。
??????????
?????????? ORACLE 10G 引入了 ASMM (自動(dòng)共享內(nèi)存管理), DBA 只需設(shè)置 SGA _ TARGET , ORACLE 就會(huì)
?????????? 自動(dòng)的對(duì)共享池、 JAVA 池、大池、數(shù)據(jù)緩沖區(qū)、流池進(jìn)行自動(dòng)調(diào)配。取消自動(dòng)調(diào)配就是
?????????? sga_target 設(shè)為。
??????????
?????? 數(shù)據(jù)緩沖區(qū) (Database buffer cache): 存儲(chǔ)從數(shù)據(jù)文件中獲得的數(shù)據(jù)塊的鏡像
?????????? 大小由 db_cache_size 決定
?????????? 查看: show parameter db_cache_size;
?????????? 設(shè)置: alter system set db_cache_size=800M;
??????????
?????? 重做日志緩沖區(qū) (Redo log buffer): 對(duì)數(shù)據(jù)庫(kù)的任何修改都按順序被記錄在該緩沖,然后由 LGWR 進(jìn)程將
?????????? 它寫(xiě)入磁盤(pán) , 大小由 LOG _ BUFFER 決定
??????
?????? 共享池 (Shared pool): 是 SGA 中最關(guān)鍵的內(nèi)存片段 , 共享池主要由庫(kù)緩存 ( 共享 SQL 區(qū)和 PL/SQL 區(qū) ) 和數(shù)據(jù)
?????????? 字典緩存組成,它的作用是存放頻繁使用的 sql ,在有限的容量下,數(shù)據(jù)庫(kù)系統(tǒng)根據(jù)一定的算法決
?????????? 定何時(shí)釋放共享池中的 sql 。
?????????? 庫(kù)緩存大小由 shared_pool_size 決定
????????????? 查看: show parameter shared_pool_size
????????????? 修改: alter system set shared_pool_size=120m;
??????????
?????????? 數(shù)據(jù)字典緩存:
????????????? 存儲(chǔ)數(shù)據(jù)庫(kù)中數(shù)據(jù)文件、表、索引、列、用戶(hù)和其它數(shù)據(jù)對(duì)象的定義和權(quán)限信息
????????????? 大小由 shared_pool_size 決定,不能單獨(dú)指定
??????????
?????? 大池 (Large pool): 是一個(gè)可選的區(qū)域,用于一些大型的進(jìn)程如 Oracle 的備份恢復(fù)操作、 IO 服務(wù)器進(jìn)程等
??????
?????? Java 池:該程序緩沖區(qū)就是為 Java 程序保留的。如果不用 Java 程序沒(méi)有必要改變?cè)摼彌_區(qū)的默認(rèn)大小
??????
?????? 流池 (Stream pool) :被 Oracle 流所使用
????????????????????
??? 2.PGA
?????? 是為每個(gè)用戶(hù)進(jìn)程連接 ORACLE 數(shù)據(jù)庫(kù)保留的內(nèi)存
?????? 進(jìn)程創(chuàng)建時(shí)分配,進(jìn)程結(jié)束時(shí)釋放,只能被一個(gè)進(jìn)程使用
?????? PGA 包括了以下幾個(gè)結(jié)構(gòu):
?????? ()排序區(qū)
?????? ()游標(biāo)狀態(tài)區(qū)
?????? ()會(huì)話信息區(qū)
?????? ()堆棧區(qū)
?????? 由參數(shù): pga_aggregate_target 決定
??????
??? 3. 幾類(lèi)進(jìn)程:用戶(hù)進(jìn)程,服務(wù)器進(jìn)程,后臺(tái)進(jìn)程,其它可選進(jìn)程
?????? 用戶(hù)進(jìn)程
?????? ??? 在用戶(hù)連接數(shù)據(jù)庫(kù)產(chǎn)生,請(qǐng)求 oracle 服務(wù)器連接,必須要先建立一個(gè)連接,不會(huì)直接和 oracle 服務(wù)器連接
?????? 服務(wù)器進(jìn)程
?????? ??? 當(dāng)連接實(shí)例并建立用戶(hù)會(huì)話時(shí)產(chǎn)生,獨(dú)立服務(wù)器或者提供共享服務(wù)器都能產(chǎn)生
?????? 后臺(tái)進(jìn)程
?????? ??? 維持物理和內(nèi)存之間的聯(lián)系,用來(lái)管理數(shù)據(jù)庫(kù)的讀寫(xiě),恢復(fù)和監(jiān)視等工作。
?????????? Server Process 主要是通過(guò)他和 user process 進(jìn)行聯(lián)系和溝通,并由他和 user process 進(jìn)行數(shù)據(jù)的交換。
?????????? 在 Unix 機(jī)器上, Oracle 后臺(tái)進(jìn)程相對(duì)于操作系統(tǒng)進(jìn)程,也就是說(shuō),一個(gè) Oracle 后臺(tái)進(jìn)程將啟動(dòng)一個(gè)操作
?????????? 系統(tǒng)進(jìn)程。
?????????? 在 Windows 機(jī)器上, Oracle 后臺(tái)進(jìn)程相對(duì)于操作系統(tǒng)線程,打開(kāi)任務(wù)管理器,我們只能看到一個(gè)
?????????? ORACLE.EXE 的進(jìn)程,但是通過(guò)另外的工具,就可以看到包含在這里進(jìn)程中的線程。
?
??????? 必須要有的后臺(tái)進(jìn)程
?????? DBWn ?????? --> 數(shù)據(jù)庫(kù)寫(xiě)進(jìn)程
?????? PMON ?????? --> 程序監(jiān)控進(jìn)程
?????? SMON ?????? --> 系統(tǒng)監(jiān)控進(jìn)程
?????? LGWr ?????? --> 日志寫(xiě)進(jìn)程
?????? CKPT ?????? --> 檢查點(diǎn)進(jìn)程
?
?????? 可選進(jìn)程:
?????? ARCN ?????? 歸檔進(jìn)程
?????? RECO
?????? Snnn
?????? pnnn
?
?????? DBWn( 數(shù)據(jù)庫(kù)寫(xiě)進(jìn)程 )
?????? ??? 負(fù)責(zé)將修改過(guò)的數(shù)據(jù)塊從數(shù)據(jù)庫(kù)緩沖區(qū)高速緩存寫(xiě)入磁盤(pán)上的數(shù)據(jù)文件中
?????? 寫(xiě)入條件:
?????? 發(fā)生檢查點(diǎn)
?????? 臟緩存達(dá)到限制
?????? 沒(méi)有自由的緩存
?????? 超時(shí)發(fā)生
?????? 表空間離線
?????? 表空間只讀
?????? 表被刪除或者截?cái)?
?????? 開(kāi)始備份表空間
?????????? 可以修改數(shù)據(jù)寫(xiě)進(jìn)程的數(shù)量
?????????? alter system set db_writer_processes=3 scope=spfile;
??????????
??????
?????? PMON( 程序監(jiān)控進(jìn)程 )
?????? ??? 清除失效的用戶(hù)進(jìn)程,釋放用戶(hù)進(jìn)程所用的資源。
?????????? 如 PMON 將回滾未提交的工作,釋放鎖,釋放分配給失敗進(jìn)程的 SGA 資源。
?????? 清除失敗的進(jìn)程
?????? 回滾事務(wù)
?????? 釋放鎖
?????? 釋放其他資源
??????
?????? SMON( 系統(tǒng)監(jiān)控進(jìn)程 )
?????? ??? 檢查數(shù)據(jù)庫(kù)的一致性 , 當(dāng)啟動(dòng)失敗時(shí)完成災(zāi)難恢復(fù)等
?????? 實(shí)列恢復(fù)時(shí),前滾所有重做日志中的文件,打開(kāi)數(shù)據(jù)庫(kù)為了用戶(hù)能訪問(wèn),回滾未提交的事務(wù),釋放臨時(shí)表空間
?????? 清除臨時(shí)空間,聚結(jié)空閑空間,從不可用的文件中恢復(fù)事務(wù)的活動(dòng), OPS 中失敗節(jié)點(diǎn)的實(shí)例恢復(fù)
?????? 清除 OBJ$ 表
?????? 縮減回滾段
?????? 使回滾段脫機(jī)
??????
?????? LGWr( 日志寫(xiě)進(jìn)程 )
?????? ??? 將重做日志緩沖區(qū)中的更改寫(xiě)入在線重做日志文件
?????? 條件:
?????? 提交的時(shí)候( commit)
?????? 達(dá)到/滿
?????? 每隔秒
?????? 有大于 M 重做日志緩沖區(qū)未被寫(xiě)入磁盤(pán)
?????? DBWR 需要寫(xiě)入的數(shù)據(jù)的 SCN 號(hào)大于 LGWR 記錄的 SCN 號(hào), DBWR 觸發(fā) LGWR 寫(xiě)入
?????? 超時(shí)
?????? 在 dbwr 進(jìn)程些之前寫(xiě)日志
??????
?????? CKPT( 檢查點(diǎn)進(jìn)程 )
?????? ??? DBWR/LGWR 的工作原理,造成了數(shù)據(jù)文件,日志文件,控制文件的不一致, CKPT 進(jìn)程負(fù)責(zé)同步數(shù)據(jù)文件,
?????????? ?? 日志文件和控制文件
?????????? CKPT 會(huì)更新數(shù)據(jù)文件 / 控制文件的頭信息
?????? 條件:
?????? 在日志切換的時(shí)候
?????? 數(shù)據(jù)庫(kù)用 immediate , transaction , normal 選項(xiàng) shutdown 數(shù)據(jù)庫(kù)的時(shí)候
?????? 根據(jù)初始話文件 LOG_CHECKPOINT_INTERVAL 、 LOG_CHECKPOINT_TIMEOUT 、 FAST_START_IO_TARGET 的設(shè)置的數(shù)值來(lái)確定
?????? 用戶(hù)觸發(fā)
??????
?????? ARCN( 歸檔進(jìn)程 )
?????? ??? 在每次日志切換時(shí)把已滿的日志組進(jìn)行備份或歸檔
?????? 條件:
?????? 數(shù)據(jù)庫(kù)以歸檔方式運(yùn)行的時(shí)候
?
?????? RECO
?????? ??? 負(fù)責(zé)解決分布事物中的故障。 Oracle 可以連接遠(yuǎn)程的多個(gè)數(shù)據(jù)庫(kù),當(dāng)由于網(wǎng)絡(luò)問(wèn)題,有些事物處于懸而未決的狀態(tài)。
?????????? RECO 進(jìn)程試圖建立與遠(yuǎn)程服務(wù)器的通信,當(dāng)故障消除后, RECO 進(jìn)程自動(dòng)解決所有懸而未決的會(huì)話。
??????
?????? Server Process( 服務(wù)進(jìn)程 )
?????? ??? 分為專(zhuān)用服務(wù)進(jìn)程 (Dedicated Server Process) 和共享服務(wù)進(jìn)程 (MultiTreaded Server Process)
?????????? 專(zhuān)用服務(wù)進(jìn)程:一個(gè)服務(wù)進(jìn)程對(duì)應(yīng)多個(gè)用戶(hù)進(jìn)程,輪流為用戶(hù)進(jìn)程服務(wù)。
??????
?????? 用戶(hù)進(jìn)程 (User Process) 、服務(wù)進(jìn)程 (Server Process) 、后臺(tái)進(jìn)程 (Background Processes) 的啟動(dòng)
?????????? 用戶(hù)進(jìn)程 : 數(shù)據(jù)庫(kù)用戶(hù)請(qǐng)求 Oralce server 會(huì)話時(shí)被啟動(dòng)
?????????? 服務(wù)進(jìn)程:當(dāng)用戶(hù)會(huì)話啟動(dòng)后,連接到 Oracle 實(shí)例時(shí)該進(jìn)程被啟動(dòng)
?????????? 后臺(tái)進(jìn)程:當(dāng) Oracle 實(shí)例被啟動(dòng)時(shí),啟動(dòng)相關(guān)的后臺(tái)進(jìn)程
??????????
三、 Oracle 數(shù)據(jù)庫(kù)
?????? 一系列物理文件的集合
??????????? 包括控制文件、數(shù)據(jù)文件、聯(lián)機(jī)日志文件、參數(shù)文件、密碼文件等 ??
??????????? 即: Oracle Database = Controlfile + datafile + logfiel + spfile +..
??? 1. 控制文件 (controlfile)
??? ??? 數(shù)據(jù)庫(kù)的名字,檢查點(diǎn)信息,數(shù)據(jù)庫(kù)創(chuàng)建的時(shí)間戳
?????? 所有的數(shù)據(jù)文件,聯(lián)機(jī)日志文件,歸檔日志文件信息
?????? 備份信息等
?????????????
??? 2. 數(shù)據(jù)文件 (datafile)
??? ??? 包含了用戶(hù)和應(yīng)用程序的所有數(shù)據(jù)
?????? -- 查看數(shù)據(jù)文件信息
??????
??????
??? 3. 聯(lián)機(jī)日志文件
??? ??? 記錄了用戶(hù)對(duì)數(shù)據(jù)庫(kù)的所有操作,一個(gè)數(shù)據(jù)庫(kù)中至少要有兩個(gè)日志組文件,每個(gè)日志組中至少有一個(gè)日志成員
?????? 日志組中的多個(gè)日志成員是互為鏡相關(guān)系
??????
??? 4. 歸檔日志文件
??????? Oracle 可以運(yùn)行在兩種模式之中,歸檔模式和非歸檔模式。在歸檔模式中,為了保存用戶(hù)的所有修改,
?????? 在聯(lián)機(jī)日志文件切換后和被覆蓋之間系統(tǒng)將他們另外保存成一組連續(xù)的文件系列,該文件系列就是歸檔日志文件。
??????? 用戶(hù)恢復(fù)意外情況出現(xiàn)的數(shù)據(jù)丟失、異常等。
??????
??? 5. 參數(shù)文件 (pfile 和 spfile)
??? ??? initSID.ora 或 init.ora 文件 , 通常位于: $ORACLE_BASE/admin/<SID>/pfile
??????? 初始化文件記載了許多數(shù)據(jù)庫(kù)的啟動(dòng)參數(shù),如內(nèi)存,控制文件,進(jìn)程數(shù)等,在數(shù)據(jù)庫(kù)啟動(dòng)的時(shí)候加載 (Nomount 時(shí)加載 )
???
??? 6. 其他文件
??? ?? 密碼文件:用于 Oracle 的具有 sysdba 權(quán)限用戶(hù)的認(rèn)證 .
?????? 告警日志文件:報(bào)警日志文件 (alert.log 或 alrt.ora ),記錄數(shù)據(jù)庫(kù)啟動(dòng),關(guān)閉和一些重要的出錯(cuò)信息
??? ?????? 查看路徑: select value from v$PARAMETER where name =‘background_dump_dest’;
???
??? 7. 數(shù)據(jù)庫(kù)邏輯組織結(jié)構(gòu)
?????? 表空間、段、區(qū)、塊
?????? 一個(gè)數(shù)據(jù)庫(kù)由一個(gè)或多個(gè)表空間組成,一個(gè)表空間只能屬于一個(gè)數(shù)據(jù)庫(kù)
?????? 一個(gè)表空間由一個(gè)或多個(gè)多個(gè)數(shù)據(jù)文件組成,一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間
?????? 一個(gè)數(shù)據(jù)文件由一個(gè)或多個(gè)操作系統(tǒng)塊組成,每一個(gè)操作系統(tǒng)塊只能數(shù)以一個(gè)數(shù)據(jù)文件
?????? 一個(gè)表空間可以包含一個(gè)或多個(gè)段,一個(gè)段只能屬于一個(gè)表空間
?????? 一個(gè)段由一個(gè)或多個(gè)區(qū)組成,每一個(gè)區(qū)只能屬于一個(gè)段
?????? 一個(gè)區(qū)由一個(gè)或多個(gè) Oracle 塊組成,每一個(gè) Oracle 塊只能屬于一個(gè)區(qū)
?????? 一個(gè)區(qū)只能屬于一個(gè)數(shù)據(jù)文件,數(shù)據(jù)文件的空間可以分配到一個(gè)或多個(gè)區(qū)
?????? 一個(gè) Oracle 塊由一個(gè)或多個(gè)操作系統(tǒng)塊組成,一個(gè)操作系統(tǒng)塊是一個(gè) Oracle 塊的一部分
??????
??????
四、 Oracle 實(shí)例和 Oracle 數(shù)據(jù)庫(kù)的關(guān)系
??? 1. 一個(gè)實(shí)例能夠裝載及打開(kāi)僅僅一個(gè)數(shù)據(jù)庫(kù) ??? ??
??? 2. 一個(gè)數(shù)據(jù)庫(kù)能夠被多個(gè)實(shí)例裝載并打開(kāi)
??? 3. 實(shí)例與數(shù)據(jù)庫(kù)的對(duì)應(yīng)關(guān)系是一對(duì)一或多對(duì)一的關(guān)系
???
五、更多 ?? */
?
???
??? Oralce 10g 使用 DBCA 創(chuàng)建數(shù)據(jù)庫(kù)
???
??? 使用 Uniread 實(shí)現(xiàn) SQLplus 翻頁(yè)功能
???
??? Linux (RHEL 5.4) 下安裝 Oracle 10g R2
???
??? VmWare6.5.2 下安裝 RHEL 5.4 (配置 Oracle 安裝環(huán)境)
???
??? Oracle 相關(guān)
??? ??
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
