oracle expdp 整库自动备份上传到 ftp
root用户操作
创建备份文件夹
/home/data/backup/full/
新建脚本 auto_backup_oracle.sh
#!/bin/bash
set -euxo pipefail
. /etc/profile
. ~/.bash_profile
backupdir=/home/data/backup/full/
backuplog=/home/data/backup/backup.log
backup_filename=`date +%Y%m%d%H%M%S`
start_time=`date +"%Y-%m-%d %H-%M-%S"`
dumpfile=$backup_filename-full.dump
gz_dumpfile=$backup_filename-full.tar.gz
ftpUsername=ftp账号
ftpPassword=ftp密码
##ftp目录手动创建
ftpResPath=ftp地址/archives/$gz_dumpfile
cd $backupdir
echo '1. full backup...' >> $backuplog
expdp 账号/密码@实例 数据库信息 directory=fulldumpdir dumpfile=$dumpfile full=y >> $backuplog
echo '2. zip...' >> $backuplog
/usr/bin/tar -zcvf $gz_dumpfile $dumpfile
echo '3. backup to remote...' >> $backuplog
/usr/bin/curl -u $ftpUsername:$ftpPassword -T $gz_dumpfile ftp://$ftpResPath
echo '4. clean 7 days ago backup' >> $backuplog
/bin/find ./ -mtime +7 -name "*.dump" -exec rm -rf {} \;
/bin/find ./ -mtime +7 -name "*.zip" -exec rm -rf {} \;
end_time=`date +"%Y-%m-%d %H-%M-%S"`
echo Start: $start_time End: $end_time $gz_dumpfile >> $backuplog
echo '5. truncate tables' >> $backuplog
sqlplus -S 账号/密码 << EOF
select 1 from dual;
exit
EOF
echo '6. truncate table success' >> $backuplog
目录权限
chown -R oracle =/home/data/backup/ chmod -R 775 /home/data/backup/
查询备份路径 添加自定义备份路径
切换oracle用户操作
su - oracle
sqlplus 登录
sqlplus / as sysdba
sqlplus 执行
create directory dumpdir as '/home/data/backup/full/'
添加定时任务 每三天执行一次
执行
crontab -e
追加 每周 6 晚上 22 点执行一次
0 22 * * 6 /bin/bash -x /home/data/backup/auto_backup_oracle.sh > /home/data/backup/backup_execute.log 2>&1
注意修改zip,curl 等软件路径 zip压缩上限4GB,可以使用tar压缩
ftp 目录 需要存在
压缩方法
- ALL :对导出的元数据和表数据都进行压缩,得到的导出文件是最小的,耗时也是最长的。
- DATA_ONLY :仅对表数据进行压缩,对于大数据量的导出效果明显,会比 METADATA_ONLY 方式得到更小的压缩文件。
- METADATA_ONLY :仅对元数据进行压缩,而不会对表数据进行压缩,这种压缩执行后效果一般不是很明显,不过速度比较快。
- NONE :不进行任何的压缩,导出后的文件也是最大的。
- DEFAULT :默认方式,即不指定 COMPRESSION 参数,会采用默认的压缩方式 METADATA_ONLY。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于