Oracle數據庫名與Oracle實例名的關系

Oracle數據庫名與Oracle實例名的關系

1 數據庫名
1.1 數據庫名的概念
數據庫名(db_name)就是一個數據庫的標識,就像人的身份證號一樣。如果一臺機器上裝了多個數據庫,那么每一個數據庫都有一個數據庫名。在數據庫安裝或創建完成之后,參數DB_NAME被寫入參數文件之中。

數據庫名在$ORACLE_HOME/admin/db_name/pfile/init.ora(或$ORACLE_BASE/admin/db_name/pfile/init.ora或$ORACLE_HOME/dbs/SPFILE<實例名>.ORA)文件中

###########################################

Database Identification

###########################################
db_domain=""
db_name=orcl
在創建數據庫時就應考慮好數據庫名,并且在創建完數據庫之后,數據庫名不宜修改,即使要修改也會很麻煩。因為,數據庫名還被寫入控制文件中,控制文件是以二進制型式存儲的,用戶無法修改控制文件的內容。假設用戶修改了參數文件中的數據庫名,即修改DB_NAME的值。但是在Oracle啟動時,由于參數文 件中的DB_NAME與控制文件中的數據庫名不一致,導致數據庫啟動失敗,將返回ORA-01103錯誤。

1.2 數據庫名的作用
數據庫名是在安裝數據庫、創建新的數據庫、創建數據庫控制文件、修改數據結構、備份與恢復數據庫時都需要使用到的(注意這些時候不能使用sid,還有alter database時都是使用數據庫名)。

有很多Oracle安裝文件目錄是與數據庫名相關的,如:

 winnt: F:\oracle\product\10.2.0\oradata\DB_NAME\...

又如參數文件pfile:

 winnt: F:\oracle\product\10.2.0\admin\DB_NAME\pfile\init.ora.54200885729

如果控制文件損壞或丟失,數據庫將不能加載,這時要重新創建控制文件,方法是以nomount方式啟動實例,然后以create controlfile命令創建控制文件,當然這個命令中也要指明DB_NAME。

1.3 修改數據庫名
建議:應在創建數據庫時就確定好數據庫名,數據庫名不應作修改,因為修改數據庫名是一件比較復雜的事情。是區分數據的內部標識(即是給Oracle數據庫內部使用的),因為其在數據庫多處保存,并且控制文件中保存的是二進制的,所以很難改變其名字。

在已創建數據之后,修改數據庫名。步驟如下:
(1)關閉數據庫。
(2)修改數據庫參數文件中的DB_NAME參數的值為新的數據庫名。
(3)以NOMOUNT方式啟動實例,修建控制文件(有關創建控制文件的命令語法,請參考oracle文檔)
1.4 查詢當前數據庫名
方法一:select name from v$database;
方法二:show parameter db
方法三:查看參數文件,$ORACLE_HOME/admin/db_name/pfile/init.ora(或$ORACLE_BASE/admin/db_name/pfile/init.ora)
2 數據庫實例名(instance name)
2.1 數據庫實例名的概念(instance_name)
實例名是代表用于加載或打開一個數據庫所用的memory structures + Background process (MEM + BGP)。在unix中,實例名由ORACLE_SID環境變量定義,在windows中由服務名定義。可以用于連接字符串中,這種用法用于8i版本前,雖然10g仍然支持,但是并不推薦,因為這種方法缺乏對某些新特性的支持。
實例是訪問Oracle數據庫所需的一部分計算機內存和輔助處理后臺進程,是由進程和這些進程所使用的內存(SGA)所構成一個集合,它根本不需要一個與其相關聯的數據庫,沒有任何數據文件也可以啟動實例。下面是Oralce的啟動過程:

sqlplus / as sysdba
sql>startup nomount #啟動了一個實例,現在SGA分配了,進程在運行,除數據庫外所有的東西都啟動了
sql>alter database mount #利用控制文件(init.ora文件中指定)定位重作日志文件、數據文件、臨時文件
sql>alter database open #數據庫可供任何人通過這個實例訪問。
所以可以這么理解:訪問Oracle都是訪問一個實例,但這個實例如果關聯了數據庫文件,就是可以訪問的,如果沒有,就會得到實例不可用的錯誤。

