Oracle的远程连接注意事项

首先说明,我做实验的Oracle是安装在Linux系统的虚拟机内,连接方是在Windows7的pl/sql。

需要先了解几个概念,这些概念和MySQL是完全不同的。

  1. TNS简要介绍与应用

Oracle中TNS的完整定义:transparence Network Substrate透明网络底层,监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器。

TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置TNS也可以连接Oracle数据库,比如通过JDBC。如果通过TNS连接Oracle,那么客户端必须安装Oracle client程序。

Oracle当中,如果想访问某个服务器,必须要设置TNS,它不像SQL SERVER那样在客户端自动列举出在局域网内所有的在线服务器,只需在客户端选择需要的服务器,然后使用帐号与密码登录即可。而Oracle不能自动列举出网内的服务器,需要通过读取TNS配置文件才能列出经过配置的服务器名。

2、 Oracle的环境变量

在安装Oracle时,配置的几个环境变量可还记得?

export ORACLE_BASE=/usr/local/oracle #Oracle安装的基本路径,是自定义的。
export ORACLE_HOME=/usr/local/oracle/myoracle #真实的Oracle安装到的目录,也是自定义的,但是必须是上面的路径内
export ORACLE_SID=oracleSID#定义的一个操作系统的变量,该变量的值是Oracle数据库实例化的名称,可自定义,不可更改。尤其需要注意,这个变量的值一般设定为orcl,一旦安装完毕Oracle后,无法修改的(你要改了,数据库就瘫了)


和MySQL有什么区别?tns可以想象成一个驱动?(其实从实现功能来说,可以说是一个驱动),程序间的远程通信其实都需要socket,而Oracle改成了tns,我想,应该是这样。

回忆一下mysql的远程连接,服务端生成一个socker套接字文件,客户端通过该文件和服务端通信,是不是这么回事?Oracle改成了配置文件的形式,以及一个专用程序负责通信,是不是这么回事?负责通信的文件改成了ora后缀的文件。


Oracle的远程连接为以下步骤:

1、运行netca,也就是在Linux这个服务端,运行命令  netca,会弹出oracle net configure assistant,这个中文意思为:

Oracle 网络设置小助手,没什么好说的,Windows程序的风格,下一步就完事,设置的内容为绑定监听端口为1521.监听的名字为自定义,不过一般为listener,没必要自定义。

2. 启动tns服务,监听外部的连接,启动命令为:

[oracle@centos11 ~]$ lsnrctl start

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 27-SEP-2020 12:49:18

Copyright (c) 1991, 2009, Oracle. All rights reserved.

Starting /usr/local/oracle/myoracle/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /usr/local/oracle/myoracle/network/admin/listener.ora
Log messages written to /usr/local/oracle/diag/tnslsnr/centos11/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=centos11)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=centos11)(PORT=1521)))
STATUS of the LISTENER
------------------------
。。。。略略略
Listener Parameter File /usr/local/oracle/myoracle/network/admin/listener.ora
Listener Log File /usr/local/oracle/diag/tnslsnr/centos11/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=centos11)(PORT=1521)))
The listener supports no services
The command completed successfully
#从这些启动信息可以看出,通信协议使用的为tcp协议,端口为1521,通信配置文件为listener.ora
#通信连接建立后产生的日志为log.xml文件,路径上面都写的很清楚。
#这个文件像不像MySQL内的 mysql.sock文件??

 

看到 successfully即为启动成功。注意了,倒数第三行

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=centos11)(PORT=1521)))

这里的host的值为Linux这台机器的hostname,Windows肯定是认不出来的,怎么办?

很简单,给Windows做个域名解析即可,解析方法为修改hosts文件,具体细节请百度,不多说了。

前面说了半天环境变量ORACLE_SID,这里就该说道说道了。该变量需要存储在初始化文件内,文件名为init+变量值.ora,如果没有,需要从别的地方复制过来。(init意思为初始化,如果没有初始化,程序肯定无法启动的)

cp -a /usr/local/oracle/admin/oracle/pfile/init.ora.8262020163649  /usr/local/oracle/myoracle/dbs/initoracleSID.ora

两个文件路径分别为ORACLE_BASE/admin/oracle/pfile/ 和  ORACLE_HOME/dbs/

需要注意,ORACLE_SID的值是什么文件名就为  init+值.ora,区分大小写的哦。


以上远程连接的服务端就完成了,现在该配置pl/sql 这个Windows客户端了。

Windows的pl/sql 安装目录下的instantclient_11_2这个文件夹下的tnsnames.ora,记事本打开:

ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = Linux的IP (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oracle)
)
)

运行pl/sql 主程序,

Oracle的远程连接注意事项_java

点击确定即可连接Oracle,并进行管理工作了。