首页 > 数据库 > Oracle > 正文

Unix下卸载Oracle表结构到文本中的脚本

2024-08-29 13:51:30
字体:
来源:转载
供稿:网友
本文具体的讲述了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}}#################


上一篇:不要忽视Oracle 10g STATSPACK新功能

下一篇:教你使用智能优化器提高Oracle性能极限

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
学习交流
热门图片

新闻热点

疑难解答

图片精选

网友关注