自动备份oracle数据库
windows
制作脚本
新建一个.txt文本文件,将以下指令复制过去并进行修改。完成后保存,并将文本文件的后缀名改为.bat,文件类型将会变成“Windows 批处理文件”。
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
@echo on
@REM 用于oracle数据自动备份
REM oracle开始备份
REM 备份位置
set prefix=D:\bk
set yyyy=%date:~0,4%
set /a last=%yyyy%-1
set lastdel= %prefix%%last%
set mm=%date:~5,2%
set dd=%date:~8,2%
set dest=%prefix%\%yyyy%\%mm%\
set name=%dest%%yyyy%_%mm%_%dd%.dmp
if not exist %dest% md %dest%
REM 删除旧的备份
if exist %lastdel% rmdir /s/q %lastdel%
REM 开始备份
exp account/password@127.0.0.1/ORCL indexes=n statistics=none file=%name%
设置定时任务
-
打开“任务计划程序”窗口。
win + R 输入 taskschd.msc 打开“任务计划程序”
右击“计算机”,点击“管理”进入任务计划程序界面。

Snipaste_20210325_140342.png
- 创建基本任务

Snipaste_20210325_140433.png
填入任务基本信息

Snipaste_20210325_140611.png
选择备份的时间周期

Snipaste_20210325_140628.png
选择备份时间

Snipaste_20210325_140642.png
执行的操作

Snipaste_20210325_140654.png
选择需要执行的脚本

Snipaste_20210325_140720.png
创建完成后,可以在“任务计划程序库”看到该条任务

Snipaste_20210325_140822.png
CentOS
以下是Centos 7下,Oracle 11G备份流程: 首先得用ORACLE帐户建一个文件夹用于存放备份文件(建在那个位置你自己决定) mkdir –p /home/oracle/backup 设置文件夹权限为oinstall用
以下是Centos 7下,Oracle 11G备份流程:
建立存放文件夹
首先得用ORACLE帐户建一个文件夹用于存放备份文件(建在那个位置你自己决定)
- 01
mkdir –p /home/oracle/backup
设置文件夹权限为oinstall用户组的oracle用户
- 01
chown–R oracle:oinstall /home/oracle/backup
创建目录对象,切换到Oracle用户下
- 01
su oracle
进入SQLPLUS环境
- 01
sqlplus / as sysdba
进入环境后,制定EXPDP输出目录
- 01
create directory expdp_bak_dir as ‘/home/oracle/backup’;
授予SYSTEM权限
- 01
grant create any directory to system;
在oracle用户下创建脚本文件,进入home/oracle目录下创建(或者可以选择别的地方创建)
- 01
touch autobackup.sh
编辑文件
- 01
vim autobackup.sh
在autobackup.sh这个文件内输入以下命令(把以下中文注释部分去掉即可)
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
以下这段是路径改成自己的即可
export ORACLE_BASE=/home/oracle
export ORACLE_HOME=/home/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
时间
rq=`date +%Y%m%d`
清除1 month ago指一个月之前的,可以改成自己所需的
cleardate=`date -d "1 month ago" +%Y%m%d`
这个是清除指令
rm -rf /home/oracle/backup/ERP$rq.dmp
导出数据,compression=all为压缩,这里的压缩不是文件压缩,而是数据压缩,也可以去掉
expdp 帐号/密码@库名 dumpfile=ERP$rq.dmp logfile=ERP$rq.log directory=expdp_bak_dir schemas=库名 compression=all
最后按ESC然后:号wq保存退出
建立计划任务
建一个计划任务
- 01
crontab -e
内容为
- 01
30 23 * * * /home/oracle/autobackup.sh
每天23点30分执行这个脚本,具体可以根据个人需求而定
* | * | * | * | * | command |
---|---|---|---|---|---|
取值范围 0 - 59 | 取值范围 0 - 23 | 取值范围 1 - 31 | 取值范围 1 - 12 | 取值范围 0 - 7 | 需要执行的命令 |
分钟 | 小时 | 几号 | 月份 | 星期几 |
编辑好后,按ESC然后:号wq保存,可以按crontab -l查看计划任务
数据恢复
同上,还是进入SQLPLUS环境
然后执行指令
- 01
impdp 用户/密码 directory=expdp_dir dumpfile=备份文件.dmp logfile=ERP.log;