oracle数据库中listener.ora sqlnet.ora tnsnames.ora的区别

三个配置文件 listener.ora sqlnet.ora tnsnames.ora ,都是放在$ORACLE_HOME\network\admin 目录下。
6uP5e:[3mM b0
DTpns S-E01. sqlnet.ora-----
作用类似于 linux 或者其他 unix nsswitch.conf 文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串。 ITPUB个人空间,l/w9w7mq_?
例如我们客户端输入 ITPUB个人空间1n:`)E+l1eBLa0rK
sqlplus sys/oracle@orcl ITPUB个人空间0Yk;Rwu|i9cD/W
假如我的 sqlnet.ora 是下面这个样子
)A-s$n[q4T'Se0SQLNET.AUTHENTICATION_SERVICES= (NTS)
5Y'kkp t U0NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME) ITPUB个人空间2xb+hU M!dd nm
那么,客户端就会首先在 tnsnames.ora 文件中找 orcl 的记录 . 如果没有相应的记录则尝试把 orcl 当作一个主机名,通过网络的途径去解析它的 ip 地址然后去连接这个 ip GLOBAL_DBNAME=orcl 这个实例,当然我这里 orcl 并不是一个主机名 ITPUB个人空间~g'Szd%W _
如果我是这个样子
2l"`1RAX n\8J3o0NAMES.DIRECTORY_PATH= (TNSNAMES) ITPUB个人空间KOh;U Vmj-C*x
那么客户端就只会从 tnsnames.ora 查找 orcl 的记录 , 括号中还有其他选项,如 LDAP 等并不常用。
s1C.n+E%p3yF8M"RX0
q"~8A2W+y0[/q02. Tnsnames.ora------
这个文件类似于 unix hosts 文件,提供的 tnsname 到主机名或者 ip 的对应,只有当 sqlnet.ora 中类似 ITPUB个人空间+e$l!v m!Q3Tg
NAMES.DIRECTORY_PATH= (TNSNAMES)
这样,也就是客户端解析连接字符串的顺序中有 TNSNAMES 是,才会尝试使用这个文件。
"T"h/k ?&h0aN0PROTOCOL
:客户端与 服务器端通讯的协议,一般为 TCP ,该内容一般不用改。
,@nz i&h Mc0V d!{P*x0HOST
数据库侦听所在的机器的机器名或 IP 地址,数据库侦听一般与数据库在同一个机器上,所以当我说数据库侦听所在的机器一般也是指数据库所在的机器。在 UNIX WINDOWS 下,可以通过在数据库侦听所在的机器的命令提示符下使用 hostname 命令得到机器名,或通过 ipconfig(for WINDOWS) or ifconfig for UNIX )命令得到 IP 地址。需要注意的是,不管用机器名或 IP 地址,在客户端一定要用 ping 命令 ping 通数据库侦听所在的机器的机器名,否则需要在 hosts 文件中加入数据库侦听所在的机器的机器名的解析。 ITPUB个人空间5Z&h2L&P%T"P2z
PORT
:数据库侦听正在侦听的端口,可以察看服务器端的 listener.ora 文件或在数据库侦听所在的机器的命令提示符下通过 lnsrctl status [listener name] 命令察看。此处 Port 的值一定要与数据库侦听正在侦听的端口一样。 ITPUB个人空间F!K-Fb+]Td
SERVICE_NAME
:在服务器端,用 system 用户登陆后, sqlplus> show parameter service_name 命令察看。
R)c n}n(xxSeL0ORCL:
对应的本机, SALES 对应的另外一个 IP 地址,里边还定义了使用主用服务器还是共享服务器模式进行连接
h-M(w nY{{$uS0
#连接的时候输入的 TNSNAME ITPUB个人空间:f(c;M7{'z
ORCL =
K4uo#bxV%HRI\g W0(DESCRIPTION = ITPUB个人空间a.?oK{{v/P
(ADDRESS_LIST = ITPUB个人空间8bv0`5{~[ rF0S#I ?d
#
下面是这个 TNSNAME 对应的主机,端口,协议
"},dJ k$b0(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ITPUB个人空间F` r5uLt
)
d:vC6um6M7c0(CONNECT_DATA =
R/IRQVsa y]0#
使用专用服务器模式去连接需要跟服务器的模式匹配,如果没有就根据服务器的模式自动调节
Z9gM\YX{`_0(SERVER = DEDICATED)
6Ai f+Vi]/@0#
对应 service_name SQLPLUS>;show parameter service_name; 进行查看 ITPUB个人空间U%db![A8]6F!t
(SERVICE_NAME = orcl) ITPUB个人空间W7?d2c,`VY?0W
) ITPUB个人空间-Vo i6`0`&FavD
) ITPUB个人空间I0n]9^ B#m@C
#
下面这个类似
vuXR/zR8u ~0SALES = ITPUB个人空间%M]p2]r.J)dwsa
(DESCRIPTION =
*BC3cJ)CN0(ADDRESS_LIST = ITPUB个人空间%b h#VU5c
(ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521))
yx-Fw}0) ITPUB个人空间^m1r"e L.^6U/D
(CONNECT_DATA =
0L:P CZx.j{0(SERVER = DEDICATED) ITPUB个人空间`&pX5m F4} jr
(SERVICE_NAME = sales) ITPUB个人空间7V,k-rT YlN Y(k
)
R;OB$m$C&E O0)
-m:o9] P'b,H^ B0
注意:如果数据库服务器用 MTS ,客户端程序需要用 database link 时最好明确指明客户端用 dedicated 直连方式 , 不然会遇到很多跟分布式环境有关的 ORACLE BUG 。一般情况下数据库服务器用直接的连接会好一些,除非你的实时数据库连接数接近 1000
#~2e9jFk ]TM0
4N({\'f+^03. listener.ora------listener
监听器进程的配置文件
{Y'C!K)Z0
关于 listener 进程就不多说了,接受远程对数据库的接入申请并转交给 oracle 的服务器进程。所以如果不是使用的远程的连接,并且不需要使用 OEM时, listener 进程就不是必需的,同样的如果关闭 listener 进程并不会影响已经存在的数据库连接。 ITPUB个人空间uA4o/E*_P
Listener.ora
文件的例子 ITPUB个人空间8~H{,F E q/G-Mi
#listener.ora Network Configuration File: #E:\oracle\product\10.1.0\Db_2\NETWORK\ADMIN\listener.ora
R"[+a|sy0# Generated by Oracle configuration tools.
1P7v7b)`6t)Q0#
下面定义 LISTENER 进程为哪个实例提供服务这里是 ORCL ,并且它对应的 ORACLE_HOME GLOBAL_DBNAME 其中 GLOBAL_DBNAME 不是必需的除非
(b@V @oN0#
使用 HOSTNAME 做数据库连接
)m_E;E5t*z0SID_LIST_LISTENER = ITPUB个人空间6JR;}9hzS o
(SID_LIST = ITPUB个人空间h|R.OP j9t,P
(SID_DESC = ITPUB个人空间-~%di-sU
(GLOBAL_DBNAME = boway) ITPUB个人空间*nhMNb;A{ b
(ORACLE_HOME = /u01/app/oracle) ITPUB个人空间4xBzN(u|B:J
(SID_NAME = ORCL) ITPUB个人空间Vd nSP+l
) ITPUB个人空间M@} o hL
) ITPUB个人空间XDZ`cQ
#
监听器的名字,一台数据库可以有不止一个监听器
0d%s}H9T0#
再向下面是监听器监听的协议,ip,端口等,这里使用的tcp1521端口,并且使#用的是主机名
ASk#DQ0D_'fY0LISTENER = ITPUB个人空间 s9_dq'|9N Iq$z+o
(DESCRIPTION = ITPUB个人空间'^*o%UaW9W
(ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521)) ITPUB个人空间!d-Nl+[+j2Xd
)
#NSp3^1Ie'w0
上面的例子是一个最简单的例子,但也是最普遍的。一个 listener 进程为一个 instance(SID) 提供服务。 ITPUB个人空间g9S b&a5_
监听器的操作命令
Y^~(Z1h*}WV0$ORACLE_HOME/bin/lsnrctl start,
其他诸如 stop,status 等。具体敲完一个 lsnrctl 后看帮助。
"f8Fv!B"v#K yZ0
,Zk h:u a8o+wO0
上面说到的三个文件都可以通过图形的配置工具来完成配置 ITPUB个人空间W7Imc1XjQwm
$ORACLE_HOME/netca
向导形式的
;]kUA-a y0profile
配置的是 sqlnet.ora 也就是名称解析的方式
m4L@Sg `v0service name
配置的是 tnsnames.ora 文件
`4{[7Z \3i{pV c0listeners
配置的是 listener.ora 文件,即监听器进程
0S,Em'^ldf2nLd0
7Pk6L&mU)]8KQ1S*G0
!QbkF2Y%e p0
不同的连接方式 ITPUB个人空间Lq*VK8mg\1|
连接过程 ITPUB个人空间5L%?;i#A^+[0_
当你输入 sqlplus sys/oracle@orcl 的时候
!TQ'w_6IC9g,i{%f01
.查询 sqlnet.ora 看看名称的解析方式,发现是 TNSNAME ITPUB个人空间6N)I4A)km%\'gMf
2
.则查询 tnsnames.ora 文件,从里边找 orcl 的记录,并且找到主机名,端口和 service_name
O7Z%zgG&Q03
.如果 listener 进程没有问题的话,建立与 listener 进程的连接。 ITPUB个人空间b8[$g6RS? B
4
.根据不同的服务器模式如专用服务器模式或者共享服务器模式, listener 采取接下去的动作。默认是专用服务器模式,没有问题的话客户端就连接上了数据库的 server process
EMm@-O)N!FS v05
.这时候网络连接已经建立, listener 进程的历史使命也就完成了。
8Jb5C At]P c0 ITPUB个人空间%kJ!~v&_Y
几种连接用到的命令形式 ITPUB个人空间/L ?fD PA
1.sqlplus / as sysdba
这是典型的操作系统认证,不需要 listener 进程 ITPUB个人空间9dwd9K8|m
2.sqlplus sys/oracle
这种连接方式只能连接本机数据库,同样不需要 listener 进程 ITPUB个人空间:Tvhe0h9WQ2ag
3.sqlplus sys/oracle@orcl
这种方式需要 listener 进程处于可用状态。最普遍的通过网络连接。
){'KJ^Gc9T0
以上连接方式使用 sys 用户或者其他通过密码文件验证的用户都不需要数据库处于可用状态,操作系统认证也不需要数据库可用,数据库用户认证放是由于采用数据库认证,所以数据库必需处于 open 状态。
:J"ukS.G&p5j0
ITPUB个人空间/W:Hyez_
作为普通用户进行登录 ITPUB个人空间YFM n5w lp4\
[oracle@dg1 admin]$ sqlplus sys/oracle
3oK6zV?;bjC0SQL*Plus: Release 10.2.0.1.0 - Production on Sun Feb 13 16:18:33 2011 ITPUB个人空间h\lB cYE)tl
Copyright (c) 1982, 2005, Oracle. All rights reserved. ITPUB个人空间 yL1@U;Q'U4A

f|'g8F#D,SC3{0ERROR: ITPUB个人空间[/Mt!gC+X{t u p
ORA-01034: ORACLE not available ITPUB个人空间 } M_N4EUV
ORA-27101: shared memory realm does not exist ITPUB个人空间|*T['FG4mt#zZ
Linux Error: 2: No such file or directory ITPUB个人空间1YT9j2Rb5aF/[i5[
ITPUB个人空间){I z,e"B(^+^
Enter user-name: ITPUB个人空间 ~ f{S,N r0C
ITPUB个人空间d%u3q C%Fd
initSID.ora
中的 Remote_Login_Passwordfile 对身份验证的影响 ITPUB个人空间1DQL*z6W,w#PV
三个可选值:
Bxw&ri4t0NONE
:默认值,指示 Oracle 系统不使用密码文件,通过操作系统进行身份验证的特权用户拥有 SYSORA SYSOPER 权限 ITPUB个人空间&\%w;U s ux
EXCLUSIVE

2CC)M^\4ee*xR01.
表示只有一个数据库实例可以使用密码文件
-AI!mIg[%^-k02.
允许将 SYSORA SYSOPER 权限赋值给 SYS 以外的其它用户 ITPUB个人空间q VM?-M
SHARED:
0k&j)W+@ f w[01.
表示可以有多个数据库实例可以使用密码文件 ITPUB个人空间)U4{u1\g!Q
2.
不允许将 SYSORA SYSOPER 权限赋值给 SYS 以外的其它用户
(Z t C4n/] ~ n0
所以,如果要以操作系统身份登录, Remote_Login_Passwordfile 应该设置为 NONE ITPUB个人空间/o-M]:`0E2@$zt

8rlc2`]1p0
关于域名 ( 主机名 ) 解析
*e,|vJp P p0/etc/hosts (UNIX) ITPUB个人空间3d*j1u2Q)xW
或者 windows\hosts(WIN98) winnt\system32\drivers\etc\hosts (WIN2000)
)m1L3g'Q#Rhx J&H0
客户端需要写入数据库服务器 IP 地址和主机名的对应关系。
f%Jd}1Z0127.0.0.1 dg1 ITPUB个人空间O5gcB0U
192.168.0.35 oracledb oracledb ITPUB个人空间)A?)Y3]&h-T
192.168.0.45 tomcat tomcat ITPUB个人空间;VJ nj!^e2e [oc
202.84.10.193 bj_db bj_db ITPUB个人空间dx b7Y kp g'b*W!s
有些时候我们配置好第一步后, tnsping 数据库服务器别名显示是成功的, ITPUB个人空间4y"p,K~s'O6J
但是 sqlplus username/password@servicename 不通 ,jdbc thin link 也不通的时候 , ITPUB个人空间1V,|+kf1n0D
一定不要忘了在客户端做这一步,原因可能是 DNS 服务器里没有设置这个服务器 IP 地址和主机名的对应关系。
m.k|tq(CiWlP%Do0
如果同时有私有 IP Internet 上公有 IP ,私有 IP 写在前面,公有 IP 写在后面。 ITPUB个人空间%K'r$k5Hl p1{ x+XNcP
编辑前最好留一个 备份,增加一行时也最好用复制粘贴,避免编辑 hosts 时空格或者 tab 字符错误。
FlJ4GbFm0UNIX
ORACLE 多数据库的环境, OS 客户端需要配置下面两个环境变量 ITPUB个人空间`mi^Xh
ORACLE_SID=appdb;export ORACLE_SID
t4GG7x$CK T,Be0TWO_TASK=appdb;export TWO_TASK
^)h'i:y!FZ0
来指定默认的目标数据库 ITPUB个人空间mG KZ[2_
ITPUB个人空间I)]?At(V3U!i T*B*T

Y;^5E SW8Y0
平时排错可能会用到的 ITPUB个人空间0l LL8Q2? Y
1
lsnrctl status 查看服务器端 listener 进程的状态 ITPUB个人空间2To8jqMt-V E6g
LSNRCTL>help
*Z_h;C/R0U/s0LSNRCTL>status ITPUB个人空间$G%jAv"J'[[|l/L
LSNRCTL> services
xS2Nt(`"H0
%NI:o\'`J ] p{3Dd2k02
tnsping 查看客户端 sqlnet.ora tnsname.ora 文件的配置正确与否,及对应的服务器的 listener 进程的状态。
^p,R6|k6f0[oracle@dg1 dbs]$ tnsping orcl ITPUB个人空间/DZ,gG }[JZjF
TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 13-FEB-2011 16:48:06 ITPUB个人空间l9X T0|S F/B_
Copyright (c) 1997, 2005, Oracle. All rights reserved.
)Q#g'U fpc#ex%mc c0Used parameter files:
l+Iv3aX0/u01/app/oracle/network/admin/sqlnet.ora ITPUB个人空间+u$MR$^i[
ITPUB个人空间xCN!a(gJ'qF
Used TNSNAMES adapter to resolve the alias
#u,Gy+` H]c0Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521))) (CONNECT_DATA = (SID = orcl))) ITPUB个人空间 L8S EvK(LtQ
OK (10 msec) ITPUB个人空间aj'p+@*iEJI

VJ&W:C5R O03
.查看 instance 是否已经启动 ITPUB个人空间$f|A.fBU lT s
SQL>select instance_name,host_name,status from v$instance;
.E_LHL _)i%`0
*Q/G Z!f*YeB0
查看数据库是打开还是 mount 状态。 ITPUB个人空间2H3elJ&N
SQL>select open_mode from v$database ITPUB个人空间_8H)P!n9^VaHX
INSTANCE_NAME STATUS
m F`N!r0------------------------------ ------------------------------------
[YZ A w0orcl OPEN
:Z2gV$fr7O/J0
j8Z$w"u T/d [0
使用 hostname 访问数据库而不是 tnsname 的例子 ITPUB个人空间q^wwU2f&c-kb%Y7Z#@U
使用 tnsname 访问数据库是默认的方式,但是也带来点问题,那就是客户端都是需要配置 tnsnames.ora 文件的。如果你的数据库服务器地址发生改变,就需要重新编辑客户端这个文件。通过 hostname 访问数据库就没有了这个麻烦。 ITPUB个人空间 @] {M)B8e
查看数据库名
0}'D IK\8L"Q0c0SQL> select name from v$database; ITPUB个人空间 Av(Sx M S2R
NAME ITPUB个人空间4Ud4T+z#EJ1_^q,F
--------------------------- ITPUB个人空间's\QZ zI9E#d$a
ORCL ITPUB个人空间3l:O0Z.kD+_

chi*R,H6y7jn4F0
需要修改服务器端 listener.ora
.Ku/b6h)R)Jg}+j0#
监听器的配置文件 listener.ora ITPUB个人空间Zwz*~V"fy
#
使用 host naming 则不再需要 tnsname.ora 文件做本地解析
CxgB:`;r:M di#]3l0# listener.ora Network Configuration File: d:\oracle\product\10.1.0\db_1\NETWORK\ADMIN\listener.ora ITPUB个人空间$H ZK*_OuW
# Generated by Oracle configuration tools.
Zg%D%P^$aw0SID_LIST_LISTENER =
+{9m0wS:H*i1j#G0(SID_LIST = ITPUB个人空间Tsh2n5KO+o)R
(SID_DESC = ITPUB个人空间 A!L+IO.B)ec A:i
# (SID_NAME = PLSExtProc)
T5p3A DP3@0(SID_NAME = orcl)
Z-j){L5H6Y6z/e {HT0(GLOBAL_DBNAME = ORCL)
0VO B1E3_0^0(ORACLE_HOME = /u01/app/oracle)
pvml.Vnl0# (PROGRAM = extproc) ITPUB个人空间{3W W{:j
)
bkS `Rp^RX,O0)
/m'q"L-n3Y!GS7|0LISTENER = ITPUB个人空间F*WXv:@M1C
(DESCRIPTION_LIST =
'A'w BT5s nY'F0(DESCRIPTION = ITPUB个人空间%@4pmJ n+lH'y&bY
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
Qv4N Eaw5e_%D6q0) ITPUB个人空间^y Lr"i^*v
(DESCRIPTION = ITPUB个人空间t:VgO.@ [
(ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521))
\M_*fYQu0)
2~dg*X!F!S0) ITPUB个人空间4W3})]^1|j'_y
客户端 sqlnet.ora 如果确认不会使用 TNSNAME 访问的话,可以去掉 TNSNAMES ITPUB个人空间[_2]{:Ql
# sqlnet.ora Network Configuration File: d:\oracle\product\10.1.0\db_1\NETWORK\ADMIN\sqlnet.ora
"IB5g6R!FiSq2~0# Generated by Oracle configuration tools. ITPUB个人空间 \j+Sly4t \gTkg
SQLNET.AUTHENTICATION_SERVICES= (NTS)
Q I)x6?z{0NAMES.DIRECTORY_PATH= (HOSTNAME)
)J C$b'I M)F0a:u M9b0Tnsnames.ora
文件不需要配置,删除也无所谓。
$sa@/F R%s;v0A0
下面就是网络和操作系统的配置问题了,怎么样能够解析我的主机名的问题了
[ ~ P l|$|$eUb0
可以通过下面的方式连接
Lx2T/G0BX3l0sqlplus sys/oracle@orcl
w*@!K D$|-X0
这样的话,会连接 orcl 这台服务器,并且 listener 来确定你所要连接的 service_name
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值