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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:

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
相关文章
|
15天前
|
网络协议 安全 5G
网络与通信原理
【10月更文挑战第14天】网络与通信原理涉及众多方面的知识,从信号处理到网络协议,从有线通信到无线通信,从差错控制到通信安全等。深入理解这些原理对于设计、构建和维护各种通信系统至关重要。随着技术的不断发展,网络与通信原理也在不断演进和完善,为我们的生活和工作带来了更多的便利和创新。
56 3
|
9天前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
|
20天前
|
机器学习/深度学习 人工智能 监控
深入理解深度学习中的卷积神经网络(CNN):从原理到实践
【10月更文挑战第14天】深入理解深度学习中的卷积神经网络(CNN):从原理到实践
59 1
|
20天前
|
SQL 监控 数据库
SQL语句是否都需要解析及其相关技巧和方法
在数据库管理中,SQL(结构化查询语言)语句的使用无处不在,它们负责数据的查询、插入、更新和删除等操作
|
22天前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【10月更文挑战第10天】网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。
|
9天前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9-2):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
|
20天前
|
网络协议 Ubuntu 前端开发
好好的容器突然起不来,经定位是容器内无法访问外网了?测试又说没改网络配置,该如何定位网络问题
本文记录了一次解决前端应用集成到主应用后出现502错误的问题。通过与测试人员的沟通,最终发现是DNS配置问题导致的。文章详细描述了问题的背景、沟通过程、解决方案,并总结了相关知识点和经验教训,帮助读者学习如何分析和定位网络问题。
|
20天前
|
SQL 数据可视化 BI
SQL语句及查询结果解析:技巧与方法
在数据库管理和数据分析中,SQL语句扮演着至关重要的角色
|
21天前
|
机器学习/深度学习 算法 数据建模
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
计算机前沿技术-人工智能算法-生成对抗网络-算法原理及应用实践
22 0
|
21天前
|
弹性计算 网络协议 网络安全
内网DNS解析&VPN网关联动实现云上访问云下资源
内网DNS解析&VPN网关联动实现云上访问云下资源

推荐镜像

更多