Oracle 远程链接oracle数据库服务器的配置

远程链接oracle数据库服务器的配置

by:授客 QQ1033553122

原理:

一、Oracle客户端与服务器端的通讯机制

1OracleNet协议

如下图所示,Oracle通过Oracle Net协议实现客户端与服务器端的连接以及数据传递。Oracle Net是同时驻留在Oracle数据库服务器端和客户端上的一个软件层,它封装了TCP/IP协议,负责建立与维护客户端应用程序到数据库服务器的连接。

  如下图所示,客户端发出的请求首先通过OracleNet协议转换,转换成可以通过网络传输的信息,通过TCP/IP网络将请求传输到数据库服务器端;服务器端接受到客户请求后要通过OracleNet协议转换,将请求转换成数据库可以解释执行的本地指令,并在服务器端执行(主要是一些输入输出操作)并将结果通过TCP/IP协议和OracleNet协议传输给客户端显示。



 

2、客户端与服务器端的连接过程

 在分析客户端与服务器端的连接机制之前,先要定义两个概念,一个是Oracle监听器,一个是Oracle网络服务名。

 Oracle数据库服务器通过一个名为“OracleNet监听器的组件接收来自客户端的连接请求。监听器是位于服务器端的一个后台进程,发送给数据库的客户端连接请求,首先被服务器端的监听器所侦听,并将请求所转交给对应的数据库实例,从而建立起客户端与服务器的连接。连接建立后,客户端与服务器端就可以直接进行通讯,不再需要监听器参与。

要实现监听器对客户请求的监听,需要对监听器进行配置,包括监听端口、监听器所在数据库的全局数据库名称、数据库实例等信息。

 Oracle网络服务名是一个标识符,它代表着客户端连接服务器的配置信息(实际上就是连接请求的内容),包括数据库主机地址、监听端口、全局数据库名称等内容。




如图所示,客户端与服务端的连接过程为:

  1首先在服务器端有一个常驻的监听器(监听服务要打开)监听客户端发出的连接请求

  2用户在客户端(企业服务器或SQL工具)输入用户名、口令及网络服务名,或在SQL命令行中输入类似CONNECT username/password@net_Service_name”的类似请求。

 3客户端查看网络服务配置文件tnsname.ora,将网络服务名映射为包含Oracle服务器地址、监听端口和全局数据库名的连接描述符

  4客户端根据连接描述符定位监听器,并通过网络将连接信息传递给监听器。

  5监听器查询监听配置文件listener.ora,找出所要连接的数据库服务器。

  6)客户机和服务器开始通信。

说明:

一,简单来说连接分为以下两种

1.本地连接:形如sql>conn user/pwd 建立的连接

2.远程连接:形如sql>conn user/pwd@service_name建立的连接.

本地连接无需监听,而远程链接则需要监听,需要配置listener.oratnsnames.ora等,这里oem链接比较特殊:就算在服务器端用oem连接数据库的时候也是通过服务名连接数据库也即远程连接,所以需要监听器.

二,oracle在网络连接上提供的中间件有

Name Server:命名服务,把服务命名集中在一台命名服务器上.用的不多,一般使用local tns解析.

Connection Manager:连接管理器,作为服务器端和客户端的中间层,服务器对客户端完全透明,客户端只能看到连接管理器所在的服务器.

 

操作

操作1-服务端配置-监听程序配置

第一步:

Windows下,如下图,打开配置和移植工具->Net Configuration Assistant”



UnixLinux,XWindow环境下的终端,输入命令netca

$ netca

 

注意:

1.XWindow字符界面下的操作,输入netca,会提示Set the DISPLAY environmentvariable,then re-run.必须开启桌面(其它命令dbca,netmgr也需要Xwindow环境的支持

$ startX 开启图形界面的桌面系统

然后,Applications -> System Tools->Terminal,新建终端terminal

$ netca

 

2.如果不是以oracle用户登录系统,并开启桌面系统,新建终端下输入上述命令可能会提示“No protocol specified……开启失败

 

第二步:如下图,选择监听程序配置,点击下一步



 

第三步:如下图,选择重新配置,点击下一步


 
 

第四步:如下图,选择“LISTENER”[刚安装完,就一个默认的LISTENER],点击下一步



 

第五步:如下图,提示监听程序正在运行,点击,停止监听程序



 

第六步:如下图,选择协议,我这里仅选择“TCP”协议,点击下一步



 

第七步:如下图,选择使用标准端口号1521”[默认就是1521,如果没被占用是可以用它的],点击下一步



备注:

到这一步,可能会提示1521正在被使用,有冲突,冲突解决后才可以启动监听,是否继续配置

解决方法:

进入cmd命令行,输入lsnrctl stop停止监听,然后再配置1521端口

 

第八步:如下图,选择,不配置另一个监听程序了,点击下一步



 

第九步:如下图,点击下一步

Oracle <wbr>远程链接oracle数据库服务器的配置


 

操作2-服务端配置-本地网络服务名配置

第一步:如下图,选择本地网络服务名配置,点击下一步



 

第二步:如下图,选择重新配置,点击下一步



 

第三步:如下图,选择需要重新配置的网络服务名,例中为“MYORCL”



 

第四步:如下图,输入服务名[通常是全局数据库名],点击下一步



 

第五步:如下图,选择需要的网络协议,点击下一步,我这仅选择TCP



 

第六步:如下图,输入主机名[可以是计算机名,也可以是ip],端口号[一般默认]



 

第七步:如下图,选择是,进行测试,点击下一步



 

8步:如下图,点击更改登陆



 

9步:输入安装过程中设置的未锁定账户和密码或者其它新建的账户信息,点击确定



 

说明

情形一:如下图,提示监听程序当前无法识别连接描述符中的请求的服务……listener does not currently know of service requested in connect descriptor ”



 

解决方法(Linux下配置)

再开个终端,编辑oracle的监听配置文件listener.ora,把host = localhostlocalhost改为具体的主机ip,保存

$ vi $ORACLE_HOME/network/admin/listener

# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

# Generated by Oracle configuration tools.

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

    )

  )

 

