oracle中對db的不同命名方式
【Db_name:】
對一個數據庫(Oracle database)的唯一標識,該數據庫為第一章講到的Oracle database。這種表示對于單個數據庫是足夠的,但是隨著由多個數據庫構成的分布式數據庫的普及,這種命令數據庫的方法給數據庫的管理造成一定的負擔,因為各個數據庫的名字可能一樣,造成管理上的混亂。為了解決這種情況,引入了Db_domain參數,這樣在數據庫的標識是由Db_name和 Db_domain兩個參數共同決定的,避免了因為數據庫重名而造成管理上的混亂。這類似于互連網上的機器名的管理。我們將Db_name和 Db_domain兩個參數用’.’連接起來,表示一個數據庫,并將該數據庫的名稱稱為Global_name,即它擴展了Db_name。 Db_name參數只能由字母、數字、’_’、’#’、’$’組成,而且最多8個字符。
【Db_domain:】
定義一個數據庫所在的域,該域的命名同互聯網的’域’沒有任何關系,只是數據庫管理員為了更好的管理分布式數據庫而根據實際情況決定的。當然為了管理方便,可以將其等于互聯網的域。
【Global_name:】
對一個數據庫(Oracle database)的唯一標識,oracle建議用此種方法命令數據庫。該值是在創建數據庫是決定的,缺省值為Db_name. Db_domain。在以后對參數文件中Db_name與Db_domain參數的任何修改不影響Global_name的值,如果要修改 Global_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO
【Service_name:】
該參數是oracle8i新引進的。在8i以前,我們用SID來表示標識數據庫的一個實例,但是在Oracle的并行環境中,一個數據庫對應多個實例,這樣就需要多個網絡服務名,設置繁瑣。為了方便并行環境中的設置,引進了Service_name參數,該參數對應一個數據庫,而不是一個實例,而且該參數有許多其它的好處。該參數的缺省值為Db_name. Db_domain,即等于Global_name。一個數據庫可以對應多個Service_name,以便實現更靈活的配置。該參數與SID沒有直接關系,即不必Service name 必須與SID一樣。
在tnsnames.ora中,既可以用service_name, 也可以用sid
【Net service name:】
網絡服務名,又可以稱為數據庫別名(database
alias)。是客戶端程序訪問數據庫時所需要,屏蔽了客戶端如何連接到服務器端的細節,實現了數據庫的位置透明的特性。網絡服務名被記錄在tnsnames.ora文件中。
===關于錯誤ORA-12154:====
有時即使在tnsnames.ora文件中有相應的網絡服務名,可是用該網絡服務名連接時還會出錯,出現這種情況的典型配置如下(在客戶端的機器上):
tnsnames.ora中有:
HZUAT = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.18.1.102)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = hzuat) ) ) |
sqlnet.ora中有:
NAMES.DEFAULT_DOMAIN = |
可當用 user/passwd@HZUAT去連時, 卻報ora-12154錯。
其原因就是因為sqlplus程序會自動到sqlnet.ora文件中找NAMES.DEFAULT_DOMAIN參數,假如該參數存在,則將該參數中的值取出,加到網絡服務名的后面。解決辦法一是刪掉NAMES.DEFAULT_DOMAIN, 二是把tnsnames.ora改成
= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.18.1.102)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = hzuat) ) ) |