Oracle 远程链接oracle数据库服务器的配置
远程链接oracle数据库服务器的配置
by:授客 QQ:1033553122
原理:
一、Oracle客户端与服务器端的通讯机制
1、OracleNet协议
如下图所示,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.ora,tnsnames.ora等,这里oem链接比较特殊:就算在服务器端用oem连接数据库的时候也是通过服务名连接数据库也即远程连接,所以需要监听器.
二,oracle在网络连接上提供的中间件有
Name Server:命名服务,把服务命名集中在一台命名服务器上.用的不多,一般使用local tns解析.
Connection
Manager:连接管理器,作为服务器端和客户端的中间层,服务器对客户端完全透明,客户端只能看到连接管理器所在的服务器.
操作
操作1-服务端配置-监听程序配置
第一步:
Windows下,如下图,打开“配置和移植工具->Net Configuration
Assistant”
Unix、Linux下,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端口
第八步:如下图,选择“否”,不配置另一个监听程序了,点击“下一步”
第九步:如下图,点击“下一步”
操作2-服务端配置-本地网络服务名配置
第一步:如下图,选择“本地网络服务名配置”,点击“下一步”
第二步:如下图,选择“重新配置”,点击“下一步”
第三步:如下图,选择需要重新配置的网络服务名,例中为“MYORCL”
第四步:如下图,输入服务名[通常是全局数据库名],点击“下一步”
第五步:如下图,选择需要的网络协议,点击“下一步”,我这仅选择TCP。
第六步:如下图,输入主机名[可以是计算机名,也可以是ip],端口号[一般默认]
第七步:如下图,选择“是,进行测试”,点击“下一步”
第8步:如下图,点击更改“登陆”,
第9步:输入安装过程中设置的未锁定账户和密码或者其它新建的账户信息,点击确定
说明
情形一:如下图,提示“监听程序当前无法识别连接描述符中的请求的服务……listener does not currently know of
service requested in connect
descriptor ”
解决方法(Linux下配置):
再开个终端,编辑oracle的监听配置文件listener.ora,把host = localhost的localhost改为具体的主机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:\app\Administrator\product\11.2.0\dbhome_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启动监听
附:监听器的停止,启动,查看命令(不分window、Linux\Unix)
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 stop,lsnrctl 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
HOST:Oracle服务器所在主机地址、主机名、localhost等
SERVICE_NAME:oracle服务名(通常为全局数据库名),即Oracle实例名
操作3-服务端配置-查看网络或网络管理
第一步:
Windows下,如图,打开“配置和移植工具-》Net Manger”
Unix、Linux下,如下,输入命令netmgr
$ netmgr
第二步:检查监听配置是否正确
第三步:检查服务命名是否正确,并测试
选中服务,点击左边的测试按钮,然后点击弹出界面的测试
结果说明
情形一:如下图,可能出现提示“监听程序当前无法识别连接描述符中请求的服务”
解决办法:连接类型设置成了共享服务器,把连接类型改成“数据库默认设置”或者“专用服务器”即可
操作3-客户端配置
参考文档“Oracle 11g即时客户端在windows下的配置”
备注:
linux下远程oracle主机,发现主机内部都可以测试通过,外面也可以ping通oracle主机,但是总是提示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 ]
好了,可以连接上了了
Oracle 远程链接oracle数据库服务器的配置的更多相关文章
- SQLServer 远程链接MySql数据库详解
SQLServer 远程链接MySql数据库详解 by:授客 QQ:1033553122 测试环境: Microsoft Windows XP Professional 版本2000 Service ...
- SQLServer 2005客户端远程连接sql2008 数据库服务器
SQL2005客户端远程连接sql2008 数据库服务器 by:授客 QQ:1033553122 准备工作: 客户端所在pc机配置: 配置数据源 控制面板-管理工具-ODBC数据源-系统DSN-添加- ...
- SQLSERVER远程链接Oracle数据库
原文地址: http://blog.sina.com.cn/s/blog_45eaa01a0102ywuk.html 使用SQL链接服务器远程访问Oracle数据库 在本机上通过SQL数据库的链接 ...
- ORACLE 远程导入导出数据库
Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中. ...
- 用MyEclipse10.0远程连接Mysql数据库服务器
说明:本文档所有的操作均在满足以下条件的情况下操作, A.远程Linux服务器已经安装好MySQL数据库 B.本地电脑可以ping通远程服务器 C.已经成功安装了Myeclipse 一.下载mysql ...
- MySQL数据库服务器 主从配置
A B 为两台 MySQL 服务器,均开启二进制日志,数据库版本 MySQL 5.5 一.服务器参数 [A 服务器 192.168.1.100] server-id = 1 binlog-do-d ...
- SqlDbx远程链接DB2数据库
1.首先下载IBM的IBM Data Server Client,百度云链接:http://pan.baidu.com/s/1kVBVjan 密码:2gtz 2.安装好客户端之后,打开cmd,运行db ...
- 【数据库开发】Redis数据库服务器启动配置
Redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sor ...
- jdbc java远程连接mysql数据库服务器
首先,需要注意以下几点: 1.手机需要获得可以访问网络的权限: 2.导入的jdbc驱动的版本需要与mysql服务器的版本相近: 3.mysql默认的访客是只允许本机(localhost),不允许其他主 ...
随机推荐
- 再谈C#委托与事件
之前写过一篇关于C#委托与事件的文章(见<C#委托和事件例析>),不过还是收到一些网友的提问.所以,今天再换另一个角度来详解一下这个问题. 一.在控制台下使用委托和事件 我们都知道,C#中 ...
- vue父组件传参给子组件
其实组件之间传参有很多种方法: 1.通过本地存储 2.使用vuex状态管理 今天记录一下第三种方法 1.首页我们先创建一个项目(创建项目自行百度) 2.打开项目,在components文件夹下新建一个 ...
- spring boot实现ssm(2)功能
spring 和 mybatis 整合的那篇: ssm(2) . 配置文件比ssm(1) 更多, 在做项目的时候, 配置文件是一个让人头大的事情. 那么在spring boot中, 实现相同功能, 需 ...
- postgresql 常用命令
普通用法: sudo su - postgres 切换到postgres用户下: psql -U user -d dbname 连接数据库, 默认的用户和数据库是postgres \c dbname ...
- tomcat 虚拟目录
在webapps同级目录 下建立一个webapps_abc的目录,将网站根目录abc文件夹放入webapps_abc目录下: 找到conf目录下的,server.xml文件,在service节点下添加 ...
- 【IT笔试面试题整理】给定一个数组a[N]构造数组b [N]
[来源]:腾讯2013实习生笔试 给定一个数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]-a[N-1] / a[j])空间复杂度和O(n)的时间复杂度:除遍历计数器与a ...
- mysql索引总结(2)-MySQL聚簇索引和非聚簇索引
mysql索引总结(1)-mysql 索引类型以及创建 mysql索引总结(2)-MySQL聚簇索引和非聚簇索引 mysql索引总结(3)-MySQL聚簇索引和非聚簇索引 mysql索引总结(4)-M ...
- IIS 共享目录读写报错 Access to the path:“\\192.168.0.1\1.txt”is denied解决方案
这个是IIS权限的问题,主要修改了以下地方,如果两台电脑有相同的用户名和密码可以跳过第一步 1.找到共享目录的文件夹,属性=>共享,给电脑创建一个新用户,共享文件下添加新用户的读写权限,然后对应 ...
- WPF备忘录(6)WPF实现打印功能
在WPF 中可以通过PrintDialog 类方便的实现应用程序打印功能,本文将使用一个简单实例进行演示.首先在VS中编辑一个图形(如下图所示). 将需要打印的内容放入同一个<Canvas> ...
- sql语句将查询的结果拼接成字符串
表样: sqlserver: --方法1 DECLARE @STR VARCHAR(8000) SELECT @STR=ISNULL(@STR+',','')+userID FROM (SELECT ...