Sql*Plus网络访问基本原理及相关名词解析

简介:

sql*plus 网络访问运行基本机理: 
listener.ora文件
SID_LIST_LISTENER =                                                            #命名规则 SID_LIST_+上面定义的监听器名称 
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)
      (SID_NAME = orcl)
    )
  )
LISTENER =   
                                                                           #监听器名称 
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dg1)(PORT = 1521))
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
  ) 
sqlnet.ora 文件: 
NAMES.DIRECTORY_PATH = (TNSNAMES, ….)
NAMES.DEFAULT_DOMAIN = server.com
tnsnames.ora
 文件 : 
test =
(DESCRIPTION=
(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=dg1)(PORT=1521))
)
(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)
)

在用户输入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 的值,可通过select * from global_name命令查看global_name。如果要修改 Global_name ,只能用ALTER DATABASE RENAME GLOBAL_NAME TO <db_name.db_domain> 命令进行修改,然后修改相应参数。
Service_name  该参数是oracle8i 新引进的。在8i 以前,我们用SID 来表示标识数据库的一个实例,但是在Oracle 的并行环境中,一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name 参数,该参数对应一个数据库, 而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain ,即等于Global_name 。一个数据库可以对应多个Service_name ,以便实现更灵活的配置。该参数与SID 没有直接关 系,即不必Service name 必须与SID 一样。可通过show parameter service 查看Service_name.在10g R2版本中,当采用默认端口时,系统每隔60秒会自动向默认监听重新进行注册服务。当然也可以采用alter system register 进行手动注册。

ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
上面的话很容易误解,让人认为数据库服务名(SERVICE NAME)有问题,其实他指的是tnsnames.ora中配置的别名ALIAS所对应的SERVICE_NAME,与在LISTENER中的注册的一堆服务名找不到(也可能一个也没有,比如只配置了动态监听)。
GLOBAL_DBNAME 是指listener.ora文件中注册静态监听时的服务名。另在PARAMETER(spfile)中也可用SERVICE_NAME参数指定注册动态监听时的服务名。
而tnsnames.ora中的服务名SERVICE_NAME的可选值为静态和动态注册的服务名(SERVICE_NAME),也即listener.ora中的GLOBAL_DBNAME和PARAMETER中的SERVICE_NAME,可以是任意支持的字符,但两者必须与保持一致。而sqlplus中的链接字符串,并不是SERVICE_NAME,而是一个SERVICE_NAME的ALIAS(在tnsname.ora中配置) 。
静态监听的目的,除了简化配置外,还可以提供在数据库未启动前仍能连接的功能。

参考至:http://lzysystem.iteye.com/blog/424569
http://tianyadgt.blog.163.com/blog/static/3708909320103855054808/
如有错误,欢迎指正
邮箱:czmcj@163.com

作者:czmmiao 原文地址:http://czmmiao.iteye.com/blog/911082
相关文章
|
17天前
|
SQL 关系型数据库 MySQL
数据库开发之SQL简介以及DDL的详细解析
数据库开发之SQL简介以及DDL的详细解析
26 0
|
10天前
|
存储 算法 Windows
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例(下)
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例
|
10天前
|
算法 数据可视化 数据挖掘
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例(上)
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例
|
1天前
|
缓存 安全 算法
网络原理 HTTP _ HTTPS
网络原理 HTTP _ HTTPS
7 0
|
9天前
|
机器学习/深度学习 PyTorch TensorFlow
【Python机器学习专栏】卷积神经网络(CNN)的原理与应用
【4月更文挑战第30天】本文介绍了卷积神经网络(CNN)的基本原理和结构组成,包括卷积层、激活函数、池化层和全连接层。CNN在图像识别等领域表现出色,其层次结构能逐步提取特征。在Python中,可利用TensorFlow或PyTorch构建CNN模型,示例代码展示了使用TensorFlow Keras API创建简单CNN的过程。CNN作为强大深度学习模型,未来仍有广阔发展空间。
|
10天前
|
安全 网络协议 算法
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
|
10天前
|
前端开发 数据挖掘 数据建模
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例(中)
课程视频|R语言bnlearn包:贝叶斯网络的构造及参数学习的原理和实例
|
17天前
|
SQL 分布式计算 资源调度
一文解析 ODPS SQL 任务优化方法原理
本文重点尝试从ODPS SQL的逻辑执行计划和Logview中的执行计划出发,分析日常数据研发过程中各种优化方法背后的原理,覆盖了部分调优方法的分析,从知道怎么优化,到为什么这样优化,以及还能怎样优化。
103481 1
|
20天前
|
Linux 网络安全 Apache
使用树莓派搭建个人网站,并发布到外网可访问:实用步骤解析
使用树莓派搭建个人网站,并发布到外网可访问:实用步骤解析
|
20天前
|
安全 数据建模 网络安全
深入理解SSL数字证书:定义、工作原理与网络安全的重要性
本文阐述了SSL数字证书在网络安全中的关键作用,定义了其作为验证服务器身份的数字凭证,基于PKI体系保障数据传输安全。文章介绍了三种类型的证书,包括DV、OV和EV,适用于不同安全需求的网站。获取和安装证书涉及向证书颁发机构申请并部署到服务器。在网络安全挑战下,正确使用和管理SSL证书对于保护用户数据和提升信任度至关重要。

推荐镜像

更多