卸载oracle表结构到文本中的脚本(UNIX下)

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

由于不太喜欢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}

}

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航