最近因看到論壇有人問起這方面的東西
將自己的理解加上查閱相關資料整理如下
如果不全或不當的地方
望指正並補全它
數據庫名(DB_NAME)
實例名(Instance_name)
以及操作系統環境變量(ORACLE_SID)
在ORACLE
數據庫中只有數據庫名(db_name)和數據庫實例名(instance_name)
在ORACLE
i
i中出現了新的參數
即數據庫域名(db_domain)
服務名(service_name)
以及操作系統環境變量(ORACLE_SID)
這些都存在於同一個數據庫中的標識
用於區分不同數據庫的參數
一什麼是數據庫名(db_name)? 數據庫名是用於區分數據的內部標識
是以二進制方式存儲於數據庫控制文件中的參數
在數據安裝或創建之後將不得修改
數據庫安裝完成後
該參數被寫入數據庫參數文件pfile中
格式如下
[code:
:
aaf
]
db_name=
orcl
#(不允許修改)
db_domain=
instance_name=orcl
service_names=or
control_file=(
[/code:
:
aaf
]
在每一個運行的ORACLE
i數據庫中都有一個數據庫名(db_name)
如果一個服務器程序中創建了兩個數據庫
則有兩個數據庫名
其控制參數據分屬在不同的pfile中控制著相關的數據庫
二什麼是數據庫實例名(instance_name) 數據庫實例名則用於和操作系統之間的聯系
用於對外部連接時使用
在操作系統中要取得與數據庫之間的交互
必須使用數據庫實例名
例如
要和某一個數據庫server連接
就必須知道其數據庫實例名
只知道數據庫名是沒有用的
與數據庫名不同
在數據安裝或創建數據庫之後
實例名可以被修改
數據庫安裝完成後
該實例名被寫入數據庫參數文件pfile中
格式如下
[code:
:
aaf
]
db_name=
orcl
#(不允許修改)
db_domain=
instance_name=orcl #(可以修改
可以與db_name相同也可不同)
service_names=or
control_file=(
[/code:
:
aaf
]
數據庫名與實例名之間的關系
數據庫名與實例名之間的關系一般是一一對應關系
有一個數據庫名就有一個實例名
如果在一個服務器中創建兩個數據庫
則有兩個數據庫名
兩個數據庫實例名
用兩個標識確定一個數據庫
用戶和實例相連接
但在
i
i的並行服務器結構中
數據庫與實例之間不存在一一對應關系
而是一對多關系
(一個數據庫對應多個實例
同一時間內用戶只一個實例相聯系
當某一實例出現故障
其它實例自動服務
以保證數據庫安全運行
)
三操作系統環境變量(ORACLE_SID) 在實際中
對於數據庫實例名的描述有時使用實例名(instance_name)參數
有時使用ORACLE_SID參數
這兩個都是數據庫實例名
它們有什麼區別呢?(經常弄混)
[code:
:
aaf
]
(ORACLE_SID)
OS<
> ORACLE 數據庫 <
(Instance_name(實例名))
[/code:
:
aaf
]
上圖表示實例名instance_name
ORACLE_SID與數據庫及操作系統之間的關系
雖然這裡列出的兩個參數都是數據庫實例名
但instance_name參數是ORACLE數據庫的參數
此參數可以在參數文件中查詢到
而ORACLE_SID參數則是操作系統環境變量
操作系統環境變量ORACLE_SID用於和操作系統交互
也就是說
在操作系統中要想得到實例名
就必須使用ORACLE_SID
此參數與ORACLE_BASE
ORACLE_HOME等用法相同
在數據庫安裝之後
ORACLE_SID被用於定義數據庫參數文件的名稱
如
$ORACLE_BASE/admin/DB_NAME/pfile/init$ORACLE_SID
ora
定義方法:
[code:
:
aaf
]
export ORACLE_SID=orcl
[/code:
:
aaf
]
如果在同一服務器中創建了多個數據庫
則必然同時存在多個數據庫實例
這時可以重復上述定義過程
以選擇不同實例
還可以用
[code:
:
aaf
]
[oracle@Datacent]$
oraenv
[/code:
:
aaf
]
來切換不同的ORACLE_SID來通過操作系統來啟動不同的實例(instance)
From:http://tw.wingwit.com/Article/program/Oracle/201311/18134.html