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一样。
Net service name:网络服务名,又可以称为数据库别名(database
alias)。是客户端程序访问数据库时所需要,屏蔽了客户端如何连接到服务器端的细节,实现了数据库的位置透明的特性。
如何利用配置的网络服务名连接到数据库:
用sqlplus程序通过test网络服务名进行测试,如sqlplus
system/manager@test。如果不能连接到数据库,则在tnsname
.ora文
件中的test网络服务名(net
service)后面加上Oracle数据库的DB_Domain参数值,通过用sqlplus> show
parameter
db_domain命令察看。此处db_domain参数值为testserver.com,将其加到网络服务名后面,修改后的tnsname
.ora中关于该网络服务名的内容为:
应该改为:
如何利用配置的网络服务名连接到数据库:
用sqlplus程序通过test网络服务名进行测试,如sqlplus
system/manager@test。如果不能连接到数据库,则在tnsname
.ora文件中的test网络服务名(net
service)后面加上sqlnet
.ora文件中NAMES.DEFAULT_DOMAIN参数的值,此处我的参数值为
testserver.com,将其加到网络服务名后面,修改后的tnsname
.ora中关于该网络服务名的内容为:
什么情况下会引起oracle自动设置NAMES.DEFAULT_DOMAIN参数?
出现这种情况的典型环境为windows的客户端的‘我得电脑à属性à计算机名à更改à其它…à此计算机的主DNS后缀’中设置了‘primary
dns
suffix’,因为在这种情况下安装客户端时,会在sqlnet
.ora文件中自动设置NAMES.DEFAULT_DOMAIN参数,或许当把计算机加入域中安装oracle客户端时也会出现这种情况,有条件的话大家可以试一下。
我在设置oracle的客户端时一般手工修改tnsnames
.ora文件,但是还有许多人喜欢用图形工具配置,该图形工具最终还是修改tnsnames
.ora文件,但是它有时会引起其它的问题:
在 用oracle的图形配置软件’net assistant’或‘Net Configuration
Assistant’配置网络服务名时,假如已经设置了‘primary dns
suffix’,但是在图形配置软件中写的网络服务名的名字中没有‘primary dns
suffix’,如只是写了test,则图形配置软件会自动在后面加上‘primary dns
suffix’,使之变为test.testserver.com,并存在tnsnames
.ora中,而不管你的sqlnet
.ora文件中是否有
NAMES.DEFAULT_DOMAIN参数。此时,用图形工具进行测试连接是通过的,但是假如此时sqlnet
.ora文件中没有
NAMES.DEFAULT_DOMAIN参数,则你在使用网络服务名时应该使用在tnsnames
.ora中的
test.testserver.com,而不是你在图形配置软件中键入的test。解决的办法为:
可以在sqlnet
.ora文件中设置NAMES.DEFAULT_DOMAIN=
testserver.com,这时你可以用test或test.testserver.com连接数据库
在sqlnet
.ora文件中不设置NAMES.DEFAULT_DOMAIN参数,在tnsnames
.ora文件中将
test.testserver.com中的.testserver.com去掉,这时你可以用test连接数据库
listener
.ora、
tnsnames
.ora和sqlnet
.ora这3个文件是关系oracle网络配置的3个主要文件,其中listener
.ora是和数据库服务器端
相关,而tnsnames
.ora和sqlnet
.ora这2个文件不仅仅关系到服务器端,主要的还是和客户端关系紧密。
检查客户端oracle网络的时候可以先检查sqlnet
.ora文件:
# SQLNET
.ORA Network Configuration File:
$ORACLE_HOME/NETWORK/ADMIN/sqlnet
.ora
# Generated by Oracle configuration tools.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES)
##NAMES.DEFAULT_DOMAIN = us.oracle.com
上面的sqlnet
.ora文件说明:
SQLNET.AUTHENTICATION_SERVICES=
(NTS)——这个表示采用os认证,在数据库服务器上,可以利用sqlplus “/ as
sysdba”。一般这个配置在windows上是ok的,在unix环境下可能会有问题,一般在unix下可以去掉这个配置。
NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME,
ONAMES)——表示将首先利用tnsnames进行解析;如果tnsnames解析不到,将使用hostname解析;如果hostname解析不
到,将采用onames进行解析。
被注释掉的NAMES.DEFAULT_DOMAIN = us.oracle.com——表示采用默认的domain
name为us.oracle.com,在tnsnames
.ora中
如果配置对应的解析,如果原来的别名oralocal,那么,当启用这个参数后,在
tnsnames中的配置要改成oralocal.us.oracle.com。在使用tnsping时或者sqlplus登录时,只需写前面的别名,系
统会自动加上后面的domain name来进行解析。
检查完毕sqlnet
.ora,一般都会发现是使用tnsname来解析别名的,那么,tnsnames
.ora中可以有哪些配置种类呢?
# TNSNAMES
.ORA Network Configuration File:
$ORACLE_HOME/NETWORK/ADMIN/tnsnames
.ora
# Generated by Oracle configuration tools.
###### 一般的配置 ##################################
ORALOCAL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oralocal)
)
)
###### 这样也行,用SID=oralocal ###########################
ORALOCAL_2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = oralocal)
)
###### RAC的配置(3节点rac) ###############################
ORALOCAL =
(DESCRIPTION =
(load_balance = yes)
(failover = on)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT =
1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT =
1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oralocal)
(SERVER = DEDICATED)
(failover_mode=(type=select)(method=basic)(retries
=20)(delay=20))
)
)
ORALOCAL_NODE1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oralocal)
(INSTANCE_NAME = oralocal_node1)
)
)
ORALOCAL_NODE2=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oralocal)
(INSTANCE_NAME = oralocal_node2)
)
)
ORALOCAL_NODE3 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oralocal)
(INSTANCE_NAME = oralocal_node3)
)
)
)
###### DATA GUARD配置(primary库和standby库都需要配置)##############
standby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.2)(PORT =
1521))
)
(CONNECT_DATA =
(SERVER=DEDICATED)
(SERVICE_NAME = oralocal)
)
)
primary =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.1)(PORT =
1521))
)
(CONNECT_DATA =
(SERVER=DEDICATED)
(SERVICE_NAME = oralocal)
)
)
另外需要注意的2点情况:
(1)如果tnsnames中的service_name配置错误,配置成了
instance_name了,这个时候会发生tnsping能通,但是 sqlplus连接不上的奇怪情况。报错ORA-:
TNS:listener could not resolve SERVICE_NAME given in connect
descriptor。这个时候查错的时候,需要检查对应的service_name。
(2)如果远程数据库是
rac,而且本地客户端端远程数据库处于不同的网段,通过公网链接,rac对外的ip映射只有一个,即只映射到一个节点。请注意在
客户端配置tnsnames的时候按照单机的情况来配置。呵呵,dba不仅仅要学习oracle,了解一些网络的知识,特别是自己系统的网络架构,也是需
要的。
Oracle网络配置用到的sqlnet
.ora,tnsnames
.ora,listener
.ora文件
注:文章内容由网络及相关书籍整理而来,如此只为共享知识,给予帮助。
listener
.ora、tnsnames
.ora和sqlnet
.ora这3个文件是关系oracle网络配置的3个主要文件,都是放在$ORACLE_HOME/network/admin目录下。其中listener
.ora是和数据库服务器端相关,而tnsnames
.ora和sqlnet
.ora这2个文件不仅仅关系到服务器端,主要的还是和客户端关系紧密。
一、客户端设置
1.sqlnet
.ora
通过这个文件来决定怎样找一个连接中出现的连接字符串
示例文件:
# sqlnet
.ora Network Configuration File:
F:/oracle/product/10.2.0/db_1/network/admin/sqlnet
.ora
# Generated by Oracle configuration tools.
# This file is actually generated by netca. But if customers
choose to
# install "Software Only", this file wont exist and without the
native
# authentication, they will not be able to connect to the
database on NT.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME, ONAMES,
EZCONNECT)
#NAMES.DEFAULT_DOMAIN = oracle.com
内容说明:
SQLNET.AUTHENTICATION_SERVICES= (NTS)——这个表示采用OS认证,
织梦在数据库服务器上,可以利用sqlplus / as
sysdba。一般这个配置在windows上是ok的,在unix环境下可能会有问题,一般在unix下可以去掉这个配置。
NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME,
ONAMES)——表示将首先利用tnsnames进行解析;如果tnsnames解析不到,将使用hostname解析;如果hostname解析不
到,将采用onames进行解析;最后使用EZCONNECT解析。例如我们客户端输入:sqlplus
zidi/zidi@changbai,那么,客户端就会首先在tnsnames
.ora文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的IP地址然后去连接这个IP上global_name=changbai这个实例,当然我这里orcl并不是一个主机名。
被注释掉的NAMES.DEFAULT_DOMAIN =
changbai.com——表示采用默认的域名为changbai.com,在tnsnames
.ora中
如果配置对应的解析,如果原来的数据库别名是oralocal(即网络服务名),那么,当启用这个参数后,在tnsnames中的配置要改成
oralocal.changbai.com。在使用tnsping时或者sqlplus登录时,只需写前面的别名,系统会自动加上后面的域名来进行解
析。
2.tnsnames
.ora
这个文件放在客户端机器上,记录客户端访问数据库的本地配置,其实就是定义网络服务,只有当sqlnet
.ora中有“NAMES.DIRECTORY_PATH=
(TNSNAMES)”这样的字样时,也就是客户端解析连接字符串的顺序中有TNSNAMES时,才会尝试使用这个文件。
示例文件:
# tnsnames
.ora Network Configuration File:
F:/oracle/product/10.2.0/db_1/NETWORK/ADMIN/tnsnam
es
.ora
# Generated by Oracle configuration tools.
HUINAMN =网路服务名
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 108.108.108.108)(PORT =
1521))访问数据库使用的协议,数据库计算机的主机名或IP地址,数据库的端口号
)
(CONNECT_DATA =
(SID = HN)数据库实例名,前提是所连接的数据库是Oracle8或更低版本
)
)
CHANGBAI =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 208.208.208.208)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = CB)数据库服务名,即全局数据库名
)
)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER =
DEDICATED)使用专用服务器模式去连接,这需要跟服务器的模式匹配,如果没有就根据服务器的模式自动调节
(SERVICE_NAME = orcl)
)
)
二、服务器端设置
listener
.ora
它是listener监听器进程的配置文件。关于listener进程就不多说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。
所以如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。
示例文件:
# listener
.ora Network Configuration File:
F:/oracle/product/10.2.0/db_1/network/admin/listen
er
.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =这里定义LISTENER进程为哪个实例提供服务
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = F:/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
)
LISTENER =监听器的名字,一台数据库可以有不止一个监听器
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))监听器监听的协议,IP,端口等
(ADDRESS = (PROTOCOL = TCP)(HOST = dabeng)(PORT = 1521))
)
)
上面的例子是一个最简单的例子,但也是最普遍的。一个listener进程为一个数据库实例(SID)提供服务。
三、总结
上面说到的三个文件都可以通过图形的配置工具来完成配置:Database Configuration Assistant,Net
Configuration Assistant
具体的配置可以尝试一下,然后来看一下配置文件,这样一来总体结构就有了,是当你输入sqlplus
zidi/zidi@changbai的时候
1. 查询sqlnet
.ora看看名称的解析方式,发现是TNSNAME
2.
则查询tnsnames
.ora文件,从里边找orcl的记录,并且找到主机名,端口和service_name
3. 如果listener进程没有问题的话,建立与listener进程的连接。
4.
根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener采取接下去的动作。默认是专用服务器模式,没有问题的话客户端就连接上了数据库的server
process。
5. 这时候网络连接已经建立,listener进程的历史使命也就完成了。
换个角度理解:
changbai是我们连接远端数据库用到的服务命名,但是最终必须转化为host:port:servide_name这样的连接字串,而这个转化可以理解为是翻译的过程,而要想翻译成功,则必须选择好翻译方法,那么sqlnet
.ora就是我们用来选择翻译方法的,其中的NAMES.DIRECTORY_PATH=
(TNSNAMES) 就是我们选择的命名解析方法;
tnsnames
.ora是翻译方法中的一种——本地命名解析方法的配置文件,就好像我们选择了查字典方法,这个文件就是我们的字典一样里面存放着所有服务命名对应的连接字串;至于listener
.ora则是负责接受我们请求的负责任人——连接地址配置文件,里面包括了连接负责人的连接地址,也放着经过他允许可以连接的数据库信息。这样就构成了Oracle的网络架构。