关于PLSQL连接ORACLE配置字符串

首先要讲一下下面的一些知识

1.ORACLE_SID:(ORACLE SYSTEM IDENTIFIER)
Oracle实例是由SGA和一组后台进程组成的,实例的创建和启动需要一个参数文件,而参数文件的名称就是由ORACLE_SID决定的。
对于init文件,缺省的文件名称是init<ORACLE_SID>.ora,对于 spfile文件,缺省的文件名称是spfile<ORACLE_SID>.ora
设置不同的ORACLE_SID值,就可以默认使用不同的参数文件启动不同的数据库实例。
例如: sql>startup spfile='/u01/oracle/product/11.2.0/dbs/spfileprd.ora'
在实例启动后,实例名称INSTANCE_NAME也是从ORACLE_SID得到的。

SQL> select value from v$parameter where name='spfile';

VALUE
     --------------------------------------------------------------------------------
     /u01/oracle/product/11.2.0/dbs/spfileprd.ora  //spfile+prd.ora组成

2.INSTANCE_NAME:
INSTANCE_NAME是Oracle实例的名字,用来区分不同的实例。在Oracle9i之前,该名字存储在两个地方:参数文件和数据库的内部试图(V$INSTANCE).
而在Oracle10g之后的版本中,这个名字不再出现在参数文件中,而是动态从系统中获得,默认是取自ORACLE_SID。
INSTANCE_NAME的作用除了区别不同实例之外,在监听器动态注册时,还会用于向监听器注册。
比如instance_name=abc,监听中将动态注册Instance "prd",status READY信息。 //查看实例名

SQL> select INSTANCE_NAME FROM v$instance;

INSTANCE_NAME

    ------------------------------------------------

prd

//查看监听器

[oracle@prod:/home/oracle$lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 16-MAR-2022 17:13:11

  Copyright (c) 1991, 2013, Oracle. All rights reserved.

  Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
  STATUS of the LISTENER
  ------------------------
  Alias LISTENER
  Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
  Start Date 16-MAR-2022 16:59:10
  Uptime 0 days 0 hr. 14 min. 0 sec
  Trace Level off
  Security ON: Local OS Authentication
  SNMP OFF
  Listener Parameter File /u01/oracle/product/11.2.0/network/admin/listener.ora
  Listener Log File /u01/oracle/diag/tnslsnr/rac-12c-2/listener/alert/log.xml
  Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rac-12c-2)(PORT=1521)))
  Services Summary...
  Service "prd" has 2 instance(s).
  Instance "prd", status UNKNOWN, has 1 handler(s) for this service...
  Instance "prd", status READY, has 1 handler(s) for this service...

3.DB_NAME:
DB_NAME概念相比于INSTANCE_NAME要重要的多,它决定实例将挂在的数据文件。它出现在数据文件,控制文件,日志文件中。在参数文件中也出现,且必须出现。
这个参数涉及到系统的物理文件。
4.SERVICE_NAME和GLOBAL_DBNAME:
这两个参数之所以放在一起讲,是因为他们往往是成对出现的。SERVICE_NAME出现在Tnsnames.ora文件中,是客户端要请求的服务名。
GLOBAL_DBNAME 出现在Listener.ora文件中,是服务器提供的服务名,可以通过show parameter service_names查看,

    SQL> show parameter service_names;

    NAME       TYPE    VALUE

       service_names string  prd

     并可以通过alter system set service_name='servicename' scope=both来修改。
二者对应,实现了Listerner.ora/Tnsnames.ora的重要功能----监听、请求与验证。

首先就要涉及三个配置文件中,其中最重要的首先要看sqlnet.ora,通过这个文件来决定怎么样找一个连接中出现的连接字符串。

oracle网络配置三个配置文件 listener.ora、sqlnet.ora、tnsnames.ora文件查看(远程和本地连接重点是看这三个文件)

三个文件中首先又要关注sqlnet.ora

1、sqlnet.ora

[grid@shdb02 ~]$ locate sqlnet.ora
/u01/app/11.2.0/grid/network/admin/sqlnet.ora

[grid@shdb02 ~]$ cat /u01/app/11.2.0/grid/network/admin/sqlnet.ora

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

ADR_BASE = /u01/app/grid

2、listener.ora
[grid@shdb02 ~]$ locate listener.ora
/u01/app/11.2.0/grid/network/admin/listener.ora [grid@shdb02 ~]$ cat /u01/app/11.2.0/grid/network/admin/listener.ora
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = htcmsdb)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME =htcmsdb2)
)
) ADR_BASE_LISTENER = /u01/app/grid
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON # line added by Agent

 3、tnsnames.ora

