`
liwenshui322
  • 浏览: 519287 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转)配置ORACLE 客户端连接到数据库

 
阅读更多

原博客地址:http://blog.csdn.net/robinson_0612/article/details/5917103

 

--=================================

-- 配置ORACLE 客户端连接到数据库

--=================================

 

    Oracle 客户端连接到Oracle 数据库服务器貌似不同于SQL serve中的网络配置,其实不然,只不过所有的SQL server 运行于Windows平台,故很多配置直接集成到了操作系统之中。所以无需配置客户端即可连接到服务器。Oracle 客户端连接到数据库依赖于Oracle NetOracle提供了很多基于客户端或服务器的配置工具,需要搞清的是Oracle Net 中的相关术语。术语明白了,其实配置方法与SQL server 大同小异。

 

一、什么是Oracle Net

    Oracle Net 用于客户端和服务器之间创建一个连接会话,并负责维护该会话。

    Oracle Net 在客户端作为应用程序的一个后台进程组件,而在服务器端则包含称为侦听器的活动进程,

负责客户端和服务器之间的交互。

    Oracle Net 同时也支持异构数据库的连接,如连接到SybaseInformixDB2SQL Server

    通常基于下列配置来实现

        网络配置(网络必须是联通的)

        节点所在的位置(IP/Hostname)

        应用程序

        所使用的协议(TCP/IP/TCP/IP with SSLSDPNamed Pipes)

       

    Oracle Net支持的连接类型

        客户端-服务器模式(SQLPlus)

        Java 应用程序(JDBC)

        Web 客户端应用程序

使用基于Web的应用程序(App Server)作为中间件来实现,可以配置JDBC Oracle Call Interface (OCI) driver thin JDBC driver

            通过HTTP直接连接到Oracle 服务器,如OEM

           

   

    Oracle Net实现机制

        用户发出连接请求实现与用户进程进行交互

        用户进程通过Oracle Net 来与服务器进程交互

        服务器进程则与实例进行交互(Oracle Net维护)

        实例通过后台进程交互来完成数据库的读写操作

   

    Oracle Net 连接方式

        本地客户端连接的数据库(即客户端与数据库位于同一台服务器)

            本地连接同样使用到了Oracle Net,因为任何与数据的交互都通过Oracle Net来完成。

不需要使用到Listener,因为本地连接使用的是IPC协议,而IPC协议允许主机内进程间相互通信,由操作系统提供。

            本地连接不需要进行任何配置,且本地服务器上可以运行若干个实例。

            本地连接是唯一一个不需要侦听器的连接类型。

            连接方法:CONNECT username/password

           

        所有非本地客户端连接到数据库

            服务器端启用Listener进程

            客户端通过TNSNAMEEasy connectLDAP等名称解析方式来解析连接字符串

            一旦连接成功,即是Listener服务停止,不影响该会话。

               

    Oracle Net Listener(侦听器)

        运行于服务器端,用于侦听所有来自客户端的连接请求,并提供处理数据库服务方面的请求

            位置:$ORACLE_HOME/network/admin/listerer.ora

 --对应于netmgr(GUI界面)Listeners项下建立的缺省侦听器(Listener)

                  $ORACLE_HOME/network/admin/sqlnet.ora  

 --对应于netmgr(GUI界面)Profile

        服务器端配置tnsnames

            位置:ORACLE_HOME/network/admin/tnsnames.ora

--对应于netmgr(GUI界面)Service Naming

        Listener提供的信息包括,IP地址、端口号、协议、服务名(service_name)

        一个Listener能够为多个数据库实例提供服务

 

二、客户端到服务器建立会话的过程及相关术语

    执行如下的命令来建立连接

        SQL> CONNECT username/password@net_service_name  

       

        连接字符串(connect string)username/password@net_service_name

包含了用户名、密码、连接标识符

            如:SQL> conn scott/tiger@orcl

            字符串分解

                用户名scott

                密码为tiger

                "/"    用于分割用户与密码

                "@"   指示网络连接所需的用户进程

                orcl  连接标识符

       

        连接标识符(connect identifier)

            @后面的即为连接标识符,如上例中的orcl

            连接标识符的名字是一个映射到连接描述符的简化

            连接标识符可以为网络服务名/别名、数据库服务名等

(net service name, database service name, or net service alias.)

           

        连接描述符(connect discriptor)

            使用一种特殊格式来描述连接的具体信息,信息包含了、数据库所在的位置(IP地址)

服务名、端口号等

            tnsnames中的:

            orcl =  --网络服务名,数据库别名,等同于连接标识符(屏蔽客户端如何连接到服务器端的细节)

              (DESCRIPTION =           

                (ADDRESS_LIST =

                  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))

--IP地址,端口号,协议

                )

                (CONNECT_DATA =

                  (SERVICE_NAME = orcl.robinson.com)  --服务名

                )

              )

            以上所有DESCRIPTION内的信息即为连接描述信息

            描述符之上等于号左边的可以为网络服务名,网络服务别名等,此等同于连接标识符。

           

        服务名(service_name)

客户端连接到实例的服务名,可以为该参数指定一个或多个服务名。该参数从9i引入,service_name通常可以使用SID代替。

9i之后,Oracle推荐使用service_name而不是SID。可以通过定义多不不同的服务名来区分不同的用户连接,该参数缺省的格式为db_name.domain_name

实例将所定义的服务名注册到侦听器,当客户端请求服务时,侦听器根据服务名决定将使用哪个实例提供所请求的服务并与之建立连接

            基于相同的数据库可以定义多不不同的服务名来区分不同的使用情况

            如定义service_name

                service_names = sales.robinson.com,hr.robinsn.com

            sales部门通过sales服务名来建立连接,hr部门通过hr服务名来建立连接,

而无须关心连接的是哪一个数据库。

       

        演示连接过程(非本地连接)

            环境:服务器为RHEL 5 + Oracle 10g ,客户端Winxp + 10g Client

            查看服务器listener是否启动

            [oracle@robinson admin]$ lsnrctl   --启动lsnrctl 侦听器程序

 

            LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 03-SEP-2010 13:31:06

 

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

 

            Welcome to LSNRCTL, type "help" for information.

 

            LSNRCTL> status      --查看侦听器状态,侦听器没有启动

            Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

            TNS-12541: TNS:no listener

             TNS-12560: TNS:protocol adapter error

              TNS-00511: No listener

               Linux Error: 111: Connection refused

              

            --启动缺省的侦听器

            --在下面列出的信息中没有侦听器的路径及listener.ora文件,此处listener.ora 不存在

            LSNRCTL> start    

            Starting /u01/app/oracle/10g/bin/tnslsnr: please wait...

 

            TNSLSNR for Linux: Version 10.2.0.1.0 - Production

            Log messages written to /u01/app/oracle/10g/network/log/listener.log

            Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=robinson.com)(PORT=1521)))

                               

            Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

            STATUS of the LISTENER

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

            Alias                     LISTENER

            Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production

            Start Date                03-SEP-2010 13:31:14

            Uptime                    0 days 0 hr. 0 min. 0 sec

            Trace Level               off

            Security                  ON: Local OS Authentication

            SNMP                      OFF

            Listener Log File         /u01/app/oracle/10g/network/log/listener.log

            Listening Endpoints Summary...

              (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=robinson.com)(PORT=1521)))

            The listener supports no services

            The command completed successfully

 

            LSNRCTL> service  --已经看到了已注册的实例信息,因为10g支持动态注册

            Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

            Services Summary...

            Service "orcl.robinson.com" has 1 instance(s).

              Instance "orcl", status READY, has 1 handler(s) for this service...

                Handler(s):

                  "DEDICATED" established:0 refused:0 state:ready

                     LOCAL SERVER

            Service "orclXDB.robinson.com" has 1 instance(s).

              Instance "orcl", status READY, has 1 handler(s) for this service...

                Handler(s):

                  "D000" established:0 refused:current:max:1022 state:ready

                     DISPATCHER <machine: robinson, pid: 3246>

                     (ADDRESS=(PROTOCOL=tcp)(HOST=robinson.com)(PORT=51473))

            Service "orcl_XPT.robinson.com" has 1 instance(s).

              Instance "orcl", status READY, has 1 handler(s) for this service...

                Handler(s):

                  "DEDICATED" established:0 refused:0 state:ready

                     LOCAL SERVER

            The command completed successfully 

 

            --查看客户端tnsnames.ora的信息

            C:/>type F:/oracle/product/10.2.0/client_1/NETWORK/ADMIN/tnsnames.ora

            # tnsnames.ora Network Configuration File: F:/oracle/product/10.2.0/client_1/NET

            WORK/ADMIN/tnsnames.ora

            # Generated by Oracle configuration tools.

            orcl =

              (DESCRIPTION =

                (ADDRESS_LIST =

                  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))

                )

                (CONNECT_DATA =

                  (SERVICE_NAME = orcl.robinson.com)

                )

              )

            C:/>sqlplus /nolog

 

            SQL*Plus: Release 10.2.0.1.0 - Production on 星期五93 13:42:02 2010

 

            Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

            SQL> conn scott/tiger@orcl

            Connected.

            --tnsnames.ora中服务别名改为oral后再连接,可以正常连接,即网络服务名可以随便取。

            SQL> conn system/redhat@oral

            Connected.

           

            --查看数据库中的服务名         

            SQL> show parameter service_names;

 

            NAME                                 TYPE        VALUE

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

            service_names                        string      orcl.robinson.com

           

三、服务注册与名称解析         

   

    服务注册(service registration)

        实例将数据库将所提供的服务名及相关信息告知listener的过程称之为服务注册

        注册通常包含下列信息

            数据库的服务名

            实例名

            可用的服务处理程序(service handlers),用于调度(共享模式)和派生子程序(专用模式)

            端口号等

       

        注册方法

            静态注册: 指将实例的相关信息手动告知listener侦听器,可以使用netmgr,netca,oem以及直接vi listener.ora文件来实现

                --下面是通过netmgr配置后产生的listener.ora文件的内容

                [oracle@robinson ~]$ cat $ORACLE_HOME/network/admin/listener.ora

                # listener.ora Network Configuration File: /u01/app/oracle/10g/network/admin/listener.ora

                # Generated by Oracle configuration tools.

 

                SID_LIST_LISTENER =       -->这里定义LISTENER进程提供的数据库服务列表

                  (SID_LIST =

                    (SID_DESC =

                      (GLOBAL_DBNAME = orcl.robinson.com)

                      (ORACLE_HOME = /u01/app/oracle/10g)

                      (SID_NAME = ORCL)

                    )

                  )

 

                LISTENER =               -->监听器的名字,一台数据库可以有多个监听器

                  (DESCRIPTION =

                    (ADDRESS = (PROTOCOL = TCP)(HOST = robinson)(PORT = 1521))

                  )

                 

动态注册:实例在启动时使用PMON进程自动将instance_nameservice_names等信息注册到已启动的缺省侦听器listener.ora,9i之后,不需要任何配置即可实现动态注册.实例启动后会自动在本地主机默认的号端口上查找侦听器,并在查找到时进行注册

                可以在实例启动后的任何时间段执行下面命令实现重新注册

                    alter system register;

                   

                    如果侦听器在非默认端口上运行,可以通过设置local_listener参数来制定侦听器所在的位置并手动进行注册

                    SQL> alter system set local_listener = 'list2';

                    SQL> alter system register;

                   

                建议配置两个参数保证成功注册:service_names,instance_name

                    service_names缺省为global database name

                    alter system set service_names = 'testdb.robinson.com' scope =spfile;

                    alter system set instance_name = 'testdb' scope = spfile;

           

                --下面启动缺省的侦听器来实现动态注册

                [oracle@robinson ~]$ lsnrctl start

 

                LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 03-SEP-2010 16:30:04

 

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

 

                Starting /u01/app/oracle/10g/bin/tnslsnr: please wait...

 

                TNSLSNR for Linux: Version 10.2.0.1.0 - Production

                System parameter file is /u01/app/oracle/10g/network/admin/listener.ora

                Log messages written to /u01/app/oracle/10g/network/log/listener.log

                Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=robinson.com)(PORT=1521)))

 

                Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=robinson)(PORT=1521)))

                STATUS of the LISTENER

                -----------------------------部分信息省略---------------------------------------

               

                Listener Parameter File   /u01/app/oracle/10g/network/admin/listener.ora

                Listener Log File         /u01/app/oracle/10g/network/log/listener.log

                Listening Endpoints Summary...

                  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=robinson.com)(PORT=1521)))

                Services Summary...

                Service "orcl.robinson.com" has 1 instance(s).

--启动了orcl.robinson.com服务且为静态注册

                  Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service...

                The command completed successfully

 

                [oracle@robinson ~]$ export ORACLE_SID=testdb  --设置ORACLE_SID并启动testdb

                [oracle@robinson ~]$ sqlplus /nolog

 

                SQL*Plus: Release 10.2.0.1.0 - Production on Fri Sep 3 16:33:00 2010

 

                Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

                SQL> conn / as sysdba

                Connected to an idle instance.

                SQL> startup

                ORACLE instance started.

 

                Total System Global Area  469762048 bytes

                Fixed Size                  1220048 bytes

                Variable Size             138412592 bytes

                Database Buffers          327155712 bytes

                Redo Buffers                2973696 bytes

                Database mounted.

                Database opened.

 

                SQL> ho lsnrctl status     --再次查看侦听器的状态

                                           --可以看到testdb已经被动态注册

                LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 03-SEP-2010 16:34:06

 

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

 

                Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=robinson)(PORT=1521)))

                STATUS of the LISTENER

                -----------------------------部分信息省略---------------------------------------

                Services Summary...

                Service "orcl.robinson.com" has 2 instance(s).

                  Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service...

                Service "orclXDB.robinson.com" has 1 instance(s).

                Service "orcl_XPT.robinson.com" has 1 instance(s).

                Service "testdb" has 1 instance(s).    --下面是和testdb相关的服务名,实例名

                  Instance "testdb", status READY, has 1 handler(s) for this service...

                Service "testdb.robinson.com" has 1 instance(s).

                  Instance "testdb", status READY, has 1 handler(s) for this service...

                Service "testdbXDB" has 1 instance(s).

                  Instance "testdb", status READY, has 1 handler(s) for this service...

                Service "testdb_XPT" has 1 instance(s).

                  Instance "testdb", status READY, has 1 handler(s) for this service...

                The command completed successfully             

 

                SQL> conn scott/tiger@192.168.1.128/testdb.robinson.com                                     Connected.  --动态注册testdb,Win客户端可以正常连接

                SQL> conn system/redhat@orcl         --原来静态注册的orcl也可以正常连接

                Connected.

               

                --注意服务名中有些状态为UNKNOWN,有些为READY

                --对于动态注册的服务名,因为监听器知道实例的状态,所以正常状态通常显示为READY

                --对于静态注册的服务名,通常显示为UNKNOWN

               

        当客户端的请求到达listener时,listener选择一个合适的service handler为之服务。

之后listener就不再参与相关处理。

       

        对于受限模式的实例,PMON阻塞所有到实例的连接。当客户端尝试连接将收到如下错误信息:

            ORA-12526TNSlistener: all appropriate instances are in restricted mode

            ORA-12527: TNSlistener: all appropriate instances are in restricted mode or blocking new connections

       

            C:/Documents and Settings/Robinson Cheng>sqlplus scott/tiger@orcl

 

            SQL*Plus: Release 10.2.0.1.0 - Production on 星期三91 17:14:41 2010

 

            Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

            ERROR:

            ORA-12526: TNS:listener: all appropriate instances are in restricted mode

       

        动态注册时的几个常用参数以及需要$ORACLE_HOME目录

            SQL> select name,value,isdefault from v$parameter

              2  where name in ('instance_name','db_domain','service_names');

 

            NAME                      VALUE                          ISDEFAULT

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

            db_domain                 robinson.com                   FALSE

            instance_name             orcl                           FALSE

            service_names             orcl.robinson.com              FALSE

        

        更多关于动态注册的更多描述:配置非默认端口的动态服务注册

 

    名称解析方式(Naming Method)

        用于客户端连接到数据库服务时如何解析连接字符串。连接字符串形式:c:/sqlplus scott/tiger@orcl

        常用的字符串解析方法

            Easy connect

                缺省的连接方式为Easy connect ,仅仅限制于使用TCP协议,不支持负载均衡

                不支持connect-time failoversource routingload balancing

                SQL> connect username/password@host[:port][/service_name]

                C:/>sqlplus scott/tiger@192.168.192.128:1521/orcl

               

            Local naming(本地名称解析)

                使用本地配置文件tnsnames.ora

                支持所有的Oracle Net 协议

                支持高级连接选项:connect-time failoversource routingload balancing

                在服务器端缺省路径为$ORACLE_HOME/network/admin

                tnsnames.ora可以使用TNS_ADMIN环境变量设定到任意位置

               

            Directory naming(目录名称解析)

                目录名称解析技术使得解析实现集中化管理,用户会被指向一个解析别名的LDAP目录服务器

                支持所有的Oracle Net协议及高级选项

               

            External Naming Method(外部名称解析方式)

                第三方名称解析方法如SUNNIS等。

       

四、常用的配置文件

    ldqp.ora         -->用于配置LDAP目录名称解析

    cman.ora         -->用于配置Oracle 连接管理参数

    tnsnames.ora     -->用于配置本地客户端或远程客户端的本地名称解析

    listener.ora     -->用于配置侦听器的相关注册信息

    sqlnet.ora       -->用于配置服务器或客户端所支持的解析方式

 

    netmgr(Net Manager)中的几个配置模块

        Profile 分支       -->对应于sqlnet.ora文件,可以设置客户端和服务器端同时应用的Oracle选项

        Sevice Naming 分支 -->用于配置客户端的名称解析,对应于tnsnames.ora文件

        Listener 分支      -->用于配置服务器端的数据库侦听器,对应于listener.ora文件

 

五、侦听器配置程序(lsnrctl) TNSPING命令  

    [oracle@robinson admin]$ lsnrctl

 

    LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 03-SEP-2010 21:30:52

 

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

 

    Welcome to LSNRCTL, type "help" for information.

 

    LSNRCTL> help   --使用help 查看lsnrctl 的扩展命令

    The following operations are available

    An asterisk (*) denotes a modifier or extended command:

 

    start               stop                status    -->停止、启动、查看状态等(常用)         

    services            version             reload             

    save_config         trace               spawn              

    change_password     quit                exit                

    set*                show*                  

   

    lsnrctl命令用法

        LSNRCTL> command [listener_name]

       

    lsnrctl命令演示参照前面例子中的使用

   

    tnsping命令用于测试网络的可联通性

        C:/>tnsping orcl

 

        TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 03-9-

        2010 21:52:45

 

        Copyright (c) 1997, 2005, Oracle.  All rights reserved.

 

        Used parameter files:

        F:/oracle/product/10.2.0/client_1/network/admin/sqlnet.ora

 

        Used TNSNAMES adapter to resolve the alias

        Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)

        (HOST = 192.168.1.128)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl.robin

        son.com)))

        OK (0 msec)

       

六、总结       

    1.客户端连接时的五个重要参数:用户名、密码、IP地址、端口号、服务名

    2.从客户端成功连接到数据库服务器

        客户端要求

            需要安装适当的客户端软件(Oracle Client)

            正确配置sqlnet.ora  

                NAMES.DIRECTORY_PATH = (TNSNAMES,EZCONNECT ….)      

                SQLNET.AUTHENTICATION_SERVICES = (NTS)   关于认证方式,请参考:Oracle 密码文件

                NAMES.DEFAULT_DOMAIN=robinson.com

--表示客户端在请求连接时将设定的缺省值追加网络服务名(net_service_name)之后

                    --如果db_domainrobinson.com,使用scott/tiger@orcl连接,则等同于使用scott@orcl.robinson.com进行连接

            正确配置tnsnames.ora

        服务器端要求

            listener已经启动

            数据库已经启动

  

 

    3.手动配置listener.oratnsnames.ora

        配置tnsname.ora文件:

            可用的配置工具

                oracle Net Configuration Assistant(GUI)       -->实际上修改tnsnames.ora文件

                oracle Net Manager(GUI)                       -->实际上修改tnsnames.ora文件

               

        给出下面的示例:

            orcl =                                           -->网络服务别名,可以修改,对应于连接标识符

              (DESCRIPTION =

                (ADDRESS_LIST =

                  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))

                )

                (CONNECT_DATA =

                  (SERVICE_NAME = orcl.robinson.com)

                )

              )

            红色的内容为根据实际需要进行修改的内容,现描述如下:

            PROTOCOL:客户端与服务器端通讯的协议,一般为TCP,该内容一般不用改。

HOST:数据库侦听所在的主机的主机机名或IP地址,通常数据库侦听与数据库位于同一个机器上。建议使用IP地址。在UNIXWINDOWS下可以使用hostname来获得主机的机器名或使用ifconfig(UNIX)ipconfgi(Windows)来获得主机的IP地址。

            PORT:数据库侦听使用的端口,缺省为,可以查看服务器端的listener.ora文件获得端口号

                  或在数据库服务器命令提示符下使用nsrctl status [listener name]命令查看获得端口号。

                  此处Port的值一定要与数据库侦听正在侦听的端口一样。

            SERVICE_NAME:在服务器端,使用sqlplus> show parameter service_name命令查看。

           

            上述配置时应保证客户机能够ping通服务器,之后可以使用

tnsping orcl(网络服务名)来测试网络的联通情况

                SQL> conn scott/tiger@orcl

                Connected.

            使用上面的连接方式进行连接时,则连接标识符orcl被解释为tnsnames.oraorcl对应

的描述信息,根据描述信息来解析连接服务器

           

        配置listener.ora  -->同样可以使用tnsnames.ora配置时所使用的GUI工具来完成

            给出下面的示例System parameter file is /u01/app/oracle/10g/network/admin/listener.ora

            LISTENER =

              (DESCRIPTION =

                (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))

              )   --LISTENER部分描述了主机地址、端口及协议

           

            SID_LIST_LISTENER =

              (SID_LIST =

                (SID_DESC =

                  (GLOBAL_DBNAME = orcl1)

                  (ORACLE_HOME = /u01/app/oracle/10g)

                  (SID_NAME = ORCL)

                )

                (SID_DESC =

                  (GLOBAL_DBNAME = orcl2)

                  (ORACLE_HOME = /u01/app/oracle/10g)

                  (SID_NAME = ORCL)

                )

              )

           

            a. LISTENER部分描述了主机地址、端口及协议

            b. SID_LIST_LISTENER描述对外提供数据库服务的列表

               两个SID_DESC是对同一个SID数据库设置的两个service_names所设置的监听服务

            启动该Listener后的信息如下

                Services Summary...

                Service "orcl1" has 1 instance(s).

                  Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service...

                Service "orcl2" has 1 instance(s).

                  Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service...

                The command completed successfully

            配置客户端的tnsnames.ora如下

                orcl1 =

                  (DESCRIPTION =

                    (ADDRESS_LIST =

                      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))

                    )

                    (CONNECT_DATA =

                      (SERVICE_NAME = orcl1)

                    )

                  )

                 

                orcl2 =

                  (DESCRIPTION =

                    (ADDRESS_LIST =

                      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))

                    )

                    (CONNECT_DATA =

                      (SERVICE_NAME = orcl2)

                    )

                  )

                 

            从客户端进行连接     

                C:/>sqlplus /nolog

 

                SQL*Plus: Release 10.2.0.1.0 - Production on 星期六94 09:47:22 2010

 

                Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

                SQL> conn scott/tiger@orcl1

                Connected.

                SQL> conn scott/tiger@orcl2

                Connected.     

               

            注意:

                笔者首次连接时收到如下错误提示,listener.ora中的SID_NAME的值改为小写,orcl,问题解决

                所以尽可能的统一大小写。

                    SQL> conn scott/tiger@orcl1;    --下面是未统一大小写时的错误提示

                    ERROR:

                    ORA-01034: ORACLE not available

                    ORA-27101: shared memory realm does not exis

                    Linux Error: 2: No such file or directory

                   

    4.关于GLOBAL_DBNAME

        下面是GLOBAL_DBNAME的官方描述

            GLOBAL_DBNAME

                Purpose        

    Use the parameter GLOBAL_DBNAME to identify the database service.

               

                While processing a client connection request, the listener tries to match the value of

                this parameter with the value of the SERVICE_NAME parameter in the client connect

                descriptor. If the client connect descriptor uses the SID parameter, then the listener

                does not attempt to map the values. This parameter is primarily intended for

                configurations with Oracle8 release 8.0 or Oracle7 databases (where dynamic service

                registration is not supported for dedicated servers). This parameter may also be

                required for use with Oracle9i and Oracle8 database services by some configurations

                and management tools.

               

                The value for this parameter is typically obtained from the combination of the DB_

                NAME and DB_DOMAIN parameters (DB_NAME.DB_DOMAIN) in the initialization

                parameter file, but the value can also contain any valid name used by clients to

                identify the service.

               

                Embed this parameter under the SID_DESC parameter.

               

        大致意思如下:

            当客户端发出连接请求时,监听器首先使用客户端连接描述符中的SERVICE_NAME相匹配。

            如果客户端连接描述符中使用的是SID,则不再尝试匹配该值,而是对监听器中设置的SID_NAME进行匹配

            该参数的值主要从初始化参数文件中的db_namedb_domian中组合得到。

       

        演示GOLBAL_DBNAME使用

            假定服务器listener.ora配置如下:

                SID_LIST_LISTENER =

                  (SID_LIST =

                    (SID_DESC =

                      (GLOBAL_DBNAME = orcl.robinson.com)

                      (ORACLE_HOME = /u01/app/oracle/10g)

                      (SID_NAME = orcl)

                    )

                  )

 

                LISTENER =

                  (DESCRIPTION =

                    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))

                  )

                 

            客户端的tnsnames.ora配置如下:

                orcl =

                  (DESCRIPTION =

                    (ADDRESS_LIST =

                      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))

                    )

                    (CONNECT_DATA =

                      (SERVICE_NAME = orcl.robinson.com)

                    )

                  )

            spfileorcldb_domain为空值

                [oracle@robinson ~]$ strings $ORACLE_HOME/dbs/spfileorcl.ora | grep db_domain

                *.db_domain=''

           

            数据库中的相关设置为空值

                SQL> col name format a20

                SQL> col value format a35

                SQL> select name,value,isdefault from v$parameter

                  2  where name in ('instance_name','db_domain','service_names');

 

                NAME                 VALUE                               ISDEFAULT

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

                db_domain                                                FALSE

                instance_name                                            FALSE

                service_names                                            FALSE 

               

            能够成功连接

                SQL> conn system/redhat@orcl

                Connected.

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

            修改客户端tnsnames.ora中的service_name

                即去掉SERVICE_NAME = orcl.robinson.com这项内容且添加为SID = ORCL

            修改后的内容如下:

                ORCL =

                  (DESCRIPTION =

                    (ADDRESS_LIST =

                      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521))

                    )

                    (CONNECT_DATA =

                      (SID = ORCL)

                    )

                  )

               

            SQL> conn scott/tiger@orcl   --能够成功连接

            Connected.

                   

        关于GOLBAL_DBNAME总结:

当客户端使用的是SID连接参数,则匹配侦听器配置文件中的SID_NAME    (主要用于兼容以前的老版本,8i或更早版本)

否则当使用的是SERVICE_NAME,则匹配侦听器配置文件中的SERVICE_NAME项 (现在多用SERVICE_NAME)

分享到:
评论

相关推荐

    iOS版微信抢红包Tweak.zip小程序

    iOS版微信抢红包Tweak.zip小程序

    毕业设计&课设_篮球爱好者网站,含前后台管理功能及多种篮球相关内容展示.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    基于springboot社区停车信息管理系统.zip

    基于springboot社区停车信息管理系统.zip

    基于springboot南皮站化验室管理系统源码数据库文档.zip

    基于springboot南皮站化验室管理系统源码数据库文档.zip

    重磅,更新!!!上市公司全要素生产率TFP数据及测算方法(OL、FE、LP、OP、GMM)(2000-2023年)

    ## 数据指标说明 全要素生产率(TFP)也可以称之为系统生产率。指生产单位(主要为企业)作为系统中的各个要素的综合生产率,以区别于要素生产率(如技术生产率)。测算公式为:全要素生产率=产出总量/全部资源投入量。 数据测算:包含OL、FE、LP、OP、GMM共五种TFP测算方法!数据结果包括excel和dta格式,其中重要指标包括证券代码,固定资产净额,营业总收入,营业收入,营业成本,销售费用,管理费用,财务费用,购建固定资产无形资产和其他长期资产支付的现金,支付给职工以及为职工支付的现金,员工人数,折旧摊销,行业代码,上市日期,AB股交叉码,退市日期,年末是否ST或PT等变量指标分析。文件包括计算方法说明及原始数据和代码。 数据名称:上市公司全要素生产率TFP数据及测算方法(OL、FE、LP、OP、GMM) 数据年份:2000-2023年 数据指标:证券代码、year、TFP_OLS、TFP_FE、TFP_LP1、TFP_OP、TFP_OPacf、TFP_GMM

    多种编程语言下算法实现资源汇总

    内容概要:本文详细总结了多种编程语言下常用的算法实现资源,涵盖Python、C++、Java等流行编程语言及其相关的开源平台、在线课程和权威书籍。对于每种语言而言,均提供了具体资源列表,包括开源项目、标准库支持、在线课程及专业书籍推荐。 适合人群:适用于所有希望深入研究并提高特定编程语言算法能力的学习者,无论是编程新手还是有一定经验的技术人员。 使用场景及目标:帮助开发者快速定位到合适的算法学习资料,无论是出于个人兴趣自学、面试准备或是实际工作中遇到的具体算法问题,都能找到合适的解决方案。 其他说明:文中提及多个在线学习平台和社区网站,不仅限于某一特定语言,对于跨学科或多元化技能培养也具有很高的参考价值。

    基于springboot的交通旅游订票系统源码数据库文档.zip

    基于springboot的交通旅游订票系统源码数据库文档.zip

    GO语言教程:基础知识与并发编程

    内容概要:本文档是一份详细的GO语言教程,涵盖了Go语言的基础语法、数据类型、控制结构、函数、结构体、接口以及并发编程等多个方面。主要内容包括Go语言的基本概念和历史背景、环境配置、基本语法(如变量、数据类型、控制结构)、函数定义与调用、高级特性(如闭包、可变参数)、自定义数据类型(如结构体、接口)以及并发编程(如goroutine、channel、select)等内容。每部分内容都附有具体的代码示例,帮助读者理解和掌握相关知识点。 适合人群:具备一定编程基础的开发者,尤其是希望深入学习和应用Go语言的技术人员。 使用场景及目标:①初学者通过本教程快速入门Go语言;②有一定经验的开发者系统复习和完善Go语言知识;③实际项目开发中利用Go语言解决高性能、高并发的编程问题。 阅读建议:本文档全面介绍了Go语言的各项基础知识和技术细节,建议按章节顺序逐步学习,通过动手实践代码示例加深理解。对于复杂的概念和技术点,可以通过查阅更多资料或进行深入研究来巩固知识。

    time_series_at_a_point.ipynb

    GEE训练教程

    memcached笔记资料

    memcached笔记资料,配套视频:https://www.bilibili.com/list/474327672?sid=4486766&spm_id_from=333.999.0.0&desc=1

    基于springboot校内跑腿业务系统源码数据库文档.zip

    基于springboot校内跑腿业务系统源码数据库文档.zip

    计算机控制光感自动窗帘控制系统设计.doc

    计算机控制光感自动窗帘控制系统设计.doc

    基于SpringBoot的校园服务系统源码数据库文档.zip

    基于SpringBoot的校园服务系统源码数据库文档.zip

    基于SpringBoot+Vue的美容店信息管理系统源码数据库文档.zip

    基于SpringBoot+Vue的美容店信息管理系统源码数据库文档.zip

    基于springboot程序设计基础课程辅助教学系统源码数据库文档.zip

    基于springboot程序设计基础课程辅助教学系统源码数据库文档.zip

    原生JS实现斗地主小游戏源码.zip

    这是一个原生的JS网页版斗地主小游戏,代码注释全。带有斗地主游戏基本的地主、选牌、提示、出牌、倒计时等功能。简单好玩,欢迎下载

    基于springboot亚运会志愿者管理系统源码数据库文档.zip

    基于springboot亚运会志愿者管理系统源码数据库文档.zip

    毕业设计&课设_含多功能的远程控制工具集(已停维护),含命令行、文件管理、桌面功能.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    Sen2_NDVI_Max.txt

    GEE训练教程——Landsat5、8和Sentinel-2、DEM和各2哦想指数下载

    基于springboot家校合作平台源码数据库文档.zip

    基于springboot家校合作平台源码数据库文档.zip

Global site tag (gtag.js) - Google Analytics