Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91384
  • 博文数量: 20
  • 博客积分: 1450
  • 博客等级: 上尉
  • 技术积分: 270
  • 用 户 组: 普通用户
  • 注册时间: 2004-10-14 10:43
文章存档

2010年(20)

我的朋友

分类: Oracle

2010-04-16 15:39:05

Oracle逻辑备份一周循环存储方法

方正 李守亮
早期版本2003年1月
最后版本2007-8-20

一般用户是oracle的单点工作环境,也没有专业的备份工具,在数据量不太大的情况下,还希望实现定时的数据备份。我们可以采用归档模式下的逻辑备份exp或数据泵expdp的方式。同时,为避免存储空间增长过快,我们可以通过脚本来实现定时清理过期数据。以下脚本在Windows2000、RedHat Linux、Solaris下试验通过,并已有多家单位在用。


目录
一、Windows下一周循环备份的写法
二、linux下循环备份脚本的写法
三、其他Unix下的备份脚本写法
四、附加,数据泵备份示例


正文
一、Windows下一周循环备份的写法:
1、脚本内容
C:\ora_autobak.cmd
--------------------------------------------------
@echo off
set bakpath=G:\mptest-bak
if not exist %bakpath%   md %bakpath%

echo ========开始备份========>>%bakpath%\bakup.log
echo %date:~0,10% %time% >>%bakpath%\bakup.log

move /Y %bakpath%\testuser06.dmp %bakpath%\testuser07.dmp >>%bakpath%\bakup.log
move /Y %bakpath%\testuser05.dmp %bakpath%\testuser06.dmp >>%bakpath%\bakup.log
move /Y %bakpath%\testuser04.dmp %bakpath%\testuser05.dmp >>%bakpath%\bakup.log
move /Y %bakpath%\testuser03.dmp %bakpath%\testuser04.dmp >>%bakpath%\bakup.log
move /Y %bakpath%\testuser02.dmp %bakpath%\testuser03.dmp >>%bakpath%\bakup.log
move /Y %bakpath%\testuser01.dmp %bakpath%\testuser02.dmp >>%bakpath%\bakup.log
move /Y %bakpath%\testuser.dmp   %bakpath%\testuser01.dmp >>%bakpath%\bakup.log

move /Y %bakpath%\testuser06.log %bakpath%\testuser07.log >>%bakpath%\bakup.log
move /Y %bakpath%\testuser05.log %bakpath%\testuser06.log >>%bakpath%\bakup.log
move /Y %bakpath%\testuser04.log %bakpath%\testuser05.log >>%bakpath%\bakup.log
move /Y %bakpath%\testuser03.log %bakpath%\testuser04.log >>%bakpath%\bakup.log
move /Y %bakpath%\testuser02.log %bakpath%\testuser03.log >>%bakpath%\bakup.log
move /Y %bakpath%\testuser01.log %bakpath%\testuser02.log >>%bakpath%\bakup.log
move /Y %bakpath%\testuser.log   %bakpath%\testuser01.log >>%bakpath%\bakup.log


expdp directory=expdpdir dumpfile=testuser.dmp logfile=testuser.log job_name=expdp_%date:~0,4%%date:~5,2%%date:~8,2%

echo %date:~0,10% %time% >>%bakpath%\bakup.log
echo ========备份结束========>>%bakpath%\bakup.log
exit

2、windows任务设置,略。


二、linux下循环备份脚本的写法:
1、备份脚本,注释部分可选择采用普通逻辑备份和10g的expdp方式
[root@b2b-db autoback]# cat /opt/data/autoback/ora_autobak.sh
#!/bin/sh
NOW=`/bin/date '+%Y%m%d%H%M%S'`
backup_path1='/opt/data/autoback'

::su - oracle -c "expdp  directory=expdpdir dumpfile=testuser${NOW}.dmp schemas=(testuser,otheruser) logfile=expdp${NOW}.log parallel=2  job_name=expdp_${NOW}"
su - oracle -c "exp  file=testuser${NOW}.dmp schemas=(testuser,otheruser) logfile=expdp${NOW}.log parallel=2  job_name=expdp_${NOW}"

rm -f    ${backup_path1}/testuser`date -d "-7 day" "+%Y%m%d"`*.dmp
rm -f    ${backup_path1}/expdp`date -d "-7 day" "+%Y%m%d"`*.log


2、以 root创建任务
#cat /myjob
0 23 * * 1,2,3,4,5 /opt/data/autoback/ora_autobak.sh


3、创建任务&生效
#crontab /myjob
#crontab -l
#service crond restart

用户、口令、SID、目录等根据实际情况修改。


三、其他Unix下的备份脚本写法:
如Solaris,方法与linux大同小异,区别在于服务生效上
[root@msa30:/]# svcadmin disable  svc:/system/cron:default
[root@msa30:/]# svcadmin enable  svc:/system/cron:default
[root@msa30:/]# svcs |grep cron
online         Mar_29   svc:/system/cron:default

四、附加,数据泵备份示例:
   $sqlplus /nolog
   SQL> conn / as sysdba
   SQL> create directory pump_dir as '/opt/u01/app/oradata/pump_dir';
   SQL> grant read,write on directory pump_dir to system;

   $expdp  directory=pump_dir dumpfile=testuser${NOW}.dmp schemas=(testuser,otheruser) logfile=expdp${NOW}.log parallel=2  job_name=expdp_${NOW}

 

方正 李守亮
早期版本2003年
最后版本2007-8-20

阅读(2974) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~