今天遇到一位网友,配置的dblink无法使用,报错:

ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的 SERVICE_NAME

其创建dblink的语句是:

create public database link nems connect to heuser identified by mypasswd using 'nems_123.456.78.99';

其tnsnames.ora的配置是:

NEMS_123.456.78.99 =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 123.456.78.99)(PORT = 1521))

)

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = NEMS)

)

)

通过tnsping和sqlplus手工登录来进行检查,比较奇怪的是tnsping能ping通,但是用通过这个tns用sqlplus登录则报错:

[oracle@buptnu admin]$ tnsping nems_123.456.78.99

TNS Ping Utility for Linux: Version 9.2.0.4.0 - Production on 25-JUL-2007 13:37:00

Copyright (c) 1997 Oracle Corporation.

All rights reserved.

Used parameter files: /ora1/oracle/product/9.2.0/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 123.456.78.99)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = NEMS))) OK (90 msec)

--以上tnsping能通

--但是通过sqlplus user/mypasswd@NEMS_123.456.78.99就报错:

SQL> select sysdbatate from dual@nems;

select sysdate from dual@nems

*

ERROR at line 1: ORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect descriptor

既然tnsping能ping通,应该说明网络没有问题,但是从tnsnames.ora的配置上来看也没有错误——如果有错误,tnsping应该也会ping不到。

继续到远程数据库检查,检查listener提供的服务名:

LSNRCTL> services

Connecting to (ADDRESS=(PROTOCOL=tcp)(PORT=1521))

Services Summary...

Service "nemsXDB" has 1 instance(s).

Instance "nems", status READY, has 1 handler(s) for this service...

Handler(s):

"D000" established:291 refused:0 current:50 max:972 state:ready

DISPATCHER (ADDRESS=(PROTOCOL=tcp)(HOST=buptdes)(PORT=36252))

Service "nunems" has 1 instance(s).

Instance "nems", status READY, has 1 handler(s) for this service...

Handler(s):

"DEDICATED" established:30421 refused:0 state:ready

LOCAL SERVER The command completed successfully

在这里,我们只看到了listener提供的2个服务:一个叫nemsXDB,一个叫nunems。并没有看到在tnsnames.ora中配置的”SERVICE_NAME = NEMS”

因此把tnsnames.ora中的SERVICE_NAME = NEMS改成SERVICE_NAME = nunems:

NEMS_123.456.78.99 =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 123.456.78.99)(PORT = 1521))

)

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = nunems)

)

)

测试sqplus也能正常登录了,且dblink也能正常使用了。

所以,上面我们碰到的问题,因为能根据实例名NEMS去找到了相应的主机,故tnsping能通,但是根据tns没有找到相应的服务名,所有在建立连接的时候报错了。

在这里,提一下比较容易弄混淆的概念,服务名、实例名和数据库名:

(1)服务名(service_names):指listener提供的对外的服务名,客户端可以通过配置tnsnmaes.ora连进行连接,tnsnmaes.ora文件中的service_name要等于服务器端listener所注册的服务名,服务名可以通过输入lsnrctl后,在输入service查看,一般的service_name在listener.ora文件中配置(静态注册),或者当没有listener.ora文件时,在初始化文件中配置instance_name和service_names这2个参数进行动态注册。但是无论采用那种注册方式,都可以通过lsnrctl-sevice来检查。

(2)实例名(instance_name):oracle启动instance后,即启动oracle的内存进程,这个内存进程的名称。在unix或者linux环境可以通过ps -ef |grep ora_看到启动的进程。instance_name由环境变量决定,一个只装oracle软件,没有建库的实例(即没有初始化文件,没有控制文件,没有数据文件,没有redolog),可以用rman来启动,启动后select instance_name from v$instance;这个时候我们可以看到instance_name和在环境变量里面配置的ORACLE_SID是同样的名称。(注:正是由于这个原因,我们一般说的SID就是instance_name,但是需要注意的是,实际上instance_name不等于ORACLE_SID。前者是数据库层面的概念,后者是操作系统中环境变量的设置。)

(3)数据库名(db_name):这个是在数据库创建的时候确定的:

CREATE DATABASE db_name

CONTROLFILE REUSE

MAXINSTANCES 32

MAXLOGHISTORY 0

……

一旦确定,不能更改。

该信息存在于初始化文件,控制文件等地方(估计数据文件中也有,因为之前试过想通过改初始化文件、控制文件、环境变量来改变数据库名称,但是均有报错,估计在数据文件中已经保存了该信息。)

