- 论坛徽章:
- 0
|
请教怎么样把ORACLE的存储过程导出来?
以下是小弟写(ftp脚本是抄D)的备份脚本,在LINUX7.2+ORACLE8.1.6下运行正常,每天crontab备份,一周轮换覆盖备份文件。请指教!
oracle@server /arch/down_fp $ ls -al
total 56
drwxrwx--- 7 oracle dba 4096 Apr 8 08:25 .
drwxr-xr-x 5 oracle dba 4096 Apr 8 08:23 ..
drwxrwx--- 2 oracle dba 4096 Apr 8 08:19 bak
drwxrwx--- 2 oracle dba 4096 Apr 13 00:10 dat
-rwxrwx--- 1 oracle dba 1727 Apr 8 08:18 down_fp.sh
-rwxrwx--- 1 oracle dba 968 Apr 8 08:02 down_fp.sql
-rwxrwx--- 1 oracle dba 96 Apr 8 08:16 kk_ftp.sh
drwxrwx--- 2 oracle dba 4096 Apr 13 00:10 sql
drwxrwx--- 2 oracle dba 4096 Apr 13 00:10 tmp
-rwxrwx--- 1 oracle dba 281 Apr 8 08:25 user.txt
oracle@server /arch/down_fp $ ls -al bak
total 8228
drwxrwx--- 2 oracle dba 4096 Apr 8 08:19 .
drwxrwx--- 7 oracle dba 4096 Apr 8 08:25 ..
-rw-r--r-- 1 oracle dba 1214585 Apr 11 00:10 fp_0.tgz
-rw-r--r-- 1 oracle dba 1214142 Apr 12 00:11 fp_1.tgz
-rwxrwx--- 1 oracle dba 1183109 Apr 6 23:30 fp_2.tgz
-rwxrwx--- 1 oracle dba 1148231 Mar 31 23:30 fp_3.tgz
-rwxrwx--- 1 oracle dba 1188417 Apr 8 08:20 fp_4.tgz
-rw-r--r-- 1 oracle dba 1211826 Apr 9 00:11 fp_5.tgz
-rw-r--r-- 1 oracle dba 1212880 Apr 10 00:11 fp_6.tgz
##########################################
#down_fp.sh的内容
#读取user.txt中指定要备份的用户,依次备份代码为文本,并打包FTP到远程主机
##########################################
#! /bin/sh
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/oracle/bin:/oracle/app/oracle/product/8.1.6/bin
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
TNS_ADMIN=/oracle/app/oracle/product/8.1.6/network/admin
ORACLE_SID=数据库的SID
LD_LIBRARY_PATH=:/oracle/app/oracle/product/8.1.6/lib
USER=oracle
LOGNAME=oracle
LANG=en_US
ORACLE_BASE=/oracle/app/oracle
ORACLE_HOME=/oracle/app/oracle/product/8.1.6
ORACLE_BIN=/oracle/app/oracle/product/8.1.6/bin
SHELL=/bin/sh
TERM=vt100
export PATH NLS_LANG TNS_ADMIN ORACLE_SID LD_LIBRARY_PATH USER LOGNAME LANG ORACLE_BASE ORACLE_HOME SHELL TERM
cd /arch/down_fp ##程序所在目录
rm -rf sql/*
for cStr in `cat user.txt`
do
#echo 'Down '$cStr' ...'
echo $cStr >; tmp/a.txt
sed -e 's/,/ /g' < tmp/a.txt >; tmp/b.txt
awk '{print $1;}' tmp/b.txt >; tmp/c.txt
read cDb < tmp/c.txt
awk '{print $2;}' tmp/b.txt >; tmp/c.txt
read cUser < tmp/c.txt
cUserLong=$cDb'_'$cUser
echo 'Down program of '$cUser@$cDb' ...'
##登录密码
cLoginStr='SYSTEM/MANAGER@'$cDb
##登录密码
sed -e 's/KIKI_CREATE/'$cUserLong'/g' < down_fp.sql >; tmp/c.txt
sed -e 's/KIKI_USER/'$cUser'/g' < tmp/c.txt >; down_fp_tmp.sql
echo '#' >; down_fp_tmp.sh
echo 'sqlplus '$cLoginStr' << EOF' >;>; down_fp_tmp.sh
echo '@down_fp_tmp.sql' >;>; down_fp_tmp.sh
echo 'exit' >;>; down_fp_tmp.sh
echo 'EOF' >;>; down_fp_tmp.sh
./down_fp_tmp.sh >; /dev/null
done
>; down_fp_tmp.sh
rm -rf tmp/?.txt
echo 'Tar ...'
mv dat/*.tgz bak
cDate=`date +'%w'`
cTarFile='dat/fp_'$cDate'.tgz'
tar cvfz $cTarFile sql/*.*
echo 'OK! Program backuped!'
echo 'Ftp to remote server...'
./kk_ftp.sh 10.10.10.10 /arch/down_fp/dat /bak/down_fp/dat_remote
echo 'Ftp OK!'
##########################################
#down_fp.sql
#取过程、包等代码
##########################################
set head off;
column text format a4000;
spool ./sql/KIKI_CREATE_procdure.sql;
select decode(substr(ltrim(text),1,9),'PROCEDURE','create or replace ','procedure','create or replace ','')||text text from all_source WHERE OWNER='KIKI_USER' and TYPE='PROCEDURE';
spool off;
spool ./sql/KIKI_CREATE_function.sql;
select decode(substr(ltrim(text),1,8),'FUNCTION','create or replace ','function','create or replace ','')||text text from all_source WHERE OWNER='KIKI_USER' and TYPE='FUNCTION';
spool off;
spool ./sql/KIKI_CREATE_package.sql;
select decode(substr(ltrim(text),1,7),'PACKAGE','create or replace ','package','create or replace ','')||text text from all_source WHERE OWNER='KIKI_USER' and TYPE='PACKAGE';
spool off;
spool ./sql/KIKI_CREATE_package_body.sql;
select decode(substr(ltrim(text),1,12),'PACKAGE BODY','create or replace ','package body','create or replace ','')||text text from all_source WHERE OWNER='KIKI_USER' and TYPE='PACKAGE BODY';
spool off;
##########################################
#kk_ftp.sh
#把备份文件FTP到远程主机
##########################################
ftp -i -n <<EOF
open $1
user USERNAME PASSWORD
bin
lcd $2
cd $3
prompt
mput *.tgz
quit
EOF
##########################################
#user.txt
#用逗号隔开要备份的主机名和用户名
##########################################
SERVER1,USER1
SERVER2,USER2
SERVER3,USER3 |
|