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命令