Oracle中存在著這些容易混淆的名稱:
數(shù)據(jù)庫名 實例名 ORACLE_SID 服務(wù)名 域名 全局數(shù)據(jù)庫名
在oracle7/8/9i/10g中都有數(shù)據(jù)庫名和實例名,在9i和10g中又引進了三個新的數(shù)據(jù)庫標識類參數(shù):數(shù)據(jù)庫域名(db_domain)、全局數(shù)據(jù)庫名(global_dbname)和數(shù)據(jù)庫服務(wù)名(service_names)。下面介紹一下這些名稱的關(guān)系:
1. 數(shù)據(jù)庫名
用于區(qū)分一個數(shù)據(jù)庫的內(nèi)部標識,在安裝數(shù)據(jù)庫、創(chuàng)建新數(shù)據(jù)庫、創(chuàng)建控制文件、修改數(shù)據(jù)庫結(jié)構(gòu)、利用RMAN備份時都需要使用數(shù)據(jù)庫名。
存在于(但不僅限于)以下地方:
(1) 以二進制方式存儲在控制文件中。
(2) Pfile/spfile中:db_name
(3) 數(shù)據(jù)庫物理結(jié)構(gòu)文件目錄中
D:\oracle\oradata\db_name\*.*
D:\oracle\admin\db_name\*.*
查詢方法:select name from v$database;
2. 實例名
用于和操作系統(tǒng)進行聯(lián)系。在操作系統(tǒng)中要取得與數(shù)據(jù)庫之間的交互必須使用實例名。例如,要和某一個數(shù)據(jù)庫服務(wù)器連接,則必須知道其數(shù)據(jù)庫實例名,知道數(shù)據(jù)庫名是沒用的。在安裝/創(chuàng)建數(shù)據(jù)庫后,實例名允許修改的。
存在于(但不僅限于)以下地方:
(1) Windows nt/2000注冊表中(oracle_sid)
(2) pfile/spfile中:instance_name
(3) 數(shù)據(jù)庫參數(shù)文件名中:init<oracle_sid>.ora
查詢方法:select instance_name from v$instance;
與數(shù)據(jù)庫名的關(guān)系:一般是一一對應(yīng)的,RAC中除外。
3.
ORACLE_SID
細心的朋友可以發(fā)現(xiàn),2.3中有個問題:2中講的是instance_name,但2.3存儲的卻是oracle_sid。
因為從名稱上來說,instance_name=oracle_sid。對于數(shù)據(jù)庫實例名的描述,有時使用instance_name,有時使用oracle_sid,這兩個都是數(shù)據(jù)庫實例名。但instance_name是oracle數(shù)據(jù)庫參數(shù),而oracle_sid是操作系統(tǒng)環(huán)境變量。
Oracle_sid用于和操作系統(tǒng)交互。也就是說,在操作系統(tǒng)中要想得到實例名,必須使用oracle_sid。例如同一服務(wù)器上創(chuàng)建了多個數(shù)據(jù)庫,則就有多個對應(yīng)的實例,可以通過在操作系統(tǒng)中設(shè)置oracle_sid指定要登錄的數(shù)據(jù)庫:
$oracle_sid=orcl
$export
oracle_sid
C:\>set
oracle_sid=orcl
存在于(但不僅限于)以下地方:
(1) Windows nt/2000注冊表中(oracle_sid)
(2) 數(shù)據(jù)庫參數(shù)文件名中:init<oracle_sid>.ora
實例名除用于和操作系統(tǒng)聯(lián)系外,還用于網(wǎng)絡(luò)連接,即與客戶端或其他服務(wù)器之間的連接。配置網(wǎng)絡(luò)連接,就是配置網(wǎng)絡(luò)連接串。
例如登錄某遠程數(shù)據(jù)庫:
C:\>sqlplus
xtjb/xtjb@s101
這里的s101就是一個網(wǎng)絡(luò)連接串。
在oracle的不同版本中,網(wǎng)絡(luò)連接串的內(nèi)容是不同的。在網(wǎng)絡(luò)驅(qū)動版本為sql*net或net8時,網(wǎng)絡(luò)連接串使用數(shù)據(jù)庫實例名構(gòu)造;網(wǎng)絡(luò)驅(qū)動版本為net8i或net services時,網(wǎng)絡(luò)連接串使用數(shù)據(jù)庫服務(wù)名構(gòu)造(服務(wù)名見后面介紹)。見圖3中的填寫說明。
4. 域名
9i/10g中新引進參數(shù)。在數(shù)據(jù)庫名稱后面增加域名構(gòu)成,類似網(wǎng)絡(luò)中的域名,使數(shù)據(jù)庫的取名在整個網(wǎng)絡(luò)環(huán)境中唯一。
域名主要用于分布式數(shù)據(jù)庫中數(shù)據(jù)庫之間的連接。例如,在一個網(wǎng)絡(luò)中有兩個數(shù)據(jù)庫,數(shù)據(jù)庫名都是orcl,若這連個數(shù)據(jù)庫之間要建立連接,則必須使用不同的域名加以區(qū)分。
5. 全局數(shù)據(jù)庫名
9i/10g中新引進參數(shù)。全局數(shù)據(jù)庫名=數(shù)據(jù)庫名+域名。
6. 服務(wù)名
9i/10g中新引進參數(shù)。服務(wù)名=全局數(shù)據(jù)庫名。
當(dāng)使用網(wǎng)絡(luò)驅(qū)動net8i, net services與oracle9i/10g服務(wù)器連接時,不再使用實例名,而使用數(shù)據(jù)庫服務(wù)名。
7. 補充
當(dāng)同一網(wǎng)絡(luò)中兩個數(shù)據(jù)庫的global_dbname相同時,可以通過修改域名和服務(wù)名的方式進行調(diào)整(當(dāng)然也可以修改數(shù)據(jù)庫名,不過太繁瑣)。
修改完畢后,需修改監(jiān)聽中的全局數(shù)據(jù)庫名,并重啟監(jiān)聽(見8中例子)。
8. 舉例
(1) 創(chuàng)建一個數(shù)據(jù)庫,全局數(shù)據(jù)庫名為ora.world,SID(實例名)為orasid。見圖1。
(2) 創(chuàng)建完畢后,使用服務(wù)名(全局數(shù)據(jù)庫名)建立網(wǎng)絡(luò)連接。見圖2、圖3。
(4) 修改全局數(shù)據(jù)庫名(修改域名和服務(wù)名)
SQL> alter
system set db_domain='''' scope=spfile;
系統(tǒng)已更改。
SQL>
alter system set service_names=''ora'' scope=spfile;
系統(tǒng)已更改。
|