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個字元。
<a href="https://s4.51cto.com/wyfs02/M01/95/1F/wKioL1kR0DSR63_vAAAXgx8mLNE464.png" target="_blank"></a>
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或inst_name列的動态性能視圖是從環境變量ORACLE_SID(而不是這個參數)來推斷的。
service_names:
用于設定在監聽中注冊的服務名。對應的做tnsnames.ora中如果使用SERVICE_NAME連接配接時需要與之對應。
修改service_names之前,service_names與監聽中的service一緻:
<a href="https://s3.51cto.com/wyfs02/M02/95/21/wKiom1kR1DugUYeTAAAcyN9GWZc178.png" target="_blank"></a>
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辨別。
<a href="https://s3.51cto.com/wyfs02/M01/95/21/wKioL1kR2BWBhwBDAACmHKou53Y532.png" target="_blank"></a>
對應動态性能視圖裡的instance_name和inst_name也發生了變化:
<a href="https://s2.51cto.com/wyfs02/M02/95/23/wKiom1kR5F-yRb_pAAAL1Y1ukj0625.png" target="_blank"></a>
tnsnames.ora中的service_name和sid:
tnsnames.ora中的service_name和sid分别要連接配接的遠端資料庫在監聽中注冊的service和instance相對應。
<code>test =</code>
<code> </code><code>(DESCRIPTION =</code>
<code> </code><code>(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.2)(PORT = 1522))</code>
<code> </code><code>(CONNECT_DATA =</code>
<code> </code><code>(SERVER = DEDICATED)</code>
<code> </code><code>(SID = test)</code>
<code> </code><code>)</code>
<code> </code><code>)</code>
<code> </code>
<code> </code><code>(SERVICE_NAME = test)</code>
listener.ora中的sid_name和global_dbname:
這兩個參數用于使用靜态注冊監聽時識别為哪個執行個體靜态注冊。
<code>SID_LIST_LISTENER=</code>
<code> </code><code>(SID_LIST=</code>
<code> </code><code>(SID_DESC=</code>
<code> </code><code>(GLOBAL_DBNAME=orcl)</code>
<code> </code><code>(ORACLE_HOME=/u02/app/oracle/product/11.2.4/db1)</code>
<code> </code><code>(SID_NAME=orcl)))</code>
以上内容為我自己的整理與總結,有不對的地方還請大神指點。
本文轉自hbxztc 51CTO部落格,原文連結:http://blog.51cto.com/hbxztc/1923899,如需轉載請自行聯系原作者