[grid@shdb02 ~]$ locate tnsnames.ora
/u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

[grid@shdb02 ~]$ cat /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
STANDBY1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.129.51.40)(PORT = 1521))
)
(CONNECT_DATA =
(SID = shdb1)
(SERVICE_NAME = shdb1)  //这个是lsnrctl中注册的实例名,lsnrctl status查看
)
)

ORA1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.128.51.20)(PORT = 1521))
    )
    (CONNECT_DATA =
      (service_name = ora1)
    )
  )

htst =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.128.51.20)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = htst) //这个是lsnrctl中注册的实例名,lsnrctl status查看
)
)

对应数据库(各个数据库以什么方式可以连接)

SQL> Select username,server,program from v$session where username is not null;

USERNAME               SERVER
------------------------------ ---------
PROGRAM
------------------------------------------------
SYS DEDICATED
oraagent.bin@shfpdb02 (TNS V1-V3) SHFP DEDICATED
plsqldev.exe SYS DEDICATED
sqlplus@shfpdb02 (TNS V1-V3) USERNAME SERVER
------------------------------ ---------
PROGRAM
------------------------------------------------
SHFP DEDICATED
JDBC Thin Client SHFP DEDICATED
JDBC Thin Client

oracle网络配置

三个配置文件中最重要的首先要看sqlnet.ora,通过这个文件来决定怎么样找一个连接中出现的连接字符串。

三个配置文件 listener.ora、sqlnet.ora、tnsnames.ora ,我们这里是放在了/u01/app/11.2.0/grid/network/admin目录下。

1.  sqlnet.ora

文件作用:
sqlnet.ora文件控制着客户端Oracle NetServices的行为,例如跟踪级别和会话特性。
当客户发出请求时,通过使用tnsnames.ora文件首先解析Oracle Net Services的名称。
tnsnames.ora文件中的参数将该请求指引到适当的数据库节点。

监听器进程监听客户请求,
并且将其与一个服务器进程相连接。该请求将被处理,其结果被返回到客户端机器。

参数解释:
#SQLNET.AUTHENTICATION_SERVICES= (NTS)
none:作用是不允许通过os系统用户登录数据库,需要提供数据库用户名及密码
all: 作用是允许所有的登录方式
nts: 作用是windows的本地操作系统用户认证,unix环境需注释掉。
NONE,NTS 两种方式可以并用。

#NAMES.DIRECTORY_PATH可以有多种设置,
例如:
1、设置NAMES.DIRECTORY_PATH=(TNSNAMES)
客户端就只会从设置的tnsnames.ora查找你要连接的字符串(如orcl)记录,
如果tnsname.ora文件中没有此记录,则连接不上数据库。

2、设置NAMES.DIRECTORY_PATH=(TNSNAMES,ONAMES)
客户端首先会从tnsnames.ora查找你要连接的字符串(如orcl)记录,
如果tnsname.ora文件中没有此记录,
则Oracle使用自己的名称服务器(Oracle Name Server)来解析 (ONAMES) 。
一般比较少使用Name Server。

3、设置 NAMES.DIRECTORY_PATH= (TNSNAMES,ONAMES,HOSTNAME,EZCONNECT)
先找tnsnames.ora,没有的话,再找Oracle Name Server,再找不到,那么尝试把客户端(设置的)要连接的字符串(如orcl)
当作一个主机名,通过网络的途径去解析它的ip地址然后去连接这个ip上GLOBAL_DBNAME=连接字符串(如orcl)
这个实例,当然这里连接字符串(如orcl)并不是一个主机名,最后会尝试以ezconnect的方式连接数据库。

所谓 EZCONNECT是oracle10g引入的简单连接,sqlplus连接格式:

不是 sqlplus user/password@10.121.10:1521:orcl
而是 sqlplus user/password@10.121.10:1521/orcl  是/不是:

我们的配置文件是:NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
先找tnsnames.ora,没有的话,再找Oracle Name Server,再找不到,那么尝试把客户端(设置的)要连接的字符串(如orcl)
当作一个主机名,通过网络的途径去解析它的ip地址然后去连接这个ip上GLOBAL_DBNAME=连接字符串(如orcl)

2.  tnsnames.ora------这个文件类似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应。

远程连接中 tnsnames.ora和listener.ora 他两是息息相关的(集群模式除外,集群的时候, 监听器开启与否无关)

