Linux中国  设为主页
 收藏本站
 
当前位置: > 首页 ->数据库应用 ->PostgreSQL ->Unix环境卸载Oracle表结构文本中的脚本
  相关分类: 
Access
DB2
Mysql
Oracle
PostgreSQL
SQL Server
Sybase
其他数据库
  站内搜索: 
热门文章排行
热门文章排行 Oracle-Decode()函数和CASE语句的比(06-29)
Linux下JSP搭建(Tomcat4+jdk+postgre(04-11)
Linux下免费数据库PostgreSQL开发入(04-22)
教你在Oracle中实现SELECT TOP N的方(06-29)
PostgreSQL的热备和恢复 (04-22)
精采文章排行
精采文章排行 Oracle数据库SPFILE文件特点及具体操(06-29)
Oracle数据库在NT平台下的系统优化策(06-29)
教你在Oracle中实现SELECT TOP N的方(06-29)
Oracle-Decode()函数和CASE语句的比(06-29)
Oracle7.X 回滚表空间数据文件的误删(06-29)
  ·深入研究Oracle数据库中空间管理的方法 ·Unix环境卸载Oracle表结构文本中的脚本 ·如何把应用程序和Oracle客户端一起打包 ·Oracle数据库如何查询记录时给记录加锁 ·Oracle数据库删除两表中相同数据的方法 ·利用Oracle的管理服务器将数据导入导出 ·Oracle 9i充分利用自动撤销管理的优点 ·认识那些影响Oracle系统性能初始化参数 ·Oracle如何对CLOB行字段来执行全文检索

Unix环境卸载Oracle表结构文本中的脚本

作者:Webmaster   来源:   点击:   日期:2007-06-29 [收藏] [投稿]

  IE是否经常中毒?推荐您

由于Oracle的EXP不能转为文本,所以就自己写了Unix环境下卸载Oracle表结构文本中的脚本代码。

所涉及系统表

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}
}
#################
(责任编辑:王瑞)

相关文章:

Oracle之APACHE虚拟服务器设置

修改系统时间导致RAC环境的一个实例重启



 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:如何把应用程序和Oracle客户端一起打包   下一篇:深入研究Oracle数据库中空间管理的方法
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论

   相关文章:
·Oracle Database 11g将7月11日正式发布

   文章评论:(1条)
  
 请留名: 匿名评论   点击查看所有评论 论坛讨论
 

 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。