数据库网络(监听)

1. 理解监听器

# 启动和关闭监听(oracle用户下执行)
[oracle@kevin ~]$ lsnrctl start
[oracle@kevin ~]$ lsnrctl stop# 几种连接数据库用到的命令形式:
1)sqlplus "/ as sysdba" 这是典型的操作系统认证,不需要listener进程,数据库即使不可用也可以登录。
2)sqlplus username/password 不需要listener进程,登录本机数据库,数据库实例启动即可。
3)sqlplus username/password@tnsname需要listener进程,最常见的远程登录模式,需要启动数据库实例和listener进程。1、实例以 service 的形式对外提供客户端访问支持,监听器负责注册 service  。2、Service_name 对外屏蔽了实例和数据库的复杂描述。 3、客户端 tnsnames.ora 中 SERVICE_NAME 与服务器端 listener.ora 的静态监听中 GLOBAL_DBNAME 等同。4、listener.ora 中监听器的 SID_NAME 与实例的 SID 等同,对应 instance_name。5、一个 linstener.ora  可以描述多个监听器。 6、一个 tnsnames.ora  可以描述多个网络连接符。  7、一个 listener.ora 可以为多个数据库描述监听器。  8、一个实例可以对应多个 service_name。

2. 对应关系

1. 相关命令

# 启动图形化界面
netca
netmgr
# 注意
配置监听时,tns的service_name 与 listener的global_name对应,服务端的tnsnames.ora也要配置# 查看监听配置文件
vim $ORACLE_HOME/network/admin/listener.ora# 查看sid
select instance_name from V$instance;# 查看service_names和instance_name
SQL> show parameter instance_name
NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
instance_name                string  orclSQL> show parameter service_names
NAME                     TYPE    VALUE
------------------------------------ ----------- ------------------------------
service_names                string  orcl.example.com

2. 客户端连接Oracle服务器流程

1. 客户端使用sqlplus system/oracle@ORCL# tnsnames.ora
ORCL =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.202.132)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))
根据tnsnames.ora的配置,这里ORCL就是orcl这个SERVICE_NAME所对应的NET SERVICE NAME,只有用sqlplus system/oracle@ORCL才行,NET SERVICE NAME可以随意设置,但是当源数据库GLOBAL_NAME=TRUE时,link_name必须与远程数据库的全局数据库名global_name相同;否则,可以任意命名2. NET SERVICE NAME(ORCL)映射到Oracle服务器监听文件listener.ora# listerner.ora
SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = orcl)(ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)(SID_NAME = orcl))(SID_DESC =(GLOBAL_DBNAME = orcl2)(ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)(SID_NAME = orcl))     )       LISTENER =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.202.132)(PORT = 1521)))   ADR_BASE_LISTENER = /u01/app/oracletnsnames.ora与listerner.ora的连接(对应)基于参数SERVICE_NAME,通常情况下,我们会设置SERVICE_NAME和INSTANCE_NAME(SID)一致。这里还要注意的是,SERVICE_NAME虽然可以脱离INSTANCE_NAME搞别名,但是必须对应listener.ora里配置的GLOBAL_DBNAME,否则就算配好了静态监听,也是注册不了服务的。# SERVICE_NAME和GLOBAL_DBNAME:
这两个参数之所以放在一起讲,是因为他们往往是成对出现的。SERVICE_NAME出现在tn snames.ora文件中,是客户端要请求的服务名。GLOBAL_DBNAME出现在listener.ora文件中,是服务器提供的服务名。# 查看
show paramerer service_names
# 修改
alter systemset service_name='servicename' scope=both二者对应,实现了listerner.ora/tnsnames.ora的重要功能——监听、请求与验证。4. listener.ora 基于SID_NAME指定连接实例,就是数据库实例名,在Linux环境大小写敏感
SID_NAME 就是SID和INSTANCE_NAME# ORACLE_SID:(ORACLE SYSTEM IDENTIFIER)以环境变量的形式出现的。Oracle实例是由SGA和一组后台进程组成的,实例的创建和启动需要一个参数文件,而参数文件的名称就是由ORACLE_SID决定的。对于init文件,缺省的文件名称是init<ORACLE_SID>.ora,对于spfile文件,缺省的文件名称是spfile<ORACLE_SID>.ora设置不同的ORACLE_SID值,就可以默认使用不同的参数文件启动不同的数据库实例。另外,ORACLE_SID的作用远远不是作为一个实例入口这么简单的,在实例启动后,实例名称INSTANCE_NAME也是从ORACLE_SID得到的。# INSTANCE_NAME:实例名称,这是Oracle实例的名字,用来区分不通的实例。在Oracle9i之前,该名字存储在两个地方:参数文件和数据库的内部试图(V$INSTANCE),而在Oracle10g之后的版本中,该名字不再出现在参数文件中,而是动态从系统中获得,默认是取自ORACLE_SID。INSTANCE_NAME的作用除了区别不同实例之外,在监听器动态注册时,还会用于向监听器注册。比如instance_name=zlm,监听中将动态注册Instance "zlm",status READY信息。# 查看以上两个参数
# 查看sid
select instance_name from V$instance;
# 查看instance_name
SQL> show parameter instance_name

