qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          Oracle實(shí)例與數(shù)據(jù)庫的概念詳細(xì)解釋

          剛接觸ORACLE的人肯定會(huì)對(duì)實(shí)例和數(shù)據(jù)庫感到困惑,實(shí)例到底代表些什么?為什么會(huì)有這個(gè)概念的出現(xiàn)?
            ORACLE實(shí)例 = 進(jìn)程 + 進(jìn)程所使用的內(nèi)存(SGA)實(shí)例是一個(gè)臨時(shí)性的東西,你也可以認(rèn)為它代表了數(shù)據(jù)庫某一時(shí)刻的狀態(tài)!
            數(shù)據(jù)庫 = 重做文件 + 控制文件 + 數(shù)據(jù)文件 + 臨時(shí)文件
            數(shù)據(jù)庫是永久的,是一個(gè)文件的集合。
            ORACLE實(shí)例和數(shù)據(jù)庫之間的關(guān)系
            1.臨時(shí)性和永久性
            2.實(shí)例可以在沒有數(shù)據(jù)文件的情況下單獨(dú)啟動(dòng) startup nomount , 通常沒什么意義
            3.一個(gè)實(shí)例在其生存期內(nèi)只能裝載(alter database mount)和打開(alter database open)一個(gè)數(shù)據(jù)庫
            4.一個(gè)數(shù)據(jù)庫可被許多實(shí)例同時(shí)裝載和打開(即RAC),RAC環(huán)境中實(shí)例的作用能夠得到充分的體現(xiàn)!
            下面對(duì)實(shí)例和數(shù)據(jù)庫做詳細(xì)的詮釋:
            在Oracle領(lǐng)域中有兩個(gè)詞很容易混淆,這就是“實(shí)例”(instance)和“數(shù)據(jù)庫”(database)。作為Oracle術(shù)語,這兩個(gè)詞的定義如下:
            數(shù)據(jù)庫(database):物理操作系統(tǒng)文件或磁盤(disk)的集合。使用Oracle 10g的自動(dòng)存儲(chǔ)管理(Automatic Storage Management,ASM)或RAW分區(qū)時(shí),數(shù)據(jù)庫可能不作為操作系統(tǒng)中單獨(dú)的文件,但定義仍然不變。
            實(shí)例(instance):一組Oracle后臺(tái)進(jìn)程/線程以及一個(gè)共享內(nèi)存區(qū),這些內(nèi)存由同一個(gè)計(jì)算機(jī)上運(yùn)行的線程/進(jìn)程所共享。這里可以維護(hù)易失的、非持久性內(nèi)容(有些可以刷新輸出到磁盤)。就算沒有磁盤存儲(chǔ),數(shù)據(jù)庫實(shí)例也能存在。也許實(shí)例不能算是世界上最有用的事物,不過你完全可以把它想成是最有用的事物,這有助于對(duì)實(shí)例和數(shù)據(jù)庫劃清界線。
            這兩個(gè)詞有時(shí)可互換使用,不過二者的概念完全不同。實(shí)例和數(shù)據(jù)庫之間的關(guān)系是:數(shù)據(jù)庫可以由多個(gè)實(shí)例裝載和打開,而實(shí)例可以在任何時(shí)間點(diǎn)裝載和打開一個(gè)數(shù)據(jù)庫。實(shí)際上,準(zhǔn)確地講,實(shí)例在其整個(gè)生存期中最多能裝載和打開一個(gè)數(shù)據(jù)庫!稍后就會(huì)介紹這樣的一個(gè)例子。
            是不是更糊涂了?我們還會(huì)做進(jìn)一步的解釋,應(yīng)該能幫助你搞清楚這些概念。實(shí)例就是一組操作系統(tǒng)進(jìn)程(或者是一個(gè)多線程的進(jìn)程)以及一些內(nèi)存。這些進(jìn)程可以操作數(shù)據(jù)庫;而數(shù)據(jù)庫只是一個(gè)文件集合(包括數(shù)據(jù)文件、臨時(shí)文件、重做日志文件和控制文件)。在任何時(shí)刻,一個(gè)實(shí)例只能有一組相關(guān)的文件(與一個(gè)數(shù)據(jù)庫關(guān)聯(lián))。大多數(shù)情況下,反過來也成立:一個(gè)數(shù)據(jù)庫上只有一個(gè)實(shí)例對(duì)其進(jìn)行操作。不過,Oracle的真正應(yīng)用集群(Real Application Clusters,RAC)是一個(gè)例外,這是Oracle提供的一個(gè)選項(xiàng),允許在集群環(huán)境中的多臺(tái)計(jì)算機(jī)上操作,這樣就可以有多臺(tái)實(shí)例同時(shí)裝載并打開一個(gè)數(shù)據(jù)庫(位于一組共享物理磁盤上)。由此,我們可以同時(shí)從多臺(tái)不同的計(jì)算機(jī)訪問這個(gè)數(shù)據(jù)庫。Oracle RAC能支持高度可用的系統(tǒng),可用于構(gòu)建可擴(kuò)縮性極好的解決方案。
            一個(gè)實(shí)例在其生存期中最多只能裝載和打開一個(gè)數(shù)據(jù)庫。要想再打開這個(gè)(或其他)數(shù)據(jù)庫,必須先丟棄這個(gè)實(shí)例,并創(chuàng)建一個(gè)新的實(shí)例。
            重申一遍:
            實(shí)例是一組后臺(tái)進(jìn)程和共享內(nèi)存。
            數(shù)據(jù)庫是磁盤上存儲(chǔ)的數(shù)據(jù)集合。
            實(shí)例“一生”只能裝載并打開一個(gè)數(shù)據(jù)庫。
            數(shù)據(jù)庫可以由一個(gè)或多個(gè)實(shí)例(使用RAC)裝載和打開。
            前面提到過,大多數(shù)情況下,實(shí)例和數(shù)據(jù)庫之間存在一種一對(duì)一的關(guān)系。可能正因如此,才導(dǎo)致人們很容易將二者混淆。從大多數(shù)人的經(jīng)驗(yàn)看來,數(shù)據(jù)庫就是實(shí)例,實(shí)例就是數(shù)據(jù)庫。

          運(yùn)行一個(gè)Oracle實(shí)例,但是它訪問的數(shù)據(jù)庫每天都可能不同(甚至每小時(shí)都不同),這取決于我的需求。只需有不同的配置文件,我就能裝載并打開其中任意一個(gè)數(shù)據(jù)庫。在這種情況下,任何時(shí)刻我都只有一個(gè)“實(shí)例”,但有多個(gè)數(shù)據(jù)庫,在任意時(shí)間點(diǎn)上只能訪問其中的一個(gè)數(shù)據(jù)庫。
            所以,你現(xiàn)在應(yīng)該知道,如果有人談到實(shí)例,他指的就是Oracle的進(jìn)程和內(nèi)存。提到數(shù)據(jù)庫時(shí),則是說保存數(shù)據(jù)的物理文件。可以從多個(gè)實(shí)例訪問一個(gè)數(shù)據(jù)庫,但是一個(gè)實(shí)例一次只能訪問一個(gè)數(shù)據(jù)庫。
            1.oracle數(shù)據(jù)庫系統(tǒng)中,DBMS可以管理多個(gè)數(shù)據(jù)庫實(shí)例嗎?還是需要一個(gè)oracle服務(wù)管理一個(gè)實(shí)例?
            oracle里面一個(gè)數(shù)據(jù)庫系統(tǒng)可以又多個(gè)實(shí)例。你可以運(yùn)行dbca,在界面里面你可以看到可以創(chuàng)建新的實(shí)例,但是大多數(shù)情況下,oracle都只是建立一個(gè)實(shí)例。
            2需要建立教務(wù)數(shù)據(jù)庫,財(cái)務(wù)數(shù)據(jù)庫兩個(gè)db,
            是可以的,不過通常的做法是建再2個(gè)用戶放在不同的tablespaces上面。一個(gè)用戶存儲(chǔ)教務(wù)數(shù)據(jù)庫表數(shù)據(jù),一個(gè)存放財(cái)務(wù)數(shù)據(jù)庫表數(shù)據(jù)。
            3.oracle中的schema屬于哪個(gè)層次?
            schema簡(jiǎn)單來講,你可以理解成一個(gè)用戶以及用戶所擁有的所有對(duì)象。其實(shí)就相當(dāng)于sqlserver的庫。
            4.oracle中這樣做。
            create user Test;
            grant [connect,……]to Test;
            create table……
            創(chuàng)建屬于此用戶的表及其他對(duì)象,那么這個(gè)用戶數(shù)否可以代表為一個(gè)應(yīng)用db?
            同3一樣,你可以這樣理解成一個(gè)用戶以及用戶下面所有的對(duì)象其實(shí)就是sqlserver中的db了,實(shí)際生產(chǎn)環(huán)境中,為了減少成本和充分利用oracle數(shù)據(jù)庫的資源,我們都是一個(gè)項(xiàng)目一個(gè)用戶,一個(gè)應(yīng)用一個(gè)用戶,然后在不同的用戶下面建立相應(yīng)的表、視圖、存儲(chǔ)過程、存儲(chǔ)函數(shù)、序列等等。
            下面來看一個(gè)簡(jiǎn)單的例子。假設(shè)我們剛安裝了Oracle 10g10.1.0.3。我們執(zhí)行一個(gè)純軟件安裝,不包括初始的“啟動(dòng)”數(shù)據(jù)庫,除了軟件以外什么都沒有。
            通過pwd命令可以知道當(dāng)前的工作目錄(這個(gè)例子使用一個(gè)Linux平臺(tái)的計(jì)算機(jī))。我們的當(dāng)前目錄是dbs(如果在Windows平臺(tái)上,則是database目錄)。執(zhí)行l(wèi)s–l命令顯示出這個(gè)目錄為“空”。其中沒有init.ora 文件,也沒有任何存儲(chǔ)參數(shù)文件(stored parameter file,SPFILE);存儲(chǔ)參數(shù)文件將在第3章詳細(xì)討論。
            使用ps(進(jìn)程狀態(tài))命令,可以看到用戶ora10g運(yùn)行的所有進(jìn)程,這里假設(shè)ora10g是Oracle軟件的所有者。此時(shí)還沒有任何Oracle數(shù)據(jù)庫進(jìn)程。
            然后使用ipcs命令,這個(gè)UNIX命令可用于顯示進(jìn)程間的通信設(shè)備,如共享內(nèi)存、信號(hào)量等。目前系統(tǒng)中沒有使用任何通信設(shè)備。
            然后啟動(dòng)SQL*Plus(Oracle的命令行界面),并作為SYSDBA連接(SYSDBA賬戶可以在數(shù)據(jù)庫中做任何事情)。連接成功后,SQL*Plus報(bào)告稱我們連上了一個(gè)空閑的實(shí)例:
            我們的“實(shí)例”現(xiàn)在只包括一個(gè)Oracle服務(wù)器進(jìn)程,見以下輸出中粗體顯示的部分。此時(shí)還沒有分配共享內(nèi)存,也沒有其他進(jìn)程。
            現(xiàn)在來啟動(dòng)實(shí)例:
            這里提示的文件就是啟動(dòng)實(shí)例時(shí)必須要有的一個(gè)文件,我們需要有一個(gè)參數(shù)文件(一種簡(jiǎn)單的平面文件,后面還會(huì)詳細(xì)說明),或者要有一個(gè)存儲(chǔ)參數(shù)文件。現(xiàn)在就來創(chuàng)建參數(shù)文件,并放入啟動(dòng)數(shù)據(jù)庫實(shí)例所需的最少信息(通常還會(huì)指定更多的參數(shù),如數(shù)據(jù)庫塊大小、控制文件位置,等等)。
            然后再回到SQL*Plus:
            這里對(duì)startup命令加了nomount選項(xiàng),因?yàn)槲覀儸F(xiàn)在還不想真正“裝載”數(shù)據(jù)庫(要了解啟動(dòng)和關(guān)閉的所有選項(xiàng),請(qǐng)參見SQL*Plus文檔)。
            注意
            在Windows上運(yùn)行startup命令之前,還需要使用oradim.exe實(shí)用程序執(zhí)行一條服務(wù)創(chuàng)建語句。
            現(xiàn)在就有了所謂的“實(shí)例”。運(yùn)行數(shù)據(jù)庫所需的后臺(tái)進(jìn)程都有了,如進(jìn)程監(jiān)視器(process monitor,PMON)、日志寫入器(log writer,LGWR)等,這些進(jìn)程將在第5章詳細(xì)介紹。
            再使用ipcs命令,它會(huì)首次報(bào)告指出使用了共享內(nèi)存和信號(hào)量,這是UNIX上的兩個(gè)重要的進(jìn)程間通信設(shè)備:
            注意,我們還沒有“數(shù)據(jù)庫”呢!此時(shí),只有數(shù)據(jù)庫之名(在所創(chuàng)建的參數(shù)文件中),而沒有數(shù)據(jù)庫之實(shí)。如果試圖“裝載”這個(gè)數(shù)據(jù)庫,就會(huì)失敗,因?yàn)閿?shù)據(jù)庫根本就不存在。下面就來創(chuàng)建數(shù)據(jù)庫。有人說創(chuàng)建一個(gè)Oracle數(shù)據(jù)庫步驟很繁瑣,真是這樣嗎?我們來看看:
            這里創(chuàng)建數(shù)據(jù)庫就是這么簡(jiǎn)單。但在實(shí)際中,也許要使用一個(gè)稍有些復(fù)雜的CREATE DATABASE命令,因?yàn)榭赡苄枰嬖VOracle把日志文件、數(shù)據(jù)文件、控制文件等放在哪里。不過,我們現(xiàn)在已經(jīng)有了一個(gè)完全可操作的數(shù)據(jù)庫了。可能還需要運(yùn)行$ORACLE_HOME/rdbms/admin/ catalog.sql腳本和其他編錄腳本(catalog script)來建立我們每天使用的數(shù)據(jù)字典(這個(gè)數(shù)據(jù)庫中還沒有我們使用的某些視圖,如ALL_OBJECTS),但不管怎么說,數(shù)據(jù)庫已經(jīng)有了。可以簡(jiǎn)單地查詢一些Oracle V$視圖(具體就是V$DATAFILE、V$LOGFILE和V$CONTROLFILE),列出構(gòu)成這個(gè)數(shù)據(jù)庫的文件:
            Oracle使用默認(rèn)設(shè)置,把所有內(nèi)容都放在一起,并把數(shù)據(jù)庫創(chuàng)建為一組持久的文件。如果關(guān)閉這個(gè)數(shù)據(jù)庫,再試圖打開,就會(huì)發(fā)現(xiàn)數(shù)據(jù)庫無法打開:
            一個(gè)實(shí)例在其生存期中最多只能裝載和打開一個(gè)數(shù)據(jù)庫。要想再打開這個(gè)(或其他)數(shù)據(jù)庫,必須先丟棄這個(gè)實(shí)例,并創(chuàng)建一個(gè)新的實(shí)例。
            重申一遍:
            1.實(shí)例是一組后臺(tái)進(jìn)程和共享內(nèi)存。
            2.數(shù)據(jù)庫是磁盤上存儲(chǔ)的數(shù)據(jù)集合。
            3.實(shí)例“一生”只能裝載并打開一個(gè)數(shù)據(jù)庫。
            4.數(shù)據(jù)庫可以由一個(gè)或多個(gè)實(shí)例(使用RAC)裝載和打開。
            前面提到過,大多數(shù)情況下,實(shí)例和數(shù)據(jù)庫之間存在一種一對(duì)一的關(guān)系。可能正因如此,才導(dǎo)致人們很容易將二者混淆。從大多數(shù)人的經(jīng)驗(yàn)看來,數(shù)據(jù)庫就是實(shí)例,實(shí)例就是數(shù)據(jù)庫。
            不過,在許多測(cè)試環(huán)境中,情況并非如此。在我的磁盤上,可以有5個(gè)不同的數(shù)據(jù)庫。測(cè)試主機(jī)上任意時(shí)間點(diǎn)只會(huì)運(yùn)行一個(gè)Oracle實(shí)例,但是它訪問的數(shù)據(jù)庫每天都可能不同(甚至每小時(shí)都不同),這取決于我的需求。只需有不同的配置文件,我就能裝載并打開其中任意一個(gè)數(shù)據(jù)庫。在這種情況下,任何時(shí)刻我都只有一個(gè)“實(shí)例”,但有多個(gè)數(shù)據(jù)庫,在任意時(shí)間點(diǎn)上只能訪問其中的一個(gè)數(shù)據(jù)庫。
            所以,你現(xiàn)在應(yīng)該知道,如果有人談到實(shí)例,他指的就是Oracle的進(jìn)程和內(nèi)存。提到數(shù)據(jù)庫時(shí),則是說保存數(shù)據(jù)的物理文件。可以從多個(gè)實(shí)例訪問一個(gè)數(shù)據(jù)庫,但是一個(gè)實(shí)例一次只能訪問一個(gè)數(shù)據(jù)庫。

          posted on 2013-11-22 12:20 順其自然EVO 閱讀(213) 評(píng)論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫

          <2013年11月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 图们市| 郸城县| 佳木斯市| 秦皇岛市| 七台河市| 大宁县| 潞西市| 呼伦贝尔市| 吉林省| 纳雍县| 康定县| 隆尧县| 鹤庆县| 和田县| 旬阳县| 霍城县| 抚顺市| 南昌市| 宝清县| 镇平县| 卫辉市| 西畴县| 隆子县| 乐山市| 忻城县| 绍兴市| 达拉特旗| 富川| 马关县| 晋中市| 鞍山市| 邵阳县| 云霄县| 天全县| 桦甸市| 常山县| 文登市| 襄垣县| 巨鹿县| 巴东县| 禄丰县|