oracle 实例名和服务名,服务名、实例名和数据库名相关推荐

  1. Oracle PLSQL工具登陆界面:连接库选项没有本地数据库名可选 解决方法

    通过参考了网上教程,创建好了数据库后,通过WINDOWS的命令窗口sqlplus工具对数据库进行了创建账号密码和配置权限. 但在使用PLSQL登陆时发现,在 数据库 选项中,没有创建的本地数据库 解决 ...

  2. 查询oracle全局数据库名,Oracle基础:数据库名 实例名 ORACLE_SID 服务名 域名 全局数据库名...

    Oracle中存在着这些容易混淆的名称: 数据库名实例名ORACLE_SID服务名域名全局数据库名 在oracle7/8/9i/10g中都有数据库名和实例名,在9i和10g中又引进了三个新的数据库标识 ...

  3. Oracle11g修改实例名和数据库名

    参考博客http://blog.itpub.net/26870952/viewspace-2151994/,经过试验,做了一些补充和完善 分为两个阶段,第一阶段修改实例名sid:第二阶段修改数据库名d ...

  4. SQL查询数据库名、表名和表字段名

    一 Oracle 1,数据库名 -- Oracle没有提供数据库名称查询支持,只提供了表空间名称查询. -- 查询表空间(需要一定权限) SELECT* FROMv$tablespace; 2,表名 ...

  5. Oracle 数据库名、实例名、服务名详解

    详解:数据库名.实例名.ORACLE_SID.数据库域名.全局数据库名.服务名 数据库名.实例名.数据库域名.全局数据库名.服务名,这是几个令很多初学者容易混淆的概念.相信很多初学者都被标题上这些概念 ...

  6. oracle 服务名 数据库名 实例名

    oracle 服务名 数据库名 实例名 服务名 show parameter service_name 实例名 show parameter instance 数据库名 show parameter ...

  7. 详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名及手工脚本创建oracle数据库...

    数据库名.实例名.数据库域名.全局数据库名.服务名 , 这是几个令很多初学者容易混淆的概念.相信很多初学者都与我一样被标题上这些个概念搞得一头雾水.我们现在就来把它们弄个明白. 一.数据库名 什么是数 ...

  8. oracle数据库全数据库名,Oracle数据库中的 数据库域名、数据库名、全局数据库名、SID、数据库实例名、服务名 解释...

    菜鸟雷区 在配置listener.ora 和 tnsnames.ora 连接Oracle数据库服务器时,我们需要把 以下容易混淆的概念区分开来 数据库域名 数据库名 全局数据库名 SID 数据库实例名 ...

  9. oracle实例名,数据库名,服务名等概念差别与联系

    数据库名.实例名.数据库域名.全局数据库名.服务名 这是几个令非常多刚開始学习的人easy混淆的概念.相信非常多刚開始学习的人都与我一样被标题上这些个概念搞得一头雾水.我们如今就来把它们弄个明确. 一 ...

  10. Oracle数据库名(DB_NAME)、实例名(INSTANCE_NAME)、服务名(SERVICE_NAME)

    1.数据库名即下图的全局数据库名,实例名即下图的SID 查询数据库名称SQL: SELECT NAME FROM V$DATABASE; 查询数据库当前实例名: SELECT INSTANCE_NAM ...

最新文章

  1. 一些算法入门应该明白的东西
  2. 李宏毅线性代数笔记9:特征值与特征向量
  3. 你不会想到这个购物平台竟然能智能到这种程度
  4. nVIDIA显卡命名规律
  5. Balanced Ternary String
  6. php两数相乘,php – 如何将数字相乘,直到达到一位数字并计算数字?
  7. 搞懂 CSS 水平居中与垂直居中的16个方法
  8. vue —— UI组件库
  9. 转:卷积神经网络_(1)卷积层和池化层学习
  10. 带存储功能的计算器是什么样的_19年中级会计考生能不能带计算器考试?今天统一回复!...
  11. OO第二次博客——电梯系列总结
  12. 全球降雨、气温、干旱指数等数据集
  13. java 主动模式 port_详解SpringBoot修改启动端口server.port的四种方式
  14. Android 关于微信分享提示签名不对的问题
  15. IE提示“Internet Explorer无法打开站点XX,已终止操作”的解决办法
  16. linux运行minecraft,如何在DeepinLinux下运行Minecraft光影整合包进行游戏
  17. 1899 用迭代法求平方根
  18. 文献解读 | 单细胞转录组助力解析水稻早期花序的发育轨迹机制
  19. Windows10:CIFS服务的开启
  20. 这样做优化,实现 0.059s 启动一个SpringBoot项目!

热门文章

  1. 对FEAL-4的差分***
  2. HTTPS请求 Received fatal alert: handshake_failure异常---与众不同的原因
  3. Android开发-自己动手写Bitmap高效加载 跟OOM说再见
  4. 学习OceanBase :如何在MySQL模式下创建一个用户?
  5. 凸度偏差与收益率曲线
  6. Redis 6(一)Redis 6的新特性
  7. oracle 数据库体系结构详解
  8. countif函数比较两列不同_Excel中COUNTIF函数的五种必学使用技巧
  9. 专访时尚达人贤华老师,精致女人导师
  10. Android 华为虚拟导航栏适配