天天看點

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個字元。

<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&lt;ORACLE_SID&gt;.ora,對于spfile檔案,預設的檔案名稱是spfile&lt;ORACLE_SID&gt;.ora。設定不同的ORACLE_SID值,就可以預設使用不同的參數檔案啟動不同的資料庫執行個體。

也就是說ORACLE_SID決定本地啟動的資料庫執行個體的執行個體名,隻要有對應的init&lt;ORACLE_SID&gt;.ora或spfile&lt;ORACLE_SID&gt;.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,如需轉載請自行聯系原作者