oracle脚本导出数据文件

断了今生、忘了曾经 提交于 2019-12-26 07:33:21

1.首先在服务器上创建目录,以目录/user/mt_data/为例,服务器上执行:mkdir mt_data
2.把目录对oracle用户授予执行的权限
chown -R oracle:oinstall /user/mt_data/

3.首先创建导出文件的目录,这里以目录/user/mt_data/为例,命名为"MY_DIR",oracle中执行

sql>create directory MY_DIR as '/user/mt_data/';

4.检验上述语句是否执行成功,执行

sql>select * from dba_directories;

如果执行成功则显示如下图
在这里插入图片描述5.创建脚本,执行vi test.sh
需求时每天对一个数据库中的表进行导出,这里以t_mt_yyyyMMdd表为例

#!/bin/bash
#:本脚本自动备份30天以前的mt表数据
#加载oracle的相关参数
#如果oracle参数不明确,请使用命令查看
# su - oracle
# echo $ORACLE_HOME
export ORACLE_BASE=/user/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=qxt
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin
#oracle字符集
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
#获取44天以前的时间,格式:20180313
#DATE=$(date +%Y%m%d)
DATE=$(date -d "30 days ago" +%Y%m%d)
#设置备份目录,
export DIR=/user/mt_data
echo $DIR
echo $DATE
#开始备份,此处采用exp方式导出,根据实际情况可选用expdb数据方式导出
echo 'Oracle backup...'$DATE

#导出方式有exp 和 expdp两种,这里使用的是expdp,这个优点是执行快
#   qxt_user/123456789  这是数据库的用户名和密码
#   directory 文件夹,其值MY_DIR对应数据库中select * from dba_directories; 查询结果里的directory_name。
#   dumpfile 导出的dmp文件名
#   logfile 导出输出的日志文件名
#   tables 导出的数据库表
expdp 'qxt_user/123456789' directory=MY_DIR dumpfile='t_mt_'$DATE'_dp.dmp' logfile='t_mt_'$DATE'_dp.log' tables=qxt_user.t_mt_$DATE
#压缩文件
zip -rj $DIR'/t_mt_'$DATE'_dp.zip' $DIR'/t_mt_'$DATE'_dp.dmp'
#删除dmp文件
rm -f '/user/mt_data/t_mt_'$DATE'_dp.dmp'

# 验证导出的数据是否与实际数据一致
sqlplus qxt_user/123456789 <<EOF! >>$DIR'/t_mt_'$DATE'_dp.log'
select count(1) from t_mt_$DATE;
exit
EOF!
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!