一、a
a 用在oracle client端,用于配置连接服务端oracle的相关参数
1).NAMES.DEFAULT_DOMAIN:域名domain定义,在你用sqlplus访问数据库的时候,会在tns别名后面加上".domain"
示例:.NAMES.DEFAULT_DOMAIN=
在客户端执行命令:sqlplus username/password@local_dev的时候,会出现如下错误信息:
"ORA-12154: TNS: 无法处理服务名"或者"ORA-12154: TNS:could not resolve service name"这样的错误信息。
因为sqlplus username/password@orcl的时候,将tns别名“orcl”转换成了“orcl”,所以orcla中不到,就报错了
修改a中的定义如下:
ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.147)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )
再执行sqlplus username/password@orcl连接成功
2)NAMES.DIRECTORY_PATH定义了在客户端连接数据库时,采用什么样的匹配方式
示例:NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
那么在客户端执行sqlplus username/password@local_dev连接数据库的时,首先采用a的别名配置连接数据库;如果连接上;再采用ONAMES进行解析,最后采用主机名进行解析。
ONAMES表示Oracle使用自己的名称服务器(Oracle Name Server)来解析,目前Oracle建议使用轻量目录访问协议LDAP来取代ONAMES;HOSTNAME表示使用host文件,DNSNIS等来解析
3)SQLNET.AUTHENTICATION_SERVICES定义登录数据库的认证方式,这个参数默认没有设置。
示例:SQLNET.AUTHENTICATION_SERVICES=(NONE,NTS)
NONE表示Oracle数据库身份验证,NTS表示操作系统身份验证,两种方式可以并用,先后顺序表明验证的优先方式
4)tcp.validnode_checking=yes表示启用客户端的IP检查,非法的IP将被拒绝访问Oracle
5)tcp.invited_nodes=(IP1,)表示允许哪些IP访问Oracle
luded_nodes=(IP1,)表示拒绝哪些IP访问Oracle
二、a
数据库实例名是什么意思
a 用在oracle client端,用户配置连接数据库的别名参数,就像系统中的hosts文件一样。提供了客户端连接某个数据库的详细信息,主机地址,端口,数据库实例名等。
示例:
ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.147)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )
PROTOCOL参数一般是TCP,可以根据服务器情况选择一种配置方式
HOST 一般是ip地址,如果是主机名,则应该在客户端系统的host文件上配好主机名和ip地址的映射关系
PORT 标准是1521,根据服务器端的监听端口而定
SERVICE_NAME 就是数据库的服务名
三、a
tnslsnr进程是监听、并接受远程连接数据库请求的监听进程。atnslsnr进程的配置文件,监听的参数都是从该配置文件中读取,该文件位于服务端。如果你只需要在本地连接数据库,不接受远程连接,那么也不需要启动tnslsnr进程,也不需要去维护a文件。
启动监听进程的命令,在命令模式下,执行lsnrctl start命令就启动了监听进程tnslsnr
示例:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /oracle/product/10.2.0/db_1)
      (SID_NAME = orcl)
    )
    (SID_DESC =
      (ORACLE_HOME = /oracle/product/10.2.0/db_1/)
      (SID_NAME = eas)
    )
   
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.147)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )

LISTENER部分包含协议地址列表,每个实例一个入口
SID_LIST_LISTENER部分标识全局数据库名称、标识监听程序正在服务的每个实例的Oracle软件主目录以及实例或SID
当你执行命令sqlplus username/password@tnsname时,一般处理过程如下:
1 查询a看看名称的解析方式,发现是TNSNAME,或者hostname
2 则查询a文件,从里边tnsname的记录,并且到主机名,端口和service
_name
3 如果listener进程没有问题的话,建立与listener进程的连接。
4 根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener采取接下去的动作。默认是专用服务器模式,没有问题的话客户端就连接上了数据库的server process
5 这时候网络连接已经建立,listener进程的历史使命也就完成了
几种连接数据库用到的命令形式:
1)sqlplus "/ as sysdba" 这是典型的操作系统认证,不需要listener进程,数据库即使不可用也可以登录。
2)sqlplus username/password 不需要listener进程,登录本机数据库,数据库实例启动即可。
3)sqlplus username/password@tnsname需要listener进程,最常见的远程登录模式,需要启动数据库实例和listener进程