发布日期:2015-11-06 13:31 来源: 标签: 数据库 oracle教程 oracle函数 oracle网络服务
本章我们主要学习Oracle中网络服务解析常用的5种方法?下面我们就做一下具体讲解,希望大家多多支持中国站长网络学院。

1、Oracle Internet Directory

2、External Naming

3、host naming

4、Oracle Easy Connect

5、local naming

下面分别介绍这五种方法:

第一种:Oracle InternetDirectory管理许多Oracle服务器的复杂网络时有优势,管理员可以在一个比较集中位置配置和管理Net ServiceNames

第二种:External Naming 使用非Oracle工具管理和解析Oracle服务名称

第三种:主机命名方法(客户端为windows xp,服务器端为linux+oracle 9i)

使用该方法有四条件

  • 必须使用作为网络协议
  • 不必使用任何网络特性,比如Oracle ConnectionManager        <-->
  • 监听器必须设置成GLOBA_DBNAME参数等于计算机名称 可以不要求,但是要求数据库对外提供的服务名SERVEICE_NAME必须跟主机名相同。因为通过主机命名方式连接数据库时,sqlplus会寻找主机名对应服务器上对应服务名为主机名的数据库服务,向他发起连接。而当listener.ora中设置了SID_LIST中的GLOBAL_DBNAME,启用的是静态注册,此时监听器会监听一个服务名为GLOBAL_DBNAME的数据库服务。因此如果使用的是动态注册,并且通过hostname方式连接数据库,需要求数据库的服务名必须跟主机名相同。
  • 必须有一个名部命名服务(比如DNS)或一个可供客户使用的HOST文件
    1、配置客户端的sqlnet.ora
    eg:
    # sqlnet.ora Network Configuration File:D:oracleproduct10.2.0client_1NETWORKADMINsqlnet.ora
    # Generated by Oracle configuration tools.

    # This file is actually generated by netca. But if customers chooseto
    # install "Software Only", this file wont exist and without thenative
    # authentication, they will not be able to connect to the databaseon NT.

    SQLNET.AUTHENTICATION_SERVICES= (NTS)

    NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME)

    2、配置服务器端的listener.ora
    [oracle@linuxoracle admin]$ vi listener.ora

    # LISTENER.ORA Network Configuration File:/u01/app/oracle/product/9.2.0/network/admin/listener.ora
    # Generated by Oracle configuration tools.

    LISTENER =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = linuxoracle)(PORT = 1521))#注意HOST配置为主机名
    )

    SID_LIST_LISTENER =
    (SID_LIST =
    (SID_DESC =
    (GLOBAL_DBNAME = linuxoracle) #注意GLOBAL_DBNAME为主机名
    (ORACLE_HOME = /u01/app/oracle/product/9.2.0)
    (SID_NAME = dg1)
    )
    (SID_DESC =
    (GLOBAL_DBNAME = linuxoracle)
    (ORACLE_HOME = /u01/app/oracle/product/9.2.0)
    (SID_NAME = OEMREP)
    )
    )
    说明:
    如果没有正确配置GLOBAL_DBNAME,sqlplus连接时,会报如下错误:
    C:Documents and Settings ew>sqlplussystem/lijie123@linuxoracle

    SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 9月 19 17:31:522007

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

    ERROR:
    ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

    3、配置完后,sqlplus连接
    Microsoft Windows XP [版本 5.1.2600]
    (C) 版权所有 1985-2001 Microsoft Corp.

    C:Documents and Settings ew>sqlplussystem/lijie123@linuxoracle

    SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 9月 19 17:19:482007

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

    ERROR:
    ORA-12154: TNS: 无法解析指定的连接标识符

    报这样的错误,说明sqlplus不能正确解析linuxoracle,可能hosts或DNS的问题!!!
    用记事本打开hosts
    内容如下(省略了一部分):
    ..............................................................
    # 102.54.94.97 rhino.acme.com # source server
    # 38.25.63.10 x.acme.com # x client host
    127.0.0.1 localhost
    修该为:
    ...............................................................
    # 102.54.94.97 rhino.acme.com # source server
    # 38.25.63.10 x.acme.com # x client host
    127.0.0.1 localhost
    192.168.1.61 linuxoracle


    4、sqlplus连接oracle服务器
    C:Documents and Settings ew>sqlplussystem/lijie123@linuxoracle

    SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 9月 19 18:37:512007

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


    连接到:
    Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
    With the Partitioning, OLAP and Oracle Data Mining options
    JServer Release 9.2.0.4.0 - Production

    SQL>
    成功!!!

    第四种:Oracle Easy Connect
    只在oracle 10g以上版本使用
    Oracel Easy Connect Naming
    使用oracle easy connect naming必须满足以下要求
    1、oracle net services 10g必须安装在客户端
    2、客户端及服务器端必须支持TCP/IP,并启用
    3、不允许高级连接描述符特性,如:连接池、外部过程调用
    配置oracle easy connect naming
    在sqlnet.ora增加下面这行:
    NAMES.DIRECTORY_PATH=(EZCONNECT,TNSNAMES) #注意增加了EZCONNECT


    oracle easy connect naming方法示例
    eg:
    connect scott/tiger@hostname:port/servicesname
    connect scott/tiger@//hostname/servicesname

    解释:
    语法构件 描述
    // 任选:通过URL连接时使用
    hostname 必选: 主机名或IP
    port 任选:端口号
    servicesname 必选:oracle服务的名称

    第五种:本地命名法

    本地命名方法也被称为tnsnames.ora方法
  • This tnsnames.ora file is a configuration file thatcontains net service names mapped toconnect descriptors for thelocal naming method, or netservice names mapped to listener protocol addresses.


    可用Oracle net manager配置本地命名方法(当然也可以用OEM)
    打开Oracle net manager,在Local选项中选择ServiceNaming进行添加,添加好的tnsnames.ora内容如下:
    eg:
    TEST =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.61)(PORT =1521))
    )
    (CONNECT_DATA =
    (SERVICE_NAME = dg1)
    )
    )

    TEST为网络服务名,SERVICE_NAME为oracle的服务名

 

listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$ORACLE_HOMEnetworkadmin目录下。
  
  重点:三个文件的作用和使用
  #-----------------------
  
  sqlnet.ora-----作用类似于linux或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串,
  
  例如我们客户端输入
  
  sqlplus sys/oracle@orcl
  
  假如我的sqlnet.ora是下面这个样子
  
  SQLNET.AUTHENTICATION_SERVICES= (NTS)
  NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
  
  那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的ip地址然后去连接这个ip上GLOBAL_DBNAME=orcl这个实例,当然我这里orcl并不是一个主机名
  
  如果我是这个样子
  
  NAMES.DIRECTORY_PATH= (TNSNAMES)
  
  那么客户端就只会从tnsnames.ora查找orcl的记录
  
  括号中还有其他选项,如LDAP等并不常用。
  
  #------------------------
  Tnsnames.ora------这个文件类似于unix的hosts文件,提供的tnsname到主机名或者ip的对应,只有当sqlnet.ora中类似
  
  NAMES.DIRECTORY_PATH=(TNSNAMES) 这样,也就是客户端解析连接字符串的顺序中有TNSNAMES是,才会尝试使用这个文件。
  
  例子中有两个,ORCL 对应的本机,SALES对应的另外一个IP地址,里边还定义了使用主用服务器还是共享服务器模式进行连接,一句一句说
  
  #你所要连接的时候输入得TNSNAME
  
  ORCL =
  (DESCRIPTION =
  (ADDRESS_LIST =
  
  #下面是这个TNSNAME对应的主机,端口,协议
  
  (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
  )
  (CONNECT_DATA =
  
  #使用专用服务器模式去连接需要跟服务器的模式匹配,如果没有就根据服务器的模式
  
  #自动调节
  
  (SERVER = DEDICATED)
  
  #对应service_name,SQLPLUS>show parameterservice_name;
  
  #进行查看
  
  (SERVICE_NAME = orcl)
  )
  )
  
  #下面这个类似
  
  SALES =
  (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.219)(PORT =1521))
  )
  (CONNECT_DATA =
  (SERVER = DEDICATED)
  (SERVICE_NAME = sales)
  )
  )
  
  
  #----------------------
  客户端完了我们来看服务器端
  
  listener.ora------listener监听器进程的配置文件
  
  关于listener进程就不多说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。所以如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。
  
  Listener.ora文件的例子
  
  #listener.ora Network Configuration File:#E:oracleproduct10.1.0Db_2NETWORKADMINlistener.ora
  # Generated by Oracle configuration tools.
  
  #下面定义LISTENER进程为哪个实例提供服务
  
  #这里是ORCL,并且它对应的ORACLE_HOME和GLOBAL_DBNAME
  
  #其中GLOBAL_DBNAME不是必需的除非使用HOSTNAME做数据库连接
  
  SID_LIST_LISTENER =
  (SID_LIST =
  (SID_DESC =
  (GLOBAL_DBNAME = boway)
  (ORACLE_HOME = E:oracleproduct10.1.0Db_2)
  (SID_NAME = ORCL)
  )
  )
  
  #监听器的名字,一台数据库可以有不止一个监听器
  
  #再向下面是监听器监听的协议,ip,端口等,这里使用的tcp1521端口,并且使#用的是主机名
  
  LISTENER =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST= HOSTNAME.DOMAINNAME/HOST IP)(PORT = 1521))
  )

 

   其中:LISTENER是监听器名字,可以是任意字符;

       缺省通信协议是 TCP
       HOSTNAME是本机的主机名,DOMAINNAME是其域名,也可以填写本机的IP地址.
        缺省监听端口是1521
  
  上面的例子是一个最简单的例子,但也是最普遍的。一个listener进程为一个instance(SID)提供服务。
  
  监听器的操作命令
  
  $ORACLE_HOME/bin/lsnrctlstart,其他诸如stop,status等。具体敲完一个lsnrctl后看帮助。
  
  上面说到的三个文件都可以通过图形的配置工具来完成配置
  
  $ORACLE_HOME/netca  向导形式的
  
  $ORACLE_HOME/netmgr
  
  本人比较习惯netmgr,
  
  profile 配置的是sqlnet.ora也就是名称解析的方式
  
  service name 配置的是tnsnames.ora文件
  
  listeners配置的是listener.ora文件,即监听器进程
  
  具体的配置可以尝试一下然后来看一下配置文件。
  
  这样一来总体结构就有了,是当你输入sqlplus sys/oracle@orcl的时候
  
  1. 查询sqlnet.ora看看名称的解析方式,发现是TNSNAME
  
  2. 则查询tnsnames.ora文件,从里边找orcl的记录,并且找到主机名,端口和service_name
  
  3. 如果listener进程没有问题的话,建立与listener进程的连接。
  
  4.根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener采取接下去的动作。默认是专用服务器模式,没有问题的话客户端就连接上了数据库的serverprocess。
  
  5. 这时候网络连接已经建立,listener进程的历史使命也就完成了。
  
  #---------------
  几种连接用到的命令形式
  
  1.sqlplus / as sysdba 这是典型的操作系统认证,不需要listener进程
  
  2.sqlplus sys/oracle 这种连接方式只能连接本机数据库,同样不需要listener进程
  
  3.sqlplus sys/oracle@orcl这种方式需要listener进程处于可用状态。最普遍的通过网络连接。
  
  以上连接方式使用sys用户或者其他通过密码文件验证的用户都不需要数据库处于可用状态,操作系统认证也不需要数据库可用,普通用户因为是数据库认证,所以数据库必需处于open状态。
  
  然后就是
  
  #-------------
  平时排错可能会用到的
  
  1.lsnrctl status查看服务器端listener进程的状态
  
  LSNRCTL> help
  The following operations are available
  An asterisk (*) denotes a modifier or extended command:
  start        stop        status
  services      version       reload
  save_config     trace        change_password
  quit        exit        set*
  show*
  LSNRCTL> status
  :em11:
  
  2.tnsping查看客户端sqlnet.ora和tnsname.ora文件的配置正确与否,及对应的服务器的listener进程的状态。
  
  C:>tnsping orcl
  
  TNS Ping Utility for 32-bit Windows: Version 10.1.0.2.0 -Production on 16-8月 -
  2005 09:36:08
  
  Copyright (c) 1997, 2003, Oracle. All rights reserved.
  
  Used parameter files:
  E:oracleproduct10.1.0Db_2networkadminsqlnet.ora
  
  Used TNSNAMES adapter to resolve the alias
  Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS =(PROTOCOL = TCP)
  (HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVER =DEDICATED) (SERVICE_
  NAME = orcl)))
  OK (20 msec)
  
  3.SQL>show sga 查看instance是否已经启
  
  SQL> select open_mode from v$database;查看数据库是打开还是mount状态。
  OPEN_MODE
  ----------
  READ WRITE
  
  #-----------------
  使用hostname访问数据库而不是tnsname的例子
  
  使用tnsname访问数据库是默认的方式,但是也带来点问题,那就是客户端都是需要配置tnsnames.ora文件的。如果你的数据库服务器地址发生改变,就需要重新编辑客户端这个文件。通过hostname访问数据库就没有了这个麻烦。
  
  需要修改
  
  服务器端listener.ora
  
  #监听器的配置文件listener.ora
  
  #使用host naming则不再需要tnsname.ora文件做本地解析
  
  # listener.ora Network Configuration File:d:oracleproduct10.1.0db_1NETWORKADMINlistener.ora
  # Generated by Oracle configuration tools.
  
  SID_LIST_LISTENER =
  (SID_LIST =
  (SID_DESC =
  #  (SID_NAME = PLSExtProc)
  (SID_NAME = orcl)
  (GLOBAL_DBNAME = boway)
  (ORACLE_HOME = d:oracleproduct10.1.0db_1)
  #  (PROGRAM = extproc)
  )
  )
  
  LISTENER =
  (DESCRIPTION_LIST =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))

相关评论

专题信息
    ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;本教程主要是针对oracle应用过程中我们常用的函数进行深入讲解,让大家能够通过代码实例更快、更有效的掌握oracle函数,希望对大家有所帮助。