文章详情页
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/nullset echo off;set heading off;desc user_tables;exit!if [ '$?' -ne 0 ]thenecho 'Error:f_check_userid failed.'echo ' Please check the username/passwd=[${lv_loginfo}].'exitfi}########################################################################################################-- 检查表是否存在f_check_tablename(){sqlplus ${lv_loginfo} < /dev/nullset echo off;set heading off;spool ${lv_file_temp1}select count(*) from user_tables where table_name='${lv_table_name}';spool offexit!if [ '$?' -ne 0 ]thenecho 'Error:f_check_tablename failed.'echo ' Please check the [${lv_table_name}].'exitfilv_number=`cat ${lv_file_temp1}grep -v '^SQL>'grep -v '^$'grep -v 'rows selected`if [ ${lv_number} -eq 0 ]thenecho 'Error:f_check_tablenaem failed.'echo ' Please check the table [${lv_table_name}] in [${lv_loginfo}].'exitfi}####################################################################################################-- 初始化输出文件f_generate_file(){if [ ${lv_argc} -eq 1 ]thenlv_str=`echo ${lv_loginfo}cut -d'/' -f1 tr '[:upper:]' '[:lower:]'`lv_str_main='StrUCture For User ${lv_str}'elselv_str=`echo ${lv_table_name} tr '[:upper:]' '[:lower:]'`lv_str_main='Structure For Table ${lv_str}'filv_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/nullset 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 ] ; thenecho 'Usage:f_get_tables failed.'exitfiif [ -f ${lv_file_temp1} ]thenlv_table_name=`cat ${lv_file_temp1} grep -v '^SQL>' tr -d ' ' tr '[:lower:]' '[:upper:]'`echo ${lv_table_name} > 1.outelseecho 'Error:f_get_tables failed.${lv_file_temp1} file not found!'exitfirm -f ${lv_file_temp1}}#################
排行榜