3. 涉及配置文件

1. tnsnames.ora

# 用在oracle client端,用户配置连接数据库的别名参数,就像系统中的hosts文件一样。提供了客户端连接某个数据库的详细信息,主机地址,端口,数据库实例名等。# 示例:
ORCL =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.147)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))
PROTOCOL参数一般是TCP,可以根据服务器情况选择一种配置方式。
HOST 一般是ip地址,如果是主机名,则应该在客户端系统的host文件上配好主机名和ip地址的映射关系。PORT 标准是1521,根据服务器端的监听端口而定。

2. listener.ora

tnslsnr进程是监听、并接受远程连接数据库请求的监听进程。listener.ora是tnslsnr进程的配置文件,监听的参数都是从该配置文件中读取,该文件位于服务端。如果你只需要在本地连接数据库,不接受远程连接,那么也不需要启动tnslsnr进程,也不需要去维护listener.ora文件。
启动监听进程的命令,在命令模式下,执行lsnrctl start命令就启动了监听进程tnslsnr。# 示例:
SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = PLSExtProc)(ORACLE_HOME = /oracle/product/10.2.0/db_1)(PROGRAM = extproc))(SID_DESC =(GLOBAL_DBNAME = orcl)(ORACLE_HOME = /oracle/product/10.2.0/db_1)(SID_NAME = orcl))(SID_DESC =(ORACLE_HOME = /oracle/product/10.2.0/db_1/)(SID_NAME = eas)))LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.147)(PORT = 1521))(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))))LISTENER部分包含协议地址列表,每个实例一个入口。SID_LIST_LISTENER部分标识全局数据库名称、标识监听程序正在服务的每个实例的Oracle软件主目录以及实例或SID。当你执行命令sqlplus username/password@tnsname时,一般处理过程如下:
1) 查询sqlnet.ora看看名称的解析方式,由参数NAMES.DIRECTORY_PATH控制,常用参数值TNSNAME和hostname,不指定参数则默认使用TNSNAME。
2) 如果使用TNSNAME,则查询tnsnames.ora文件,从里边找tnsname的记录,并且找到主机名,端口和service_name。
3) 如果listener进程没有问题的话,建立与listener进程的连接。
4) 根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener采取接下去的动作。默认是专用服务器模式,没有问题的话客户端就连接上了数据库的server process。
5) 这时候网络连接已经建立,listener进程的历史使命也就完成了。

4. 动态注册

