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!
6.注意
执行expdp和impdp命令需要拥有exp_full_database和imp_full_database权限,授权语句如下:
grant exp_full_database,imp_full_database to qxt_user;
qxt_user这里表示用户