有的时候对于研发或者其他非DBA的人员来说是没有权限登陆到数据库上的,但有的时候研发需要调试一些存储过程或者包等,又常常需要登陆到服务器上去查看,那么再这种情况下,可以通过dba_source或者all_source 将需要的procedure 、pakckage、body等导出成文本形式并且上传到ftp服务器上供相关人员查看。下面就是实现这个功能的脚本:
-rw-r--r-- 1 oracle dba 439 Nov 14 11:25 dump_package_body.sh
drwxr-xr-x 2 oracle oinstall 4096 Nov 14 13:06 package_body
-rw-r--r-- 1 oracle dba 25 Nov 14 11:14 package_body_info.sql
-rw-r--r-- 1 oracle oinstall 316 Nov 14 13:16 unload_to_ftp.sh
上面就是用到的几个脚本,其中
package_body_info.sql存放的是需要导出的procedue,body等
unload_to_ftp.sh 是将导出的文件放到ftp上面去
cat unload_to_ftp.sh
#!/bin/bash
#read package body information
package_body_info=($(awk '{print $1}' package_body_info.sql))
for var in ${package_body_info[@]};
do
sqlplus -S xxxx/xxxx@xxxx<<EOF
set heading off;
spool /opt/scripts/package_body/$var.sql
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
select text from dba_source where owner='xxxx' and type='PACKAGE BODY' and name='$var' order by line;
spool off;
exit;
EOF
done
./unload_to_ftp.sh
cat unload_to_ftp.sh
#!/bin/bash
updir=/opt/scripts/package_body
ftp -v -n ftpip <<EOF
user ftpuser ftppasswod
binary
cd /opt/xxx/ftp/dump_package_body/
lcd /opt/scripts/package_body
prompt
put *
bye
EOF
echo "commit to ftp successfully"
实现方式很简单!!!