请教一个关于Oracle数据抽取的问题 Oracle的ETL是否支持将数据抽取到Sql Server或其它关系型数据库?其数据处理能力是否可以达到2G/小时?望高人不吝赐教.感谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、与存放DW的数据库系统相同的数据源处理方法 这一类数源在设计比较容易,一般情况下,DBMS(包括SQLServer,Oracle)都会提供数据库链接功能,在DW数据库服务器和原业务系统之间建立直接的链接关系就可以写Select 语句直接访问。 2、与DW数据库系统不同的数据源的处理方法。 这一类数据源一般情况下也可以通过ODBC的方式建立数据库链接,如SQL Server和Oracle之间。如果不能建立数据库链接,可以有两种方式完成,一种是通过工具将源数据导出成.txt或者是.xls文件,然后再将这些源系统文件导入到ODS中。另外一种方法通过程序接口来完成。 这个速度绝对没有问题你就用SPOOLSELECT2G顶多只用几分钟到一个文本文件,然后可以FTP到目标物理机器地址上然后根据目标数据库的特点装就去就可以了\SPOOL具体可以查看相关的问题,我有答复过的给你一段类似的程序,其实很简单的 --检测到没有.ERR文件,那么就说明没有任何报错的文件,不需要做其他处理,直接退出检测,报告多维处理正确 --检测到有.ERR文件,那么就把这几个.err文件读到我的临时文件中,用AWK来分割取到第一个第二个 . /etldata/CRMETL/PARA/public.sh ##配置环境 ##这是个环境配置的函数,配置了所有相关的路径,工作日期。 set_env() { echo "配置环境 " workdate=`awk -F= '{if ($1~/WORKDATE/) print $2} ' /etldata/CRMETL/PARA/etl.cfg` etlsh=`awk -F= '{if ($1~/ETLSH/) print $2} ' /etldata/CRMETL/PARA/etl.cfg` etllog=`awk -F= '{if ($1~/ETLLOG/) print $2} ' /etldata/CRMETL/PARA/etl.cfg` etlin=`awk -F= '{if ($1~/ETLIN/) print $2} ' /etldata/CRMETL/PARA/etl.cfg` etlcu=`awk -F= '{if ($1~/ETLCU/) print $2} ' /etldata/CRMETL/PARA/etl.cfg` dbusr=`awk -F= '{if ($1~/DBUSR/) print $2} ' /etldata/CRMETL/PARA/etl.cfg` dbpwd=`awk -F= '{if ($1~/DBPWD/) print $2} ' /etldata/CRMETL/PARA/etl.cfg` esshost=`awk -F= '{if ($1~/ESSHOST/) print $2} ' /etldata/CRMETL/PARA/etl.cfg` essuser=`awk -F= '{if ($1~/ESSUSER/) print $2} ' /etldata/CRMETL/PARA/etl.cfg` esspwd=`awk -F= '{if ($1~/ESSPWD/) print $2} ' /etldata/CRMETL/PARA/etl.cfg` esslog=`awk -F= '{if ($1~/ESSLOG/) print $2} ' /etldata/CRMETL/PARA/etl.cfg` ##这个路径是被ESSADMIN用户写入日志的,所以必须具有写权限 lastmonth=`SubDateM $workdate 28` echo "lastmonth: "$lastmonth } check_err() ( echo "检查.err文件 " cd $etlin/$lastmonth; ls -lrt *.err >err.txt; echo "取得err.txt文件的行数 " wc -l err.txt ¦awk '{print $1} ' ¦read a echo $a b=1 until [ "$b " -gt "$a " ] do v_sDisp=`echo "${v_sDispLine} " ¦awk '{FS= ", ";print $2} '` line=`sed -n $b 'p ' err.txt` echo $line word=`echo "$line " ¦awk '{print $9} '` echo $word cube=`echo "$word " ¦awk -F. '{print $1} '` table=`echo "$word " ¦awk -F. '{print $2} '` echo $cube echo $table ##记录运行日志 sqlplus $dbusr/$dbpwd < <! insert into dgcrm.ess_check(cube_id,table_id) values ( '$cube ', '$table '); commit; exit; ! b=`expr $b + 1` done ) ############################ 主程序 ############################ set_env check_err ######################是否有当前进程在运行############ 你看就是几个函数之间的调用,把程序层次写清楚点就好了,呵呵,就是在你的EXIT;后面加个!,来退出SQLPLUS, OWB好像目标只能是oracle数据库,ODI则可以到异构源,置于性能,ODI是一款ELT概念的ETL工具,它没有自己的执行引擎,都是转化为代码到源或者目标库中执行,所以只要你的数据库性能够好,抽取性能就够好ODI是Oracle收购的一个工具,简单介绍:http://www.ningoo.net/html/2007/an_introduction_of_oracle_data_integrator.html 求查找论坛最后回复帖子的SQL语句 oracle enterprise manager 登陆出错 关于临时表 和 临时表空间的使用问题!!!!!!!!在线等待!!!!!!!!!! oracle内存分配 有关监听停止后,是否还可以连接到数据库的问题 简单问题:搜索表中某天以后没有记录的信息。 oracle存储过程里如何创建一个临时表. 请教!关于自定义类型导入导出的问题 sql中得like 得用法??????????? 看看这句是什么意识啊 Oracle SQL*plus登录界面问题 sql查询的问题
你就用
SPOOL
SELECT
2G顶多只用几分钟
到一个文本文件,然后可以FTP到目标物理机器地址上
然后根据目标数据库的特点装就去就可以了\
SPOOL具体可以查看相关的问题,我有答复过的
给你一段类似的程序,其实很简单的
--检测到没有.ERR文件,那么就说明没有任何报错的文件,不需要做其他处理,直接退出检测,报告多维处理正确
--检测到有.ERR文件,那么就把这几个.err文件读到我的临时文件中,用AWK来分割取到第一个第二个
. /etldata/CRMETL/PARA/public.sh
##配置环境
##这是个环境配置的函数,配置了所有相关的路径,工作日期。
set_env()
{
echo "配置环境 "
workdate=`awk -F= '{if ($1~/WORKDATE/) print $2} ' /etldata/CRMETL/PARA/etl.cfg`
etlsh=`awk -F= '{if ($1~/ETLSH/) print $2} ' /etldata/CRMETL/PARA/etl.cfg`
etllog=`awk -F= '{if ($1~/ETLLOG/) print $2} ' /etldata/CRMETL/PARA/etl.cfg`
etlin=`awk -F= '{if ($1~/ETLIN/) print $2} ' /etldata/CRMETL/PARA/etl.cfg`
etlcu=`awk -F= '{if ($1~/ETLCU/) print $2} ' /etldata/CRMETL/PARA/etl.cfg`
dbusr=`awk -F= '{if ($1~/DBUSR/) print $2} ' /etldata/CRMETL/PARA/etl.cfg`
dbpwd=`awk -F= '{if ($1~/DBPWD/) print $2} ' /etldata/CRMETL/PARA/etl.cfg`
esshost=`awk -F= '{if ($1~/ESSHOST/) print $2} ' /etldata/CRMETL/PARA/etl.cfg`
essuser=`awk -F= '{if ($1~/ESSUSER/) print $2} ' /etldata/CRMETL/PARA/etl.cfg`
esspwd=`awk -F= '{if ($1~/ESSPWD/) print $2} ' /etldata/CRMETL/PARA/etl.cfg`
esslog=`awk -F= '{if ($1~/ESSLOG/) print $2} ' /etldata/CRMETL/PARA/etl.cfg`
##这个路径是被ESSADMIN用户写入日志的,所以必须具有写权限
lastmonth=`SubDateM $workdate 28`
echo "lastmonth: "$lastmonth
}
check_err()
(
echo "检查.err文件 "
cd $etlin/$lastmonth;
ls -lrt *.err >err.txt;
echo "取得err.txt文件的行数 "
wc -l err.txt ¦awk '{print $1} ' ¦read a
echo $a
b=1
until [ "$b " -gt "$a " ]
do v_sDisp=`echo "${v_sDispLine} " ¦awk '{FS= ", ";print $2} '`
line=`sed -n $b 'p ' err.txt`
echo $line
word=`echo "$line " ¦awk '{print $9} '`
echo $word
cube=`echo "$word " ¦awk -F. '{print $1} '`
table=`echo "$word " ¦awk -F. '{print $2} '`
echo $cube
echo $table ##记录运行日志
sqlplus $dbusr/$dbpwd < <! insert into dgcrm.ess_check(cube_id,table_id) values ( '$cube ', '$table ');
commit;
exit;
!
b=`expr $b + 1`
done
) ############################ 主程序 ############################
set_env
check_err
######################是否有当前进程在运行############ 你看就是几个函数之间的调用,把程序层次写清楚点就好了,呵呵,就是在你的EXIT;后面加个!,来退出SQLPLUS,