搞清概念:db_name,instance_name,ORACLE_SID,db_domain,global_name,service_name,net_service_name
注:寫作環(huán)境為Oracle 10g Release 2 (10.2)
一、數(shù)據(jù)庫(kù)名
1.數(shù)據(jù)庫(kù)名的概念
數(shù)據(jù)庫(kù)名(db_name)就是一個(gè)數(shù)據(jù)庫(kù)的標(biāo)識(shí),就像人的身份證號(hào)一樣。如果一臺(tái)機(jī)器上裝了多全數(shù)據(jù)庫(kù),那么每一個(gè)數(shù)據(jù)庫(kù)都有一個(gè)數(shù)據(jù)庫(kù)名。在數(shù)據(jù)庫(kù)安裝或創(chuàng)建完成之后,參數(shù)DB_NAME被寫入?yún)?shù)文件之中。格式如下:
db_domain=""
db_name=orcl
在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)就應(yīng)考慮好數(shù)據(jù)庫(kù)名,并且在創(chuàng)建完數(shù)據(jù)庫(kù)之后,數(shù)據(jù)庫(kù)名不宜修改,即使要修改也會(huì)很麻煩。因?yàn)?,?shù)據(jù)庫(kù)名還被寫入控制文件中,控制文件是以二進(jìn)制型式存儲(chǔ)的,用戶無(wú)法修改控制文件的內(nèi)容。假設(shè)用戶修改了參數(shù)文件中的數(shù)據(jù)庫(kù)名,即修改DB_NAME的值。但是在Oracle啟動(dòng)時(shí),由于參數(shù)文件中的DB_NAME與控制文件中的數(shù)據(jù)庫(kù)名不一致,導(dǎo)致數(shù)據(jù)庫(kù)啟動(dòng)失敗,將返回ORA-01103錯(cuò)誤。
2.數(shù)據(jù)庫(kù)名的作用
數(shù)據(jù)庫(kù)名是在安裝數(shù)據(jù)庫(kù)、創(chuàng)建新的數(shù)據(jù)庫(kù)、創(chuàng)建數(shù)據(jù)庫(kù)控制文件、修改數(shù)據(jù)結(jié)構(gòu)、備份與恢復(fù)數(shù)據(jù)庫(kù)時(shí)都需要使用到的。
有很多Oracle安裝文件目錄是與數(shù)據(jù)庫(kù)名相關(guān)的,如:
winnt: F:\oracle\product\10.2.0\oradata\DB_NAME\...
Unix: /home/app/oracle/product/10.2.0/oradata/DB_NAME/...
又如參數(shù)文件pfile:
winnt: F:\oracle\product\10.2.0\admin\DB_NAME\pfile\init.ora.54200885729
Unix: /home/app/oracle/product/10.2.0/admin/DB_NAME/pfile/init$ORACLE_SID.ora
如果控制文件損壞或丟失,數(shù)據(jù)庫(kù)將不能加載,這時(shí)要重新創(chuàng)建控制文件,方法是以nomount方式啟動(dòng)實(shí)例,然后以create controlfile命令創(chuàng)建控制文件,當(dāng)然這個(gè)命令中也要指明DB_NAME。
3.修改數(shù)據(jù)庫(kù)名
建議:應(yīng)在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)就確定好數(shù)據(jù)庫(kù)名,數(shù)據(jù)庫(kù)名不應(yīng)作修改,因?yàn)樾薷臄?shù)據(jù)庫(kù)名是一件比較復(fù)雜的事情。
現(xiàn)在就來(lái)說(shuō)明一下,如何在已創(chuàng)建數(shù)據(jù)之后,修改數(shù)據(jù)庫(kù)名。步驟如下:
(1)關(guān)閉數(shù)據(jù)庫(kù)。
(2)修改數(shù)據(jù)庫(kù)參數(shù)文件中的DB_NAME參數(shù)的值為新的數(shù)據(jù)庫(kù)名。
(3)以NOMOUNT方式啟動(dòng)實(shí)例,修建控制文件(有關(guān)創(chuàng)建控制文件的命令語(yǔ)法,請(qǐng)參考o(jì)racle文檔)
4.查詢當(dāng)前數(shù)據(jù)庫(kù)名
方法一: select name from v$database;
方法二:show parameter db
方法三:查看參數(shù)文件
二、數(shù)據(jù)庫(kù)實(shí)例名
1.數(shù)據(jù)庫(kù)實(shí)例名的概念
先來(lái)解釋以下,實(shí)例是什么東西。實(shí)例是訪問(wèn)Oracle數(shù)據(jù)庫(kù)所需的一部分計(jì)算機(jī)內(nèi)存和輔助處理后臺(tái)進(jìn)程,是由進(jìn)程和這些進(jìn)程所使用的內(nèi)存(SGA)所構(gòu)成一個(gè)集合,它根
本不需要一個(gè)與其相關(guān)聯(lián)的數(shù)據(jù)庫(kù),沒(méi)有任何數(shù)據(jù)文件也可以啟動(dòng)實(shí)例。下面是Oralce的啟動(dòng)過(guò)程:
sqlplus / as sysdba
sql>startup nomount #啟動(dòng)了一個(gè)實(shí)例,現(xiàn)在SGA分配了,進(jìn)程在運(yùn)行,除數(shù)據(jù)庫(kù)所有的東西都啟動(dòng)了
sql>alter database mount #利用控制文件(init.ora文件中指定)定位重作文件、數(shù)據(jù)文件、臨時(shí)文件
sql>alter database open #數(shù)據(jù)庫(kù)可供任何人通過(guò)這個(gè)實(shí)例訪問(wèn)。
所以可以這么理解:大家訪問(wèn)Oracle都是訪問(wèn)一個(gè)實(shí)例,但這個(gè)實(shí)例如果關(guān)聯(lián)了數(shù)據(jù)庫(kù)文件,就是可以訪問(wèn)的,如果沒(méi)有,就會(huì)得到實(shí)例不可用的錯(cuò)誤。
實(shí)例名指的是用于響應(yīng)某個(gè)數(shù)據(jù)庫(kù)操作的數(shù)據(jù)庫(kù)管理系統(tǒng)的名稱。她同時(shí)也叫SID。實(shí)例名是由參數(shù)instance_name決定的。如果這個(gè)參數(shù)不被指定 (即instance_name沒(méi)有被指定為任何值),那么實(shí)例的名字由該用戶的環(huán)境變量ORACLE_SID(注意這里是大寫)決定。在windows 平臺(tái)下,則是注冊(cè)表中oracle_sid值決定。
2.實(shí)例和數(shù)據(jù)庫(kù)
實(shí)例和數(shù)據(jù)庫(kù)之間的區(qū)別如下:
(1)實(shí)例是臨時(shí)的,它只在相關(guān)的進(jìn)程和內(nèi)存集合存在時(shí)存在;數(shù)據(jù)庫(kù)是永久的,只要文件存在它就存在
(2)一個(gè)實(shí)例在其生存期內(nèi)可安裝和打開(kāi)單個(gè)數(shù)據(jù)庫(kù);數(shù)據(jù)庫(kù)可以被很多實(shí)例安裝和打開(kāi),或者一個(gè)接一個(gè)的實(shí)例安裝和打開(kāi),或者由多個(gè)實(shí)例同時(shí)安裝和打開(kāi)(RAC)
順便提一下RAC,簡(jiǎn)單來(lái)說(shuō)RAC就是多個(gè)實(shí)例同時(shí)打開(kāi)一個(gè)數(shù)據(jù)庫(kù)文件的系統(tǒng),在結(jié)構(gòu)上是多臺(tái)機(jī)器,每天機(jī)器運(yùn)行一個(gè)實(shí)例,每個(gè)實(shí)例都打開(kāi)同一個(gè)數(shù)據(jù)庫(kù)(這個(gè)是用磁盤共享技術(shù)實(shí)現(xiàn)的),這些實(shí)例之間需要同步高速緩存,這樣保證多個(gè)實(shí)例是完全一致的,不會(huì)相互沖突乃至覆蓋。
數(shù)據(jù)庫(kù)實(shí)例名(instance_name)用于對(duì)外部連接。在操作系統(tǒng)中要取得與數(shù)據(jù)庫(kù)的聯(lián)系,必須使用數(shù)據(jù)庫(kù)實(shí)例名。例如,要去連接一個(gè)數(shù)據(jù)庫(kù)服務(wù)器,就必須知道其數(shù)據(jù)庫(kù)實(shí)例名,只知道數(shù)據(jù)庫(kù)名是沒(méi)有用的。與數(shù)據(jù)庫(kù)名不同,在數(shù)據(jù)安裝或創(chuàng)建數(shù)據(jù)庫(kù)之后,實(shí)例名可以被修改。數(shù)據(jù)庫(kù)名和實(shí)例名可以相同也可以不同。在一般情況下,數(shù)據(jù)庫(kù)名和實(shí)例名是一對(duì)一的關(guān)系,但如果在oracle并行服務(wù)器架構(gòu)(即oracle實(shí)時(shí)應(yīng)用集群)中,數(shù)據(jù)庫(kù)名和實(shí)例名是一對(duì)多的關(guān)系(一個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)多個(gè)實(shí)例,同一時(shí)間內(nèi)用戶只一個(gè)實(shí)例相聯(lián)系,當(dāng)某一實(shí)例出現(xiàn)故障,其它實(shí)例自動(dòng)服務(wù),以保證數(shù)據(jù)庫(kù)安全運(yùn)行) 。
3.查詢當(dāng)前數(shù)據(jù)庫(kù)實(shí)例名
方法一:select instance_name from v$instance;
方法二:show parameter instance
三、ORACLE_SID
在實(shí)際中,對(duì)于數(shù)據(jù)庫(kù)實(shí)例的標(biāo)識(shí)有時(shí)使用實(shí)例名,有時(shí)使用ORACLE_SID,它們有什么區(qū)別呢?
(ORACLE_SID)
OS<----------------> ORACLE 數(shù)據(jù)庫(kù) <--------(instance_name(實(shí)例名))
上圖表示實(shí)例名instance_name、ORACLE_SID與數(shù)據(jù)庫(kù)及操作系統(tǒng)之間的關(guān)系,雖然這里列出的兩個(gè)參數(shù)都是數(shù)據(jù)庫(kù)實(shí)例名,但 instance_name參數(shù)是ORACLE數(shù)據(jù)庫(kù)的參數(shù),此參數(shù)可以在參數(shù)文件中查詢到;而ORACLE_SID參數(shù)則是操作系統(tǒng)環(huán)境變量,與 ORACLE_BASE、ORACLE_HOME等用法相同,用于和操作系統(tǒng)交互。也就是說(shuō),在操作系統(tǒng)中要想得到實(shí)例名,就必須使用 ORACLE_SID。且ORACLE_SID必須與instance_name的值一致,否則,你將會(huì)收到一個(gè)錯(cuò)誤,在unix平臺(tái),是“ORACLE not available”,在winnt平臺(tái),是“TNS:協(xié)議適配器錯(cuò)誤”。
四、數(shù)據(jù)庫(kù)域名與全局?jǐn)?shù)據(jù)庫(kù)名
1.概念與聯(lián)系
使用數(shù)據(jù)庫(kù)名(da_name)對(duì)一個(gè)數(shù)據(jù)庫(kù)進(jìn)行唯一標(biāo)識(shí),這種表示對(duì)于單個(gè)數(shù)據(jù)庫(kù)是足夠的,但是隨著由多個(gè)數(shù)據(jù)庫(kù)構(gòu)成的分布式數(shù)據(jù)庫(kù)的普及,這種命令數(shù)據(jù)庫(kù)的方法給數(shù)據(jù)庫(kù)的管理造成一定的負(fù)擔(dān),因?yàn)楦鱾€(gè)數(shù)據(jù)庫(kù)的名字可能一樣,造成管理上的混亂。為了解決這種情況,引入了db_domain參數(shù),這樣在數(shù)據(jù)庫(kù)的標(biāo)識(shí)是由db_name和db_domain兩個(gè)參數(shù)共同決定的,避免了因?yàn)閿?shù)據(jù)庫(kù)重名而造成管理上的混亂。這類似于互連網(wǎng)上的機(jī)器名的管理。我們將db_name和db_domain兩個(gè)參數(shù)用‘.’連接起來(lái),表示一個(gè)數(shù)據(jù)庫(kù),并將該數(shù)據(jù)庫(kù)的名稱稱為global_name,即它擴(kuò)展了 db_name。db_name參數(shù)只能由字母、數(shù)字、’_’、’#’、’$’組成,而且最多8個(gè)字符。
數(shù)據(jù)庫(kù)域名(db_domain):定義一個(gè)數(shù)據(jù)庫(kù)所在的域,該域的命名同互聯(lián)網(wǎng)的’域’沒(méi)有任何關(guān)系,只是數(shù)據(jù)庫(kù)管理員為了更好的管理分布式數(shù)據(jù)庫(kù)而根據(jù)實(shí)際情況決定的。當(dāng)然為了管理方便,可以將其等于互聯(lián)網(wǎng)的域。
全局?jǐn)?shù)據(jù)庫(kù)名(global_name):對(duì)一個(gè)數(shù)據(jù)庫(kù)(Oracle database)的唯一標(biāo)識(shí),oracle建議用此種方法標(biāo)識(shí)數(shù)據(jù)庫(kù)。該值是在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)決定的,缺省值為db_name. db_domain。在以后對(duì)參數(shù)文件中db_name與db_domain參數(shù)的任何修改不影響global_name的值,如果要修改 Global_name,只能用alter database rename global_name to <db_name.db_domain>命令進(jìn)行修改,然后修改相應(yīng)參數(shù)。
2.查詢數(shù)據(jù)庫(kù)域名
方法一:select value from v$parameter where name = 'db_domain';
方法二:show parameter domain
方法三:在參數(shù)文件中查詢
3.例子
全國(guó)交通GIS系統(tǒng)的分布式數(shù)據(jù)庫(kù),其中:
吉林節(jié)點(diǎn): jl.jtgis
吉林長(zhǎng)春節(jié)點(diǎn): cc.jl.jtgis
河北節(jié)點(diǎn): hb.jtgis
河北石家莊節(jié)點(diǎn):sjz.hb.jtgis
這些就是數(shù)據(jù)庫(kù)域名,數(shù)據(jù)庫(kù)域名在存在于參數(shù)文件中,她的參數(shù)是db_domain.
全局?jǐn)?shù)據(jù)庫(kù)名=數(shù)據(jù)庫(kù)名+數(shù)據(jù)庫(kù)域名,如前述福建節(jié)點(diǎn)的全局?jǐn)?shù)據(jù)庫(kù)名是:orcl.jl.jtgis
五、數(shù)據(jù)庫(kù)服務(wù)名
該參數(shù)是oracle8i新引進(jìn)的。在8i以前,我們用SID來(lái)表示數(shù)據(jù)庫(kù)的一個(gè)實(shí)例,但是在Oracle的并行環(huán)境中,一個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)多個(gè)實(shí)例,這樣就需要多網(wǎng)絡(luò)服務(wù)名,設(shè)置繁瑣。為了方便并行環(huán)境中的設(shè)置,引進(jìn)了service_name參數(shù)。該參數(shù)對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù),而不是一個(gè)實(shí)例,而且該參數(shù)有許多其它的好處。
該參數(shù)的缺省值為db_name.db_domain,即等于global_name.如果數(shù)據(jù)庫(kù)有域名,則數(shù)據(jù)庫(kù)服務(wù)名就是全局?jǐn)?shù)據(jù)庫(kù)名;否則,數(shù)據(jù)庫(kù)服務(wù)名與數(shù)據(jù)庫(kù)名相同。一個(gè)數(shù)據(jù)庫(kù)可以對(duì)應(yīng)多個(gè)service_name,以便實(shí)現(xiàn)更靈活的配置。該參數(shù)與SID沒(méi)有直接關(guān)系,即 service_name 不必與SID一樣。
從Oracle8i開(kāi)始的oracle網(wǎng)絡(luò)組件,數(shù)據(jù)庫(kù)與客戶端連接的主機(jī)字符串使用的是數(shù)據(jù)庫(kù)服務(wù)名。之前用的是SID,即數(shù)據(jù)庫(kù)實(shí)例名。
查詢數(shù)據(jù)庫(kù)服務(wù)名
方法一:select value from v$parameter where name = 'service_name';
方法二:show parameter service_name
六、網(wǎng)絡(luò)服務(wù)名
網(wǎng)絡(luò)服務(wù)名(net_service_name),又可以稱為數(shù)據(jù)庫(kù)別名(database alias)。是客戶端程序訪問(wèn)數(shù)據(jù)庫(kù)時(shí)所需要,屏蔽了客戶端如何連接到服務(wù)器端的細(xì)節(jié),實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的位置透明的特性。網(wǎng)絡(luò)服務(wù)名被記錄在 tnsnames.ora文件中。
網(wǎng)絡(luò)服務(wù)名是從客戶端的角度出發(fā),當(dāng)客戶端連接遠(yuǎn)程數(shù)據(jù)庫(kù)或其他服務(wù)時(shí),可以指定網(wǎng)絡(luò)服務(wù)名。因此需要使用一個(gè)或多個(gè)命名方法將此Net服務(wù)名解析為連接數(shù)據(jù)庫(kù)或其他服務(wù)的連接描述符,看下面:
[本地]——將存儲(chǔ)在本地客戶機(jī)的tnsnames.ora文件中的網(wǎng)絡(luò)服務(wù)名解析為連接描述符。
[Oracle Names]——由Oracle名字服務(wù)器提供為網(wǎng)絡(luò)上的每個(gè)Oracle Net服務(wù)提供解析方法
[主機(jī)名]——通過(guò)TCP/IP環(huán)境中的主機(jī)別名連接到Oracle數(shù)據(jù)庫(kù)服務(wù)
[Sun NIS]/[DCE CDS]——專用系統(tǒng)用的,在Windows 2000系統(tǒng)環(huán)境下不適用
聯(lián)系客服