oracle的文本导入、导出技巧


在使用oracle时,总觉得oracle的导入,导出没有informix的load,unload好用,没办法,只能参照网上朋友的思路和informix的实现,写了几个脚本,希望各位高手指点:

=============================================

工具用法:
unload.sh
Usage: unload.sh userid/passwd[@oraclesid] [tabname]
注释:
如果不加’@oraclesid’,则用当前环境变量ORACLE_SID。
如果不加tabname参数,则处理该用户下的所有表,生成’表名.unl’文件。
如果加tabname参数,则单独处理该表,生成’表名.unl’文件。
load.sh
Usage: load.sh userid/passwd[@oraclesid] [tabname]
注释:
如果不加’@oraclesid’,则用当前环境变量ORACLE_SID。
如果不加tabname参数,则装载该用户下的所有表,必须存在’表名.unl’
文件。
如果加tabname参数,则单独处理该表,必须存在’表名.unl’文件。

=============================================

具体实现:
unload.sh
利用spool的功能,将表中的数据导出到对应的文本中。
load.sh
利用sql*load的功能,将文本中的数据导入到表中。
控制文件是自动生成的,使用者不需要知道格式
执行sqlload的脚本也是自动生成
generate_control_file.sh
生成控制文件
generate_execute_shell.sh
生成执行脚本

=============================================
代码说明
load.sh

#!/usr/bin/ksh
################################################################################

?&&é: load.sh

?èê&: &ù?Yò&&&ê&?Y&&&ò±í?&à&×°??&?ó&&?ê&?Y???&

2?ê& 1 = ó?&§?&/?ü?&[@ê&à&?&]

