Oracle的网络连接
无论使用应用程序还是sqlplus连接远端数据库,都必须建立客户端与数据库之间的连接。
oracle提供了Oracle Net Service组件,方便地配置和管理网络连接。
Oracle Net Service组成:
- Oracle Net
- Oracle Net Lisners
- Oracle Connection Listeners
- Oracle Net Configuration Assistant
- Oracle Net Manager
Oracle Net组件必须在服务器端和客户端都安装,它负责客户机与服务器之间连接的初始化、建立及维护工作。
Oracle网络连接流程描述:
- 客户端发起连接。确定服务器、监听端口、协议、数据库服务名。
- 客户端一旦与监听器建立连接,会在客户端生成用户进程,同时监听器会判断客户端所请求的服务名是否为自己所管理的服务名。(如果客户端传过来的连接字符串不包含服务器名,会报错,如果请求的服务名是自己管理的,监听器就会在数据库服务器上创建服务器进程。)
- 监听器在创建服务器进程以后,会将用户进程与服务器进程建立连接,之后,监听器退出与客户端的连接。
- 服务器进程根据用户进程提供的用户名和密码到数据字典中判断是否正确。
- 如果用户名密码不匹配则报错,如果匹配则分配PGA,并生成SESSION。
服务端监听器配置
无论是共享服务器连接还是专有服务器连接,数据库服务器端都必须配置监听。
监听程序即 Oracle Net Service,由一个oracle文件管理,该文件名为listener.ora,该文件的默认位置为$ORACLE_HOME/network/admin目录下
oracle监听程序只运行在数据库服务器上,完成客户连接请求作用。
oracle使用lsnrctl实用程序完成监听程序的配置和管理。
-
查看监听配置信息
下面操作可以看到:
- 监听器为:LISTENER
- 协议为:TCP
- 主机:oracle
- 端口:1521
可以使用NETCA配置监听器,也可以通过编辑listener.ora来配置监听器
[root@oracle ~]# cd $ORACLE_HOME/network/admin
[root@oracle admin]# ls
listener2004056PM5343.bak listener.ora samples shrept.lst tnsnames.ora
[root@oracle admin]# cat listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
-
新配置一个监听(vim编辑listener.ora)
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
LISTENER1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521))
)
)
-
启动新配置的监听
lsnrctl start:开启监听
lsnrctl stop:关闭监听
lsnrctl status:查看监听状态
如果lsnrctl start 不指定监听器,则开启默认LISTENER
监听的开启需要一定的时间
[root@oracle admin]# lsnrctl stop
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 09-4月 -2020 01:03:41
Copyright (c) 1991, 2013, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521)))
命令执行成功
[root@oracle admin]# lsnrctl start LISTENER1
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 09-4月 -2020 01:03:56
Copyright (c) 1991, 2013, Oracle. All rights reserved.
启动/u01/app/oracle/product/11.2.0/db_1/bin/tnslsnr: 请稍候...
TNSLSNR for Linux: Version 11.2.0.4.0 - Production
系统参数文件为/u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
写入/u01/app/oracle/diag/tnslsnr/oracle/listener1/alert/log.xml的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER1
版本 TNSLSNR for Linux: Version 11.2.0.4.0 - Production
启动日期 09-4月 -2020 01:03:56
正常运行时间 0 天 0 小时 0 分 0 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
监听程序日志文件 /u01/app/oracle/diag/tnslsnr/oracle/listener1/alert/log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521)))
监听程序不支持服务
命令执行成功
[root@oracle admin]# lsnrctl status;
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 09-4月 -2020 01:04:54
Copyright (c) 1991, 2013, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER1
版本 TNSLSNR for Linux: Version 11.2.0.4.0 - Production
启动日期 09-4月 -2020 01:03:56
正常运行时间 0 天 0 小时 0 分 58 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
监听程序日志文件 /u01/app/oracle/diag/tnslsnr/oracle/listener1/alert/log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521)))
服务摘要..
服务 "tiqs" 包含 1 个实例。
实例 "tiqs", 状态 READY, 包含此服务的 1 个处理程序...
服务 "tiqsXDB" 包含 1 个实例。
实例 "tiqs", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
数据库动态注册监听器
-
查看当前数据库的服务名
下面的操作看到,当前服务器得到服务名为tiqs
SQL> show parameter service_name
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
service_names string tiqs
-
查看当前数据库参数local_listener的值
下面的操作可以看到当前该参数为空,没有设置动态注册监听器的信息。
SQL> show parameter local_listener
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
local_listener string
-
修改local_listener动态注册oracle数据库
下面的操作一旦修改,立刻完成
SQL> alter system set local_listener='(address_list=(address=(protocol=tcp)(host=oracle)(port=1521)))';
系统已更改。
SQL> show parameter local_listener;
NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
local_listener string
(address_list=(address=(protoc
ol=tcp)(host=oracle)(port=1521
)))
sqlplus从客户端连接到数据库服务器时,虽然监听已启动,但是作为客户端还是需要有自己的配置。
在客户端需要修改tnsnames.ora
-
配置tnsnames.ora文件
[root@oracle admin]# vim tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
TIQS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.200)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = tiqs)
)
)
-
测试客户端到监听器是否通畅
下面的操作证明了,客户端到监听器是通畅的,但是还是不能够保证数据库的连接已经成功,因为如果数据库未启动,监听启动了一样可以ping得通。
[root@oracle admin]# tnsping oracle
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 09-4月 -2020 01:21:03
Copyright (c) 1997, 2013, Oracle. All rights reserved.
已使用的参数文件:
已使用 HOSTNAME 适配器来解析别名
尝试连接 (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.137.200)(PORT=1521)))
OK (0 毫秒)
监听程序管理
oracle使用lsnrctl实用程序来管理和维护监听。
-
查看监听管理指令
[root@oracle admin]# lsnrctl help
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 09-4月 -2020 01:24:52
Copyright (c) 1991, 2013, Oracle. All rights reserved.
以下操作可用
星号 (*) 表示修改符或扩展命令:
start stop status
services version reload
save_config trace spawn
change_password quit exit
set* show*
上面的操作可以看到很多监听可以使用的操作,下面是几个常用的监听指令介绍:
- lsnrctl start:启动监听,默认启动LISTENER,如果不是默认监听则需要自己指定启动的监听器名字
[root@oracle admin]# lsnrctl start LISTENER1 LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 09-4月 -2020 01:03:56 Copyright (c) 1991, 2013, Oracle. All rights reserved. 启动/u01/app/oracle/product/11.2.0/db_1/bin/tnslsnr: 请稍候... TNSLSNR for Linux: Version 11.2.0.4.0 - Production 系统参数文件为/u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora 写入/u01/app/oracle/diag/tnslsnr/oracle/listener1/alert/log.xml的日志信息 监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521))) 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521))) LISTENER 的 STATUS ------------------------ 别名 LISTENER1 版本 TNSLSNR for Linux: Version 11.2.0.4.0 - Production 启动日期 09-4月 -2020 01:03:56 正常运行时间 0 天 0 小时 0 分 0 秒 跟踪级别 off 安全性 ON: Local OS Authentication SNMP OFF 监听程序参数文件 /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora 监听程序日志文件 /u01/app/oracle/diag/tnslsnr/oracle/listener1/alert/log.xml 监听端点概要... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521))) 监听程序不支持服务 命令执行成功
- lsnrctl stop:关闭监听,如果不是默认监听则需要指定监听器的名字
[root@oracle admin]# lsnrctl stop LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 09-4月 -2020 01:03:41 Copyright (c) 1991, 2013, Oracle. All rights reserved. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521))) 命令执行成功
- lsnrctl service:查看监听为连接请求监控的服务内容
[root@oracle admin]# lsnrctl service LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 09-4月 -2020 01:32:31 Copyright (c) 1991, 2013, Oracle. All rights reserved. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521))) 服务摘要.. 服务 "tiqs" 包含 1 个实例。 实例 "tiqs", 状态 READY, 包含此服务的 1 个处理程序... 处理程序: "DEDICATED" 已建立:0 已拒绝:0 状态:ready LOCAL SERVER 服务 "tiqsXDB" 包含 1 个实例。 实例 "tiqs", 状态 READY, 包含此服务的 1 个处理程序... 处理程序: "D000" 已建立:0 已被拒绝:0 当前: 0 最大: 1022 状态: ready DISPATCHER <machine: oracle, pid: 13804> (ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=34116)) 命令执行成功
- lsnrctl reload:允许重载监听程序,如监听文件更新,可以用该指令使得修改生效,在重载过程中已经建立连接的客户机可以保持连接。
[root@oracle admin]# lsnrctl reload LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 09-4月 -2020 01:36:12 Copyright (c) 1991, 2013, Oracle. All rights reserved. 正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521))) 命令执行成功
- lsnrctl set:设置监听管理密码,防止未授权而操作监听器
客户端配置
-
本地命名
本地命名可以参考上面的配置 tnsnames.ora文件 部分
-
简单命名
简单命名网络连接是最简洁的连接方法,在配置方面要求很少,并且甚至不需要配置TCP/IP环境下的tnsnames.ora。
客户机只需要主机名或IP地址,端口号,以及数据库的服务名即可连接到数据库服务器。
oracle数据服务器支持的两种连接方式
oracle数据服务器提供了两种数据库连接的方式,一种是专有连接方式,另一种是共享连接的方式。
-
服务器进程
两种不同的连接方式分别对应了两种oracle服务器,专有服务器和共享服务器
-
共享连接(略)
-
专有连接(略)
数据库驻留连接池(略)