ETL技术工具kettle入门笔记(一) 之kettle连接oracle rac 报listener does not currently know of sid错误的解决

1 问题现象:

之前做的kettle 连接某个oracle数据库 做表抽取

脚本的表输入信息如下图:

执行时(脚本上传到linux机器 用sh命令执行的)表输入报的错误信息:

但是在机器里面用sqlplus 命令登录却可以成功:

2 解决过程:

出现问题后,一开始联系  源数据系统 厂家 看是不是他们那边数据库做了 限制。

经过他们查看,他们那边没有做限制。这边也查不到原因 后来参照别的系统 发现

134.64.197.198 是rac一个节点的浮动地址  对应的sid是 iprandb1。而iprandb 是rac的service-name。rac的service-name与sid不一样。

源系统的 响应服务的实例情况:

[[email protected] ~]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 10-SEP-2014 17:35:09

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

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

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production

Start Date                28-JAN-2014 04:29:12

Uptime                    225 days 13 hr. 5 min. 56 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /opt/app/11.2.0/grid/network/admin/listener.ora

Listener Log File         /opt/app/grid/diag/tnslsnr/iprandb1/listener/alert/log.xml

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.17.178)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.17.181)(PORT=1521))) 172.16.17.181对应 ip134.64.197.198

Services Summary...

Service "iprandb" has 1 instance(s).

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

Service "iprandbXDB" has 1 instance(s).

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

The command completed successfully

之前sqlplus 命令用 iprandb 可以 可能是因为@后面就是要放着 服务名 service-name

可能 jdbc的连接方式 要求填的数据库名 更细点 要求到sid

把kettle的表输入脚本 里面的database name 由iprandb改为iprandb1 就好了

因为涉及到源系统和平台配置的好几个厂家 所以问题拖的时间 很长,在此做记录。

3 了解rac:

之前对rac了解很少 只是听过这个东西,所以 借这个机会 大概了解下这个东西。

rac 是Oracle Real Application Cluster的简写 ,意思是实时应用集群, 是 Oracle数据库支持网格计算环境的核心技术。

自己的理解就是 可以实现负载均衡 和 集群里面某个节点 down 之后 可以立即切换到其它 节点 不影响 基于该数据库的上层应用的正常运行。

一个节点 出现问题后 能够  自动的转到另一个节点上 的这个功能 是因为有 vip 这个东西 全称 virtual ip 他是浮动的ip 可以自动转换。

然后再说下

Oracle RAC services 很多人可能都没搞清楚 oracle服务名 与sid名的区别