2?ê& 2 = ±í?&(&é?&

×÷?& Bing He

DT&?????

è??ú DT&?è? DT&??èê&

09/23/2003 Bing He &&ê?±àD&

################################################################################

lv_temp1="wk.test1"

f_get_tables()
{
rm -f ${lv_temp1}
sqlplus ${userid} <

/dev/null
set colsep $sep;
set echo off;
set feedback off;
set heading off;
set pagesize 0;
set linesize 1000;
set numwidth 12;
set termout off;
set trimout on;
set trimspool on;
spool ${lv_temp1};
select table_name from user_tables;
spool off;
exit
!
if [ "$?" -ne 0 ]
then
echo "Error:sqlplus ${userid} error in load for ${userid} !"
echo "please check userid and passwd or oracle_sid."
exit
fi

if [ -f ${lv_temp1} ]
then
lv_tables=cat ${lv_temp1} |grep -v "^SQL&gt;" | tr -d ' '
else
echo "Error:${lv_temp1} file not found!"
exit
fi

rm -f ${lv_temp1}

}

################################################################################

?÷3ìDòè&&ú

lv_no=$#

case ${lv_no} in
1
userid=$1
f_get_tables;
;;
2
userid=$1
lv_tables=$2
;;


  • echo "Usage: $0
  1<userid passwd[@connection]=""> <table_name>"   
  2exit   
  3;;   
  4esac   
  5  
  6for lv_table in ${lv_tables}   
  7do   
  8if [ ! -f ${lv_table}.unl ]   
  9then   
 10echo "Error:${lv_table}.unl file not found!"   
 11else   
 12generate_control_file.sh ${userid} ${lv_table}   
 13generate_execute_shell.sh ${userid} ${lv_table}   
 14sh load_${lv_table}.sh   
 15rm -f ${lv_table}.ctl   
 16rm -f load_${lv_table}.sh   
 17fi   
 18done   
 19  
 20################################################################################   
 21  
 22=============================================   
 23  
 24unload.sh   
 25=============================================   
 26#!/usr/bin/ksh   
 27################################################################################   
 28#   
 29# ?&amp;&amp;é: unload.sh   
 30#   
 31# ?èê&amp;: &amp;ù?Yò&amp;&amp;&amp;ê&amp;?Y&amp;&amp;&amp;ò±í?&amp;à&amp;D&amp;??ê&amp;?Y2&amp;éú3é&amp;?ó&amp;&amp;?ê&amp;?Y???&amp;   
 32#   
 33# 2?ê&amp; 1 = ó?&amp;§?&amp;/?ü?&amp;[@ê&amp;à&amp;?&amp;]   
 34# 2?ê&amp; 2 = ±í?&amp;(&amp;é?&amp; ![](http://www.cndw.com/ShowImg.asp?p=/2006-5-11/89214con_wink.gif)   
 35#   
 36# ×÷?&amp; Bing He   
 37#   
 38# DT&amp;?????   
 39# è??ú DT&amp;?è? DT&amp;??èê&amp;   
 40#   
 41# 09/23/2003 Bing He &amp;&amp;ê?±àD&amp;   
 42#   
 43################################################################################   
 44  
 45lv_sep='|' # --·?&amp;&amp;·&amp;&amp;&amp;&amp;éò?DT&amp;?3é×??&amp;?&amp;ò&amp;&amp;?·?&amp;&amp;·&amp;&amp;&amp;è&amp;'|'   
 46lv_temp1="unload.temp1"   
 47  
 48f_get_tables()   
 49{   
 50rm -f ${lv_temp1}   
 51sqlplus ${userid} &lt;<!-- -->/dev/null   
 52set colsep ${lv_sep};   
 53set echo off;   
 54set feedback off;   
 55set heading off;   
 56set pagesize 0;   
 57set linesize 1000;   
 58set numwidth 12;   
 59set termout off;   
 60set trimout on;   
 61set trimspool on;   
 62spool ${lv_temp1};   
 63select table_name from user_tables;   
 64spool off;   
 65exit   
 66!   
 67if [ "$?" -ne 0 ] ; then   
 68echo "sqlplus $userid error in get table name &lt;"$?"&gt;!!"   
 69echo "please check userid and passwd or database."   
 70exit   
 71fi   
 72  
 73if [ -f ${lv_temp1} ]   
 74then   
 75lv_tables=`cat ${lv_temp1} |grep -v "^SQL&gt;" | tr -d ' '`   
 76else   
 77echo "Error:${lv_temp1} file not found!"   
 78exit   
 79fi   
 80rm -f ${lv_temp1}   
 81  
 82}   
 83  
 84################################################################   
 85## ?÷3ìDòè&amp;&amp;ú   
 86lv_no=$#   
 87  
 88case ${lv_no} in   
 891 ![](http://www.cndw.com/ShowImg.asp?p=/2006-5-11/89214con_wink.gif)   
 90userid=$1   
 91f_get_tables;   
 92;;   
 932 ![](http://www.cndw.com/ShowImg.asp?p=/2006-5-11/89214con_wink.gif)   
 94userid=$1   
 95lv_tables=$2   
 96;;   
 97* ![](http://www.cndw.com/ShowImg.asp?p=/2006-5-11/89214con_wink.gif)   
 98echo "Usage: $0 <userid passwd[@connection]=""> <table_name>"   
 99exit   
100;;   
101esac   
102  
103################################################################   
104  
105################################################################   
106## ?ⅅ????2ù×÷   
107  
108for table in ${lv_tables}   
109do   
110rm -f lv_$table.txt   
111sqlplus ${userid} &lt;<!-- -->/dev/null   
112set colsep ${lv_sep};   
113set echo off;   
114set feedback off;   
115set heading off;   
116set pagesize 0;   
117set linesize 1000;   
118set numwidth 12;   
119set termout off;   
120set trimout on;   
121set trimspool on;   
122spool lv_$table.txt;   
123select * from $table;   
124spool off;   
125!   
126if [ "$?" -ne 0 ]   
127then   
128echo "error:sqlplus $userid error in unload table $table!!"   
129echo "please check userid and passwd or database."   
130exit   
131fi   
132  
133if [ -f lv_$table.txt ]   
134then   
135cat lv_$table.txt | grep -v "^SQL&gt;"|sed -e "s/ *$//g"|sed "s/$/\|/g"|sed -e "s/ *\|/\|/g" &gt;${table}.unl   
136if [[ `grep "ORA-" $table.unl` = "" ]]; then   
137echo "unload table ${table}....\t\t\t\t\t ok"   
138else   
139cat ${table}.unl   
140err="$err ${table}"   
141fi   
142else   
143echo $0 error   
144fi   
145rm -f lv_$table.txt   
146done   
147  
148################################################################   
149  
150################################################################   
151## ?áê&amp;2ù×÷   
152  
153if [[ "X$err" = "X" ]];then   
154echo "Unload Complete!,Thank you!"   
155else   
156echo "Unload Table $err error, please check it!"   
157fi   
158  
159################################################################   
160  
161=============================================   
162  
163generate_control_file.sh   
164=============================================   
165#!/usr/bin/ksh   
166################################################################################   
167#   
168# ?&amp;&amp;é: generate_control_file.sh   
169#   
170# ?èê&amp;: &amp;ù?Yò&amp;&amp;&amp;±í?&amp;éú3é&amp;?±í&amp;?&amp;??????&amp;   
171#   
172# 2?ê&amp; 1 = ó?&amp;§?&amp;/?ü?&amp;[@ê&amp;à&amp;?&amp;]   
173# 2?ê&amp; 2 = ±í?&amp;   
174#   
175# ×÷?&amp; Bing He   
176#   
177# DT&amp;?????   
178# è??ú DT&amp;?è? DT&amp;??èê&amp;   
179#   
180# 09/23/2003 Bing He &amp;&amp;ê?±àD&amp;   
181#   
182################################################################################   
183  
184################################################################################   
185## ?÷3ìDòè&amp;&amp;ú   
186  
187if [ ! $# -eq 2 ]   
188then   
189echo "Usage: $0 <userid passwd[@connection]=""> <table_name>"   
190exit   
191else   
192userid=$1   
193table=$2   
194fi   
195  
196################################################################################   
197  
198################################################################################   
199## ?ⅅ????2ù×÷   
200  
201lv_temp="wk_${table}.test"   
202lv_temp1="wk_${table}.test1"   
203lv_temp2="wk_${table}.test2"   
204lv_control="${table}.ctl"   
205  
206sqlplus ${userid} &lt;<!-- -->/dev/null   
207spool ${lv_temp};   
208desc ${table}   
209spool off;   
210exit   
211!   
212if [ "$?" -ne 0 ]   
213then   
214echo "Error:sqlplus ${userid} error in generate control file for table ${table} !"   
215echo "please check userid and passwd or oracle_sid."   
216exit   
217fi   
218  
219if [ -f ${lv_temp} ]   
220then   
221cat ${lv_temp}|grep -v "^SQL&gt;" |grep -v " Name " |grep -v " -------" |awk '{print $1}' &gt; ${lv_temp1}   
222lv_line_num=`cat ${lv_temp1} | wc -l`   
223lv_line_num=`expr ${lv_line_num} - 2`   
224lv_index=0   
225  
226rm -f ${lv_temp2}   
227for lineinfo in `cat ${lv_temp1}`   
228do   
229if [ ${lv_index} -eq ${lv_line_num} ]   
230then   
231echo "${lineinfo}" &gt;&gt; ${lv_temp2}   
232else   
233echo "${lineinfo}," &gt;&gt; ${lv_temp2}   
234lv_index=`expr ${lv_index} + 1`   
235fi   
236done   
237else   
238echo "$0 error :not find ${lv_temp} file."   
239exit   
240fi   
241  
242lv_str="LOAD DATA INFILE '${table}.unl' BADFILE 'bad_${table}.bad' APPEND INTO TABLE ${table} FIELDS TERMINATEd BY \"|\""   
243echo ${lv_str} &gt; ${lv_control}   
244echo "(" &gt;&gt; ${lv_control}   
245cat ${lv_temp2} &gt;&gt; ${lv_control}   
246echo ")" &gt;&gt; ${lv_control}   
247  
248rm -f ${lv_temp}   
249rm -f ${lv_temp1}   
250rm -f ${lv_temp2}   
251  
252################################################################################   
253  
254=============================================   
255  
256generate_execute_shell.sh   
257=============================================   
258#!/usr/bin/ksh   
259################################################################################   
260#   
261# ?&amp;&amp;é: generate_execute_shell.sh   
262#   
263# ?èê&amp;: &amp;ù?Yò&amp;&amp;&amp;±í?&amp;éú3é&amp;?±í&amp;?×°????±?   
264#   
265# 2?ê&amp; 1 = ó?&amp;§?&amp;/?ü?&amp;[@ê&amp;à&amp;?&amp;]   
266# 2?ê&amp; 2 = ±í?&amp;   
267#   
268# ×÷?&amp; Bing He   
269#   
270# DT&amp;?????   
271# è??ú DT&amp;?è? DT&amp;??èê&amp;   
272#   
273# 09/23/2003 Bing He &amp;&amp;ê?±àD&amp;   
274#   
275################################################################################   
276  
277################################################################################   
278## ?÷3ìDòè&amp;&amp;ú   
279  
280if [ ! $# -eq 2 ]   
281then   
282echo "Usage: $0 <userid passwd[@connection]=""> <table_name>"   
283exit   
284else   
285userid=$1   
286table=$2   
287fi   
288  
289################################################################################   
290  
291################################################################################   
292## ??2&amp;±&amp;á&amp;&amp;¨ò&amp;?&amp;óò   
293  
294lv_rows=10000   
295lv_bindsize=8192000   
296lv_readsize=8192000   
297  
298################################################################################   
299  
300################################################################################   
301## éú3é?ⅅ??±????&amp;   
302  
303echo "sqlldr ${userid} control=${table}.ctl rows=${lv_rows} bindsize=${lv_bindsize} readsize=${lv_readsize} log=log_${table}.log bad=bad_${table}.bad direct=true" &gt; load_${table}.sh   
304  
305################################################################################   
306  
307=============================================</table_name></userid></table_name></userid></table_name></userid></table_name></userid>
Published At
Categories with 数据库类
comments powered by Disqus