[轉]oracle數據庫名、實例名、服務名的區分

在oracle中,有不少容易混淆的簡單概念,比如下面幾個:

instance_name=oracl
db_name=ibm
db_domain=com
service_names=ibm.com #default=db_name.db_domain 是否可以配置成其他的任何值?
global_names=ibm.com #default=db_name.db_domain 取的service_names 的值
oracle_sid

現總結如下:
db_name
DB_NAME必須是一個不超過8個字符的文本串.在數據庫創建過程中,db_name被記錄在數據文件,日誌文件和控制文件中。如果數據庫實例啓動過程中參數文件中的db_name和控制文件中的數據庫名稱不一致,則數據庫不能啓動。


數據庫名是用於區分數據的內部標識,是以二進制方式存儲於數據庫控制文件中的參數,在數據安裝或創建之後將不得修改。數據庫安裝完成後,該參數被寫入數據庫參數文件pfile中。
在每一個運行的ORACLE數據庫中都有一個數據庫名(db_name),如果一個服務器程序中創建了兩個數據庫,則有兩個數據庫名。其控制參數據分屬在不同的pfile中控制着相關的數據庫。

db_domain
數據庫域名


service_names
參數文件中的service_names應該是對外提供的一個服務名。默認值爲db_name. db_domain,可以在初始化參數文件中設置service_names改變。
該參數與tnsnames中使用service_name沒有依存關係,service_name取決於listener.ora中的global_dbname值。實際上,就是由listener.ora確定服務名與實例的對應關係。
sid_list_listener =
(sid_list=
(sid_desc=
(global_dbname=) #可以隨便指定,tns中的service_name只要跟他保持一致就可
(oracle_home=)
(sid_name=oracl) #對應的instance_name,tns中的sid跟他保持一致
)
)


global_names
設置global_names=false不要求建立的數據庫鏈接db_link和目的數據庫的全局名稱一致。global_names=true則要求, 多少有些不方便。


instance_name
數據庫實例名用於和操作系統之間的聯繫,用於對外部連接時使用。在操作系統中要取得與數據庫之間的交互,必須使用數據庫實例名。例如,要和某一個數據庫server連接,就必須知道其數據庫實例名,只知道數據庫名是沒有用的,與數據庫名不同,在數據安裝或創建數據庫之後,實例名可以被修改。數據庫安裝完成後,該實例名被寫入數據庫參數文件

數據庫名與實例名之間的關係。
數據庫名與實例名之間的關係一般是一一對應關係,有一個數據庫名就有一個實例名,如果在一個服務器中創建兩個數據庫,則有兩個數據庫名,兩個數據庫實例名,用兩個標識確定一個數據庫,用戶和實例相連接。 但在8i、9i的並行服務器結構中,數據庫與實例之間不存在一一對應關係,而是一對多關係,(一個數據庫對應多個實例,同一時間內用戶只一個實例相聯繫,當某一實例出現故障,其它實例自動服務,以保證數據庫安全運行。)


ORACLE_SID
操作系統環境變量(ORACLE_SID)
在實際中,對於數據庫實例名的描述有時使用實例名(instance_name)參數,有時使用ORACLE_SID參數。這兩個都是數據庫實例名,它們有什麼區別呢?(經常弄混)
(ORACLE_SID) OS<----------------> ORACLE 數據庫 <--------(Instance_name(實例名))
上圖表示實例名instance_name、ORACLE_SID與數據庫及操作系統之間的關係,雖然這裏列出的兩個參數都是數據庫實例名,但instance_name參數是ORACLE數據庫的參數,此參數可以在參數文件中查詢到,而ORACLE_SID參數則是操作系統環境變量。
操作系統環境變量ORACLE_SID用於和操作系統交互。也就是說,在操作系統中要想得到實例名,就必須使用ORACLE_SID。此參數與ORACLE_BASE、ORACLE_HOME等用法相同。在數據庫安裝之後,ORACLE_SID被用於定義數據庫參數文件的名稱。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章