1. 程式人生 > 其它 >oracle自動備份指令碼

oracle自動備份指令碼

#!/bin/bash


#獲取當前日期
date_now=$(date +%Y%m%d);
#資料庫使用者
db_user="ynsps";
#資料庫密碼
db_password="ynsps_2021";
#ip地址
ip="10.180.39.83"
#oracle虛擬目錄名
oracle_directory="DATA_PUMP_DIR";
#資料庫伺服器,需要在本地客戶端tnsnames中定義好
db_server="orcl";
#檔名
file_name="Aj"
#本地客戶端執行程式目錄
oracle_bin_dir="/home/oracle/xx/bin";
#本地備份目錄,存放dump檔案與臨時壓縮檔案
local_backup_dir="/opt/oracle/app/admin/orcl/dpdump";
#遠端備份目錄,對應備份伺服器存放位置,需要提前掛載
remote_backup_dir="/xx/xx/oracle_backup";


#備份當天的資料庫
echo "-- $(date +'%Y-%m-%d %H:%M:%S') 自動備份資料庫並壓縮開始----------------------------------------------";
echo "-- $(date +'%Y-%m-%d %H:%M:%S') 資料庫備份開始--------------------------------------------------------";
echo "su oracle -lc \"${oracle_bin_dir}/expdp ${db_user}/${db_password}@${db_server} directory=${oracle_directory} full=y dumpfile=${db_server}_${date_now}.dmp logfile=${db_server}_${date_now}.log\"";
su - oracle -lc "${oracle_bin_dir}/expdp ${db_user}/${db_password}@${ip}/${db_server} directory=${oracle_directory} full=y dumpfile=${file_name}_${db_server}_${date_now}.dmp logfile=${file_name}_${db_server}_${date_now}.log compression=all";
echo "-- $(date +'%Y-%m-%d %H:%M:%S') 資料庫壓縮開始--------------------------------------------------------";
echo "cd ${local_backup_dir} && tar -zcf ${db_server}_${date_now}.tar.gz ${db_server}_${date_now}.dmp ${db_server}_${date_now}.log";
cd ${local_backup_dir} && tar -zcf ${file_name}_${db_server}_${date_now}.tar.gz ${file_name}_${db_server}_${date_now}.dmp ${file_name}_${db_server}_${date_now}.log;
echo "-- $(date +'%Y-%m-%d %H:%M:%S') 資料庫壓縮結束--------------------------------------------------------";
echo "-- $(date +'%Y-%m-%d %H:%M:%S') 傳輸備份檔案開始--------------------------------------------------------";
# echo "scp ${local_backup_dir}/${db_server}_${date_now}.tar.gz ${backup_user}@${backup_server}:/${remote_backup_dir}";
# scp ${local_backup_dir}/${file_name}_${db_server}_${date_now}.tar.gz ${backup_user}@${backup_server}:/${remote_backup_dir};
/home/oracle/auto_scp.sh >> /home/oracle/auto_scp.log
echo "-- $(date +'%Y-%m-%d %H:%M:%S') 傳輸備份檔案結束--------------------------------------------------------";
echo "-- $(date +'%Y-%m-%d %H:%M:%S') 刪除當前備份原始檔案開始----------------------------------------------";
echo "rm -rf ${local_backup_dir}/${db_server}_${date_now}.dmp ${local_backup_dir}/${db_server}_${date_now}.log"
rm -rf ${local_backup_dir}/${file_name}_${db_server}_${date_now}.dmp ${local_backup_dir}/${file_name}_${db_server}_${date_now}.log;
echo "-- $(date +'%Y-%m-%d %H:%M:%S') 刪除當前備份原始檔案結束 ----------------------------------------------";
echo "-- $(date +'%Y-%m-%d %H:%M:%S') 刪除一個月前備份壓縮檔案開始----------------------------------------------";
# echo "rm -rf ${local_backup_dir}/${db_server}_${date_now}.tar.gz"
# rm -rf ${local_backup_dir}/${db_server}_${date_now}.tar.gz;
find ${local_backup_dir} -mtime +30 -type f -name "*.*" -exec rm -rvf {} \;
echo "-- $(date +'%Y-%m-%d %H:%M:%S') 刪除一個月前備份壓縮檔案結束----------------------------------------------";
echo "-- $(date +'%Y-%m-%d %H:%M:%S') 自動備份資料庫並壓縮結束----------------------------------------------";

 

 

chmod +x /shell/backup_oracle.sh
crontab -e
0 1 * * * nohup /usr/bin/sh /shell/backup_oracle.sh >> /shell/backup_oracle.log &

 

 

vim auto_scp.sh

#! /usr/bin/expect
set timeout 5
set date_now $(date +%Y%m%d);
# set ip 10.180.39.8[lindex $argv 0]
set password "app@2022"
spawn scp /opt/oracle/app/admin/orcl/dpdump/Aj_orcl_$date_now.tar.gz [email protected]:/sdb5/dmpbackup83/
#expect "yes/no"
#send "yes\n"
expect "password:"
send "$password\n"
interact