教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> Oracle >> 开发技术 >> 卸载oracle表结构到文本中的脚本(UNIX下) RSS订阅
卸载oracle表结构到文本中的脚本(UNIX下)
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   

  由于不太喜欢ORACLE的EXP,因为他的结果不能转为文本,而且由于metadata没有安装,所以get_ddl不能成功,最近没有看到有类似informix的dbschema的工具,所以就自己写了个脚本还是比较幼稚,目前还不能处理视图、同义名、存储过程,希望大家多提意见,使他能更好的服务客户
  
  涉及的系统表
  1. User_tables 用户表
  2. User_tab_columns 用户表的字段
  3. User_view 用户视图
  4. User_indexes 用户表的索引
  5. User_ind_columns 用户表字段的索引
  6. User_constraints 用户表的限定
  7. User_cons_columns 用户表字段的限定
  
  使用方法
  dbschema.sh
  功能:
  根据一个数据库或表名来卸载结构,并在当前目录中生成对应的数据结构文件,包含表结构、主键、外键、索引等。
  语法:
  dbschema.sh userid/passwd[@connection][table_name]
  userid/passwd[@oracle_sid]: 登录数据库的信息
  tablename : 卸载的表名[可选]
  举例说明:
  dbschema.sh test/test@testdb
  逐个处理该用户的表,在当前目录中生成test.sql脚本。
  dbschema.sh test/test@testdb TT
  处理test用户的tt表,在当前目录中生成tt.sql脚本。
  
  脚本说明
  #!/usr/bin/ksh
  ################################################################################
  #
  # 模块: dbschema.sh
  #
  # 描述: 根据一个数据库或表名来获取相应的结构脚本
  #
  # 参数 1 = 用户名/密码[@实例名]
  # 参数 2 = 表名/视图名(可选)
  #
  # 作者 Bing He
  #
  # 修改记录
  # 日期 修改人 修改描述
  #
  # 10/20/2003 Bing He 开始编写
  #
  ################################################################################
  
  ################################################################################
  ##-- 局部变量定义
  lv_argc=0 #命令行入参个数
  lv_loginfo="" #命令行中的登录信息
  lv_table_name="" #命令行中的表名信息
  lv_filename="" #输出的文件名
  lv_tab_number=0 #需要处理的表的个数
  lv_sep='|' #分隔符
  lv_grid_str="\t" #输出的距行首的空格
  lv_deal_table="" #当前处理的表
  lv_file_temp1="get_ddl.temp1" #临时文件名
  lv_file_temp2="get_ddl.temp2" #临时文件名
  lv_file_temp3="get_ddl.temp3" #临时文件名
  lv_file_tab_col="get_ddl.col1" #临时文件名
  lv_file_tab_con="get_ddl.con1" #临时文件名
  lv_file_col_con="get_ddl.con2" #临时文件名
  lv_file_tab_ind="get_ddl.ind1" #临时文件名
  lv_file_col_ind="get_ddl.ind2" #临时文件名
  ################################################################################
  
  ################################################################################
  ##-- 检查用户名密码的权限
  f_check_userid()
  {
  sqlplus ${lv_loginfo} < /dev/null
  set echo off;
  set heading off;
  desc user_tables;
  exit
  !
  if [ "$?" -ne 0 ]
  then
  echo "Error:f_check_userid failed."
  echo " Please check the username/passwd=[${lv_loginfo}]."
  exit
  fi
  }
  ################################################################################
  
  ################################################################################
  ##-- 检查表是否存在
  f_check_tablename()
  {
  sqlplus ${lv_loginfo} < /dev/null
  set echo off;
  set heading off;
  spool ${lv_file_temp1}
  select count(*) from user_tables where table_name='${lv_table_name}';
  spool off
  exit
  !
  if [ "$?" -ne 0 ]
  then
  echo "Error:f_check_tablename failed."
  echo " Please check the [${lv_table_name}]."
  exit
  fi
  lv_number=`cat ${lv_file_temp1}|grep -v "^SQL>"|grep -v "^$"|grep -v "rows selected`
  if [ ${lv_number} -eq 0 ]
  then
  echo "Error:f_check_tablenaem failed."
  echo " Please check the table [${lv_table_name}] in [${lv_loginfo}]."
  exit
  fi
  }
  ################################################################################
  
  ################################################################################
  ##-- 初始化输出文件
  f_generate_file()
  {
  if [ ${lv_argc} -eq 1 ]
  then
  lv_str=`echo ${lv_loginfo}|cut -d"/" -f1| tr "[:upper:]" "[:lower:]"`
  lv_str_main="Structure For User ${lv_str}"
  else
  lv_str=`echo ${lv_table_name}| tr "[:upper:]" "[:lower:]"`
  lv_str_main="Structure For Table ${lv_str}"
  fi
  lv_filename_drop_index="${lv_str}.drop_index"
  lv_filename_drop_foreign="${lv_str}.drop_foreign"
  lv_filename_drop_table="${lv_str}.drop_table"
  lv_filename_create_table="${lv_str}.create_table"
  lv_filename_create_foreign="${lv_str}.create_foreign"
  lv_filename="${lv_str}.sql"
  rm -f ${lv_filename_drop_index}
  rm -f ${lv_filename_drop_foreign}
  rm -f ${lv_filename_drop_table}
  rm -f ${lv_filename_create_table}
  rm -f ${lv_filename_create_foreign}
  rm -f ${lv_filename}
  
  ##--生成基础数据
  lv_str1="------------------------------------------------------------------"
  echo "\n"${lv_str1} >> ${lv_filename_drop_index}
  echo "--** 第一步: 删除索引 **--" >> ${lv_filename_drop_index}
  echo ${lv_str1}"\n" >> ${lv_filename_drop_index}
  
  lv_str1="------------------------------------------------------------------"
  echo "\n"${lv_str1} >> ${lv_filename_drop_foreign}
  echo "--** 第二步: 删除外键 **--" >> ${lv_filename_drop_foreign}
  echo ${lv_str1}"\n" >> ${lv_filename_drop_foreign}
  
  lv_str1="------------------------------------------------------------------"
  echo "\n"${lv_str1} >> ${lv_filename_drop_table}
  echo "--** 第三步: 删除表 **--" >> ${lv_filename_drop_table}
  echo ${lv_str1}"\n" >> ${lv_filename_drop_table}
  
  lv_str1="------------------------------------------------------------------"
  echo "\n"${lv_str1} >> ${lv_filename_create_table}
  echo "--** 第四步: 创建表结构,主键,索引**--" >> ${lv_filename_create_table}
  echo ${lv_str1} >> ${lv_filename_create_table}
  
  lv_str1="------------------------------------------------------------------"
  echo "\n"${lv_str1} >> ${lv_filename_create_foreign}
  echo "--** 第五步: 创建外键 **--" >> ${lv_filename_create_foreign}
  echo ${lv_str1}"\n" >> ${lv_filename_create_foreign}
  
  lv_str1="------------------------------------------------------------------"
  echo "\n"${lv_str1} >> ${lv_filename}
  echo "--** DESC :${lv_str_main}" >> ${lv_filename}
  echo "--** AUTHOR:Bing He" >> ${lv_filename}
  echo "--** DATE :20`date +%y-%m-%d" >> ${lv_filename}
  echo ${lv_str1}"\n" >> ${lv_filename}
  
  }
  ################################################################################
  
  ################################################################################
  ##-- 获取用户下的表列表
  f_get_tables()
  {
  rm -f ${lv_file_temp1}
  sqlplus ${lv_loginfo} </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_file_temp1};
  select table_name from user_tables;
  spool off;
  exit
  !
  if [ "$?" -ne 0 ] ; then
  echo "Usage:f_get_tables failed."
  exit
  fi
  
  if [ -f ${lv_file_temp1} ]
  then
  lv_table_name=`cat ${lv_file_temp1} |grep -v "^SQL>" | tr -d ' '| tr "[:lower:]" "[:upper:]"`
  echo ${lv_table_name} > 1.out
  else
  echo "Error:f_get_tables failed.${lv_file_temp1} file not found!"
  exit
  fi
  rm -f ${lv_file_temp1}
  }
  #################

来源:upschool.com.cn
作者:
关键字:脚本,UNIX下
发表日期:2007-1-6 1:06:58

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:中关键技术及难点   下一篇:递归程序的应用


2008-12-3 4:03:00
本文的相类似文章
  • 防范脚本入侵,你做好准备了吗?
  • 防止脚本病毒执行的通用方法
  • 防止脚本病毒执行的通用方法
  • Oracle常用技巧和脚本技术应用
  • 监控谁在使用哪个回滚段的脚本
  • oracle开发 表占用空间统计——脚本
  • 卸载oracle表结构到文本中的脚本(UNIX下)
  • 手工创建数据库的全部脚本及说明
  • Unix上的手工建库脚本
  • 一些常用的计划脚本(2)
  • 在学习中进步 在进步中成长 教程中国相随您的成长之路
    华腾联合科技股份有限公司版权所有
    广告联系:Rosibo@163.com