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

  

posted @ 2022-09-28 10:00  一种风度  阅读(410)  评论(0编辑  收藏  举报