中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > Oracle
Unix下卸载Oracle表结构到文本中的脚本
作者:佚名 时间:2007-06-19 16:12 出处:builder.com.cn 责编:月夜寒箫
              摘要:Unix下卸载Oracle表结构到文本中的脚本

本文详细的讲述了Unix下卸载Oracle表结构到文本中的脚本。

现象:由于Oracle的EXP的结果不能转化为文本,由于没有安装metadata,所以get-ddk不能成功。

缺点:不能处理视图、同义名、存储过程。

涉及的系统表:

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}
            }
            #################
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有