只有当sqlnet.ora中类似 NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,
也就是客户端解析连接字符串的顺序中有TNSNAMES是,才会尝试使用这个文件。

[oracle@shdb02 ~]$ cat /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

STANDBY1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.121.51.41)(PORT = 1521))
)
(CONNECT_DATA =
(SID = shdb1)
(SERVICE_NAME = standby)
)
)

#这条信息记录我们将使用TCP协议,去连接IP地址为10.128.51.20,端口号为1521的数据库主机上服务名为htst的数据库

htst =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.121.51.20)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.121.51.21)(PORT = 1521))
    (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = htst) 
    )
  )

MYORA:客户端连接服务器端使用的服务别名。注意一定要顶行书写,否则会无法识别服务别名。
PROTOCOL:客户端与服务器端通讯的协议,一般为TCP,该内容一般不用改。
HOST:ORACLE服务器端IP地址或者hostname。确保服务器端的监听启动正常。
PORT:数据库侦听正在侦听的端口,可以察看服务器端的listener.ora文件或在数据库侦听所在的机器
命令提示符下通过lnsrctl status [listener name]命令察看。
此处Port的值一定要与数据库侦听正在侦听的端口一样。
SERVICE_NAME:在服务器端,用system用户登陆后,sqlplus> show parameter service_name命令查看。

3.  listener.ora------listener监听器进程的配置文件

关于listener进程就不多说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。
所以如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。
例子:

oracle@prod:/home/oracle$vi /u01/oracle/product/11.2.0/network/admin/listener.ora

//配置监听多个服务名和多个全局数据库

SID_LIST_LISTENER =
(SID_LIST =
  (SID_DESC =
    (GLOBAL_DBNAME = prd)
    (SID_NAME = prd)
    (ORACLE_HOME=/u01/oracle/product/11.2.0)
  )

(SID_DESC=
    (GLOBAL_DBNAME=fp)
    (ORACLE_HOME=/u01/oracle/product/11.2.0)
    (SID_NAME=fp)
  )

(SID_DESC=
    (SID_NAME=mysql_uts01)
    (ORACLE_HOME=/u01/oracle/product/11.2.0)
    (PROGRAM=dg4odbc)
   )
 )

//配置监听器名称,如何你配置了多个监听器名称,我们可以通过 lsnrctl status MYLISTENER 来查看某个监听器的状态

//所以这是一个名为 MYLISTENER的监听器

MYLISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.121.51.70)(PORT = 1522))

LISTENER :监听名称,可以配置多个监听,多个监听的端口号要区分开来。
GLOBAL_DBNAME :全局数据库名。通过select * from global_name; 查询得出
ORACLE_HOME :oracle软件的跟目录
SID_NAME :数据库实例的SID
PROTOCOL:监听协议,一般都使用TCP
HOST:本机IP地址,双机时候使用浮动VIP
PORT:监听的端口号,使用netstat –an 检查该端口不被占用。

1、客户端连接形式为:  用户名: serp01 密码: passwd01   数据库为连接字符串: 10.128.51.22:1521/fp,注意/fp,而不是:fp 因为是服务名连接方式

2、服务器监听log

[grid@shdb02 app]$ locate listener.log
/u01/app/grid/diag/tnslsnr/shdb02/listener/trace/listener.log
[grid@shfpdb02 app]$ tail -f /u01/app/grid/diag/tnslsnr/shdb02/listener/trace/listener.log
......
监听的log日志,在登陆时候就会出现相应的反映。

