exp自動備份on linux and on windows

arthurtangel發表於2011-10-12
大概思路:
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:\scripts\autoexp
call %scriptspath%\exp_plms.bat
call %scriptspath%\delete.bat

最後,新建windows下面的執行計劃,第天執行一次。





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11990065/viewspace-709027/,如需轉載,請註明出處,否則將追究法律責任。

相關文章