分享
 
 
 

oracle的文本导入、导出技巧

王朝oracle·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

在使用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 # # 描述: 根据一个数据库或表名来装载对应的数据文件 # # 参数 1 = 用户名/密码[@实例名] # 参数 2 = 表名(可选) # # 作者 Bing He # # 修改记录 # 日期 修改人 修改描述 # # 09/23/2003 Bing He 开始编写 # ################################################################################ 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" | tr -d ' '` else echo "Error:${lv_temp1} file not found!" exit fi rm -f ${lv_temp1} } ################################################################################ ## 主程序入口 lv_no=$# case ${lv_no} in 1 ) userid=$1 f_get_tables; ;; 2 ) userid=$1 lv_tables=$2 ;; * ) echo "Usage: $0 " exit ;; esac for lv_table in ${lv_tables} do if [ ! -f ${lv_table}.unl ] then echo "Error:${lv_table}.unl file not found!" else generate_control_file.sh ${userid} ${lv_table} generate_execute_shell.sh ${userid} ${lv_table} sh load_${lv_table}.sh rm -f ${lv_table}.ctl rm -f load_${lv_table}.sh fi done ################################################################################ unload.sh #!/usr/bin/ksh ################################################################################ # # 模块: unload.sh # # 描述: 根据一个数据库或表名来卸载数据并生成对应的数据文件 # # 参数 1 = 用户名/密码[@实例名] # 参数 2 = 表名(可选) # # 作者 Bing He # # 修改记录 # 日期 修改人 修改描述 # # 09/23/2003 Bing He 开始编写 # ################################################################################ lv_sep='|' # --分隔符,可以修改成自己想要的分隔符,如'|' lv_temp1="unload.temp1" f_get_tables() { rm -f ${lv_temp1} sqlplus ${userid} /dev/null set colsep ${lv_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 "sqlplus $userid error in get table name !!" echo "please check userid and passwd or database." exit fi if [ -f ${lv_temp1} ] then lv_tables=`cat ${lv_temp1} |grep -v "^SQL" | tr -d ' '` else echo "Error:${lv_temp1} file not found!" exit fi rm -f ${lv_temp1} } ################################################################ ## 主程序入口 lv_no=$# case ${lv_no} in 1 ) userid=$1 f_get_tables; ;; 2 ) userid=$1 lv_tables=$2 ;; * ) echo "Usage: $0 " exit ;; esac ################################################################ ################################################################ ## 执行下载操作 for table in ${lv_tables} do rm -f lv_$table.txt sqlplus ${userid} /dev/null set colsep ${lv_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_$table.txt; select * from $table; spool off; ! if [ "$?" -ne 0 ] then echo "error:sqlplus $userid error in unload table $table!!" echo "please check userid and passwd or database." exit fi if [ -f lv_$table.txt ] then cat lv_$table.txt | grep -v "^SQL"|sed -e "s/ *$//g"|sed "s/$/\|/g"|sed -e "s/ *\|/\|/g" ${table}.unl if [[ `grep "ORA-" $table.unl` = "" ]]; then echo "unload table ${table}....\t\t\t\t\t ok" else cat ${table}.unl err="$err ${table}" fi else echo $0 error fi rm -f lv_$table.txt done ################################################################ ################################################################ ## 结束操作 if [[ "X$err" = "X" ]];then echo "Unload Complete!,Thank you!" else echo "Unload Table $err error, please check it!" fi ################################################################ generate_control_file.sh #!/usr/bin/ksh ################################################################################ # # 模块: generate_control_file.sh # # 描述: 根据一个表名生成该表的控制文件 # # 参数 1 = 用户名/密码[@实例名] # 参数 2 = 表名 # # 作者 Bing He # # 修改记录 # 日期 修改人 修改描述 # # 09/23/2003 Bing He 开始编写 # ################################################################################ ################################################################################ ## 主程序入口 if [ ! $# -eq 2 ] then echo "Usage: $0

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有