srzyhead 发表于 2011-12-23 02:10

一个把altibase中数据导入到oracle中的脚本

<P>使用iloader生成fmt文件,用sed处理后生成ctl文件,用sqlldr导入到oracle中</P>
<DIV id=codeText class=codeText>
<OL style="PADDING-BOTTOM: 5px; MARGIN: 0px 1px 0px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 5px" class=dp-css>
<LI>#!/bin/bash</LI>
<LI></LI>
<LI>#"TB_BIL_ACCT_BALANCE_bak" "RATABLE_HISTORY_bak" </LI>
<LI></LI>
<LI>TABLE_ARRAY=( "tb_bil_rent_arrear" )&nbsp;&nbsp;&nbsp; #到导入的表的表名</LI>
<LI></LI>
<LI>ALTIBASE_CONN="-s 127.0.0.1 -u test -p test"&nbsp; </LI>
<LI></LI>
<LI>ORACLE_CONN="test/test"</LI>
<LI></LI>
<LI>INPUT_TYPE=1 #2 REPLACE ;other APPEND</LI>
<LI></LI>
<LI>TIME=`date +"%m%d%H%M%S"`</LI>
<LI></LI>
<LI>case ${INPUT_TYPE} in</LI>
<LI></LI>
<LI>1)</LI>
<LI></LI>
<LI>INPUT_TYPE_STR="APPEND"</LI>
<LI></LI>
<LI>;;</LI>
<LI></LI>
<LI>2)</LI>
<LI></LI>
<LI>INPUT_TYPE_STR="REPLACE"</LI>
<LI></LI>
<LI>;;</LI>
<LI></LI>
<LI>*)</LI>
<LI></LI>
<LI>INPUT_TYPE_STR="APPEND"</LI>
<LI></LI>
<LI>;;</LI>
<LI></LI>
<LI>esac</LI>
<LI></LI>
<LI>echo 4</LI>
<LI></LI>
<LI>for NUM in ${!TABLE_ARRAY[@]}</LI>
<LI></LI>
<LI>do</LI>
<LI></LI>
<LI>TABLE_NAME=${TABLE_ARRAY}</LI>
<LI></LI>
<LI>iloader formout ${ALTIBASE_CONN} -T ${TABLE_NAME} -f data.fmt &gt;/dev/null</LI>
<LI></LI>
<LI>if [ $? -gt 0 ] ; then</LI>
<LI></LI>
<LI>echo "iloader formout error!"</LI>
<LI></LI>
<LI>exit</LI>
<LI></LI>
<LI>fi</LI>
<LI></LI>
<LI>iloader out ${ALTIBASE_CONN} -f data.fmt -d data.dat &gt;/dev/null</LI>
<LI></LI>
<LI>if [ $? -gt 0 ] ; then</LI>
<LI></LI>
<LI>echo "iloader out error!"</LI>
<LI></LI>
<LI>exit</LI>
<LI></LI>
<LI>fi</LI>
<LI></LI>
<LI></LI>
<LI></LI>
<LI>echo "LOAD DATA" &gt; data.ctl</LI>
<LI></LI>
<LI>echo "INTO TABLE ${TABLE_NAME}" &gt;&gt; data.ctl</LI>
<LI></LI>
<LI>echo "${INPUT_TYPE_STR}" &gt;&gt; data.ctl</LI>
<LI></LI>
<LI>echo "FIELDS TERMINATED BY X'5E'" &gt;&gt; data.ctl</LI>
<LI></LI>
<LI>echo 'TRAILING NULLCOLS' &gt;&gt; data.ctl</LI>
<LI></LI>
<LI>echo "(" &gt;&gt; data.ctl</LI>
<LI></LI>
<LI>sed -n '/{/,/}/{p;}' data.fmt | tail +2 | sed '$d;'|sed 's/bigint/integer/;s/numeric/integer/;s/integer[^;]*/integer external/;s/varchar/char/;s/date/date "YYYY\/MM\/DD HH24:MI:SS"/;s/;/,/;$s/,//;' &gt;&gt; data.ctl</LI>
<LI></LI>
<LI>echo ")" &gt;&gt; data.ctl</LI>
<LI></LI>
<LI></LI>
<LI></LI>
<LI>sqlldr userid=${ORACLE_CONN} control=data.ctl "log=${TABLE_NAME}_${TIME}.log" "bad=${TABLE_NAME}_${TIME}.bad" data=data.dat &gt;/dev/null</LI>
<LI></LI>
<LI></LI>
<LI></LI>
<LI>if [ $? -gt 0 ] ; then</LI>
<LI></LI>
<LI>echo "sqlldr error!"</LI>
<LI></LI>
<LI>exit</LI>
<LI></LI>
<LI>fi </LI>
<LI></LI>
<LI>done</LI>
<LI></LI>
<LI>echo "load over!"</LI></OL></DIV>
页: [1]
查看完整版本: 一个把altibase中数据导入到oracle中的脚本