oracle三个连接配置文件 listener.ora、sqlnet.ora、tnsnames.ora的更多相关文章

  1. oracle安装完成后目录中不论有没有tnsnames.ora和listener.ora文件 PLSQL都能连上的问题解决方法

    今天遇到这个问题了,发现listener.ora文件和tnsnames.ora文件在Net Work文件夹下没有,正常情况下安装完oracle或者是oracle Client是会有的,但是在Net M ...

  2. oracle三个网络配置文件(listener.ora、tnsname.ora、sqlnet.ora)的作用

    oracle网络配置 三个配置文件 listener.ora.sqlnet.ora.tnsnames.ora ,都是放在$ORACLE_HOME\network\admin目录下. 1.  sqlne ...

  3. Oracle 三种连接方式 NESTED LOOP HASH JOIN SORT MERGE JOIN

    NESTED LOOP: 对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择.在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表中检索找到与它匹配的行,因此整个查询返回的结果集不能太大( ...

  4. oracle三种连接身份

    登录oracle数据库有三种连接身份   sysdba:数据库管理员,sysyoper:数据库操作员,normal:普通用户. "sysdba" 即数据库管理员 权限包括:   打 ...

  5. Oracle JDBC连接服务名、SID和tnsnames.ora配置的多种方式

    昨天,领导安排去新服务器上部署项目,给了我数据库地址,服务名称,端口,用户名和密码.结果数据库一直连接不上,日志中的错误提示是监听未找到SID,我才明白原来我jdbc.properties中需要的是S ...

  6. oracle的listener.ora sqlnet.ora tnsnames.ora三个文件的关联性

    学习:http://www.cnblogs.com/william-lee/archive/2010/10/20/1856261.html 之前因为安装的是windows server 2008 r2 ...

  7. oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子

    1.解决问题:TNS或者数据库不能登录.      最简单有效方法:使用oracle系统提供的工具 netca 配置(把原来的删除掉重新配置)     $netca  2.然而,仍有疑问:如何指定'l ...

  8. Oracle的tnsnames.ora配置(PLSQL Developer)

    首先打开tnsnames.ora的存放目录,一般为D:\app\Administrator\product\11.2.0\client_1\network\admin,就看安装具体位置了. 步骤阅读 ...

  9. Oracle 11g透明网关连接Sqlserver

    Oracle 11g透明网关连接Sqlserver oracle 透明网关是oracle连接异构数据库提供的一种技术.通过Gateway,可以在Oracle里透明的访问其他不同的数据库,如SQL Se ...

随机推荐

  1. 36 异常机制 自定义异常 实际应用中的经验总结 尽量添加finally语句块去释放占用的资源

    自定义异常 概念 使用Java内置的异常可以描述在编辑时出现的大部分异常情况.除此之外,用户还可以自定义异常.用户自定义异常类,只需继承Exception类即可. 在程序中使用自定义异常类,大体可分为 ...

  2. 分布式 PostgreSQL 集群(Citus)官方示例 - 时间序列数据

    在时间序列工作负载中,应用程序(例如一些实时应用程序查询最近的信息,同时归档旧信息. https://docs.citusdata.com/en/v10.2/sharding/data_modelin ...

  3. ENVI提取水系并进行生态敏感性分析

    4 具体步骤 4.1 DEM数据拼接 (1)打开ENVI软件,选择[File][Open],添加文件夹DEM数据中的影像,操作如图4.1.1所示,结果如图4.1.2. 图4.1.1 添加DEM数据影像 ...

  4. 旅游清单一步搭建,Angular助力你的踏春计划

    春天的脚步愈发临近,相信很多小伙伴已经开始规划自己的踏春计划了,无论是欣赏名胜古迹,还是走访风土人文,你都需要提前准备一份旅游清单!有了这款Angular旅游计划应用,从地点到预算,它都能帮助你创建自 ...

  5. 内置方法 __new__ __del__

    1.__new__ 构造方法 实例化对象是先执行__new__方法,但是类中没有__new__方法,所以先到父类object类中的new方法,开辟一个属于对象的空间,然后再执行init方法 设计模式: ...

  6. 学习SpringMVC必知必会(3)~springmvc的请求和响应

    一.处理器方法响应处理 ▷ Controller方法该怎么返回.Controller数据该怎么进行共享 返回void/ModelAndView/String 1.Controller方法返回void ...

  7. Kubernetes:存储管理

    Blog:博客园 个人 参考:Volumes | Kubernetes.Persistent Volumes | Kubernetes.Kubernetes 基础入门实战 简单来说,存储卷是定义在Po ...

  8. linux命令管道工作原理与使用方法

    一.管道定义 管道是一种两个进程间进行单向通信的机制.因为管道传递数据的单向性,管道又称为半双工管道.管道的这一特点决定了器使用的局限性.管道是Linux支持的最初Unix IPC形式之一,具有以下特 ...

  9. Flutter入门教程(一)Flutter简介

    这是Flutter系列第一篇文章,后续会持续更新Flutter相关知识,本篇就主要对于Flutter技术做一个简单的入门介绍 一.Flutter简介 Flutter是谷歌的移动UI框架,可以快速在iO ...

  10. python3 爬虫5--分析Robots协议

    1Robots协议 Robots协议告诉了搜索引擎和爬虫那些页面可以抓取,那些不可以,通常是存放在robots.txt文件里面,位于网站的根目录下 robots.txt中内容的示范: User-age ...