配置Oracle客户端——配置Oracle客户端课程目标使用户完成Oracle客户端的配置,从而使客户端能访问到数据库。要使一个客户端机器能连接oracle数据库,需要在客户端机器上安装oracle的客户端软件,唯一的例外就是java连接数据库的时候,当用jdbcthin模式连接数据库,不用装oracle的客户端软件。假如你在机器上安装了oracle数据库,就不需要再单独在该机器上安装oracle客户端了,因为在安装oracle数据库的时候会自动安装oracle客户端。配置Oracle客户端配置Oracle客户端用过sqlserver数据库,然后又用oracle的新手可能会有这样的疑问:为什么我用sqlserver的时候不用装sqlserver的客户端呢?原因很简单,sqlserver也是microsoft的,它在操作系统中集成了sqlserver客户端。如果microsoft与oracle有协议,将oracle客户端也集成到操作系统中,那我们也就不用在客户端机器上装oracle客户端软机就可访问Oracle数据库了,不过,这好像是不可能实现的事情。配置Oracle客户端也有的人会问:为什么在sqlserver中没有侦听端口一说,而在oracle中要配置侦听端口?其实sqlserver中也有侦听端口,只不过microsoft将侦听端口固定为1433,不允许你随便改动,这样给你一个错觉:sqlserver中没有侦听端口,咳,microsoft把太多的东西都封装到黑盒子里,方便使用的同时也带来相应的副作用。而oracle中的侦听端口直接在配置文件中,允许随便改动,只不过无论怎样改动,客户端的配置文件中的侦听端口要与oracle服务器端设置的侦听端口一致。配置Oracle客户端好,言归正传,我们如何做才能使客户端机器连接到oracle数据库呢?1.安装相关软件2.进行适当的配置配置Oracle客户端客户端服务器端在客户端机器上安装ORACLE的OracleNet通讯软件,它包含在oracle的客户端软件中。安装oracle数据库1.在适当的位置安装适当的软件:配置Oracle客户端2.进行适当的配置客户端服务器端1.正确配置了sqlnet.ora文件:NAMES.DIRECTORY_PATH=(TNSNAMES,….)NAMES.DEFAULT_DOMAIN=DB_DOMAIN一般情况下我们不用NAMES.DEFAULT_DOMAIN参数。如果想不用该参数用#注释掉或将该参数删除即可,对于NAMES.DIRECTORY_PATH参数采用缺省值即可,对于NAMES.DEFAULT_DOMAIN参数有时需要注释掉,在下面有详细解释。2.正确配置了tnsname.ora文件1.保证listener已经启动2.保证数据库已经启动。如果listener没有启动,用:lsnrctlstart[listenername]lsnrctlstatus[listenername]如果数据库没有启动,用:Oracle9i:sqlplus“/assysdba”sqlplusstartupOracle8i:svrmgrlsvrmgrlconnectinternalsvrmgrlstartup与网络配置相关的文件用图形工具配置客户端NetConfigurationAssistant在Oracle8i中,这个工具称为Net8ConfigurationAssistant。利用该工具我们可以对Oracle客户端进行配置,使Oracle客户端连接到Oracle数据库,同时我们也可以对Oracle服务器端的Listener进行配置,使之适合我们的特殊需要。这个图形化的工具实际上最后将我们输入的信息保存到Oracle的配置文件中,利用这个特点,我们也可以避开这个图形工具,而是直接修改Oracle的配置文件,从而比较快速的配置客户端。用图形工具配置客户端1.启动图形工具用图形工具配置客户端2。选择”本地Net服务名配置”用图形工具配置客户端3。选择”添加”,可以根据需要选择其它功能用图形工具配置客户端4。选择”Oracle8i或更高版本数据库或服务”,如果连接Oracle8i以下的数据库,则选择下一个。用图形工具配置客户端5。在服务名栏中输入数据库的服务名,一般情况下服务名等于数据库名,该栏不能随便填写,一定要与数据库的服务名一致,否则连接数据库时会引起错误。用图形工具配置客户端6。协议一般选择TCP,视具体情况决定用图形工具配置客户端7。输入listener所在机器的计算机名或IP地址,一般情况下,listener与数据库在同一台机器上,所以此处一般也为数据库所在机器的机器名或IP地址。注意机器有两个网卡的情况。用图形工具配置客户端8。对当前对数据库的配置进行测试用图形工具配置客户端9。默认情况下,图形工具会用system/manager连接数据库,如果数据库的密码不是manager则会给出如图所示的错误,此时单击”更改登录”按钮,弹出一个对话框,数据正确的密码,或用另一个用户进行测试用图形工具配置客户端用图形工具配置客户端10。配置正确用图形工具配置客户端11。给当前的配置起个名字,可以是你喜欢的任意的名字,在用程序或sql*plus连接数据库时要用到该名字用图形工具配置客户端用图形工具配置客户端用图形工具配置客户端12。用新配置的网络服务名登录sql*plus,对数据库进行操作。手工配置Oracle客户端•如何正确配置tnsname.ora文件:可以在客户端机器上使用oracleNetConfigurationAssistant或oracleNetManager图形配置工具对客户端进行配置,该配置工具实际上修改tnsnames.ora文件。所以我们可以直接修改tnsnames.ora文件,下面以直接修改tnsnames.ora文件为例:该文件的缺省位置为:…\network\admin\tnsnames.ora(forwindows)…/network/admin/tnsnames.ora(forunix)手工配置Oracle客户端此处,假设服务器名为testserver,服务名为orcl.testserver.com,使用的侦听端口为1521,则tnsnams.ora文件中的一个test网络服务名(数据库别名)为:test=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)))手工配置Oracle客户端红色的内容为需要根据实际情况修改的内容,现解释如下:PROTOCOL:客户端与服务器端通讯的协议,一般为TCP,该内容一般不用改。HOST:数据库侦听所在的机器的机器名或IP地址,数据库侦听一般与数据库在同一个机器上,所以当我说数据库侦听所在的机器一般也是指数据库所在的机器。在UNIX或WINDOWS下,可以通过在数据库侦听所在的机器的命令提示符下使用hostname命令得到机器名,或通过ipconfig(forWINDOWS)orifconfig(forUNIX)命令得到IP地址。需要注意的是,不管用机器名或IP地址,在客户端一定要用ping命令ping通数据库侦听所在的机器的机器名,否则需要在hosts文件中加入数据库侦听所在的机器的机器名的解析。PORT:数据库侦听正在侦听的端口,可以察看服务器端的listener.ora文件或在数据库侦听所在的机器的命令提示符下通过lnsrctlstatus[listenername]命令察看。此处Port的值一定要与数据库侦听正在侦听的端口一样。SERVICE_NAME:在服务器端,用system用户登陆后,sqlplusshowparameterservice_name命令察看。手工配置Oracle客户端如何利用配置的网络服务名连接到数据库:用sqlplus程序通过test网络服务名进行测试,如sqlplussystem/manager@test。如果不能连接到数据库,则在tnsname.ora文件中的test网络服务名(netservice)后面加上sqlnet.ora文件中NAMES.DEFAULT_DOMAIN参数的值,此处我的参数值为testserver.com,将其加到网络服务名后面,修改后的tnsname.ora中关于该网络服务名的内容为:test.testserver.com=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)))手工配置Oracle客户端•用sqlplus程序通过test.testserver.com网络服务名测试,如sqlplussystem/manager@test.testserver.com。•关于为什们在网络服务名后面加NAMES.DEFAULT_DOMAIN参数值,就需要了解sql*plus连接数据库的原理,我在后面解决12154常见故障中给出了详细的说明。•在此处我想说的是,什么情况下会引起oracle自动设置NAMES.DEFAULT_DOMAIN参数?•出现这种情况的典型环境为:1.windows的客户端的‘我得电脑属性计算机名更改其它…此计算机的主DNS后缀’中设置了‘primarydnssuffix’,因为在这种情况下安装Oracle客户端时,会在sqlnet.ora文件中自动设置NAMES.DEFAULT_DOMAIN参数。2.机器启动时加入windows的域中。此情况实际为第一种情况。手工配置Oracle客户端•如果上面的招数还不奏效的话,只好用一下乾坤大挪移了。•将客户端的网络服务名部分•test.testserver.com=•(DESCRIPTION=•(ADDRESS_LIST=•(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))•)•(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com))•)•拷贝到服务器的tnsnames.ora文件中。然后再服务器端用sqlplussystem/manager@test.testserver.com连接到数据库。•如果能连接成功,说明你的客户端与服务器端的网络有问题。•如果连接不成功,用前面的部分检查网络服务名部分部分是否正确,如果确信网络服务名部分正确而且所有的客户端都连不上数据库则可能为系统TCP/IP或Oracle系统有问题,建议重新安装数据库。常见故障解决办法TNS-12154(ORA-12154):TNS:couldnotresolveservicename该错误表示用于连接的网络服务名在tnsnames.ora文件中不存在,如上面的tnsnames.ora中的网络服务名只有test,假如用户在连接时用sqlplussystem/manager@test1则就会给出TNS-12154错误。要注意的是,有时即使在tnsnames.ora文件中有相应的网络服务名,可是用该网络服务名连接时还会出错,出现这种情况的典型环境为windows的客户端的‘我得电脑属性计算机名更改其它…此计算机的主DNS后缀’中设置了‘primarydnssuffix’,因为在这种情况下安装客户端时,会在sqlnet.ora文件中自动设置NAMES.DEFAULT_DOMAIN参数,或许当把计算机加入域中安装oracle客户端时也会出现这种情况。这种情况下典型的oracle配置文件如下(在客户端的机器上):常见故障解决办法sqlnet.ora文件:NAMES.DIRECTORY_PATH=(TNS