ADR_BASE_LISTENER = /u01/app/oracle

然后重新加载监听程序

# lsnrctl reload

 

重新更改登录测试,ok



备注:如果还不行,退出netca,再次打开,重新配置监听,然后配置网络服务名

 

解决办法(Windows下配置)

步骤1:如下图,sqlplus 登陆系统,然后输入命令“show parameter service_names”,查看服务名是否正确



 

步骤2:服务名正确的情况下,找到oracle安装目录下的lisnter.ora,修改文件,如下图



 

如下图找到

(SID_DESC =

………

)

在其后添加

(SID_DESC =

   (GLOABLE_DBNAME = myorcl)

(ORACLE_HOME = C:appAdministratorproduct11.2.0dbhome_1)

(SID_NAME = myorcl)

)

说明:

ORACLE_HOME 给出服务器上Oracle可执行程序的位置 

GLOBAL_DBNAME标识全局数据库名称。本项应该与当前Oracle服务的init.ora文件中的SERVICE_NAMES项一致

SID_NAME 含有用于本Oracle实例的Oracle SID的名称


 

步骤3.保存listener.ora文件,命令行下输入“lsnrctl stop”,停止监听,然后输入lsnrctl start启动监听

 

附:监听器的停止,启动,查看命令(不windowLinuxUnix

lsnrctl stop [listenername]#停止监听

lsnrctl start [listenername]#开启监听

lsnrctl status [listenername]#查看监听器状态

lsnrctl reload [listenername]#重启监听器

说明:默认情况可以不指定监听器名称,reload命令会重新读取listener.ora的内容,这个命令让用户不停止监听器的情况下,改变监听器的配置。但是对于sqlnet.ora的修改考虑一下情况:

1.如果之前sqlnet.ora没有被当前的监听器使用,这时必须关闭然后重启监听!

2.如果之前正在使用sqlnet.ora,那么lsnrctl reload是比较快的方式。当前已经建立的连接不会收到影响,动态监听服务完成的非常快,也几乎不受影响

 

情形二:如下图,提示“invalid username/password;logon denied……



解决方法:更改登陆,输入正确的用户名和密码

 

情形三:如下图,提示无监听程序……”



解决办法:

先配置监听程序,如果配置都没错,那么尝试在cmd命令行下先停止监听,再启动监听lsnrctl stoplsnrctl start

 

10步:如下图,配置成功的情况下,点击下一步



 

11步:如下图,默认,点击下一步



 

12步:如下图,选择”[如不需要的话],点击下一步



 

13步:点击下一步



 

14步:点击完成



 

注:本地网络服务名配置对应的配置文件为tnsnames.ora,Linux下查看,类似如下

[laiyu@localhost ~]$ cat $ORACLE_HOME/network/admin/tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

 

ORCL11G =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl11g)

    )

  )

说明:

ORACL11G网络服务名,可自定义替换,配置时一般采用默认的SERVICE_NAME

HOSTOracle服务器所在主机地址、主机名、localhost

SERVICE_NAMEoracle服务名(通常为全局数据库名),即Oracle实例名

 

操作3-服务端配置-查看网络或网络管理

第一步:

Windows下,如图,打开配置和移植工具-Net Manger”



 

UnixLinux下,如下,输入命令netmgr

$ netmgr

 

第二步:检查监听配置是否正确

 

第三步:检查服务命名是否正确,并测试



选中服务,点击左边的测试按钮,然后点击弹出界面的测试



 

结果说明

情形一:如下图,可能出现提示监听程序当前无法识别连接描述符中请求的服务



解决办法:连接类型设置成了共享服务器,把连接类型改成
数据库默认设置或者专用服务器即可




 

操作3-客户端配置

参考文档Oracle 11g即时客户端在windows下的配置

 

备注:

linux下远程oracle主机,发现主机内部都可以测试通过,外面也可以pingoracle主机,但是总是提示tns超时连接,关闭防火墙也不行,咋办?

 

解决方法:

1.停止防火墙

[root@localhost ~]# service iptables stop 

 

2.编辑防火墙配置文件

[root@localhost ~]# vim /etc/sysconfig/iptables 

在文件中添加红色选框的内容



然后保存配置文件

 

3.重启防火墙:

[root@localhost ~]# service iptables restart

iptables: Flushing firewall rules: [ OK ]

iptables: Setting chains to policy ACCEPT: filter [ OK ]

iptables: Unloading modules: [ OK ]

iptables: Applying firewall rules: [ OK ]

 

因为我们是配置在配置文件中的,重启后仍然生效,否则如下操作保存配置,以便linux重启后依然有效 

[root@localhost ~]# service iptables save 

iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

好了,可以连接上了了

原文地址:https://www.cnblogs.com/shouke/p/10158087.html