花了整个下午才把plsql developer给正常的启动,真的有的时候觉得自己很无助,稀里糊涂,每一步都会碰上问题,然后google,然后再悲剧,再google,知道解决问题,回过头来才发现,原来自己刚开始对plsql理解的并不对。用点儿时间把过程给记录下来:
?
问题一:
安装PLSQL Developer是需要有oracle client的,oracle官网的instantclient不错,免安装,下载来解压缩就可以使用了,我的就解压缩在D:\instantclient_10_2,在此得小小的配置一下:
首先来说明一下配置中可能用到的几个文件。位于$ORACLE_HOME/network/admin下:
sqlnet.ora 用在oracle client端,用于配置连接服务端oracle的相关参数.
tnsnames.ora 用在oracle client端,用户配置连接数据库的别名参数,就像系统中的hosts文件一样。
listener.ora 用在oracle server端,配置oracle服务端程序的监听办法,比如限制某些ip等参数。
一、客户端设置
1.sqlnet.ora
通过这个文件来决定怎样找一个连接中出现的连接字符串
示例文件:
# sqlnet.ora Network Configuration File: 安装盘符:\oracle\product\10.2.0\client_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)
?? SQLNET.AUTHENTICATION_SERVICES= (NTS)----这个表示采用OS认证,在数据库服务器上,可以利用sqlplus / as sysdba。
一般这个配置在windows上是ok的,在unix环境下可能会有问题,一般在unix下可以去掉这个配置。
?? NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES)----表示将首先利用tnsnames进行解析;如果tnsnames解析不到,将使用hostname解析;如果hostname解析不到,将采用onames进行解析;例如我们客户端输入:sqlplus? [email protected] ,那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.
?? 如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的IP地址然后去连接这个IP上global_name=test这个实例,当然我这里orcl并不是一个主机名。
2.tnsnames.ora
这个文件放在客户端机器上,记录客户端访问数据库的本地配置,其实就是定义网络服务,只有当sqlnet.ora中有"NAMES.DIRECTORY_PATH= (TNSNAMES)"这样的字样时,也就是客户端解析连接字符串的顺序中有TNSNAMES时,才会尝试使用这个文件。
?
示例文件:
# tnsnames.ora Network Configuration File: 安装盘符:\oracle\product\10.2.0\client_1\network\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
test_link = //网路服务名
(DESCRIPTION =
? (ADDRESS_LIST =
? (ADDRESS = (PROTOCOL = TCP)(HOST = 108.108.108.108)(PORT = 1521))//访问数据库使用的协议,数据库计算机的主机名或IP地址,数据库的端口号
? )
? (CONNECT_DATA =
? (SID = test) //数据库实例名
? )
)
二、服务器端设置listener.ora
?? 它是listener监听器进程的配置文件。关于listener进程就不多说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。所以如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。
示例文件:
# listener.ora Network Configuration File: 安装盘符:\oracle\product\10.2.0\client_1\network\admin\listener.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))
? )
)
?
?
看到上面的说明之后,我想你应该知道在我们的远程客户端需要什么了;没错,如果你的主机没有安装服务器的话,你需要拷贝来自服务器端的tnsnames.ora文件,具体内容可以参照修改一下,这个不难。我将network/admin/tnsnames.ora拷贝过来了,或者你可以自己编辑一个文件,都可以。接下来几步:
添加一个环境变量,名为TNS_ADMIN,值为tnsnames.ora文件所在路径(如:D:\oraclient,特别是重装后或其它操作,忘了TNS_ADMIN变量,plsql登陆就会报无法解析指定的连接标识符),这是为了能够找到上面说的tnsnames.ora。如果本机上安装了ORACLE,并且设置了ORACLE_HOME环境变量,那么会自动在%ORACLE_HOME%/network/admin/位置查找tnsnames.ora文件。
设置ORACLE的语言,添加环境变量:
“NLS_LANG = SIMPLIFIEDCHINESE_CHINA.ZHS16GBK”,(AMERICAN_AMERICA.US7ASCII 是ASCII编码类型,其它类型可自己到服务器看一下或网上查找一下)。
?
?
问题二:
以上都顺利解决后,你会选择打开PLSQL Developer,双击图标会显示输入用户名之类的图形界面,但是如果你是用过别的数据库系统,会发现,这个界面中并没有关于远程服务器的任何选项,当然如果忽略了,你将永远也连不上你的oracle服务器。这时候你需要设置一下客户端的oracle home;还是刚才那个图形界面,选择cancel后进入另一个界面,选择Tools->Preferences->Connection,将Oracle Home选项填入,就是你解压缩的D:\instantclient_10_2,OCI library,是instantclient目录下的oci.dll文件。重新登录即可成功连接,当然这个过程中我还是遇到了问题!
?
?
问题三:
要想连接远程服务器,首先你得启动服务器的监听器,启动监听器的命令就不说了,你安装oracle时有说明。选择登陆后,过了一段时间,出现“ORA-12170:TNS:连接超时”这样的报错,首先你应该看一下网络是否连接正常,一般这个都没错。如果不是网络错误却还出现同样的错误,那就可能是你服务器的防火墙问题了,我的就是来自防火墙。oracle关联到的1521端口没有对外打开;这时你就需要登录到服务器上进行一些设置:为了让其他计算机能够访问数据库,必须把下面端口打开: 端口1521(用于连接数据库), 端口1158(如果要用浏览器访问enterprise managment), 端口5560(如果要用浏览器访问isqlplus)。 你可以用图形界面下的工具 (系统 > 管理 > 安全级别和防火墙)。选择防火墙页面,并且增加上面的端口。
?
以上几步之后,我的plsql developer正常启动。