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

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