Oracle的tnsnames.ora配置(PLSQL Developer)

  1. 首先打开tnsnames.ora的存放目录,通常为D:\app\Administrator\product\11.2.0\client_1\network\admin,就看安装具体位置了。html

  2. 2

    使用editplus或者记事本或其余工具打开tnsnames.ora,进行编辑node

    配置一下文件linux

     CONN_shenyi2 =sql

      (DESCRIPTION =数据库

        (ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.144.191)(PORT = 1521))windows

        (CONNECT_DATA =tomcat

          (SERVER = DEDICATED)服务器

          (SERVICE_NAME = orcl)网络

        )架构

      )

  3. 3

    上边的SERVICE_NAME 和HOST、PORT 改成本身的便可

  4. 4

    打开plsql,登录

  5. 5

    登录完成便可使用强大的plsql developer

     
    http://jingyan.baidu.com/article/b0b63dbfcd34834a4930704a.html
    222222222222222222222222222222222222222
     

    tnsnames.ora 监听配置文件详解

     

    今天是重要的一天。将XML数据导入ORACLE遇到不少问题,学了好多,其中很长时间花在网络配置上,刚开始学,具体缘由不知道,先把搜集到的好文章存下来,之后慢慢研究。

    监听配置文件
                 为了使得外部进程 如 CAMS后台程序 可以访问 Oracle 数据库 必须配
                 置 Oracle 网络服务器环境 配置 Oracle 网络服务器环境是经过配置
                 listener.ora sqlnet.ora 和 tnsnames.ora 共三个文件来进行的 listener.ora
                 即监听配置文件 在本小节说明 另两个文件分别在随后的两个小节说明
                 监听配置文件 listener.ora 的存放路径为 $ORACLE_HOME/network/admin
                 如下是一个示例
                 LISTENER =                          #监听器名称
                    (DESCRIPTION_LIST =
                   (DESCRIPTION =
                      (ADDRESS_LIST =
                          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
                      )
                      (ADDRESS_LIST =
                          (ADDRESS =
                 (PROTOCOL = TCP)
                 (HOST = localhost.localdomain)
                 (PORT = 1521))
                      )
                   )
                   (DESCRIPTION =
                      (PROTOCOL_STACK =
                          (divSENTATION = GIOP)
                          (SESSION = RAW)
                      )
                      (ADDRESS =
                 (PROTOCOL = TCP)
                 (HOST = localhost.localdomain)
                 (PORT = 2481))

                      )
                )
                
    SID_LIST_LISTENER = #命名规则 SID_LIST_+上面定义的监听器名称
    (SID_LIST =
        (SID_DESC =
       (SID_NAME = PLSExtProc1)
       (ORACLE_HOME = /u01/app/oracle/product/8.1.7)
       (PROGRAM = extproc)
        )
        (SID_DESC =
       (GLOBAL_DBNAME = cams)
       (ORACLE_HOME = /u01/app/oracle/product/8.1.7)
       (SID_NAME = cams)
        )
        (SID_DESC =
       (GLOBAL_DBNAME = oid)
       (ORACLE_HOME = /u01/app/oracle/product/8.1.7)
       (SID_NAME = oid)
        )
    )


    & 说明
    1 listener.ora 文件中定义一个监听器 其缺省的名称为 LISTENER
    这个监听器缺省以tcp/ip为协议地址且端口号为1521运行 在CAMS应用中
    监听文件定义的监听器就使用这个缺省名字 而且使用缺省的协议 tcp/ip
    和缺省的端口号 1521 待配置好监听文件以及随后说明的 sqlnet.ora 和
    tnsnames.ora 文件以后 就能够用如下命令将监听文件中定义的监听器启动
    起来
        $ lsnrctl start
    中止监听器的命令为
        $ lsnrctl stop
    监测监听器当前状态的命令为
        $ lsnrctl status
    当 lsnrctl status 命令有以下输出结果
        STATUS of the LISTENER
        ------------------------
        Alias                LISTENER
        Version                 TNSLSNR for Linux: Version 8.1.7.4.0 - Production
        Start Date             17-JAN-2004 19:00:08
        Uptime                31 days 15 hr. 27 min. 59 sec
    就说明监听器正在运行 不然说明监听器已经中止了 CAMS 系统的后台程
    序的正常运行不只依赖于数据库实例的运行 还依赖于这个数据库监听器的
    运行 假如监听器没有启动 即便数据库已经启动 CAMS 后台程序仍然不
    能正常工做
    2 如(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))所示的一个
    IPC 协议地址的监听 是为了外部进程调用用的 在数据库安装时自动设定
    不须要改动

    3 在监听文件后部还有一个 SID_LIST_LISTENER 段 该段用于定义监听
    器的服务 即为哪些数据库实例提供监听服务 以 cams 实例为例 其对应的
    服务信息为
    (SID_DESC =
    (GLOBAL_DBNAME = cams) #数据库名
        (ORACLE_HOME = /u01/app/oracle/product/8.1.7)
    (SID_NAME = cams) #数据库实例名
    )


    1.2.5 sqlnet.ora 文件
                 sqlnet.ora 文件的存放路径为 $ORACLE_HOME/network/admin 如下是一
                 个示例

    NAMES.DEFAULT_DOMAIN = localdomain
    NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
    & 说明
    NAMES.DEFAULT_DOMAIN 指定网络域名 NAMES.DIRECTORY_PATH
    指定当解析客户端链接标识符时命名方法 naming metthods 采用的优先顺
    序 从左至右递减        在 CAMS 应用中 这两个参数采用上述所示的系统缺
    省值


    1.2.6 tnsnames.ora 文件
    tnsnames.ora 文件的存放路径为 $ORACLE_HOME/network/admin 如下
    是一个示例
    OID.LOCALDOMAIN =
    (DESCRIPTION =
        (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT =
    1521))
        )
        (CONNECT_DATA =
       (SERVICE_NAME = oid)
        )
    )
    CAMS.LOCALDOMAIN =
    (DESCRIPTION =
        (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT =
    1521))
        )
        (CONNECT_DATA =
       (SERVICE_NAME = cams)
        )
    )
    INST1_HTTP.LOCALDOMAIN =
    (DESCRIPTION =
        (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT =

    1521))
        )
        (CONNECT_DATA =
       (SERVER = SHARED)
       (SERVICE_NAME = MODOSE)
       (divSENTATION = http://admin)
        )
    )
    EXTPROC_CONNECTION_DATA.LOCALDOMAIN =
    (DESCRIPTION =
        (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
        )
        (CONNECT_DATA =
       (SID = PLSExtProc1)
       (divSENTATION = RO)
        )
    )
     

    & 说明
    tnsnames.ora 文件中定义一个或多个网络服务 net service cams 实例对
    应的网络服务为
    CAMS.LOCALDOMAIN =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS =
       (PROTOCOL = TCP)
       (HOST = localhost.localdomain)
       (PORT = 1521))
    )
    (CONNECT_DATA =
    (SERVICE_NAME = cams)
    )
    )
    注意 这里 ADDRESS项包含三个子参数

    PROTOCOL :默认协议TCP

    HOST :ip地址

    PORT:端口,默认1521

    CAMS.LOCALDOMAIN为数据名

    要确保在监听文件中也有对应的一个 ADDRESS 项也包含一样的三个子参
    数 而且子参数的值对应都相等 另外 这里 SERVICE_NAME 的值必需确
    保与监听文件中某 SID_DESC项下的 SID_NAME参数的值相等

     
    3333333333333333333333333333
     

    oracle网络配置 
    三个配置文件 listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$ORACLE_HOME/network/admin目录下。 
    1.  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等并不经常使用。 
    2.  Tnsnames.ora——这个文件相似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应,只有当sqlnet.ora中相似 
    NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,也就是客户端解析链接字符串的顺序中有TNSNAMES是,才会尝试使用这个文件。 
    PROTOCOL:客户端与服务器端通信的协议,通常为TCP,该内容通常不用改。 
    HOST:数据库侦听所在的机器的机器名或IP地址,数据库侦听通常与数据库在同一个机器上,因此当我说数据库侦听所在的机器通常也是指数据库所在的机器。在UNIX或WINDOWS下,能够经过在数据库侦听所在的机器的命令提示符下使用hostname命令获得机器名,或经过ipconfig(for WINDOWS) or ifconfig(for UNIX)命令获得IP地址。须要注意的是,无论用机器名或IP地址,在客户端必定要用ping命令ping通数据库侦听所在的机器的机器名,不然须要在 hosts文件中加入数据库侦听所在的机器的机器名的解析。 
    PORT:数据库侦听正在侦听的端口,能够察看服务器端的listener.ora文件或在数据库侦听所在的机器的命令提示符下经过lnsrctl status [listener name]命令察看。此处Port的值必定要与数据库侦听正在侦听的端口同样。 
    SERVICE_NAME:在服务器端,用system用户登录后,sqlplus> show parameter service_name命令察看。 
    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 parameter service_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) 


    注意:若是数据库服务器用MTS,客户端程序须要用database link时最好明确指明客户端用dedicated直连方式,否则会遇到不少跟分布式环境有关的ORACLE BUG。通常状况下数据库服务器用直接的链接会好一些,除非你的实时数据库链接数接近1000。 
    3.  listener.ora——listener监听器进程的配置文件 
    关于listener进程就很少说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。因此若是不是使用的远程的链接,listener进程就不是必需的,一样的若是关闭listener进程并不会影响已经存在的数据库链接。 
    Listener.ora文件的例子 
    #listener.ora Network Configuration File: #E:/oracle/product/10.1.0/Db_2/NETWORK/ADMIN/listener.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:/oracle/product/10.1.0/Db_2) 
    (SID_NAME = ORCL) 


    #监听器的名字,一台数据库能够有不止一个监听器 
    #再向下面是监听器监听的协议,ip,端口等,这里使用的tcp1521端口,而且使#用的是主机名 
    LISTENER = 
    (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521)) 

    上面的例子是一个最简单的例子,但也是最广泛的。一个listener进程为一个instance(SID)提供服务。 
    监听器的操做命令 
    $ORACLE_HOME/bin/lsnrctl start,其余诸如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采起接下去的动做。默认是专用服务器模式,没有问题的话客户端就链接上了数据库的server process。 
    5. 这时候网络链接已经创建,listener进程的历史使命也就完成了。 
    #————— 
    几种链接用到的命令形式 
    1.sqlplus / as sysdba 这是典型的操做系统认证,不须要listener进程 
    2.sqlplus sys/oracle 这种链接方式只能链接本机数据库,一样不须要listener进程 
    3.sqlplus sys/oracle@orcl 这种方式须要listener进程处于可用状态。最广泛的经过网络链接。 
    以上链接方式使用sys用户或者其余经过密码文件验证的用户都不须要数据库处于可用状态,操做系统认证也不须要数据库可用,普通用户由于是数据库认证,因此数据库必需处于open状态。 
    init.ora中的Remote_Login_Passwordfile对身份验证的影响 
        三个可选值: 
        NONE:默认值,指示Oracle系统不使用密码文件,经过操做系统进行身份验证的特权用户拥有SYSORA和SYSOPER权限 
        EXCLUSIVE: 
        1.表示只有一个数据库实例可使用密码文件 
        2.容许将SYSORA和SYSOPER权限赋值给SYS之外的其它用户 
        SHARED: 
        1.表示能够有多个数据库实例可使用密码文件 
        2.不容许将SYSORA和SYSOPER权限赋值给SYS之外的其它用户 
        因此,若是要以操做系统身份登陆,Remote_Login_Passwordfile应该设置为NONE 
        当登陆用户不是ORA_DBA组和ORA_OPER组成员时,登陆数据库须要在Oracle中建立当前操做系统用户相同的用户名,若是当前用户是域用       户,则名称为:domainname/yourname,若是是本地计算机用户,则名称为:computername/yourname 
        建立方法: 
        create "domainname/yourname" identified externally; 
        操做系统,修改HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0下面添加AUTH_PREFIX_DOMAIN,值设为FALSE,在建立Oracle用户时能够忽略     掉域名 
        这种方式下,init.ora中有一个参数将影响数据库如何匹配一个windows用户和Oracle用户os_authent_prefix = "" 
        缺省为空,Oracle8i之前,无该参数,而使用OPS$做为用户名前缀.(Oracle用户名最大长度限制为30个字符) 
    关于域名(主机名)解析      
               /etc/hosts (UNIX) 
               或者windows/hosts(WIN98)  winnt/system32/drivers/etc/hosts (WIN2000) 
               客户端须要写入数据库服务器IP地址和主机名的对应关系。 
               127.0.0.1       localhost 
               192.168.0.35    oracledb oracledb 
               192.168.0.45    tomcat tomcat 
               202.84.10.193   bj_db   bj_db    
               有些时候咱们配置好第一步后,tnsping 数据库服务器别名显示是成功的, 
               可是sqlplus username/password@servicename不通,jdbc thin link 也不通的时候,         
               必定不要忘了在客户端作这一步,缘由多是DNS服务器里没有设置这个服务器IP地址和主机名的对应关系。 
               若是同时有私有IP和Internet上公有IP,私有IP写在前面,公有IP写在后面。 
               编辑前最好留一个备份,增长一行时也最好用复制粘贴,避免编辑hosts时空格或者tab字符错误。 
    UNIX下ORACLE多数据库的环境,OS客户端须要配置下面两个环境变量 
               ORACLE_SID=appdb;export ORACLE_SID 
               TWO_TASK=appdb;export TWO_TASK 
          来指定默认的目标数据库   
    #————- 
    平时排错可能会用到的 
    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:/oracle/product/10.1.0/Db_2/network/admin/sqlnet.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:/oracle/product/10.1.0/db_1/NETWORK/ADMIN/listener.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:/oracle/product/10.1.0/db_1) 
    # (PROGRAM = extproc) 


    LISTENER = 
    (DESCRIPTION_LIST = 
    (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) 

    (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521)) 


    客户端sqlnet.ora 若是确认不会使用TNSNAME访问的话,能够去掉TNSNAMES 
    # sqlnet.ora Network Configuration File: d:/oracle/product/10.1.0/db_1/NETWORK/ADMIN/sqlnet.ora 
    # Generated by Oracle configuration tools. 
    SQLNET.AUTHENTICATION_SERVICES= (NTS) 
    NAMES.DIRECTORY_PATH= (HOSTNAME) 
    Tnsnames.ora文件不须要配置,删除也无所谓。 
    下面就是网络和操做系统的配置问题了,怎么样可以解析个人主机名的问题了 
    能够经过下面的方式链接 
    sqlplus sys/oracle@boway 
    这样的话,会链接boway这台服务器,而且listener来肯定你所要链接的service_name 
    常见故障解决办法: 
    TNS-12154 (ORA-12154):TNS:could not resolve service name 
    该错误表示用于链接的网络服务名在tnsnames.ora文件中不存在,如上面的tnsnames.ora中的网络服务名只有test,假如用户在链接时用sqlplus system/manager@test1则就会给出TNS-12154错误。 
    要注意的是,有时即便在tnsnames.ora文件中有相应的网络服务名,但是用该网络服务名链接时还会出错,出现这种状况的典型配置以下(在客户端的机器上): 
    sqlnet.ora文件: 
    NAMES.DIRECTORY_PATH = (TNSNAMES, ….) 
    NAMES.DEFAULT_DOMAIN = server.com 
    tnsnames.ora文件: 
    test = 
    (DESCRIPTION= 
    (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521)) 

    (CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com) 


    sql*plus运行基本机理: 
    在用户输入sqlplus system/manager@test后,sqlplus程序会自动到sqlnet.ora文件中找NAMES.DEFAULT_DOMAIN参数,假如该参数存在,则将该参数中的值取出,加到网络服务名的后面,即此例中你的输入由sqlplus system/manager@test自动变为sqlplus system/manager@test.server.com ,而后再到tnsnames.ora文件中找test.server.com网络服务名,这固然找不到了,由于该文件中只有test网络服务名,因此报错。解决的办法就是将sqlnet.ora文件中的NAMES.DEFAULT_DOMAIN参数注释掉便可,如 #NAMES.DEFAULT_DOMAIN = server.com。假如NAMES.DEFAULT_DOMAIN参数不存在,则sqlplus程序会直接到tnsnames.ora文件中找 test网络服务名,而后取出其中的host,port,tcp,service_name,利用这些信息将链接请求发送到正确的数据库服务器上。 
    另外原则上tnsnames.ora中的配置不区分大小写,可是个人确遇到区分大小写的状况,因此最好将使用的网络服务与tnsnames.ora中配置的彻底同样。 
    ORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect Descriptor. 
    该错误表示能在tnsnames.ora中找到网络服务名,可是在tnsnames.ora中指定的SERVICE_NAME与服务器端的 SERVICE_NAME不一致。解决的办法是修改tnsnames.ora中的SERVICE_NAME。 
    易混淆术语介绍: 
    Db_name:对一个数据库(Oracle database)的惟一标识,该数据库为Oracle database。这种表示对于单个数据库是足够的,可是随着由多个数据库构成的分布式数据库的普及,这种命令数据库的方法给数据库的管理形成必定的负担,由于各个数据库的名字可能同样,形成管理上的混乱。为了解决这种状况,引入了Db_domain参数,这样在数据库的标识是由Db_name和 Db_domain两个参数共同决定的,避免了由于数据库重名而形成管理上的混乱。这相似于互连网上的机器名的管理。咱们将Db_name和 Db_domain两个参数用’.’链接起来,表示一个数据库,并将该数据库的名称称为Global_name,即它扩展了Db_name。 Db_name参数只能由字母、数字、’_’、’#’、’$’组成,并且最多8个字符。 
    Db_domain:定义一个数据库所在的域,该域的命名同互联网的’域’没有任何关系,只是数据库管理员为了更好的管理分布式数据库而根据实际状况决定的。固然为了管理方便,能够将其等于互联网的域。 
    Global_name:对一个数据库(Oracle database)的惟一标识,oracle建议用此种方法命令数据库。该值是在建立数据库是决定的,缺省值为Db_name. Db_domain。在之后对参数文件中Db_name与Db_domain参数的任何修改不影响Global_name的值,若是要修改 Global_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO 命令进行修改,而后修改相应参数。 
    Service_name:该参数是oracle8i新引进的。在8i之前,咱们用SID来表示标识数据库的一个实例,可是在Oracle的并行环境中,一个数据库对应多个实例,这样就须要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不是一个实例,并且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。一个数据库能够对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即没必要Service name 必须与SID同样。 
    Net service name:网络服务名,又能够称为数据库别名(database alias)。是客户端程序访问数据库时所须要,屏蔽了客户端如何链接到服务器端的细节,实现了数据库的位置透明的特性。 
    如何利用配置的网络服务名链接到数据库: 
      用sqlplus程序经过test网络服务名进行测试,如sqlplus system/manager@test。若是不能链接到数据库,则在tnsname.ora文件中的test网络服务名(net service)后面加上Oracle数据库的DB_Domain参数值,经过用sqlplus> show parameter db_domain命令察看。此处db_domain参数值为testserver.com,将其加到网络服务名后面,修改后的tnsname.ora中关于该网络服务名的内容为: 
    应该改成: 
    如何利用配置的网络服务名链接到数据库: 
    用sqlplus程序经过test网络服务名进行测试,如sqlplus system/manager@test。若是不能链接到数据库,则在tnsname.ora文件中的test网络服务名(net service)后面加上sqlnet.ora文件中NAMES.DEFAULT_DOMAIN参数的值,此处个人参数值为 testserver.com,将其加到网络服务名后面,修改后的tnsname.ora中关于该网络服务名的内容为: 
    什么状况下会引发oracle自动设置NAMES.DEFAULT_DOMAIN参数? 
    出现这种状况的典型环境为windows的客户端的‘我得电脑à属性à计算机名à更改à其它…à此计算机的主DNS后缀’中设置了‘primary dns suffix’,由于在这种状况下安装客户端时,会在sqlnet.ora文件中自动设置NAMES.DEFAULT_DOMAIN参数,或许当把计算机加入域中安装oracle客户端时也会出现这种状况,有条件的话你们能够试一下。 
    我在设置oracle的客户端时通常手工修改tnsnames.ora文件,可是还有许多人喜欢用图形工具配置,该图形工具最终仍是修改tnsnames.ora文件,可是它有时会引发其它的问题: 
    在用oracle的图形配置软件’net assistant’或‘Net Configuration Assistant’配置网络服务名时,假如已经设置了‘primary dns suffix’,可是在图形配置软件中写的网络服务名的名字中没有‘primary dns suffix’,如只是写了test,则图形配置软件会自动在后面加上‘primary dns suffix’,使之变为test.testserver.com,并存在tnsnames.ora中,而无论你的sqlnet.ora文件中是否有 NAMES.DEFAULT_DOMAIN参数。此时,用图形工具进行测试链接是经过的,可是假如此时sqlnet.ora文件中没有 NAMES.DEFAULT_DOMAIN参数,则你在使用网络服务名时应该使用在tnsnames.ora中的 test.testserver.com,而不是你在图形配置软件中键入的test。解决的办法为: 
    能够在sqlnet.ora文件中设置NAMES.DEFAULT_DOMAIN= testserver.com,这时你能够用test或test.testserver.com链接数据库 
    在sqlnet.ora文件中不设置NAMES.DEFAULT_DOMAIN参数,在tnsnames.ora文件中将 test.testserver.com中的.testserver.com去掉,这时你能够用test链接数据库

    listener.ora、 tnsnames.ora和sqlnet.ora这3个文件是关系oracle网络配置的3个主要文件,其中listener.ora是和数据库服务器端 相关,而tnsnames.ora和sqlnet.ora这2个文件不只仅关系到服务器端,主要的仍是和客户端关系紧密。 
    检查客户端oracle网络的时候能够先检查sqlnet.ora文件:

    # SQLNET.ORA Network Configuration File: $ORACLE_HOME/NETWORK/ADMIN/sqlnet.ora 
    # Generated by Oracle configuration tools. 
    SQLNET.AUTHENTICATION_SERVICES= (NTS) 
    NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES) 
    ##NAMES.DEFAULT_DOMAIN = us.oracle.com

    上面的sqlnet.ora文件说明: 
    SQLNET.AUTHENTICATION_SERVICES= (NTS)——这个表示采用os认证,在数据库服务器上,能够利用sqlplus “/ as sysdba”。通常这个配置在windows上是ok的,在unix环境下可能会有问题,通常在unix下能够去掉这个配置。

    NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES)——表示将首先利用tnsnames进行解析;若是tnsnames解析不到,将使用hostname解析;若是hostname解析不 到,将采用onames进行解析。

    被注释掉的NAMES.DEFAULT_DOMAIN = us.oracle.com——表示采用默认的domain name为us.oracle.com,在tnsnames.ora中若是配置对应的解析,若是原来的别名oralocal,那么,当启用这个参数后,在 tnsnames中的配置要改为oralocal.us.oracle.com。在使用tnsping时或者sqlplus登陆时,只需写前面的别名,系 统会自动加上后面的domain name来进行解析。

    检查完毕sqlnet.ora,通常都会发现是使用tnsname来解析别名的,那么,tnsnames.ora中能够有哪些配置种类呢?

    # TNSNAMES.ORA Network Configuration File: $ORACLE_HOME/NETWORK/ADMIN/tnsnames.ora 
    # Generated by Oracle configuration tools. 
    ###### 通常的配置 ################################## 
    ORALOCAL = 
      (DESCRIPTION = 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) 
        ) 
        (CONNECT_DATA = 
          (SERVER = DEDICATED) 
          (SERVICE_NAME = oralocal) 
        ) 
      ) 
    ###### 这样也行,用SID=oralocal ########################### 
    ORALOCAL_2 = 
      (DESCRIPTION = 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) 
        ) 
        (CONNECT_DATA = 
          (SERVER = DEDICATED) 
          (SID = oralocal) 
        ) 
    ###### RAC的配置(3节点rac) ############################### 
    ORALOCAL = 
      (DESCRIPTION = 
      (load_balance = yes) 
      (failover = on) 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521)) 
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521)) 
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT = 1521))    
        ) 
        (CONNECT_DATA = 
            (SERVICE_NAME = oralocal) 
            (SERVER = DEDICATED) 
            (failover_mode=(type=select)(method=basic)(retries=20)(delay=20)) 
        ) 
      ) 
    ORALOCAL_NODE1 = 
       (DESCRIPTION = 
         (ADDRESS_LIST = 
           (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521)) 
           ) 
           (CONNECT_DATA = 
             (SERVICE_NAME = oralocal) 
             (INSTANCE_NAME = oralocal_node1) 
           ) 
       ) 
    ORALOCAL_NODE2= 
       (DESCRIPTION = 
         (ADDRESS_LIST = 
           (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521)) 
           ) 
           (CONNECT_DATA = 
             (SERVICE_NAME = oralocal) 
             (INSTANCE_NAME = oralocal_node2) 
           ) 
       ) 
    ORALOCAL_NODE3 = 
       (DESCRIPTION = 
         (ADDRESS_LIST = 
           (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT = 1521)) 
           ) 
           (CONNECT_DATA = 
             (SERVICE_NAME = oralocal) 
             (INSTANCE_NAME = oralocal_node3) 
           ) 
       ) 
      ) 
    ###### DATA GUARD配置(primary库和standby库都须要配置)############## 
    standby = 
      (DESCRIPTION = 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.2)(PORT = 1521)) 
            ) 
        (CONNECT_DATA = 
              (SERVER=DEDICATED) 
              (SERVICE_NAME = oralocal) 
          ) 
      ) 
    primary = 
      (DESCRIPTION = 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.1)(PORT = 1521)) 
            ) 
        (CONNECT_DATA = 
              (SERVER=DEDICATED) 
              (SERVICE_NAME = oralocal) 
          ) 
      )

    另外须要注意的2点状况: 
    (1)若是tnsnames中的service_name配置错误,配置成了instance_name了,这个时候会发生tnsping能通,可是 sqlplus链接不上的奇怪状况。报错ORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect descriptor。这个时候查错的时候,须要检查对应的service_name。 
    (2)若是远程数据库是rac,并且本地客户端端远程数据库处于不一样的网段,经过公网连接,rac对外的ip映射只有一个,即只映射到一个节点。请注意在 客户端配置tnsnames的时候按照单机的状况来配置。呵呵,dba不只仅要学习oracle,了解一些网络的知识,特别是本身系统的网络架构,也是需 要的。

    Oracle网络配置用到的sqlnet.ora,tnsnames.ora,listener.ora文件

    注:文章内容由网络及相关书籍整理而来,如此只为共享知识,给予帮助。

    listener.ora、tnsnames.ora和sqlnet.ora这3个文件是关系oracle网络配置的3个主要文件,都是放在$ORACLE_HOME/network/admin目录下。其中listener.ora是和数据库服务器端相关,而tnsnames.ora和sqlnet.ora这2个文件不只仅关系到服务器端,主要的仍是和客户端关系紧密。

    1、客户端设置

    1.sqlnet.ora

    经过这个文件来决定怎样找一个链接中出现的链接字符串

    示例文件: 
        # sqlnet.ora Network Configuration File: F:/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora 
        # Generated by Oracle configuration tools.

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

        SQLNET.AUTHENTICATION_SERVICES= (NTS)

        NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME, ONAMES, EZCONNECT)

        #NAMES.DEFAULT_DOMAIN = oracle.com

    内容说明:

    SQLNET.AUTHENTICATION_SERVICES= (NTS)——这个表示采用OS认证,在数据库服务器上,能够利用sqlplus / as sysdba。通常这个配置在windows上是ok的,在unix环境下可能会有问题,通常在unix下能够去掉这个配置。

    NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES)——表示将首先利用tnsnames进行解析;若是tnsnames解析不到,将使用hostname解析;若是hostname解析不到,将采用onames进行解析;最后使用EZCONNECT解析。例如咱们客户端输入:sqlplus zidi/zidi@changbai,那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.若是没有相应的记录则尝试把orcl看成一个主机名,经过网络的途径去解析它的IP地址而后去链接这个IP上global_name=changbai这个实例,固然我这里orcl并非一个主机名。

    被注释掉的NAMES.DEFAULT_DOMAIN = changbai.com——表示采用默认的域名为changbai.com,在tnsnames.ora中若是配置对应的解析,若是原来的数据库别名是oralocal(即网络服务名),那么,当启用这个参数后,在tnsnames中的配置要改为oralocal.changbai.com。在使用tnsping时或者sqlplus登陆时,只需写前面的别名,系统会自动加上后面的域名来进行解析。

    2.tnsnames.ora

    这个文件放在客户端机器上,记录客户端访问数据库的本地配置,其实就是定义网络服务,只有当sqlnet.ora中有“NAMES.DIRECTORY_PATH= (TNSNAMES)”这样的字样时,也就是客户端解析链接字符串的顺序中有TNSNAMES时,才会尝试使用这个文件。

    示例文件: 
    # tnsnames.ora Network Configuration File: F:/oracle/product/10.2.0/db_1/NETWORK/ADMIN/tnsnames.ora 
    # Generated by Oracle configuration tools.

    HUINAMN =网路服务名 
      (DESCRIPTION = 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = 108.108.108.108)(PORT = 1521))访问数据库使用的协议,数据库计算机的主机名或IP地址,数据库的端口号 
        ) 
        (CONNECT_DATA = 
          (SID = HN)数据库实例名,前提是所链接的数据库是Oracle8或更低版本 
        ) 
      ) 
    CHANGBAI = 
      (DESCRIPTION = 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = 208.208.208.208)(PORT = 1521)) 
        ) 
        (CONNECT_DATA = 
          (SERVICE_NAME = CB)数据库服务名,即全局数据库名 
        ) 
      ) 
    ORCL = 
      (DESCRIPTION = 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 
        ) 
        (CONNECT_DATA = 
          (SERVER = DEDICATED)使用专用服务器模式去链接,这须要跟服务器的模式匹配,若是没有就根据服务器的模式自动调节 
          (SERVICE_NAME = orcl) 
        ) 
      )

    2、服务器端设置 
    listener.ora

    它是listener监听器进程的配置文件。关于listener进程就很少说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。因此若是不是使用的远程的链接,listener进程就不是必需的,一样的若是关闭listener进程并不会影响已经存在的数据库链接。 
    示例文件: 
    # listener.ora Network Configuration File: F:/oracle/product/10.2.0/db_1/network/admin/listener.ora 
    # Generated by Oracle configuration tools.

    SID_LIST_LISTENER =这里定义LISTENER进程为哪一个实例提供服务 
      (SID_LIST = 
        (SID_DESC = 
          (SID_NAME = PLSExtProc) 
          (ORACLE_HOME = F:/oracle/product/10.2.0/db_1) 
          (PROGRAM = extproc) 
        ) 
      )

    LISTENER =监听器的名字,一台数据库能够有不止一个监听器 
      (DESCRIPTION_LIST = 
        (DESCRIPTION = 
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))监听器监听的协议,IP,端口等 
          (ADDRESS = (PROTOCOL = TCP)(HOST = dabeng)(PORT = 1521)) 
        ) 
      )

    上面的例子是一个最简单的例子,但也是最广泛的。一个listener进程为一个数据库实例(SID)提供服务。

    3、总结

    上面说到的三个文件均可以经过图形的配置工具来完成配置:Database Configuration Assistant,Net Configuration Assistant 
    具体的配置能够尝试一下,而后来看一下配置文件,这样一来整体结构就有了,是当你输入sqlplus zidi/zidi@changbai的时候

    1. 查询sqlnet.ora看看名称的解析方式,发现是TNSNAME 
    2. 则查询tnsnames.ora文件,从里边找orcl的记录,而且找到主机名,端口和service_name 
    3. 若是listener进程没有问题的话,创建与listener进程的链接。 
    4. 根据不一样的服务器模式如专用服务器模式或者共享服务器模式,listener采起接下去的动做。默认是专用服务器模式,没有问题的话客户端就链接上了数据库的server process。 
    5. 这时候网络链接已经创建,listener进程的历史使命也就完成了。

    换个角度理解: 
    changbai是咱们链接远端数据库用到的服务命名,可是最终必须转化为host:port:servide_name这样的链接字串,而这个转化能够理解为是翻译的过程,而要想翻译成功,则必须选择好翻译方法,那么sqlnet.ora就是咱们用来选择翻译方法的,其中的NAMES.DIRECTORY_PATH= (TNSNAMES) 就是咱们选择的命名解析方法; tnsnames.ora是翻译方法中的一种——本地命名解析方法的配置文件,就好像咱们选择了查字典方法,这个文件就是咱们的字典同样里面存放着全部服务命名对应的链接字串;至于listener.ora则是负责接受咱们请求的负责任人——链接地址配置文件,里面包括了链接负责人的链接地址,也放着通过他容许能够链接的数据库信息。这样就构成了Oracle的网络架构。

     

    55555555555555555555555555

    listener.ora、 tnsnames.ora和sqlnet.ora这3个文件是关系oracle网络配置的3个主要文件,其中listener.ora是和数据库服务器端 相关,而tnsnames.ora和sqlnet.ora这2个文件不只仅关系到服务器端,主要的仍是和客户端关系紧密。 
    检查客户端oracle网络的时候能够先检查sqlnet.ora文件:

    # SQLNET.ORA Network Configuration File: $ORACLE_HOME/NETWORK/ADMIN/sqlnet.ora 
    # Generated by Oracle configuration tools. 
    SQLNET.AUTHENTICATION_SERVICES= (NTS) 
    NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES) 
    ##NAMES.DEFAULT_DOMAIN = us.oracle.com

    上面的sqlnet.ora文件说明: 
    SQLNET.AUTHENTICATION_SERVICES= (NTS)——这个表示采用os认证,在数据库服务器上,能够利用sqlplus “/ as sysdba”。通常这个配置在windows上是ok的,在unix环境下可能会有问题,通常在unix下能够去掉这个配置。

    NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME, ONAMES)——表示将首先利用tnsnames进行解析;若是tnsnames解析不到,将使用hostname解析;若是hostname解析不 到,将采用onames进行解析。

    被注释掉的NAMES.DEFAULT_DOMAIN = us.oracle.com——表示采用默认的domain name为us.oracle.com,在tnsnames.ora中若是配置对应的解析,若是原来的别名oralocal,那么,当启用这个参数后,在 tnsnames中的配置要改为oralocal.us.oracle.com。在使用tnsping时或者sqlplus登陆时,只需写前面的别名,系 统会自动加上后面的domain name来进行解析。

    检查完毕sqlnet.ora,通常都会发现是使用tnsname来解析别名的,那么,tnsnames.ora中能够有哪些配置种类呢?

    # TNSNAMES.ORA Network Configuration File: $ORACLE_HOME/NETWORK/ADMIN/tnsnames.ora 
    # Generated by Oracle configuration tools. 
    ###### 通常的配置 ################################## 
    ORALOCAL = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) 

    (CONNECT_DATA = 
    (SERVER = DEDICATED) 
    (SERVICE_NAME = oralocal) 


    ###### 这样也行,用SID=oralocal ########################### 
    ORALOCAL_2 = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) 

    (CONNECT_DATA = 
    (SERVER = DEDICATED) 
    (SID = oralocal) 

    ###### RAC的配置(3节点rac) ############################### 
    ORALOCAL = 
    (DESCRIPTION = 
    (load_balance = yes) 
    (failover = on) 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521)) 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521)) 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT = 1521)) 

    (CONNECT_DATA = 
    (SERVICE_NAME = oralocal) 
    (SERVER = DEDICATED) 
    (failover_mode=(type=select)(method=basic)(retries=20)(delay=20)) 


    ORALOCAL_NODE1 = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521)) 

    (CONNECT_DATA = 
    (SERVICE_NAME = oralocal) 
    (INSTANCE_NAME = oralocal_node1) 


    ORALOCAL_NODE2= 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521)) 

    (CONNECT_DATA = 
    (SERVICE_NAME = oralocal) 
    (INSTANCE_NAME = oralocal_node2) 


    ORALOCAL_NODE3 = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.3)(PORT = 1521)) 

    (CONNECT_DATA = 
    (SERVICE_NAME = oralocal) 
    (INSTANCE_NAME = oralocal_node3) 



    ###### DATA GUARD配置(primary库和standby库都须要配置)############## 
    standby = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.2)(PORT = 1521)) 

    (CONNECT_DATA = 
    (SERVER=DEDICATED) 
    (SERVICE_NAME = oralocal) 


    primary = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.1)(PORT = 1521)) 

    (CONNECT_DATA = 
    (SERVER=DEDICATED) 
    (SERVICE_NAME = oralocal) 

    )

    另外须要注意的2点状况: (1)若是tnsnames中的service_name配置错误,配置成了instance_name了,这个时候会发生tnsping能通,可是 sqlplus链接不上的奇怪状况。报错ORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect descriptor。这个时候查错的时候,须要检查对应的service_name。 (2)若是远程数据库是rac,并且本地客户端端远程数据库处于不一样的网段,经过公网连接,rac对外的ip映射只有一个,即只映射到一个节点。请注意在 客户端配置tnsnames的时候按照单机的状况来配置。呵呵,dba不只仅要学习oracle,了解一些网络的知识,特别是本身系统的网络架构,也是需 要的。

相关文章
相关标签/搜索