歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix基礎知識 >> Unix環境卸載Oracle表結構文本中的腳本

Unix環境卸載Oracle表結構文本中的腳本

日期:2017/2/25 10:13:09   编辑:Unix基礎知識
  

由於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}
            }
            #################
Copyright © Linux教程網 All Rights Reserved