標籤:java ide 監控進程 用途 歸檔日誌 串連數 arc poi 記憶體
參考:http://www.zhetao.com/content240
在實際的開發應用中,關於Oracle資料庫,經常聽見有人說建立一個資料庫,建立一個Instance,啟動一個Instance之類的話。
其實問他們什麼是資料庫,什麼是Instance,很可能他們給的答案就是資料庫就是Instance,Instance就是資料庫啊,沒有什麼區別。
在這裡,只能說雖然他們Oracle用了可能有了一定的經驗,不過基礎的概念還是不太清楚。(我目前就是這個狀態)
一、什麼是資料庫,其實很簡單,資料庫就是儲存資料的一種媒介。比如常用的檔案就是一種,在Oracle10G中,資料的儲存有好幾種。
第一種是檔案形式,也就是在你的磁碟中建立一批檔案,然後在這些檔案中儲存資訊。
第二種就是磁碟陣列形式,這個是什麼意思呢,這個就是說明資料庫不是存放為某個檔案,而是把一個或者多個磁碟格式化成Oracle的一種格式了,
等於整個磁碟就是存放Oracle資料庫的,不能作為別的用途。這樣的優點是儲存效能高,因為不再藉助別的檔案格式了,而是把整個磁碟都成為
Oracle最適應的檔案系統格式。
當然還可能有別的形式,比如網路什麼的。不過我們最常用的還是檔案格式的,在檔案格式中,資料庫指的就是那些資料檔案,
控制檔案以及REDO檔案等等一系列檔案。
二、什麼是Instance,其實就是指的作業系統中一系列的進程以及為這些進程所分配的記憶體塊。在Oracle中,我們可以建立一個Oracle的Instance,
這個時候雖然有了進程還有SGA等一系列的記憶體快,但是這個時候並沒有把資料庫檔案讀取進來。所以只是一個執行個體,在後來,你可以通過命令手動
或者自動地把資料庫檔案載入進我們的資料庫Instance中,這個時候的資料庫才可以讓我們真正的開始訪問操作。所以說,資料庫的應用如果想實現,
資料庫和資料庫Instance是缺一不可的,如果只有資料庫的那些檔案,那麼,只能代表資料在這個檔案中,但是我們無法直接進行操作。
而如果只有資料庫Instance,那麼我們雖然可以進行操作,但是也不知道操作哪些資料,操作產生的資料也無法儲存等等。所以,當一個Oracle Instance
真正Load了一個Oracle Database了以後,資料庫才可以被我們使用。
在這裡要注意一點的是,Oracle的執行個體在啟動以後,只能load一次資料庫,如果想把資料庫與Instance斷開,然後再重新掛在一個資料庫Instance,
那麼你首先把資料庫Instance進程結束,然後重建立立這個instance的一個進程,再load另外一個資料庫。否則肯定要拋除ORA-16169錯誤,
說資料庫已經被開啟。因為一個資料庫Instance在其生存期中最多隻能load和開啟一個instance.
剛接觸ORACLE的人肯定會對執行個體和資料庫感到困惑,執行個體到底代表些什嗎?為什麼會有這個概念的出現?
ORACLE執行個體 = 進程 + 進程所使用的記憶體(SGA)
執行個體是一個臨時性的東西,你也可以認為它代表了資料庫某一時刻的狀態!
資料庫 = 重做檔案 + 控制檔案 + 資料檔案 + 臨時檔案
資料庫是永久的,是一個檔案的集合。
三、ORACLE執行個體和資料庫之間的關係
1. 臨時性和永久性
2. 執行個體可以在沒有資料檔案的情況下單獨啟動 startup nomount , 通常沒什麼意義
3. 一個執行個體在其生存期內只能裝載(alter database mount)和開啟(alter database open)一個資料庫
4. 一個資料庫可被許多執行個體同時裝載和開啟(即RAC),RAC環境中執行個體的作用能夠得到充分的體現!
四、下面對執行個體和資料庫做詳細的詮釋:
在Oracle領域中有兩個詞很容易混淆,這就是“執行個體”(instance)和“資料庫”(database)。作為Oracle術語,這兩個詞的定義如下:
資料庫(database):物理作業系統檔案或磁碟(disk)的集合。使用Oracle 10g的自動儲存管理(Automatic Storage Management,ASM)或RAW分區時,
資料庫可能不作為作業系統中單獨的檔案,但定義仍然不變。
執行個體(instance):一組Oracle後台進程/線程以及一個共用記憶體區,這些記憶體由同一個電腦上啟動並執行線程/進程所共用。這裡可以維護易失的、非持久性內容
(有些可以重新整理輸出到磁碟)。就算沒有磁碟儲存,資料庫執行個體也能存在。也許執行個體不能算是世界上最有用的事物,不過你完全可以把它想成
是最有用的事物,這有助於對執行個體和資料庫劃清界線。
這兩個詞有時可互換使用,不過二者的概念完全不同。
執行個體就是一組作業系統進程(或者是一個多線程的進程)以及一些記憶體。這些進程可以操作資料庫;
資料庫只是一個檔案集合(包括資料檔案、臨時檔案、重做記錄檔和控制檔案)。在任何時刻,一個執行個體只能有一組相關的檔案(與一個資料庫關聯)。
大多數情況下,反過來也成立:一個資料庫上只有一個執行個體對其進行操作。不過,Oracle的真正應用叢集(Real Application Clusters,RAC)是一個例外,
這是Oracle提供的一個選項,允許在叢集環境中的多台電腦上操作,這樣就可以有多台執行個體同時裝載並開啟一個資料庫(位於一組共用物理磁碟上)。
由此,我們可以同時從多台不同的電腦訪問這個資料庫。Oracle RAC能支援高度可用的系統,可用於構建可擴縮性極好的解決方案。
執行個體 就是治理相關庫的記憶體結構的名字(由SGA、PGA、伺服器處理序、使用者進程、後台進程等組成)
資料庫 就是實際的磁碟上的檔案(資料檔案、記錄檔、控制檔案等),負責儲存資料,但由對應的執行個體來操作它的資料
服務名 就是對外公布的名稱,為網路監聽服務
其實,在我們傳統的概念裡,資料庫是一個統稱的名字,在Oracle中,你可以把“資料庫”理解成一個大概念,也要把它理解成一個小概念
1、一個Oracle資料庫系統中可以同時安裝幾個資料庫,每一個資料庫對應一個唯一的執行個體,但是OPS系統除外,可以多個執行個體同時對一個資料庫操作,稱為並行伺服器
2、只是一個名字,SID即是INSTANCE_NAME,SERVICE_NAMES主要用在監聽器中,為了方便吧,有些是為了傳統習慣的延續,有些是為了更方便的使用
3、NET EASY CONFIG操縱的應該是主機字串,是為用戶端服務的,
一個資料庫可以對外公布多個服務名(SERVICE_NAMES)
一個用戶端也可以用多個主機字串串連到同一個資料庫伺服器上
4、一個OS上可以裝多個Oracle資料庫(小的概念),每個庫可以對外公布多個服務名,都通過init.ora和listener.ora來實現
主機字串,資料庫服務名,資料庫別名,不太一樣。
service_names是對外的服務名,是伺服器端使用的,一個庫可以設定多個對外服務名,以實現不同的目的
“主機字串”的叫法主要在SQL*Plus中使用,是在用戶端使用,
“資料庫別名”主要用在一些開發工具串連Oracle伺服器時使用,是通俗叫法
還有像配置ODBC時的Data Source的Service Name,
它們都是一個道理,指向的都是用戶端tnsnames.ora檔案中的一小段文本
1、在SQL/PLUS中的登陸中,用USER/[email protected]***,那麼,這個***是主機字串。
2、在設定ODBC時的使用者和密碼一定要是ORACLE中的合法使用者和密碼,但不輸也行,引用ODBC名時再給出也可以。
3、若要向ORACLE代理商購買ORACLE,是以使用者數來算錢的。那麼,這個“使用者”跟我們在ORACLE中通過
CREATE USER USERNAME IDENTIFIED BY PASSWORD建立的使用者是不同概念,“使用者數”指的是並發訪問使用者數,
(我理解是同時間訪問同一個記憶體位址的進程數)。要是我買了8個使用者的,可以建幾十、上百個使用者也沒問題,只要峰值達不到並發數就可以了。
打個比方,你的名字叫小明,但是你有很多外號。你父母叫你小明,但是朋友都叫你的外號。
這裡你的父母就是oracle執行個體,小明就是sid,service name就是你的外號。
sid用於執行個體區分各個資料庫,service name用於外部連結。
對於初接觸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 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伺服器串連。
伺服器處理序:當串連執行個體並建立使用者會話時產生,獨立伺服器或者提供共用伺服器都能產生。
後台進程:維持物理和記憶體之間的聯絡,用來管理資料庫的讀寫,恢複和監視等工作。伺服器處理序主要是通過它和使用者進程
進行聯絡和溝通,並由它和使用者進程進行資料的交換。在Unix機器上,Oracle後台進程相對於作業系統進程,也就是說,
一個Oracle後台進程將啟動一個作業系統進程。在Windows機器上,Oracle後台進程相對於作業系統線程,開啟工作管理員,
我們只能看到一個ORACLE.EXE的進程,但是通過另外的工具,就可以看到包含在這裡進程中的線程。
可選進程:ARCN 歸檔進程、RECO、SNNN、PNNN
必須要有的後台進程:
DBWn資料庫寫進程、PMON程式監控進程、SMON系統監控進程、LGWr日誌寫進程、CKPT檢查點進程
DBWn(資料庫寫進程),曾用名DBWr(DateBase Writer), 後來允許多個進程寫data file就改成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 資料庫、執行個體、服務名、SID