(包括:Db_name、Db_domain、Global_name、Service_name、Net service name)
【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 <db_name.db_domain>命令进行修改,然后修改相应参数。
【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 = staff.ebao.com
可当用 user/passwd@HZUAT去连时, 却报ora-12154错。
其原因就是因为sqlplus程序会自动到sqlnet.ora文件中找NAMES.DEFAULT_DOMAIN参数,假如该参数存在,则将该参数中的值取出,加到网络服务名的后面。解决办法一是删掉NAMES.DEFAULT_DOMAIN, 二是把tnsnames.ora改成
HZUAT.COM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.18.1.102)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = hzuat)
)
)