實例名指的是用于響應某個數據庫操作的數據庫管理系統的名稱,也叫SID。實例名是由參數instance_name決定的。如果這個參數不被指定(即instance_name沒有被指定為任何值),那么實例的名字由該用戶的環境變量ORACLE_SID(注意這里是大寫)決定。在windows平臺下,則是注冊表中oracle_sid值決定。
實例名和SID是一一對應的,名字相同,但存儲位置不同。

2.2 實例和數據庫
實例和數據庫之間的區別如下:
(1)實例是臨時的,它只在相關的進程和內存集合存在時存在;數據庫是永久的,只要文件存在它就存在。
(2)一個實例在其生存期內可安裝和打開單個數據庫;數據庫可以被很多實例安裝和打開,或者一個接一個的實例安裝和打開,或者由多個實例同時安裝和打開(RAC)。
簡單來說RAC就是多個實例同時打開一個數據庫文件的系統,在結構上是多臺機器,每臺機器運行一個實例,每個實例都打開同一個數據庫 (這個是用磁盤共享技術實現的),這些實例之間需要同步高速緩存,這樣保證多個實例是完全一致的,不會相互沖突乃至覆蓋。

數據庫實例名(instance_name)用于對外部連接。在操作系統中要取得與數據庫的聯系,必須使用數據庫實例名。例如,要去連接一個數據庫服務器,就必須知道其數據庫實例名,只知道數據庫名是沒有用的。與數據庫名不同,在數據安裝或創建數據庫之后,實例名可以被修改。數據庫名和實例名可以相同也可以不同。在一般情況下,數據庫名和實例名是一對一的關系,但如果在oracle并行服務器架構(即oracle實時應用集群) 中,數據庫名和實例名是一對多的關系(一個數據庫對應多個實例,同一時間內用戶只與一個實例相聯系,當某一實例出現故障,其它實例自動服務,以保證數據庫安全運行) 。

實例就是一組操作系統進程(或者是一個多線程的進程)以及一些內存,這些進程可以操作數據庫;而數據庫只是一個文件集合(包括數據文件、臨時文件、重做日志文件和控制文件)。在任何時刻,一個實例只能有一組相關的文件(與一個數據庫關聯)。大多數情況下,反過來也成立:一個數據庫上只有一個實例對其進行操作。不過,Oracle的應用集群(Real Application Clusters,RAC)是一個例外,這是Oracle提供的一個選項,允許在集群環境中的多臺計算機上操作,這樣就可以有多臺實例同時裝載并打開一個數據庫(位于一組共享物理磁盤上)。由此,我們可以同時從多臺不同的計算機訪問這個數據庫。Oracle RAC能支持高度可用的系統,可用于構建可擴縮性極好的解決方案。
2.3 查詢當前數據庫實例名
方法一:select instance_name from v$instance;
方法二:show parameter instance
3 ORACLE_SID(環境變量)
在實際中,對于數據庫實例的標識有時使用實例名,有時使用ORACLE_SID,它們有什么區別呢?(非常容易混淆)

OS(ORACLE_SID)<----------------> ORACLE 數據庫 <--------(instance_name(實例名))
上圖表示實例名instance_name、ORACLE_SID與數據庫及操作系統之間的關系,雖然這里列出的兩個參數都是數據庫實例名,但 instance_name參數是ORACLE數據庫的參數,此參數可以在參數文件中查詢到;而ORACLE_SID參數則是操作系統環境變量,與 ORACLE_BASE、ORACLE_HOME等用法相同,用于和操作系統交互。也就是說,在操作系統中要想得到實例名,就必須使用ORACLE_SID。且ORACLE_SID必須與instance_name的值一致,否則,你將會收到一個錯誤,在winnt平臺,是“TNS:協議適配器錯誤”。

在數據庫安裝之后,ORACLE_SID被用于定義數據庫參數文件的名稱。如:
$ORACLE_BASE/admin/DB_NAME/pfile/init$ORACLE_SID.ora。
如果在同一服務器中創建了多個數據庫,則必然同時存在多個數據庫實例,這時可以重復定義過程(export ORACLE_SID=orcl),以選擇不同實例。 還可以用oraenv命令行來切換不同的ORACLE_SID來通過操作系統來啟動不同的實例(instance)
4 數據庫域名與全局數據庫名
4.1 概念與聯系
使用數據庫名(da_name)對一個數據庫進行唯一標識,這種表示對于單個數據庫是足夠的,但是隨著由多個數據庫構成的分布式數據庫的普及,這給數據庫的管理造成一定的負擔,因為各個數據庫的名字可能一樣,造成管理上的混亂。為了解決這種情況,引入了db_domain參數,這樣數據庫的標識是由db_name和db_domain兩個參數共同決定的,避免了因為數據庫重名而造成管理上的混亂。這類似于互連網上的機器名的管理。我們 將db_name和db_domain兩個參數用‘.’連接起來,表示一個數據庫,并將該數據庫的名稱稱為global_name,即它擴展了 db_name。db_name參數只能由字母、數字、’_’、’#’、’$’組成,而且最多8個字符。

