被Oracle的远程连接困扰良久,经常新建一个数据库就要进行远程连接,然后就出现各种各样的问题,折腾半天也弄不好,这次终于解决了,决定记录一下。
场景:远程服务器上的Oracle新建了一个数据库,想通过本地的PLSQL连接上远程数据库进行操作。
三个文件:
listener.ora、tnsnames.ora和sqlnet.ora 这3个文件是关系oracle网络配置的3个主要文件,都是放在 oracle\product\11.2.0\server\network\ADMIN目录下。
其中listener.ora是和服务器端相关,而 tnsnames.ora和sqlnet.ora主要的还是和客户端关系紧密。
所有Oracle客户端都有这三个文件,但是和你连接远程数据库有关的只有远程数据库上的listener.ora文件,远程数据库上的另外两个文件是在以它自己为客户端访问其他的数据库时才会用到的!
- 之前连接不上远程数据库,以为是自己的数据库出了什么问题,联想到拨打号码的逻辑,以为自己的“号码”没有拨对之类,就在本地的配置文件中一通乱改,其实连接远程数据库和本地数据库根本没有关系。
- 远程数据库连接只是通过一个网络服务访问到服务器上的端口,然后服务器的Listener将访问解析成数据库连接,所以要连接远程数据库就去配置远程数据库,不需要配置本地数据库。
总结:配置远程数据库连接只需要配置远程数据库上的listener.ora文件。但是我们还是三个文件都仔细讲一下。
sqlnet.ora——客户端
通过这个文件来决定怎样找一个连接中出现的连接字符串
示例文件:
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES,EZCONNECT)
#NAMES.DEFAULT_DOMAIN = oracle.com123
内容说明:
SQLNET.AUTHENTICATION_SERVICES= (NTS)
- 表明用户连接数据库用哪种验证方式 主要两种:
(1)NTS: 表示系统身份验证 —用户名和口令可输可不输 conn / as sys dba;
(2)NONE:oralce数据库身份验证— 必须输入用户名和口令 conn system/oracle as sysdba;
在unix环境下可能会有问题,一般在unix下可以去掉这个配置。
NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES,EZCONECT)
- 表示将首先利用tnsnames进行解析;如果tnsnames解析不到,将使用hostname解析;如果 hostname解析不到,将采用onames进行解析;最后使用EZCONNECT解析。例如我们客户端输入:
SQL> conn system/oracle@orcl
那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.
如果没有相应的记录则尝试把