分类: 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