• 网络学院
  • 新手学堂
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
Oracle的文本导入、导出技巧
广告位
  站点:
  • 首 页
  • 最新软件
  • 最新文章
  • 国内软件
  • 国外软件
  • 汉化软件
  • 源码下载
  • 字体下载
Oracle的文本导入、导出技巧
软件发布 Oracle的文本导入、导出技巧
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回首页 | 文章首页 | 认证考试 | Oracle认证 | Oracle指导 | Oracle的文本导入、导出技巧

Oracle的文本导入、导出技巧

 

添加时间: 2008-4-19 21:35:35  作者: Oracle指导  阅读次数:6   来源: http://www.d9soft.com

 

 

         
 在使用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}.... 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 "
  exit
  else
  userid=$1
  table=$2
  fi
  
  ################################################################################
  
  ################################################################################
  ## 执行下载操作
  
  lv_temp="wk_${table}.test"
  lv_temp1="wk_${table}.test1"
  lv_temp2="wk_${table}.test2"
  lv_control="${table}.ctl"
  
  sqlplus ${userid} </dev/null
  spool ${lv_temp};
  desc ${table}
  spool off;
  exit
  !
  if [ "$?" -ne 0 ]
  then
  echo "Error:sqlplus ${userid} error in generate control file for table ${table} !"
  echo "please check userid and passwd or oracle_sid."
  exit
  fi
  
  if [ -f ${lv_temp} ]
  then
  cat ${lv_temp}|grep -v "^SQL>" |grep -v " Name " |grep -v " -------" |awk '{print $1}' > ${lv_temp1}
  lv_line_num=`cat ${lv_temp1} | wc -l`
  lv_line_num=`expr ${lv_line_num} - 2`
  lv_index=0
  
  rm -f ${lv_temp2}
  for lineinfo in `cat ${lv_temp1}`
  do
  if [ ${lv_index} -eq ${lv_line_num} ]
  then
  echo "${lineinfo}" >> ${lv_temp2}
  else
  echo "${lineinfo}," >> ${lv_temp2}
  lv_index=`expr ${lv_index} + 1`
  fi
  done
  else
  echo "$0 error :not find ${lv_temp} file."
  exit
  fi
  
  lv_str="LOAD DATA INFILE '${table}.unl' BADFILE 'bad_${table}.bad' APPEND INTO TABLE ${table} FIELDS TERMINATEd BY "|""
  echo ${lv_str} > ${lv_control}
  echo "(" >> ${lv_control}
  cat ${lv_temp2} >> ${lv_control}
  echo ")" >> ${lv_control}
  
  rm -f ${lv_temp}
  rm -f ${lv_temp1}
  rm -f ${lv_temp2}
  
  ################################################################################
  
  generate_execute_shell.sh
  #!/usr/bin/ksh
  ################################################################################
  #
  # 模块: generate_execute_shell.sh
  #
  # 描述: 根据一个表名生成该表的装载脚本
  #
  # 参数 1 = 用户名/密码[@实例名]
  # 参数 2 = 表名
  #
  # 作者 Bing He
  #
  # 修改记录
  # 日期 修改人 修改描述
  #
  # 09/23/2003 Bing He 开始编写
  #
  ################################################################################
  
  ################################################################################
  ## 主程序入口
  
  if [ ! $# -eq 2 ]
  then
  echo "Usage: $0 "
  exit
  else
  userid=$1
  table=$2
  fi
  
  ################################################################################
  
  ################################################################################
  ## 局部变量定义区域
  
  lv_rows=10000
  lv_bindsize=8192000
  lv_readsize=8192000
  
  ################################################################################
  
  ################################################################################
  ## 生成执行脚本文件
  
  echo "sqlldr ${userid} control=${table}.ctl rows=${lv_rows} bindsize=${lv_bindsize} readsize=${lv_readsize} log=log_${table}.log bad=bad_${table}.bad direct=true" > load_${table}.sh

 

 

 

上下文章:

 

上一篇文章: 让我简单介绍一下Oracle sequence 下一篇文章: Oracle PL/SQL基础--游标的学习

相关文章:

  • Photoshop技巧:让模糊照片变清晰
  • 在ORACLE的存储过程中如何做简单的动态查询
  • Oracle下调数据库许可价格以适应多芯CPU
  • Oracle全球客户支持副总裁汤姆·舒尔滋演讲
  • Oracle中国前员工述说公司高层内部纷争史

相关软件:

  • 中英文文本朗读记事本 V2.0.0.1
  • DLL导出函数查看器 V1.3
  • OptionsOracle V1.3.1
  • 星月无痕文本加密器 V2.0 Beta 2
  • txt文本助手 V0.01
  • 金媒体文本朗读器 V2.0

 

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

Oracle认证分类导航

  • Oracle动态
  • Oracle指导
  • Oracle题库

本类经典文章推荐

  • Oracle中关于逻辑备份与恢复
  • Oracle开发人员JAVA存储过程
  • 为数据库的表自动生成行号
  • Oracle中的OOP概念
  • 用java从oracle取数
  • 冷备份移植到另一台Solaris机器上
  • 如何将excel数据导入oracle中
  • Oracle10.2g安装记录
  • 数据库监控工具ForOraclev1.2
  • oracle双机群集系统

Oracle指导阅读排行

  • Oracle系统表查询
  • 实例:Oracle导出EXCEL文件
  • Oracle企业管理器(OEM 2.1)使用...
  • 实例:Oracle导出EXCEL文件
  • Tomcat+SQLServer连接池配置
  • 服务器和客户机是怎样连接的
  • 入门基础:连接常见错误及解决方法
  • ORACLE数据库简介
  • 如何将excel数据导入oracle中
  • 如何取出某一用户的密码 再原样改...

Oracle认证阅读总排行

  • Oracle系统表查询
  • 实例:Oracle导出EXCEL文件
  • Oracle企业管理器(OEM 2.1)使用...
  • 在ORACLE的存储过程中如何做简单的...
  • 实例:Oracle导出EXCEL文件
  • AIX下自动启动Oracle数据库与监听...
  • Tomcat+SQLServer连接池配置
  • 服务器和客户机是怎样连接的
  • 入门基础:连接常见错误及解决方法
  • ORACLE数据库简介

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有