本文出自 “Focus on Oracle” 博客,请务必保留此出处http://www.jb51.cc/article/p-zfboxdml-xu.html
1,主要配置文件
1) sqlnet.ora
例:我们客户端输入
sqlplus sys/oracle@orcl
假如我的sqlnet.ora 是下面这个样子
sqlNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
那么,客户端就会首先在tnsnames.ora 文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的ip地址然后去连接这个ip上GLOBAL_DBNAME=orcl这个实例,当然我这里orcl并不是一个主机名
如果我是这个样子
NAMES.DIRECTORY_PATH= (TNSNAMES)
那么客户端就只会从tnsnames.ora查找orcl 的记录,括号中还有其他选项,如LDAP等并不常用。
2)tnsnames.ora
NAMES.DIRECTORY_PATH= (TNSNAMES)这样,也就是客户端解析连接字符串的顺序中有TNSNAMES是,才会尝试使用这个文件。
PROTOCOL:客户端与服务器端通讯的协议,一般为TCP ,该内容一般不用改。
HOST:数据库侦听所在的机器的机器名或IP 地址,数据库侦听一般与数据库在同一个机器上,所以当我说数据库侦听所在的机器一般也是指数据库所在的机器。在UNIX 或WINDOWS 下,可以通过在数据库侦听所在的机器的命令提示符下使用hostname 命令得到机器名,或通过ipconfig(for WINDOWS) or ifconfig (for UNIX )命令得到IP 地址。需要注意的是,不管用机器名或IP 地址,在客户端一定要用ping 命令ping 通数据库侦听所在的机器的机器名,否则需要在 hosts 文件中加入数据库侦听所在的机器的机器名的解析。
PORT:数据库侦听正在侦听的端口,可以察看服务器端的listener.ora 文件或在数据库侦听所在的机器的命令提示符下通过lnsrctl status [listener name] 命令察看。此处Port 的值一定要与数据库侦听正在侦听的端口一样。
ORCL:对应的本机,SALES 对应的另外一个IP 地址,里边还定义了使用主用服务器还是共享服务器模式进行连接
#连接的时候输入的 TNSNAME
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
# 下面是这个TNSNAME 对应的主机,端口,协议
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
# 使用专用服务器模式去连接需要跟服务器的模式匹配,如果没有就根据服务器的模式自动调节
(SERVER = DEDICATED)
# 对应service_name ,sqlPLUS>;show parameter service_name; 进行查看
(SERVICE_NAME = orcl)
)
)
# 下面这个类似
SALES =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sales)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
# 下面是这个TNSNAME 对应的主机,端口,协议
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
# 使用专用服务器模式去连接需要跟服务器的模式匹配,如果没有就根据服务器的模式自动调节
(SERVER = DEDICATED)
# 对应service_name ,sqlPLUS>;show parameter service_name; 进行查看
(SERVICE_NAME = orcl)
)
)
# 下面这个类似
SALES =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sales)
)
)
注意:如果数据库服务器用MTS ,客户端程序需要用database link 时最好明确指明客户端用dedicated 直连方式,不然会遇到很多跟分布式环境有关的ORACLE BUG 。一般情况下数据库服务器用直接的连接会好一些,除非你的实时数据库连接数接近1000 。
3. listener.ora
listener 监听器进程的配置文件。关于listener 进程就不多说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。所以如果不是使用的远程的连接,并且不需要使用OEM时,listener进程就不是必需的,同样的如果关闭listener 进程并不会影响已经存在的数据库连接。
Listener.ora 文件的例子
#listener.ora Network Configuration File: #E:\oracle\product\10.1.0\Db_2\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
# 下面定义LISTENER 进程为哪个实例提供服务 这里是ORCL ,并且它对应的ORACLE_HOME 和GLOBAL_DBNAME 其中GLOBAL_DBNAME 不是必需的除非
上面的例子是一个最简单的例子,但也是最普遍的。一个listener 进程为一个instance(SID) 提供服务。
监听器的操作命令
$ORACLE_HOME/bin/lsnrctl start,其他诸如stop,status 等。具体敲完一个lsnrctl 后看帮助。
[oracle@OCPServer]lsnrctl
LSNRCTL forSolaris: Version 11.2.0.3.0 - Production on 18-NOV-2012 12:37:18
Copyright (c) 1991,2011,Oracle.All rights reserved.
Welcome to LSNRCTL,type "help" forinformation.
LSNRCTL> help
The following operations are available
An asterisk (*) denotes a modifier or extended command:
start stopstatus
servicesversion reload
save_config trace spawn
change_password quitexit
set*show*
LSNRCTL>
LSNRCTL forSolaris: Version 11.2.0.3.0 - Production on 18-NOV-2012 12:37:18
Copyright (c) 1991,2011,Oracle.All rights reserved.
Welcome to LSNRCTL,type "help" forinformation.
LSNRCTL> help
The following operations are available
An asterisk (*) denotes a modifier or extended command:
start stopstatus
servicesversion reload
save_config trace spawn
change_password quitexit
set*show*
LSNRCTL>
上面说到的三个文件都可以通过如下图形的配置工具来完成配置
- netca
- netmgr
不同的连接方式
连接过程
当你输入sqlplus sys/oracle@orcl 的时候
3)如果listener 进程没有问题的话,建立与listener 进程的连接。
4)根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener 采取接下去的动作。默认是专用服务器模式,没有问题的话客户端就连接上了数据库的server process 。
5)这时候网络连接已经建立,listener 进程的历史使命也就完成了。
#---------------
几种连接用到的命令形式
[oracle@dg1 admin]$ sqlplus sys/oracle
sql*Plus: Release 10.2.0.1.0 - Production on Sun Feb 13 16:18:33 2011
Copyright (c) 1982,2005,Oracle.All rights reserved.
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory
Enter user-name:
sql*Plus: Release 10.2.0.1.0 - Production on Sun Feb 13 16:18:33 2011
Copyright (c) 1982,2005,Oracle.All rights reserved.
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory
Enter user-name:
initSID.ora 中的Remote_Login_Passwordfile 对身份验证的影响
三个可选值:
关于域名( 主机名) 解析
/etc/hosts (UNIX)
或者windows\hosts(WIN98) winnt\system32\drivers\etc\hosts (WIN2000)
客户端需要写入数据库服务器IP 地址和主机名的对应关系。
127.0.0.1 dg1
192.168.0.35 oracledb oracledb
192.168.0.45 tomcat tomcat
202.84.10.193 bj_db bj_db
但是sqlplus username/password@servicename 不通,jdbc thin link 也不通的时候,
一定不要忘了在客户端做这一步,原因可能是DNS 服务器里没有设置这个服务器IP 地址和主机名的对应关系。
如果同时有私有IP 和Internet 上公有IP ,私有IP 写在前面,公有IP 写在后面。
UNIX 下ORACLE 多数据库的环境,OS 客户端需要配置下面两个环境变量
ORACLE_SID=appdb;export ORACLE_SID
TWO_TASK=appdb;export TWO_TASK
来指定默认的目标数据库
平时排错可能会用到的
1)lsnrctl status 查看服务器端listener 进程的状态
LSNRCTL>help
LSNRCTL>status
LSNRCTL>services
LSNRCTL>status
LSNRCTL>services
[oracle@OCPServer]tnsping ocpserver
TNS Ping Utility forSolaris: Version 11.2.0.3.0 - Production on 18-NOV-2012 12:53:28
Copyright (c) 1997,Oracle.All rights reserved.
Used parameter files:
/opt/oracle/product/11.2.0.1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.88)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ocpserver)))
OK (20 msec)
[oracle@OCPServer]
TNS Ping Utility forSolaris: Version 11.2.0.3.0 - Production on 18-NOV-2012 12:53:28
Copyright (c) 1997,Oracle.All rights reserved.
Used parameter files:
/opt/oracle/product/11.2.0.1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.88)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ocpserver)))
OK (20 msec)
[oracle@OCPServer]
3)查看instance 是否已经启动
sql>select instance_name,host_name,status from v$instance;
查看数据库是打开还是mount 状态。
sql>select open_mode from v$database
INSTANCE_NAMESTATUS
------------------------------ ------------------------------------
orclOPEN
INSTANCE_NAMESTATUS
------------------------------ ------------------------------------
orclOPEN
使用hostname 访问数据库而不是tnsname 的例子
使用tnsname 访问数据库是默认的方式,但是也带来点问题,那就是客户端都是需要配置tnsnames.ora 文件的。如果你的数据库服务器地址发生改变,就需要重新编辑客户端这个文件。通过hostname 访问数据库就没有了这个麻烦。
查看数据库名
需要修改服务器端listener.ora
# 监听器的配置文件listener.ora
# 使用host naming 则不再需要tnsname.ora 文件做本地解析
# listener.ora Network Configuration File: d:\oracle\product\10.1.0\db_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
# (SID_NAME = PLSExtProc)
(SID_NAME = orcl)
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = /u01/app/oracle)
# (PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521))
)
)
# 使用host naming 则不再需要tnsname.ora 文件做本地解析
# listener.ora Network Configuration File: d:\oracle\product\10.1.0\db_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
# (SID_NAME = PLSExtProc)
(SID_NAME = orcl)
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = /u01/app/oracle)
# (PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521))
)
)
客户端sqlnet.ora 如果确认不会使用TNSNAME 访问的话,可以去掉TNSNAMES
下面就是网络和操作系统的配置问题了,怎么样能够解析我的主机名的问题了
可以通过下面的方式连接
sqlplus sys/oracle@orcl
这样的话,会连接orcl 这台服务器,并且listener 来确定你所要连接的service_name
1)ORA-12541: TNS: 没有监听器 显而易见,服务器端的监听器没有启动,另外检查客户端IP地址或端口填写是否正确。启动监听器: $ lsnrctl start 或 C:lsnrctl start
2)ORA-12500: TNS: 监听程序无法启动专用服务器进程 对于Windows而言,没有启动Oracle实例服务。启动实例服务: C:oradim –startup -sid myoracle
3)ORA-12535: TNS: 操作超时 出现这个问题的原因很多,但主要跟网络有关。解决这个问题,首先检查客户端与服务端的网络是否畅通,如果网络连通,则检查两端的防火墙
是否阻挡了连接。
4)ORA-12154: TNS: 无法处理服务名
检查输入的服务名与配置的服务名是否一致。另外注意生成的本地服务名文件(Windows下如D:oracleora92networkadmin tnsnames.ora,Linux/Unix下/network/admin/tnsnames.ora)里每项服务的首 行服务名称前不能有空格。
5)ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的SERVICE_NAME
6)ORA-12518 TNS:监听程序无法分发客户机连接
出现该报错有两个原因:在共享模式下是由于调度进程(dispatchers)太少,在独占模式下是由于进程数(proces ses)超过了数据库默认的最大进程数。
解决步骤:
1、show parameter process查看数据库允许最大进程数
2、select count(*) from v$session;查看当前系统进程数如果进程数不够,可通过扩大PGA来增大进程数
alter system set workarea_size_policy=auto scope=both;
alter system set pga_aggregate_target=512m scope=both;
alter system set pga_aggregate_target=512m scope=both;
3、show parameter dispatchers查看调度进程数量如果调度进程太少,则可执行:
alter system set dispatchers = '(protocol=tcp)(dispatchers=3)(service=oracle10xdb)';
6、Windows 下启动监听服务提示找不到路径
用命令或在服务窗口中启动监听提示找不到路径,或监听服务启动异常。打开注册表,进入HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/OracleOraHome92TNSListener项,查看ImagePath字符串项是否存在,如果没有,设定值为D:oracleora92BINTNSLSNR,不同的安装路径设定值做相应的更改。这种方法同样适用于Oracle实例服务,同 上,找到如同HKEY_LOCAL_MACHINE/SYSTEM/Current ControlSet/Services/Oracle ServiceMYORACLE项,查看ImagePath字符串项是否存在,如果没有,则新建,设定值为d:oracleora92 binORACLE.EXE MYORACLE。 以上是Oracle客户端连接服务器端常见的一些问题,当然不能囊括所有的连接异常。解决问题的关键在于方法与思路,而不是每种问题都有固定的答案
老外的思路
=============================================
ORA-12560 STARTING LISTENER ON NT - TROUBLESHOOTING
---------------------------------------------------
ORA-12560: TNS Protocol adapter error
Cause: A generic protocol adapter error occurred.
Action: Check addresses used forproper protocol specification. Before reporting thiserror,look at the error stack and check forlower level transport errors.For further details,turn on tracing and reexecute the operation. Turn off tracing when the operation is complete.
This is a high level error just reporting an error occurred inthe actual transport layer. Look at the next error down the stack and process that.
1.- Starting Listener withTCP/IP Protocol
Problem:
You start the TNS Listener from command line and the TCP/IP address fails witha TNS-12560.
Solution:
Check ifMicrosoft Winsock Proxy(WSP) Client is enabled on the Windows NT Server,ifthat is the casethen go to windows Control Panel,click WSP icon and select the disable Proxy Client option.
Explanation:
The Winsock application may fail to bind to a specific port on a Proxy Server computer when the Winsock is running Proxy Client.
2.- TNS-12560 TNS-512 Starting the listener.
Problem:
You tryto start up the listener and receive the following error stack:
TNS-12542: TNS:address already inuse
TNS-12560: TNS Protocol adapter error
TNS-00512: Address already inuse
32-bit Windows Error: 48: Unknown error
Error: TNS 512
Text: Address already inuse
--------------------------------------------
Cause: Specified listener address is already being used.
Action: Start your listener withan unused address.
Generally thisproblem may ocurr fora incorrect setting inthe listener.ora. Some causes of thisproblems may be:
a.- Some defined address inthe listeners.ora is been used. Make sure other listeners are not running. Either listener.log and screen output appear the address withproblem.
b.- Just for8i: inwindows NT the algorithm to acquire
the address has change,please check the Note 69026.1: Oracle 8i and socket LISTEN operations.
Explanation:
The listener will tryto acquire the address inexclusive mode,if thisis been used then the process to get it will fail.
3.- Starting the listener the errors ORA-12203,ORA-12560,NL-462 or NL-427 may be raised.
Problem:
You tryto start up the listener and receive the following errors
ORA-12203,NL-462 or NL-427.
Solution:
Recreate the listener.ora file.
Explanation:
Some corruption inthe listener.ora may get unable to the tnslsnr to work adequatly.
4.- Failed to start service,TNS-12560,TNS-00530 when create newlistener services
Problem:
To recreate Oracle TNS listener service on Windows NT,you deletethe service entry inregistry. When using lsnrctl to start the listener,you get the following errors:
LSNRCTL> start
Starting tnslsnr: please wait...
Failed to start service,error 3.
TNS-00530: Protocol adapter error
The Listener service is not recreated and the Listener would not start.
You are using a valid listener.ora file and protocol adapters.
Solution:
After you deletethe Listener service from registry,you have to reboot NT forit to take effect. Then you can use lsnrctl to start the Listener,which would re-create the listener service.
Explanation:
The Listener service is marked 'disabled',but it still exists after you deletethe service from registry.
ORA-12560 STARTING LISTENER ON NT - TROUBLESHOOTING
---------------------------------------------------
ORA-12560: TNS Protocol adapter error
Cause: A generic protocol adapter error occurred.
Action: Check addresses used forproper protocol specification. Before reporting thiserror,look at the error stack and check forlower level transport errors.For further details,turn on tracing and reexecute the operation. Turn off tracing when the operation is complete.
This is a high level error just reporting an error occurred inthe actual transport layer. Look at the next error down the stack and process that.
1.- Starting Listener withTCP/IP Protocol
Problem:
You start the TNS Listener from command line and the TCP/IP address fails witha TNS-12560.
Solution:
Check ifMicrosoft Winsock Proxy(WSP) Client is enabled on the Windows NT Server,ifthat is the casethen go to windows Control Panel,click WSP icon and select the disable Proxy Client option.
Explanation:
The Winsock application may fail to bind to a specific port on a Proxy Server computer when the Winsock is running Proxy Client.
2.- TNS-12560 TNS-512 Starting the listener.
Problem:
You tryto start up the listener and receive the following error stack:
TNS-12542: TNS:address already inuse
TNS-12560: TNS Protocol adapter error
TNS-00512: Address already inuse
32-bit Windows Error: 48: Unknown error
Error: TNS 512
Text: Address already inuse
--------------------------------------------
Cause: Specified listener address is already being used.
Action: Start your listener withan unused address.
Generally thisproblem may ocurr fora incorrect setting inthe listener.ora. Some causes of thisproblems may be:
a.- Some defined address inthe listeners.ora is been used. Make sure other listeners are not running. Either listener.log and screen output appear the address withproblem.
b.- Just for8i: inwindows NT the algorithm to acquire
the address has change,please check the Note 69026.1: Oracle 8i and socket LISTEN operations.
Explanation:
The listener will tryto acquire the address inexclusive mode,if thisis been used then the process to get it will fail.
3.- Starting the listener the errors ORA-12203,ORA-12560,NL-462 or NL-427 may be raised.
Problem:
You tryto start up the listener and receive the following errors
ORA-12203,NL-462 or NL-427.
Solution:
Recreate the listener.ora file.
Explanation:
Some corruption inthe listener.ora may get unable to the tnslsnr to work adequatly.
4.- Failed to start service,TNS-12560,TNS-00530 when create newlistener services
Problem:
To recreate Oracle TNS listener service on Windows NT,you deletethe service entry inregistry. When using lsnrctl to start the listener,you get the following errors:
LSNRCTL> start
Starting tnslsnr: please wait...
Failed to start service,error 3.
TNS-00530: Protocol adapter error
The Listener service is not recreated and the Listener would not start.
You are using a valid listener.ora file and protocol adapters.
Solution:
After you deletethe Listener service from registry,you have to reboot NT forit to take effect. Then you can use lsnrctl to start the Listener,which would re-create the listener service.
Explanation:
The Listener service is marked 'disabled',but it still exists after you deletethe service from registry.