动态注册是在实例启动的时候,或使用命令Alter system register,或每隔一分钟,PMON进程会向监听进行动态注册,PMON进程根据init.ora中的instance_name,service_names两个参数将实例和服务动态注册到listener中。
如果init.ora中的instance_name,service_names两个参数没有指定值,那么系统将取默认值,注册到监听器中的实例名将取init.ora文件中的db_name值,服务名将取init.ora文件中的db_name+db_domain值。可以在service_names参数中指定多个服务值,值之间用逗号隔开,这对于共享服务器配置很有用。# 前提
动态注册是默认启动的,要想立马刷新动态注册内容,可以使用Alter system register# 查看动态注册
# 采用动态注册时,不需要有listener.ora,需要先配置一下local_listener才可以使用1. 首先将listener.ora文件重命名。[oracle@strong admin]$ mv listener.ora listener.ora.bak
[oracle@strong admin]$ ls
listener.ora.bak  samples  shrept.lst  tnsnames.ora2. 启动监听器,并查看其状态。[oracle@strong ~]$ lsnrctl start[oracle@strong ~]$ lsnrctl statusServices Summary...
Service "orcl" has 1 instance(s).Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully# 说明:Instance状态为READY,说明采用动态注册监听器。# 配置非默认端口动态注册
动态注册默认只注册到默认的监听器上(名称为LISTENER,端口为1521,协议为TCP),因为PMON只会动态注册端口为1521的监听,否则不能动态注册,如果使用非默认端口注册,则需要配置local_listener参数。1. 配置listener.ora参数,新增LISTENER2,监听端口为1522LISTENER2 =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = c12.example.com)(PORT = 1522))(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))))2. 修改local_listener参数,配置监听地址
SQL> alter system set local_listener='(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.202.132)(PORT=1522))','(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.202.132)(PORT=1521))';或:(1) 在Oracle服务器端建立$ORACLE_HOME/network/admin/tnsnames.ora解析文件,并填入如下内容test =
(DESCRIPTION =(ADDRESS_LIST =(ADDRESS=(PROTOCOL=TCP)(HOST = 192.168.202.132)(PORT = 1525)))(CONNECT_DATA =(SERVICE_NAME = orcl))
)(2) 设置参数,指定通过tnsnames.ora内的信息指定监听参数
SQL>alter system set local_listener=test;(3) 连接
sqlplus test/test@test # @test为配置的tns名称# 接上
SQL> alter system register;SQL> show parameter local_listener

5. 静态注册

静态注册就是实例启动时读取listener.ora文件的配置,将实例和服务名注册到监听器中。静态注册时,listener.ora中的GLOBAL_DBNAME提供服务名,listener.ora中的SID_NAME提供注册的实例名。# 配置静态注册监听1. listener.ora文件中配置静态注册
添加
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME =orcl)
(ORACLE_HOME = D:/oracle/product/10.2.0/db_1)
(SID_NAME =orcl)
)
(SID_DESC =
(GLOBAL_DBNAME =orcl1)
(ORACLE_HOME = D:/oracle/product/10.2.0/db_1)
(SID_NAME =orcl)
)
)
# 解释
listener.ora文件两大模块:LISTENER模块:监听名字、连接协议、监听主机、监听端口等基本配置信息SID_LIST_LISTENER模块:配置监听的静态注册特性,包含数据库服务名、ORACLE_HOME、实例名等信息。注意:SID_NAME,就是数据库实例名,在Linux环境大小写敏感GLOBAL_DBNAME就是数据库服务名,可以省略,默认和SID_NAME保持一致,也可以不一致。ORACLE_HOME,默认和$ORACLE_HOME环境变量保持一致。Windows,该参数无效,取自注册表。
该文件表明数据库是单实例的,实例名为orcl,向外提供了两个服务:orcl和orcl12.重启监听
lsnrctl stop
lsnrctl start

6. 配置连接串

# 修改tnsnames.ora文件
提供tnsname到主机名或者ip的对应(也是客户端监听器配置文件)orclstatic =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))   #对应的SOCKET信息(CONNECT_DATA =                  (SERVER = DEDICATED)            #使用专用服务器模式去连接(server=shared共享模式)(SERVICE_NAME = orcl)           #这里填入对应 service_name,)   

7. 配置DBLINK

创建dblink是在客户端创建,基于客户端tnsnames.ora建立的监听配置创建服务端数据库的dblink
# 授权
SQL> grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to test;Grant succeeded.# 基于tnsnames.ora建立的监听创建连接
SQL> create public database link test_link connect to test identified by test123 using 'ORCL2';Database link created.# 或者直接创建
create database link link_name
connect to username identified by password
using ' (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.13.178)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = rzzqnew)))';# 查看是否创建成功
SQL> select * from dual@test_link;D
-
X# 使用
SQL> desc p_test@test_link;Name                    Null?    Type----------------------------------------- -------- ----------------------------ID                           NUMBER(7)TYPE                           VARCHAR2(1)

