ORACLE中的db_name,service_names,instance_name,oracle_sid,global_dbname
Oracle中有很多與名字相關的參數,有時會讓人覺得迷惑,這個參數都有什麽作用,它們之間的區別又是什麽呢?
下面我們先來看一看都有哪些參數與名字相關
參數文件中有db_name,instance_name,service_names,db_unique_name
環境變量中有oracle_sid
在listener.ora中有sid_name,global_dbname(靜態註冊的情況下)
在tnsnames.ora中有service_name,sid
它們各有什麽含義呢,我們來一一介紹:
db_name:
對一個數據庫(Oracle database)的唯一標識,這種表示對於單個數據庫時足夠的,但是對於分布
式數據庫,可能存在各個數據庫的名字可能一樣,db_domian也就是為了解決這一問題,這樣數據庫的 標識是由db_name和db_domain兩個參數共同決定。類似於互聯網上的機器名管理,用db_name.db_domain來表示一個數據庫,並將該數據庫的名稱稱為global_name。db_name只能由字母/數字,‘_‘,‘#‘,‘$‘組成,而且最多8個字符。
DB_UNIQUE_NAME:
和db_name不一樣的作用,用於指定數據庫的全局唯一名,比如DG中的物理備庫與主庫有相同的db_name和db_domain。需要用db_unique_name來進行區別。可以設置30個字符,大小寫不敏感,由字母/數字,‘_‘,‘#‘,‘$‘組成。DB_UNQUIE_NAME的會影響到Service_names,也會影響到動態監聽的時候的service_name。
instance_name:
實例唯一標識符,如RAC環境,存在多實例情況下,用instance_name區別每個實例。用來設置在動態監聽中註冊的instance_name,對應的如果在tnsnames.ora中使用SID連接時,需要與之做對應。
未修改instance參數前,如下圖所示
修改instance_name參數後:
兩張圖對比可以知道,instance_name在註冊監聽時起到指定名字的作用。
此外一些包含instance_name或inst_name列的動態性能視圖是從環境變量ORACLE_SID(而不是這個參數)來推斷的。
service_names:
用於設置在監聽中註冊的服務名。對應的做tnsnames.ora中如果使用SERVICE_NAME連接時需要與之對應。
修改service_names之前,service_names與監聽中的service一致:
修改service_names後,監聽中多出了設置的service名:
使用新設置的服務名也可以連接到數據庫:
oracle_sid:
實例標識符,以環境變量形式存在,同時用於對應共享內存段.Oracle實例是由SGA和一組後臺進程組成的,實例的創建和啟動需要一個參數文件,而參數文件的名稱就是由ORACLE_SID決定的。對於init文件,缺省的文件名稱是init<ORACLE_SID>.ora,對於spfile文件,缺省的文件名稱是spfile<ORACLE_SID>.ora。設置不同的ORACLE_SID值,就可以默認使用不同的參數文件啟動不同的數據庫實例。
也就是說ORACLE_SID決定本地啟動的數據庫實例的實例名,只要有對應的init<ORACLE_SID>.ora或spfile<ORACLE_SID>.ora就可以啟動,也可以在startup中指定pfile啟動都是可以的,只要參數文件中設置的其他參數可以啟動一個數據庫就行。
正常情況下ORACLE_SID=test,啟動數據庫如下圖,生成的進程以test標識。
關閉數據庫,修改ORACLE_SID=mydb,同樣可以啟動數據庫,不過需要手動指定參數文件,生成的進程以mydb標識。
即使進程都是與mydb相關,但數據庫名字和監聽的配置仍然為test
對應動態性能視圖裏的instance_name和inst_name也發生了變化:
tnsnames.ora中的service_name和sid:
tnsnames.ora中的service_name和sid分別要連接的遠程數據庫在監聽中註冊的service和instance相對應。
test = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.2)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = test) ) ) test = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.2)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = test) ) )
listener.ora中的sid_name和global_dbname:
這兩個參數用於使用靜態註冊監聽時識別為哪個實例靜態註冊。
SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (GLOBAL_DBNAME=orcl) (ORACLE_HOME=/u02/app/oracle/product/11.2.4/db1) (SID_NAME=orcl)))
以上內容為我自己的整理與總結,有不對的地方還請大神指點。
參考:http://blog.sina.com.cn/s/blog_616b428f0100iwro.html
本文出自 “DBA Fighting!” 博客,請務必保留此出處http://hbxztc.blog.51cto.com/1587495/1923899
ORACLE中的db_name,service_names,instance_name,oracle_sid,global_dbname