关于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. 国外开源的PACS服务器

    国外开源的PACS服务器 罗朝辉(http://www.cnblogs.com/kesalin/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 名称:Dcm4che评级:★ ...

  2. android 一题多改系列——android 打电话实现两种方法

    在android开发中,用户能够拨打电话是最基本的需求.俗话说“条条大路通罗马”,实现拨打电话的方式有多种,今天,就提供最常用两种. 首先,拨打电话,对于用户来说,是一个耗费的操作,因此,需要一定权限 ...

  3. [转]提高 Linux 上 socket 性能,加速网络应用程序的 4 种方法

    原文链接:http://www.ibm.com/developerworks/cn/linux/l-hisock.html 使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在 ...

  4. 警惕rapidxml的陷阱:添加节点时,请保证变量的生命周期

    http://www.cnblogs.com/chutianyao/p/3246592.html 项目中要使用xml打包.解析协议,HQ指定了使用rapidxml--号称是最快的xml解析器. 功能很 ...

  5. 一步一步学习C++

    根据<C++ primer>第五版 总结学习心得. 在实践中,不必全面地使用C++语言的各种特性,而应根据工程的实际情况,适当取舍(譬如动态类型信息,虚拟继承.异常等特性的使用,很值得商榷 ...

  6. unity3d 射线扫描 忽略图层

    原地址:http://blog.csdn.net/w88193363/article/details/38331205 函数说明 static RaycastHit2D[] RaycastAll(Ve ...

  7. MyBatis完全使用指南

    MyBatis完全使用指南 转 http://www.jianshu.com/p/1c7c7d1bba33 MyBatis MyBatis作为一个轻量的SQL映射框架,确实很简单,但是知识点挺多,实际 ...

  8. Java实现对文本文件MD5加密并ftp传送到远程主机目录

    需求描述: 客户出完账之后需要把出账的数据以文本文件的方式传送给收入管理系统,客户以前是通过本地的一个工具软件上传的,由于安全监管的原因,不允许在本地使用工具上传,因此客户希望我们在已经上线使用的系统 ...

  9. Bash常用快捷键及其作用

    在 Bash 中有非常多的快捷键,如果可以熟练地使用这些快捷键,可有效地提高我们的工作效率.只是快捷键相对较多,不太好记忆,这就要多加练习和使用.这些快捷键如表 1 所示. 表 1 Bash 常用快捷 ...

  10. Oracle迁移至PostgreSQL工具之Ora2Pg

    1. 描述 Ora2Pg是一个免费的工具,用于将Oracle数据库迁移到PostgreSQL兼容的模式.它连接您的Oracle数据库,自动扫描并提取它的结构或数据,然后生成可以装载到PostgreSQ ...