Oracle的ETL是否支持将数据抽取到Sql Server或其它关系型数据库?其数据处理能力是否可以达到2G/小时?望高人不吝赐教.感谢!

解决方案 »

  1.   

    1、与存放DW的数据库系统相同的数据源处理方法   这一类数源在设计比较容易,一般情况下,DBMS(包括SQLServer,Oracle)都会提供数据库链接功能,在DW数据库服务器和原业务系统之间建立直接的链接关系就可以写Select 语句直接访问。   2、与DW数据库系统不同的数据源的处理方法。   这一类数据源一般情况下也可以通过ODBC的方式建立数据库链接,如SQL Server和Oracle之间。如果不能建立数据库链接,可以有两种方式完成,一种是通过工具将源数据导出成.txt或者是.xls文件,然后再将这些源系统文件导入到ODS中。另外一种方法通过程序接口来完成。 
      

  2.   

    这个速度绝对没有问题
    你就用
    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   ( &apos;$cube &apos;, &apos;$table &apos;); 
    commit; 
    exit; 

    b=`expr   $b   +   1`       
    done 
    ) ############################   主程序   ############################ 
    set_env 
    check_err 
    ######################是否有当前进程在运行############ 你看就是几个函数之间的调用,把程序层次写清楚点就好了,呵呵,就是在你的EXIT;后面加个!,来退出SQLPLUS,
      

  3.   

    OWB好像目标只能是oracle数据库,ODI则可以到异构源,置于性能,ODI是一款ELT概念的ETL工具,它没有自己的执行引擎,都是转化为代码到源或者目标库中执行,所以只要你的数据库性能够好,抽取性能就够好ODI是Oracle收购的一个工具,简单介绍:http://www.ningoo.net/html/2007/an_introduction_of_oracle_data_integrator.html