linux下进行Oracle自动备份

自动备份数据库到Windows

本例中IP地址如下

应用服务器:192.168.7.246(Windows Server 2012)

数据库服务器:192.168.7.243(Centos7)

一、expdp导出

1、Centos7挂载Windows目录

(1)system用户登录plsql

create directory backdir as '/home/backup';

--修改目录 create or replace directory backdir as '/home/backup/';

--删除目录 drop directory backdir;

 

(2)查看管理员目录,检查是否存在

select * from dba_directories;

 

 

(3)用管理员给导出用户赋予在该目录的操作权限(以sourcedata为例)

grant read,write on directory backdir to sourcedata;

 

(4)应用服务器上建立备份目录

 

 

 

 

(5)共享此目录

 

 

 

 

 

(6)root用户登录数据库服务器创建备份目录

# mkdir /home/backup

 

 

 

 

(7)数据库服务器挂载应用服务器备份目录

查看oracle的uid和gid

# id oracle

 

 

 

 

挂载目录

# mount -t cifs -o username=administrator,password=tP123456@,uid=1001,gid=1002 //192.168.7.246/backup  /home/backup

 

 

 

 

(8)查询是否挂载成功

 

 

 

 

(9)设置开机自动挂载

# vim /etc/fatab

加入以下内容:

//192.168.7.246/backup  /home/backup cifs username=administrator,password=tP123456@,uid=1001,gid=1002 0 0

 

(10)查询目录所属用户(此时backup的用户会由root变为oracle)

 

 

 

 

(11)测试数据泵方式备份是否成功

expdp sourcedata/passwd111@192.168.7.243/orcl directory=backdir dumpfile=test.dmp logfile=test.log tables=sourcedata.clinic_visit

 

 

 

 

 

2、编写自动备份脚本

方式一、Centos7执行脚本

(1)编写oracle_bak.sh脚本

# vim /home/backup/oracle_bak.sh

内容如下:

#!/bin/sh

export PATH

export ORACLE_SID=orcl

export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1/

export PATH=$ORACLE_HOME/bin:$PATH

export LANG=C

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

date_now=$(date +%Y%m%d) #获取当前时间

days=7 #设置删除7天前备份文件

bak_dir=/home/backup #备份实际存放路径,backdir 为directory中定义路径

dmpname=tp_data

schname=sourcedata #备份的用户,英文逗号分隔

expdp system/orcl@192.168.7.243/orcl directory=backdir schemas=$schname dumpfile=$dmpname_$date_now.dmp logfile=$dmpname_$date_now.log compression=all #执行备份指定数据库

find $bak_dir -type f -name "*.dmp" -mtime +$days -exec rm -rf {} \;

find $bak_dir -type f -name "*.log" -mtime +$days -exec rm -rf {} \;

 

 

 

(2)授权

# chmod +x /home/backup/oracle_bak.sh

 

 

 

 

 

(3)利用crontab定时执行任务

crontab -e,进入定时任务编辑界面

0 22 * * *  /home/backup/oracle_bak.sh  #每天晚上10点执行

0 22 * * 6  /home/backup/oracle_bak.sh  #每周六晚上10点执行

 

 

查看crontab:crontab -l

编辑crontab:crontab -e

删除crontab:crontab -r

启动:systemctl start crond.service

停止:systemctl stop crond.service

重启:systemctl restart crond.service

 

(4)把crontab设置成开机自启

# vim /etc/rc.d/rc.local

加入以下内容:

systemctl start crond.service

 

 

 

(5)注意事项

数据同时备份在windows和centos上,要注意两个服务器上备份空间大小,避免空间过小备份失败。

 

 

 

方式二、Windows执行脚本

(1)编写oracle_bak.bat脚本

内容如下:

@echo off

::设置变量

::获取日期

set date_now=%date:~0,4%%date:~5,2%%date:~8,2%

::备份文件路径

set bak_dir=D:\backup

::备份dmp文件名前缀

set dmpname=tp_data_

::要备份的数据库ip

set host=192.168.84.132

::要备份的数据库实例

set dbname=orcl

::要备份的数据库登录名

set user=system

::要备份的数据库登录密码

set passwd=orcl

::备份用户

set schname=sourcedata

::备份文件保存天数

set days=7

expdp %user%/%passwd%@%host%/%dbname% directory=backdir dumpfile=%bak_dir%\%dmpname%%date_now%.dmp logfile=%bak_dir%\%dmpname%%date_now%.log schemas=%schname% compression=all

::删除7天前的备份

forfiles /p "%bak_dir%" /s /m *.log /d -%days% /c "cmd /c del @path"

forfiles /p "%bak_dir%" /s /m *.dmp /d -%days% /c "cmd /c del @path"

@echo on

exit

 

 

 

(2)将oracle_bak.bat添加到winodws计划任务

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二、impdp

以还原sourcedata.clinic_visit为例

 

impdp system/orcl@192.168.7.243/orcl directory=backdir dumpfile=test.dmp logfile=impdp_test.log tables=sourcedata.clinic_visit

 

三、exp导出

只需修改导出方式为exp,具体参考exp命令

 

四、exp导出

只需修改导入方式为imp,具体参考imp命令

 

posted @ 2022-02-21 12:22  持久  阅读(2130)  评论(0编辑  收藏  举报