鸿 网 互 联 www.68idc.cn

linux&windows中exp自动备份教程

来源:互联网 作者:佚名 时间:2013-04-20 14:01
本文章来介绍了关于如何在linux&windows中exp自动备份,有需要学习的同学可以参考一下本文章的做法。

大概思路:
1,分不同的用户进行exp,每个用户一个exp执行文件。
2,保留策略
3,用一个总文件调用(1,2)二个文件。


on linux

/u02/orabak:用于存放DMP文件的目录
/u02/scripts/autoexp:用于存放exp这些sh脚本的目录

记得对目录,文件赋于相应的WRX权限。


autoexp.sh:自动备份的总文件,用crontab里面的sh文件。
exp_plms.sh:每个用户一个sh文件,分用户备份
exp_weishi.sh:每个用户一个sh文件,分用户备份
delete.sh:保留策略,可以保留30天,任意设置
autoexp.log:自动备份,每天按用户写一个日志
autoexp.del.log:保留策略日志,会把删除的文件日志写到这里。


[oracle@SR0002SZ autoexp]$ cat exp_plms.sh
#!/bin/sh


#oracle environment
ORACLE_BASE=/ora01; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=dbstd; export ORACLE_SID
NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';export NLS_DATE_FORMAT
NLS_LANG=American_America.ZHS16GBK;export NLS_LANG
PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH; export PATH


#exp variable
userid=oracle
pwd=iamdba
oraclesid=dbstd
bakpath=/u02/orabak
vtoday=`date +%Y%m%d`


#run exp scripts log
logpath=/u02/scripts/autoexp
logfile=autoexp.log

 


#exp command belong to,this should be changed using oracle user
owner=plms


#exp combination
datatype=full
data_name=${oraclesid}_${owner}_${datatype}_${vtoday}.dmp
log_name=${oraclesid}_${owner}_${datatype}_${vtoday}.log


#exp log
echo -e "n" >>${logpath}/${logfile}
echo "------start@${oraclesid}_${owner}---------" >>${logpath}/${logfile}
echo `date` start exp backup:$bakpath/$data_name >>${logpath}/${logfile}


#exp command
exp $userid/$pwd@$oraclesid file=$bakpath/$data_name wner=$owner direct=y compress=y  rows=n consistent=y buffer=100000000 log=$bakpath/$log_name


#exp log
echo `date` end exp backup:$bakpath/$log_name >>${logpath}/${logfile}
echo "-------end@${oraclesid}_${owner}----------" >>${logpath}/${logfile}

 


[oracle@SR0002SZ autoexp]$ cat exp_weishi.sh
#!/bin/sh


#oracle environment
ORACLE_BASE=/ora01; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=dbstd; export ORACLE_SID
NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';export NLS_DATE_FORMAT
NLS_LANG=American_America.ZHS16GBK;export NLS_LANG
PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH; export PATH


#exp variable
userid=oracle
pwd=iamdba
oraclesid=dbstd
bakpath=/u02/orabak
vtoday=`date +%Y%m%d`


#run exp scripts log
logpath=/u02/scripts/autoexp
logfile=autoexp.log

 


#exp command belong to,this should be changed using oracle user
owner=weishi


#exp combination
datatype=full
data_name=${oraclesid}_${owner}_${datatype}_${vtoday}.dmp
log_name=${oraclesid}_${owner}_${datatype}_${vtoday}.log


#exp log
echo -e "n" >>${logpath}/${logfile}
echo "------start@${oraclesid}_${owner}---------" >>${logpath}/${logfile}
echo `date` start exp backup:$bakpath/$data_name >>${logpath}/${logfile}


#exp command
exp $userid/$pwd@$oraclesid file=$bakpath/$data_name wner=$owner direct=y compress=y  rows=n consistent=y buffer=100000000 log=$bakpath/$log_name


#exp log
echo `date` end exp backup:$bakpath/$log_name >>${logpath}/${logfile}
echo "-------end@${oraclesid}_${owner}----------" >>${logpath}/${logfile}

 

[oracle@SR0002SZ autoexp]$ cat delete.sh
#!/bin/sh


#set backup path
bakpath=/u02/orabak


#set delete files log path and file log
delpath=/u02/scripts/autoexp
dellog=autoexp.del.log


#run,keep 30 days
find ${bakpath} -mtime +30 -exec ls -la {} ; >>${delpath}/${dellog}
find ${bakpath} -mtime +30 -exec rm {} ; >>${delpath}/${dellog}


[oracle@SR0002SZ autoexp]$ cat autoexp.sh
#!/bin/sh


#set exp command path
scriptspath=/u02/scripts/autoexp


#oracle exp backup
sh ${scriptspath}/exp_weishi.sh
sh ${scriptspath}/exp_plms.sh


#backup retention policy
sh ${scriptspath}/delete.sh

最后,就是让autoexp.sh每天执行一次。使用crontab。
基本格式 :
*  *  *  *  * user command
分 时 日 月 周 用户 命令

su - root
vi /etc/crontab,添加
00 23 * * * oracle /u02/scripts/autoexp/autoexp.sh >/u02/scripts/autoexp/autoexp.cron.log 2>&1
每天晚上23:00执行。

on windows

思路一样,只是windows的command命令有点不一样。
1,exp_plms.bat

::设置oracle环境变量
set userid=oracle
set pwd=iamdba
set raclesid=dbstd
set bakpath=D:orabak
::设置导出用户
set wner=plms
:: 设置时间格式vtoday=YYYYMMDDhh24mi
set vtoday=%DATE:~0,4%%date:~5,2%%date:~8,2%
::%time:~0,2%%time:~3,2%
::
::
:: 导出用户所有数据
set datatype=full
exp %userid%/%pwd%@%oraclesid% file=%bakpath%%oraclesid%_%owner%_%datatype%_%vtoday%.dmp wner=%owner% direct=y compress=y  rows=y consistent=y buffer=100000000 log=%bakpath%%oraclesid%_%owner%_%datatype%_%vtoday%.log
::

2,delete.bat

::删除备份前N天的数据
forfiles /p "D:orabak" /s /m *.* /d -7 /c "cmd /c del @path"

3.autoexp.bat
::执行exp备份

set scriptspath=D:scriptsautoexp
call %scriptspath%exp_plms.bat
call %scriptspath%delete.bat

最后,新建windows下面的执行计划,第天执行一次。

网友评论
<