(以下内容转载自http://blog.csdn.net/leshami/article/details/8124232 )

一、services与service_name

services

对于客户端应用程序而言,仅仅需要关心的是数据库提供了哪些服务,而不需要知道它到底连接是哪个数据库或者那个实例。

因此在数据库服务器端我们可以创建一个或多个services供客户端时所用,是一个或多个service_name的统称。

对于这些提供的服务,Oracle会将其注册到监听器以供外部建立连接。

可以通过lsnrctl status [listener_name] 查看当前的服务下有多少个实例为其响应该服务。

也可以通过lsnrctl service [listener_name] 查看更详细的信息,包括当前的连接状况,ip,端口号等。

service_name

指客户端连接到实例的服务名。在Oracle 8i时就有提出service_name的概念,通常用于代替tnsnames.ora中的ORACLE_SID。

9i之后,Oracle推荐使用service_name而不是SID。

可以通过定义多不不同的服务名来区分不同的用户连接,该参数缺省的格式为db_name.domain_name。

下面是一个客户端的tnsnames.ora,两个不同的连接标识符下一个使用了ORACLE_SID,一个使用SERVICE_NAME,两种方式都可行。

SYBO2SZ_SID=

(DESCRIPTION=

(ADDRESS=

(PROTOCOL=TCP)

(HOST=192.168.7.2)

(PORT=1915)

)

(CONNECT_DATA=

(ORACLE_SID=SYBO2SZ)  #此处使用了ORACLE_SID=<>,也可以直接使用SID=<>

)

)

SYBO2SZ=

(DESCRIPTION=

(ADDRESS=

(PROTOCOL=TCP)

(HOST=192.168.7.2)

(PORT=1915)

)

(CONNECT_DATA=

(SERVICE_NAME=SYBO2SZ) #Oracle 9i之后推荐使用SERVICE_NAME

)

)

二、使用services的益处

如前所述,可以为同一个数据库创建多个不同的services来为不同的客户端分组提供服务。对于单实例而言,尽管可以为其创建多个不同的services,然而提供这些服务始

终是单数据库单实例,因此性能体现的并不明显。

而对于多实例的情形下,能够在不同的时段或根据不同的商业逻辑规则来决定将不同的服务分布到不同的实例,以及可以为

services设定首选实例,备用实例。一旦首选实例出现单点故障,则services会自动failover到备用实例。

假如定义当前RAC数据库有3个节点srv1,srv2,srv3

有两个不同的service分别sales.2gotrade.com和settlement.2gotrade.com在当前数据库运行

则sales部门通过sales.2gotrade.com服务名来建立连接,settlement部门通过settlement.2gotrade.com服务名来建立连接。

其次sales部分的负载通常运行在srv1,srv2,而其对应的备用节点则为srv3,即当节点srv1,srv2失败后,所有基于sales的连接与负载都将转移到节点srv3。

假定settlement部门负载通常较小,因此设定首选节点为srv3,备用节点为srv1,则节点srv3单点故障后,则所有settlement部门连接与负载都将转移到srv1。

所有连接到当前的两个部门无需关心当前连接的是哪个数据库与那个节点上的实例。

从上面的描述可知

各节点连接对于客户端而言是透明的,用户根本无需关心连接到的数据库以及实例,撇开了复杂的后台配置。

另外, 1个 service-name 也可以对应多个不同的sid,就像上面 问题 说的那个情况。

时间: 2024-11-08 22:32:48

ETL技术工具kettle入门笔记(一) 之kettle连接oracle rac 报listener does not currently know of sid错误的解决的相关文章

kettle入门笔记(二) 之 kettle报的坑爹错误:Error occured while trying to connect to the database

1 引言 在用kettle开发时常会出现 Error occured while trying to connect to the database 错误,但是仔细观察日志,引起这个错误的原因不尽相同.这个错误看起来很简单,但是有时候越简单的错误越没有耐心改,尤其是忙的时候,不小心填错了某个参数导致这个错误但是自己感觉没问题却跑不成功,这是最烦人的.这时候需要淡定.不妨上网查查,错误也许就可以愉快的解决了.下面给出这错误的更细节错误的不同发生情况. 2 示例 有个很简单的ktr脚本(当前kett

oracle入门(5)——java连接oracle数据库

[本文介绍] 前面几篇说了那么多,最终还没讲到如何用java连接数据库,本文实用一点,讲讲如何连接数据库. [java连接oracle数据库] 1.导入jdbc驱动:看到这里,就忙着上网找驱动?不,安装了oracle就有自带驱动了,路径在:安装目录\product\11.2.0\dbhome_1\jdbc\lib,下面有多个jar包,选择适合自己的一个(最简单的办法就是导入项目后看看能连接不,能连接的就是适合的驱动) 2.代码: 关于url:@后面是IP:端口,这两个不知道怎么查的请看博文:ht

kettle连接oracle数据库报错,ORA-12505

报错信息: Error connecting to database: (using class oracle.jdbc.driver.OracleDriver) Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor 解决方法: (DESCRIPTION = (ADDRE

Kettle 入门笔记1

一,KETTLE介绍 Kettle是 (Extract, Transform and Load抽取.转换.加载)一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定.其中,Spoon是Kettle中的一个组件,其他组件有PAN,CHEF,Encr和KITCHEN等. Spoon通过图形化的页面,方便直观的让你完成数据转换的操作. 二.Kettle下载 可到开源官网(https://community.hds.com)下载: Data Inte

用PL/SQL工具连接Oracle数据库的时报错:ORA-12638: 身份证明检索失败的解决方法

本地客户端用PLSQL Developer连接远程数据库时提示: ORA-12638: 身份证明检索失败!!! 解决方法一: 此目录下F:\myorcl\product\11.2.0\client_1\network\admin找到sqlnet.ora文件: 如果存在SQLNET.AUTHENTICATION_SERVICES= (NTS)设置,则修改为:SQLNET.AUTHENTICATION_SERVICES= (NONE), 如果不存在,则直接添加SQLNET.AUTHENTICATIO

Kettle连接Oracle 12c

安装Oracle我用的是Win10 64位,官网下载64位 Oracle 12c,两个文件.解压第一个文件之后安装,但是安装到一半错误,提示缺失文件.后来发现原来两个文件要单独解压,解压后根据目录合并在一起.再次安装,安装到88%卡住不动了.我以为安装又失败了,就关了,但是发现可以用,就这么用吧. 创建用户Oracle数据库分为CDB和PDB,他们之间的关系,想了解可以查相关资料,不在此详述.简单来说CDB是一个数据库容器,PDB是可插拔数据库.默认登陆为CDB,只能创建COMMON用户.COM

Kettle连接oracle报错--kettle学习

软硬件环境:kettle6.1/oracle11gR2/windows7/redhatlinux           时间:2016/7/28 问题描述: 在kettle第一次连接本机oracle的时候,总是报错,提示"确保安装好jar包",自己就换了一个远程上的linux_oracle,还是提示相同的问题 问题解决: 上网搜索"kettle连接oracle数据库",搜索出来的第一条就是这个问题的解决方法,描述如下: 这是针对oracle10g来说的解决方法,底下有

ETL技术入门之ETL初认识

ETL是什么 ETL是Extract Transform Load三个英文单词的缩写 中文意思就是抽取.转换.加载.说到ETL就必须提到数据仓库. 先说下背景知识: 信息是现代企业的重要资源,是企业运用科学管理.决策分析的基础.目前,大多数企业花费大量的资金和时间来构建联机事务处理OLTP的业务系统和办公自动化系统(例如电信行业的各种运营支撑系统.购物网站系统),用来记录事务处理的各种相关数据.据统计,数据量每2-3年时间就会成倍增长,这些数据蕴含着巨大的商业价值,而企业所关注的通常只占在总数据

JAVA数据库编程(JDBC技术)-入门笔记

本菜鸟才介入Java,我现在不急着去看那些基本的语法或者一些Java里面的版本的特征或者是一些晋级的知识,因为有一点.Net的OOP编程思想,所以对于Java的这些语法以及什么的在用到的时候在去发现学习一下.我现在很迫不及待用JAVA想来实现以下对数据库的增删改查.想实现就来看Java是怎么操作数据库的,回想下.Net里你可能会配置web.Config,或者你去写一些DBhelper类然后调用里面的自己定义的一些增删改查的方法,更或者你去配一些数据控件等等往往发现操作基本都是一体化的简单.现在面