Oracle数据库网络详解相关推荐

  1. plsql如何配置连接oracle数据库,PLSQL连接Oracle 数据库配置详解

    (oracle官网下载地址:http://www.oracle.com/technetwork/topics/winsoft-085727.html , 下载地址2:http://download.c ...

  2. Oracle 数据库登录详解

    目录 一.登录oracle 重启服务器后启动oracle oracle的登录方式: 二.监听 监听服务的主要文件: 三.用户 oracle安装后常用的默认三个用户 权限角色: 创建用户及授权: 四.一 ...

  3. Linux下Oracle数据库安装详解

    安装环境 系统:Linux CentOS7 64位 Oracle版本:Oracle 11g R2 一.安装前准备 1.创建运行oracle数据库的系统用户和用户组 [yxc@localhost ~]$ ...

  4. oracle数据库的scn,Oracle数据库SCN详解

    SCN号概述 SCN是当Oracle数据库更新后,由DBMS自动维护去累积递增的一个数字.Oracle数据库中一共有4种SCN分别为 系统检查点SCN: 系统检查点SCN位于控制文件中,当检查点进程启 ...

  5. Oracle数据库序列详解

    前言: 做过web开发的人员基本上都知道,数据库表中的主键值有的时候我们会用数字类型的并且自增.这样mysql.sql server中的都可以使用工具创建表的时候很容易实现.但是oracle中没有设置 ...

  6. 鼎信诺oracle_鼎信诺,oracle数据库还原操作详解.ppt

    DMP数据还原 1.dmp还原完毕后,会有提示:成功终止导入,没有出现警告.此时我们便把NC.dmp这个数据还原到了本机orcl数据库中 DMP数据还原 1.接着打开审计前端取数工具 2.在软件列表中 ...

  7. oracle 数据库体系结构详解

    概述 Oracle DB 服务器由一个 Oracle DB 以及一个或多个数据库实例组成.实例由内存结构和后台进程构成.每当启动一个实例时,都会分配一个称为系统全局区 (SGA) 的共享内存区,并启动 ...

  8. oracle数据库改名步骤,oracle 11g2 数据库改名详细解释 oracle数据库改名详解 oracle database 改名详解 dbname...

    前面讲过修改sid名字,虽然已经修改过了实例名(sid),但是数据库的名称(dbname还是原来的名称orcl) 下面详细描述,更改数据库名字的.详细过程如下: 1.更改存档日志,默认安装完的orac ...

  9. Oracle数据库同义词详解

    一.定义 同义词顾名思义,是数据库方案对象的一个别名.这里的数据库方案对象指表.视图.序列.存储过程.包等. 二.同义词的好处 1.不占内存空间,节省大量的数据库空间 2.简化了数据库对象的访问 3. ...

最新文章

  1. 浅析药品生产偏差管理进展及改进措施
  2. 基于BP神经网络+HOG特征提取的视频中车辆车牌识别算法仿真
  3. 异步执行和多线程编程的关系
  4. 80 after generation to marry or not to marry that is a question
  5. 校招需要看的书 巩固的知识
  6. win10乱码了怎么办一招解决windows乱码问题百度经验_TIA Portal博途常见的15大问题汇总...
  7. UVa140 Bandwidth 【最优性剪枝】
  8. [Android Pro] app_process command in Android
  9. java 数据转成xml_java转换CSV文件生成xml格式数据
  10. 从前端到后台,开发一个完整功能的小程序
  11. Android 使用RxJava实现一个发布/订阅事件总线
  12. mac硬盘空间怎么清理?这样也能清理出上10G的磁盘空间
  13. 排序算法专题-计数排序
  14. installshield脚本入门
  15. android判断是华为手机,华为手机怎么辨别真假?华为手机真伪验证多种方法
  16. c语言编写英雄联盟,怎么用C#或者C语言注册 英雄联盟 热键
  17. excel表格修改时间/时间加减
  18. 怎么看微信撤回的效果?教你看微信已撤回的消息、图片
  19. python伪装ip_Python爬虫如何用高质量代理IP伪装?
  20. 什么pdf转换成excel转换器好

热门文章

  1. 江苏学计算机软件哪个专科大学好,江苏 我学软件技术可以报考哪些学校
  2. 【操作系统概论】~知识点总结
  3. JavaScript的循环
  4. HUAWEI华为荣耀MagicBook V14 I5 集显 16GB+512GB (HGE-W56)原装出厂WIN11系统恢复原厂oem系统
  5. 虚拟化环境下,如何高效开展勒索病毒防护加固?
  6. oh-my-zsh提示符显示当前用户名和主机名
  7. 内部类以及匿名内部类
  8. 查询话费余额php接口,PHP代码示例_PHP账号余额查询接口 | 微米-中国领先的短信彩信接口平台服务商...
  9. getClass().getResourceAsStream()
  10. CSDN自动回复灌水乐园帖子-httpClient篇