第一篇:Kettle创建oracle连接
Kettle创建oracle连接,在test的时候报错的解决方案
1、先点击Cancel进入kettle主界面
依次FILE--NEW--JOB OR TRANSFORMATION,在transformation页面下,点击左边的【Main Tree】【主对象树】,双击【DB连接】,进行
数据库连接配置 插播我的kettle配置: 我的版本是kettle4.4 环境变量设置:KETTLE_HOME F:ToolsKettle4.4data-integration
Path % KETTLE_HOME% 首先找到
Kettle 的主程序启动方式:运行 data-integrationSpoon.bat。
Kettle 默认不带 Oracle 驱动。于是我把 Oracle 的 JDBC 驱动 ojdbc14.jar/ojdbc14_g/ojdbc14dms/ojdbc14dms_g.jar 放到了 Kettle 的目录data-integrationlibextJDBC
我遇到的连接错误:
错误连接数据库 [orcl] : org.pentaho.di.core.exception.KettleDatabaseException: Error occured while trying to connect to the database
Error connecting to database:(using class oracle.jdbc.driver.OracleDriver)Io 异常: The Network Adapter could not establish the connection
org.pentaho.di.core.exception.KettleDatabaseException: Error occured while trying to connect to the database
Error connecting to database:(using class oracle.jdbc.driver.OracleDriver)Io 异常: The Network Adapter could not establish the connection
3、原因:
--
1、connection name:orcl【这个是我的数据库名,连接时我也用这个名字,DB名字也是这个】
--
2、Host-name:说实话,我重装系统之后还真没注意主机名是什么,我是在
E:oracleproduct10.2.0db_1networkADMIN中的tnsnames.ora中查到的,ORCL =(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST = john-PC)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME =orcl)))端口号写1521 Username和password 就是我连接oracle的用户名和密码,点击test按钮,终于连接成功了!
第二篇:Oracle使用工具plsql远程连接问题
使用PL/SQL Developer远程连接Oracle数据库,本地机器上已经安装了Oracle数据库只要
1.配置tnsnames.ora(我的安装在D:oracleproduct10.2.0db_1networkADMIN)
2.登录plsql时填写相应信息
第一步:配置tnsnames.ora
找到tnsnames.ora文件,用记事本方式打开,你可以看到像如下配置信息
ORCL =
(DESCRIPTION =
(ADDRESS =(PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)))
上面这段是连接本地(安装好Oracle默认的,你也可以修改数据库别名,将“ORCL”换成其他的)的数据库的要连接远程的Oracle数据库则再增加配置信息如下
自己定义远程数据库名称(别名)=
(DESCRIPTION =
(ADDRESS =(PROTOCOL = TCP)(HOST = 远程服务器IP)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 远程服务器上数据库名称)))
注意:别名不能与其他数据库(本地、远程)的别名相同,它可以跟相应远程服务器上的数据库名称不一样,要连接多个远程Oracle数据库,照样子在来几段上述配置信息即可。
第二步:登录plsql
Username:
Password:
Database:要登录的数据库名称(别名)
Connect as:
注意:一定要写对上面面的红色部分(其余的3个字段我就不说了),且跟tnsnames.ora配置文件中的别名相同
知道这两步后,以后不管是远程还是本地上的数据库你想怎么连就怎么连!只是tnsnames.ora文件中多了几段配置信息。
第三篇:kettle实践经验总结
数据抽取工具Kettle实践经验小结 杭州州力数据-陈力
同步数据常见的应用场景包括以下4个种类型:
1.只增加、无更新、无删除............................................................................................................1 2.只更新、无增加、无删除............................................................................................................3 3.增加+更新、无删除....................................................................................................................4 4.增加+更新+删除.........................................................................................................................5 5.调用存储过程................................................................................................................................7
1无参数输入:........................................................................................................................7
2、有参数输入.........................................................................................................................8
1.只增加、无更新、无删除
对于这种只增加数据的情况,可细分为以下2种类型: 1)
基表存在更新字段。
通过获取目标表上最大的更新时间或最大ID,在“表输入”步骤中加入条件限制只读取新增的数据。
这里要注意的是,获取最大更新时间或最大ID时,如果目标表还没有数据,最大值会获取不了。其中的一个解决方法是在“获取最大ID”步骤的SQL中,加入最小日期或ID的联合查询即可,如: SELECT MAX(ID)FROM(SELECT MAX(ID)AS ID FROM T1 UNION ALL SELECT 0 AS ID FROM DUAL)2)
基表不存在更新字段。通过“插入/更新”步骤进行插入。
插入/更新步骤选项:
2.只更新、无增加、无删除
通过“更新”步骤进行更新。
更新选项:
3.增加+更新、无删除
通过“插入/更新”步骤进行插入。
区别是“插入/更新步骤”中的选项,去掉“不执行任何更新”的勾选:
4.增加+更新+删除
这种数据同步情况,可细分为以下2种情况: 1)
源库有表保存删除、更新和新增的信息。
通过条件判断,分别进行“插入/更新”和“删除”即可,如下图所示。
2)
源库没有保存增删改信息
Kettle提供了一种对比增量更新的机制处理这种情况,可通过“合并记录”步骤实现,该步骤的输入是新旧两个数据源,通过关键字进行数据值比对,对比结果分为以下4种类型: “Identical” : 关键字在新旧数据源中都存在,域值相同 “changed” : 关键字在新旧数据源中都存在,但域值不同 “new” : 旧数据源中没有找到关键字 “deleted”: 新数据源中没有找到关键字
两个数据源的数据都进入下一步骤,上述4种结果类型作为输出表的标志字段进行保存。以下为示例: Ø 源数据库测试脚本
create table k1(f1 varchar2(200),f2varchar2(200))truncate table k1;insert into k1(f1,f2)values('1','11');insert into k1(f1,f2)values('2','22');insert into k1(f1,f2)values('5','5');commit;Ø 目标数据库测试脚本
create table k1(f1 varchar2(200),f2varchar2(200))truncate table k1;insert into k1(f1,f2)values('1','1');insert into k1(f1,f2)values('2','2');insert into k1(f1,f2)values('3','3');insert into k1(f1,f2)values('4','4');commit;合并过程如下:
其中“合并记录”步骤的选项:
执行后,查询K1_TEST结果如下:
可以看到,该结果表的BZ字段保存了更新、删除、新增的记录信息,通过条件分支即可分别对这些记录进行相应的处理。“条件”选项:
5.调用存储过程
调用存储过程主要是分为,有参数输入与无参数输入两类。
1无参数输入:
输入存储过程名称直接调用即可,但需要设置返回值(在参数设置中配置好)
2、有参数输入
此类比较常见,也比较复杂。(1)变量值固定:
首先,在转换中设置变量。对调用存储过程的转化进行配置:
此3步骤的配置如下:
注意:获取系统信息中的类型中的命令行参数X,指的就是下一步中对应的位置参数!故,在每次点击执行作业job(一个作业可能包含多个转换transform)时,需要配置或者核对参数值。
最后,点击开始运行你的作业,出现如下,在“位置参数”部分写上对应的值。然后点击执行(这中方法当然是要在配置好与调用存储过程相匹配的变量获取后才行)。
此类参数经常作为查询或者同步数据用。
(2)、当你需要的变量值,不是事先固定写死的,而是需要动态从数据库中某一张表中获取后,传入时,就不能直接在kettle系统的变量设置中配置变量了。执行这一过程的,作业(job)如下:
2.1 “获取ynzybi跟新时间(DB2数据库)”。
首先从,ynzybi(DB2)数据库的表SYNNO1DATASTATE中获取要同步数据的最后跟新时间lastupdatetime,并设置变量lasttime,如下图:
2.2 “获取DC日期区间(Terdate数据库)”
根据前一步获取的lasttime,从数据中心(terdate数据库)表K_COM_D_ALL中获取2个时间区间节点,并设置对应的变量。注意,在执行时,一定要在“替换SQL语句里的变量”选项打钩,这样才会自动替换SQL语句中的'%%lasttime%%',否则或报错!在windows环境下,变量的替换格式均为%%变量名称%%
2.3 “删除ynzybi表中时间区间内的数据” 此转换中,就只有一个东东,既执行SQL脚本
SQL脚本的设置:
2.4“插入ynzybi数据”
在上一步中,已经将ynzybi(DB2)数据库中的DC_K_COM_D_ALL表中对应区间的数据全部删除,接下来只需直接从Terdate数据库的K_COM_D_ALL表中抽取对应时间段内的数据全部插入到ynzybi(DB2)数据库的DC_K_COM_D_ALL表中,即可完成不同类型数据库中,不同表中数据的同步。这里之所以这么大费周章,先删除后插入。原因是在于,使用Kettle中自带的“数据同步”或者“更新/插入”转换,效率很低,每条数据都要merge一次,大概才100条数据左右/秒。对于大量数据的更新同步,太耗时间了,下图是“插入ynzybi数据”转换的截图:
下图是“表输入”和“表输出”的配置图:
表输入
表输出
注意:1.勾选“批量插入”,后可以大幅提高数据插入表的速度!2.勾选“忽略插入错误”,后插入过程中遇到某些原因,某些数据不能插入,将会被忽略,程序继续执行,不报错,但会有日志显示。不选的话,遇到插入错误,就报错,转换停止!3.勾选“制定数据库字段”后,在数据库字段中就可以选择需要插入的字段
表输入b
2.5“调用存储过程” 转换过程图如下:
表输入的设置图入下:
注意:这的表输入,其实不需要任何一个表中的数据,其中SQL语句入下:“select '%%begindate%%' as v_dt1,'%%enddate%%' as v_dt2,'%%dc_updatetime%%' as dc_updatetime from sysibm.sysdummy1”。
这条语句从表中不选任何数据(sysibm.sysdummy1表,可以是你数据库中任何一张表)。而是获取前面步骤中设定好的变量值,传到调用存储过程中去,作为输入参数。之所以这么弄,是因为试了好多方法,去没能将前面步骤中的变量直接获取传入到存储过程中去。故采用这种看似笨的方法,但很实用。
调用存储过程配置图:
调用成功。
全过程结束!
第四篇:oracle创建临时表
Oracle数据库临时表管理心得
我们在创建数据表的时候,若没有特殊的指明,那么我们创建的表是一个永久的关系型表格,也就是说,这个表格中对应的数据,除非是我们显示的删除的话,表中的数据是永远都存在的。相对应的,在Oracle数据库中还有一种类型的表,叫做临时表。这个临时表跟永久表最大的区别就是表中的数据不会永远的存在。当一个会话结束或者事务结束的时候,这个临时表中的数据,不用用户自己删除,数据库自己会自动清
除。
1、事务临时表的管理。
(1)事务临时表的创建。
Oracle数据库根据临时表的性质不同,可以分为事务临时表与会话临时表。事务临时表是指数据只有在当前事务内有效。一般情况下,如果在创建数据表的时候,没有特殊指明这表是会话临时表的话,则该表默认为事务临时表。
我们可以以下面的语句创建事务临时表。
Create global temporary table Temp_user
(ID NUMBER(12)Primary key,name varchar2(10));
笔者建议:
这个创建临时表的语句中,虽然没有显性的指明该表是事务临时表,但是,默认的情况下,若没有指明是什么临时表的话,系统默认是事务临时表。我们要创建事务临时表时,可以不指定关键字。但是,这查看起来比较麻烦。我建议,无论在建立什么临时表,都要利用具体的关键字来显形的指明,这大家看起来都方便。一般可以利用ON COMMIT DELETE ROWS关键字来说明该表就是事务性的临时表,而不是会话性质的临时表。
(2)事务临时表数据的变化分析。
事务临时表的话,当事务结束的时候,就会清空这个事务临时表。所以,当我们在数据库临时表中插入数据后,只要事务没有提交的话,该表中的数据就会存在。但是,当事务提交以后,该表中的数据就会被删除。而且,这个变化不会在重做日志中
显示。
具体事务临时表与会话临时表有什么区别,我们在介绍完会话临时表后会详细介
绍。
2、会话临时表的管理。
会话临时表,顾名思义,是指数据只在当前会话内有效的临时表。关闭当前会话或者进行新的连接之后,数据表中的内容就会被清除。那会话临时表跟事务临时表到底有什么区别呢?我们以一个实例来看其中的区别。
(1)首先,创建一个会话临时表。
CREATE GLOBAL TEMPOPARY TABLE TEMP_USER
(ID NUMBER(12)Primary key,name varchar2(10))
ON COMMIT PRESERVE ROWS;
也就是说,会话临时表跟事务临时表的创建语法大致相同,只有最后的关键字有区别。不过两个表虽然类似,但是其内部的处理机制还是有比较大的区别。
(2)往该表中插入数据。
Insert into TEMP_USER values(1001,’victor’);
往数据库临时表中插入数据的方法,跟往普通表中插入数据的方法是一样的,都利用insert into语句进行操作。该临时表的数据在会话结束之前都是存在这个表格
中的。
(3)提交该事务并查询相关记录。
我们利用COMMIT的语句把该事务提交以后,再用SELECT查询语句进行查询。我们知道,若该表是事务临时表的话,则当该事务结束以后,该表中的内容就会被删除。但是,这是会话临时表,所以即使该事务提交了,但是,利用SELECT语句进行查询
时,仍然可以查到该条员工记录。
(4)结束当前会话,并重新连接数据库。
关闭当前会话,从新连接到数据库后,再利用SELECT语句查询时,会有什么结果呢?此时,就查不到我们刚才插入的数据。这也就是说,在关闭对话的时候,数据库系统已经把原有的数据删除了。从以上的分析我们可以看中,会话临时表与事务临时表主要的差异就在于删除数据时机的不同。事务性临时表是在事务提交的时候清除数据,而会话性临时表则是在关闭当前会话的时候清除临时表。只要当前会话没有关闭,即使事务完成了,会话临时表中的数据仍然存在,不会被清除。
3、临时表管理需要注意的地方。
临时表相对与其他表来说,是一种比较特殊的表结构,但是,作用又比较大,Oracle数据库若没有这种表的话,还真是不行。为了管理好这种特殊的表,我们需要
注意几个细节。
一是要注意临时表不能永久的保存数据。只所以称为临时表,就是因为该表中的内容只是临时存在的。当一个会话或者事务结束时,该表中的内容就会被自动清空。所以,在临时表中,一般不要保存永久数据。在实务中,有个不好的操作习惯,就是有些人在测试数据库的时候,喜欢把测试的数据放在临时数据表中。其实,这是对Oralce临时数据表认识的错误。若我们在数据库中,把要测试的数据,如销售定单的内容放在数据库的临时表中的话,则在其他功能中,如要测试销售定单日报表的功能时,就会找不到相关的定单内容。因为离开特定的会话或者事务的话,临时表中的内容就会不存在了。所以,Oralce数据库中所讲的临时表不是给我们来存储测试数据的。
二是临时表中的数据不会备份、恢复,对其的修改也不会有任何的日志信息。若我们在操作数据库的时候,往数据库的临时表中存入了一些信息。此时突然服务器出现当机。此时,我们想通过数据库备份文件恢复数据库临时表中的内容,或者查看临时表的日志信息,都是无法实现的。也就是说,当服务器以外死机重新启动后,临时表中的内容就会被清空。在数据库的任何地方,如数据库备份文件或者日志信息中,都查不到在重新启动之前数据库临时表中保存了哪些内容,就好象根本没有对临时表
进行操作一样。
三是临时表表空间的管理。临时表在Oracle数据库中,也是表的一种,其也有对应的表空间。在创建临时表的时候,若我们不指定表空间的话,默认的表空间是SYSTEM。对于临时表的表空间管理的话,我们需要注意一个小的细节。若我们把临时表的表空间归属为SYSTEM的话,也就是说,在创建临时表的时候不具体指定具体的表空间,则这个默认的表空间是不能被删除的。而若我们在创建临时表表空间的时候,指定为SYSTEM以外的表空间的话,则在不需要这表空间的时候,我们可以删除。所以,为了后续管理的方便,笔者还是建议大家在创建临时表的时候,要指定表空间。
四是要注意一个问题,临时表只是数据是临时的,而表仍然是永久的。也就是说,当一个会话结束或者一个事务完成时,其临时表中的数据虽然删除了,但是,临时表本身仍然是存在的。也就是说。Oracle数据库中的临时表表是全局的,只是数据是临时的。这跟SQL Server数据库系统具有比较大的区别。其实,这两个数据库在临时表的处理上有很大的不同,各有各的特色。在以后的文章中,我会专门叙述这两种数据库在临时表管理机制上的不同,欢迎大家关注。
五是要注意Oracle数据库在给临时表填入数据的时候,不会对相应的记录加锁。也就是说,当在临时表上执行DML语句的操作时,不会给记录加锁,也不会将数据的变化内容写到重做(REDO)日志中。所以不能用临时表保存永久的数据,也不能对临时表进行共同的操作。这是新手在管理数据库临时表经常会碰到的问题。
六是临时表与普通表之间不能相互转换。在一般情况下,临时表建立后,该表就不能被转换成永久表。所以,这也说明一个道理,利用临时表作为数据库设计时候的测试表不合适。这个临时表可能跟我们按字面意思理解的临时表有误,不是我们所认为的为了测试表结构而建立的临时表。这一点是我们在刚开始接触ORACLE数据库时,经常会犯的错误。
第五篇:SAS连接ORACLE中的ODBC设置(本站推荐)
SAS连接ORACLE中的ODBC设置
前提:你安装了SAS、ORACLE客户端(配置了目录Oracleora90networkADMIN下的tnsnames文件)接下来就是配置odbc
第一步:控制面板——管理工具——数据源(ODBC)
第二步:系统DSN——添加
第三步:创建新数据源——选择oracle驱动程序
第四步:在1处填入名称(up to you),在2处选择tnsnames文件下配置的名称,3处输入用户名,ok
第五步:sas中逻辑库配置,在逻辑库空白处右键——新建
第六步:填写逻辑库名称、引擎选择odbc,选中启动时启用、选中数据源、用户id、密码,确定
接下来你创建的逻辑库就可以用了