linux Oracle 定时备份 和手动还原
1. root用户登录oracle服务器
#新建Oracle数据库备份存放目录
mkdir –p /home/oracle/backup
#设置目录权限为oinstall用户组的oracle用户
chown -r oracle:oinstall /home/oracle/backup
2. 创建目录对象
因为使用expdp命令需要使用到目录对象(directory),所以首先需要创建目录对象,并赋予某个用户对象的操作权限。
操作步骤如下:
#新建Oracle数据库备份存放目录
su - oracle
#切换到SQLPLUS环境
sqlplus / as sysdba
执行以下命令:
#制定EXPDP输出目录
create directory expdp_bak_dir as '/home/oracle/backup';
#授予system权限
grant create any directory to system;
# 退出sqlplus
exit
3. 编辑自动备份脚本
#新建脚本文件 内容在下面
mkdir shell vi /home/oracle/backup/shell/BackUpByUser.sh vi /home/oracle/backup/shell/ImportByUser.sh vi /home/oracle/backup/shell/AutoBackUp.sh
#BackupByUser.sh 脚本文件内输入以下代码
#!/bin/sh
export ORACLE_BASE=/home/oracle/app/oracle
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID="orcl"
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
base=$1
basePath=/home/oracle/backup
rq=$(date +%y%m%d)
filePathDmp=$basePath/backups/$rq/$rq-dmp
filePathLog=$basePath/backups/$rq/$rq-log
#不存在则创建文件夹
`mkdir -p $filePathDmp`
`mkdir -p $filePathLog`
echo $(date) '正在备份:' $base
expdp \'sys/"sys@orcl" as sysdba\' dumpfile=$base-$rq.dmp logfile=log-$base-$rq.log directory=expdp_bak_dir schemas=$base compression=all
echo $(date) '备份完成:' $base
echo $(date) '移动到指定文件夹服务器备份'
mv $basePath/$base-$rq.dmp $filePathDmp
mv $basePath/log-$base-$rq.log $filePathLog
echo $(date) '移动到到指定文件夹'${filePath}
day=7
last_date=`date -d""$day" day ago" +%y%m%d`;
echo $(date) "自动清理7天过期文件:" $basePath/backups/$last_date
rm -rf $basePath/backups/$last_date
echo $(date) "清理完成"
#ImportByUser.sh 脚本文件内输入以下代码
#!/bin/sh export ORACLE_BASE=/home/oracle/app/oracle export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1 export ORACLE_SID="orcl" export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin export DATA_DIR=/home/oracle/backup base=$1
file=$2 impdp $base/$base@orcl directory=expdp_bak_dir FILE=$file full=y table_exists_action=replace
#AutoBackUp.sh 脚本文件内输入以下代码
#!/bin/sh # 执行顺序 index=1 # 注意: 空格区分 backList="user1 user2 " echo "即将进行自动数据库备份" for i in ${backList} do echo ${index}:${i} let index++ done # 开始执行脚本 for i in ${backList} do echo "开始备份数据库"${i} sh ./BackupByUser.sh ${i} done
4. 设置系统自动定时执行备份脚本
#crontab安装
su - root // 切换用户
yum install vixie-cron
yum install crontabs
# 启动服务
/sbin/service crond start //启动服务 service crond status // 查看状态
# 编写定时任务
vi /etc/crontab // 进入编辑页面,填入以下
00 23 * * * root /home/oracle/backup/shell/AutoBackUp.sh
esc+:wq 退出保存
# 查看任务
crontab -l
# 可能会查不到,保证/etc/crontab 中存在即可。最好做一次脚本的定时测试
service crond restart
# 还原脚本使用
# 注意: 由于备份文件分文件夹放了,所以还原文件时,要移动到expdp_bak_dir的路径
sh /home/oracle/backup/shell/ImportByUser.sh ${1} ${2} ${1} 是oracle的用户铭 ${2} 是要还原的dmp文件 例: sh /home/oracle/backup/shell/ImportByUser.sh TEST_BAT TEST_BAT220928.dmp