數據庫域名(db_domain):定義一個數據庫所在的域,該域的命名同互聯網的“域”沒有任何關系,只是數據庫管理員為了更好的管理分布式數據庫而根據實際情況決定的。當然為了管理方便,可以將其看作互聯網的域。
全局數據庫名(global_name):對一個數據庫(Oracle database)的唯一標識,oracle建議用此種方法標識數據庫。該值是在創建數據庫時決定的,缺省值為db_name. db_domain。在以后對參數文件中db_name與db_domain參數的任何修改不影響global_name的值,如果要修改 Global_name,只能用alter database rename global_name to <db_name.db_domain>命令進行修改,然后修改相應參數。

4.2查詢數據庫域名
方法一:select value from v$parameter where name = 'db_domain';(10g中不可行)
方法二:show parameter domain
方法三:在參數文件中查詢,$ORACLE_HOME/admin/db_name/pfile/init.ora(或$ORACLE_BASE/admin/db_name/pfile/init.ora)
4.3 例子
全國交通GIS系統的分布式數據庫,其中:
吉林節點: jl.jtgis
吉林長春節點: cc.jl.jtgis
河北節點: hb.jtgis
河北石家莊節點:sjz.hb.jtgis
這些就是數據庫域名,數據庫域名在存在于參數文件中,她的參數是db_domain.
全局數據庫名=數據庫名+數據庫域名,如前述福建節點的全局數據庫名是:orcl.jl.jtgis
5 數據庫服務名(service_name)
該參數是oracle8i新引進的。在8i以前,我們用SID來表示數據庫的一個實例,但是在Oracle的并行環境中,一個數據庫對應多個實例,這樣就需要多網絡服務名,設置繁瑣。為了方便并行環境中的設置,引進了service_name參數。該參數對應一個數據庫,而不是一個實例,而且該參數有許多其它的好處。
該參數的缺省值為db_name.db_domain,即等于global_name。如果數據庫有域名,則數據庫服務名就是全局數據庫名;否則,數據庫服務名與數據庫名相同。一個數據庫可以對應多個service_name,以便實現更靈活的配置。該參數與SID沒有直接關系,即 service_name 不必與SID一樣。

從Oracle8i開始的oracle網絡組件,數據庫與客戶端連接的主機字符串推薦使用的是數據庫服務名。之前用的是SID,即數據庫實例名。
SID = the unique name of your DB instance, ServiceName = the alias used when connecting。

如果database is registered with listener in this way,你就可以在tnsnames.ora文件中使用SERVICE_NAME parameter,否則就要用SID。
查詢數據庫服務名(方法二測試可行)

 方法一:select value from v$parameter where name = 'service_name';(10g中不可行)
 方法二:show parameter service_name

6 網絡服務名(net_service_name)
網絡服務名(net_service_name),又可以稱為數據庫別名(database alias),是客戶端程序訪問數據庫時所需要,屏蔽了客戶端如何連接到服務器端的細節,實現了數據庫的位置透明的特性。網絡服務名被記錄在 tnsnames.ora文件中。

可以通過netmgr來新建網絡服務名。
網絡服務名是從客戶端的角度出發,當客戶端連接遠程數據庫或其他服務時,可以指定網絡服務名。因此需要使用一個或多個命名方法將此Net服務名解析為連接數據庫或其他服務的連接描述符,命名方法如下:

[本地]——將存儲在本地客戶機的tnsnames.ora文件中的網絡服務名解析為連接描述符。
  [Oracle Names]——由Oracle名字服務器提供為網絡上的每個Oracle Net服務提供解析方法
  [主機名]——通過TCP/IP環境中的主機別名連接到Oracle數據庫服務
  [Sun NIS]/[DCE CDS]——專用系統用的,在Windows 2000系統環境下不適用

轉自:https://www.2cto.com/database/201306/217547.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容