关于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. Centos7 环境下设置固定IP

    1. 在/etc/sysconfig/network-scripts/下创建ifcfg-eth0配置文件, 并填入以下内容: DEVICE=eth0 TYPE=Ethernet IPADDR=192. ...

  2. .NET Core剪裁器Zack.DotNetTrimmer升级瘦身引擎,并支持剪裁计划的录制和回放

    上周,我发布了对.NET Core程序进行瘦身的开源软件Zack.DotNetTrimmer,与.NET Core内置的剪裁器相比,Zack.DotNetTrimmer不仅对程序的剪裁效果更好,而且还 ...

  3. python3判断一个数是否为素数

    while True: num = int(input('请输入一个数:')) for i in range(2,num):#判断在num之前的数能不能把num整除 if(num%i == 0): p ...

  4. Ubuntu下Linux配置内核各种常见错误和解决办法

    镜像下载.域名解析.时间同步请点击阿里云开源镜像站 这篇把Ubuntu下Linux配置内核各种常见错误和解决办法给大家讲解一下,希望可以帮助到大家. 一.Ubuntu系统中缺少各种依赖包导致的问题 1 ...

  5. oracle 如何在表中有数据的情况下,修改表字段的类型或者增加表字段的长度

    场景:项目中某张表的字段长度不够用了,现在要增加其长度 分两种情况: 1.表中没有数据的情况,直接一条sql语句就能解决 alter     table    表名    modify(字段名   字 ...

  6. vue学习过程总结(07) - vue的后台服务API封装及跨域问题的解决

    以登录流程为例说明接口的封装. 1.登录调用后台的登录api 登录界面的代码 <template> <div class="login-page"> < ...

  7. 为什么ado,biz层得先写个接口,然后再实现?

    为什么ado,biz层得先写个接口,然后再实现?在我写的那个案例中不定义接口也可以 在实际开发中,一个项目肯定不是一个人完成的,这时需要项目经理的角色统一定义接口,负责不同功能模块的开发人员只需实现相 ...

  8. 生产出现oom问题,怎么排查?

    生产出现oom问题,怎么排查?   1.使用dmesg命令查看系统日志 dmesg |grep -E 'kill|oom|out of memory',可以查看操作系统启动后的系统日志,这里就是查看跟 ...

  9. HashMap:为什么容量总是为2的n次幂

    HashMap:为什么容量总是为2的n次幂1).HashMap是根据key的hash值决定key放到哪个桶中,通过tab[i = (n - 1) & hash]公式计算得出 这里的n是Hash ...

  10. nginx简介&nginx基本配置和优化

    一.nginx简介 1.nginx的发展 Nginx是俄罗斯人编写的一款高性能HTTP和反向代理服务器.Nginx能够选择高效的epoll(Linux2.6内核).kqueue(FreeBSD).ev ...