如何理解數(shù)據(jù)泵與rman腳本,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
為冊(cè)亨等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及冊(cè)亨網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、冊(cè)亨網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!腳本主要邏輯:全庫備份讀取到的實(shí)例的數(shù)據(jù)庫,連同附屬功能性文件(spfile,controlfile控制文件,listener監(jiān)聽文件,密碼文件orapw[instance_name])壓縮后一并發(fā)送到遠(yuǎn)程服務(wù)器上。
(PS:腳本正文中以#開頭一行為注釋,可直接拷貝以下代碼使用,不影響運(yùn)行)
一.首先是數(shù)據(jù)泵expdp/impdp全庫備份的:
#!/bin/bash
#backup oracle instances' full databases with datapump(expdp)
#oracleDB_fullbackup_expdp.sh
#DATA_PUMP_DIR=/opt/ora11g/admin/${instance_name}/dpdump/
#created by dc at 2015-12-08
source /home/oracle/.bash_profile
#讀取用戶oracle的環(huán)境變量,以便直接讀取使用該文件內(nèi)容所定義的有關(guān)變量
ORACLE_BIN_HOME=${ORACLE_HOME}/bin/
BACKUPTOOL_HOME=${ORACLE_BASE}/dba/OracleTools/
BACKUP_HOME=${BACKUPTOOL_HOME}DBbackup/
#定義相關(guān)變量指向工作目錄,ORACLE_BIN_HOME是oracle工具(sqlplus,rman,dbca,emctl等等)所在目錄;BACKUPTOOL_HOME是本腳本工具相關(guān)文件所在目錄,BACKUP_HOME是備份文件存放目錄,ORACLE_HOME和ORACLE_BASE是從.bash_profile文件中所讀取的環(huán)境變量,分別指oracle的家目錄和oracle的根目錄
echo "full backup job start at $(date +%Y-%m-%d_%T)" >> ${BACKUPTOOL_HOME}fullbackup.result
#在本地統(tǒng)計(jì)記錄以下備份工作開始時(shí)間到文件fullbackup.result,幫助確定定時(shí)任務(wù)所需時(shí)間
for instance_name in `cat ${BACKUPTOOL_HOME}instances_all`
#for循環(huán)讀取所有記錄在instances_all文件里的實(shí)例名進(jìn)行以下操作
do
DATA_PUMP_DIR=${ORACLE_BASE}'/admin/'${instance_name}'/dpdump/'
#定義變量DATA_PUMP_DIR存放導(dǎo)出文件路徑
expdp system/password@${instance_name} DIRECTORY=DATA_PUMP_DIR DUMPFILE=full_${instance_name}_$(date +%Y-%m-%d)_systemExpdp.dmp LOG=full_${instance_name}_$(date +%Y-%m-%d)_systemExpdp.log FULL=y;
#使用system賬號(hào)全庫導(dǎo)出該實(shí)例的數(shù)據(jù),使用的導(dǎo)出目錄為DATA_PUMP_DIR(可到后臺(tái)sqlplus環(huán)境下查詢具體對(duì)應(yīng)的目錄,注意此處該系統(tǒng)目錄要真實(shí)存在),導(dǎo)出文件命名為選項(xiàng)”DUMPFILE=“之后名稱所定義,同理導(dǎo)出過程記錄日志在選項(xiàng)”LOG=“所定義,”FULL=y“意為全庫導(dǎo)出。注意此處@${instance_name}指的是當(dāng)前實(shí)例的tnsname即實(shí)例解析名,具體要查看$ORACLE_HOME/network/admin/tnsname.ora下的設(shè)置
mv ${DATA_PUMP_DIR}'full_'${instance_name}*.dmp ${BACKUP_HOME}'tarfileDIR/'${instance_name}'/datafile/'
mv ${DATA_PUMP_DIR}'full_'${instance_name}*.log ${BACKUP_HOME}'tarfileDIR/'${instance_name}'/datafile/'
#轉(zhuǎn)移上一步導(dǎo)出之后所得數(shù)據(jù)文件和日志文件到相應(yīng)實(shí)例分類存放目錄
cp ${ORACLE_HOME}'/dbs/orapw'${instance_name} ${BACKUP_HOME}'tarfileDIR/'${instance_name}'/passwdfile/'
cp ${ORACLE_HOME}/network/admin/{listener.ora,tnsnames.ora,sqlnet.ora} ${BACKUP_HOME}'tarfileDIR/'${instance_name}/listenerfile/
#拷貝數(shù)據(jù)庫用戶密碼存放文件和監(jiān)聽相關(guān)文件到分類目錄
done
cd ${BACKUP_HOME}
tar -zcpf full_$(date +%Y-%m-%d)_systemExpdp.tar.gz tarfileDIR
#所有實(shí)例導(dǎo)出完畢后壓縮打包
rm -rf ${BACKUP_HOME}tarfileDIR
#刪除已被打包的原文件以備下次備份使用
for instance_name in `cat ${BACKUPTOOL_HOME}instances_all`
do
mkdir -p ${BACKUP_HOME}tarfileDIR/${instance_name}/{datafile,listenerfile,passwdfile}
done
#重新建立所有實(shí)例存放數(shù)據(jù)目錄,以備下次使用
/usr/bin/expect << EOF
spawn bash -c "scp -P77 ${BACKUP_HOME}full_*_systemExpdp.tar.gz root@172.16.3.73:/opt/oracle72fullbackup/"
expect "password:"
send "@7043005ec611857\r"
set timeout 10800
expect eof
EOF
#插入使用expect腳本自動(dòng)完成交互操作把數(shù)據(jù)庫備份所得壓縮包發(fā)送到遠(yuǎn)程服務(wù)器172.16.3.73的系統(tǒng)目錄/opt/oracle72fullbackup/下,定義scp發(fā)送超時(shí)時(shí)間為10800秒即三個(gè)小時(shí),超時(shí)自動(dòng)終止,該時(shí)間可以結(jié)合腳本開頭和結(jié)尾所加時(shí)間統(tǒng)計(jì)功能確定
/usr/bin/expect << EOF
spawn bash -c "ssh -p77 root@172.16.3.73"
expect "password:"
send "@7043005ec611857\r"
expect "]#"
send "chown -R oracle:oinstall /opt/oracle72fullbackup\r"
expect "]#"
send "exit\r"
expect eof
EOF
#繼續(xù)使用expect腳本更改遠(yuǎn)程服務(wù)器上數(shù)據(jù)備份目錄的權(quán)限所屬為oracle:oinstall,方便管理,由于上一步中scp使用的用戶是root故所發(fā)送文件權(quán)限也會(huì)被更改成root:root
rm -f ${BACKUP_HOME}full_*_systemExpdp.tar.gz
#導(dǎo)出數(shù)據(jù)壓縮包轉(zhuǎn)移完畢后刪除原文件,節(jié)省空間
echo "tlm,txmy's daily full backup job is done at $(date +%Y-%m-%d_%T)" >> ${BACKUPTOOL_HOME}dailyfullbackup.result
#寫入日志,在本地記錄執(zhí)行腳本結(jié)束時(shí)間
二.接著是RMAN全庫備份腳本:
#!/bin/bash
#full backup oracle instances' databases with RMAN
#oracleDB_fullbackup_rman.sh
#recovery directory is "/opt/ora11g/dba/OracleTools/DBbackup/restoreDIR_daily/" ,it concerns about your backup level,put the DB backup tar file into the destination server's same directory then extracts it when you need to recover the database
#created by dc at 2015-12-08
# 腳本解釋器/bin/bash聲明和其他額外腳本說明補(bǔ)充,注意此處數(shù)據(jù)恢復(fù)路徑是在/opt/ora11g/dba/OracleTools/DBbackup/restoreDIR_daily目錄下的對(duì)應(yīng)文件夾,下文有說明,由于是使用RMAN進(jìn)行導(dǎo)入導(dǎo)出,所以導(dǎo)入導(dǎo)出目錄請(qǐng)盡量保持一致,具體可參考我之前的文章:利用rman針對(duì)同平臺(tái)下oracle的實(shí)例進(jìn)行異機(jī)遷移。
source /home/oracle/.bash_profile
#導(dǎo)入/home/oracle/.bash_profile文件里的環(huán)境變量
ORACLE_BIN_HOME=${ORACLE_HOME}/bin/
BACKUPTOOL_HOME=${ORACLE_BASE}/dba/OracleTools/
BACKUP_HOME=${BACKUPTOOL_HOME}DBbackup/
#定義oracle自帶工具所在目錄變量$ORACLE_BIN_HOME,備份腳本工具目錄$BACKUPTOOL_HOME和備份導(dǎo)出文件存放目錄$BACKUP_HOME
echo "tlm,txmy's daily full backup job start at $(date +%Y-%m-%d_%T)" >> ${BACKUPTOOL_HOME}dailyfullbackup.result
#記錄以下腳本操作開始時(shí)間到dailyfullbackup.result
for instance_name in `cat ${BACKUPTOOL_HOME}instances_daily`
do
export ORACLE_SID=$instance_name
#使用for循環(huán)依次抽出記錄在instances_daily文件中需要操作的實(shí)例名稱并導(dǎo)入環(huán)境變量
${ORACLE_BIN_HOME}'rman' target / <<EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup full tag 'dbfull' format '${BACKUP_HOME}restoreDIR_daily/fullbackup/datafile/dbfull%u_%s_%p' database plus archivelog delete all input;
backup current controlfile format '${BACKUP_HOME}restoreDIR_daily/fullbackup/controlfile/control.bak';
backup spfile format '${BACKUP_HOME}restoreDIR_daily/fullbackup/spfile/spfile.bak';
release channel c1;
release channel c2;
release channel c3;
}
quit;
EOF
#RMAN全庫備份段,datafile目錄存放數(shù)據(jù)導(dǎo)出文件,controlfile目錄存放控制文件,相應(yīng)地spfile目錄存放spfile,等到還原時(shí)也創(chuàng)建相同目錄擺放好各類數(shù)據(jù)文件以備恢復(fù)
cp ${ORACLE_HOME}/dbs/orapw${instance_name} ${BACKUP_HOME}restoreDIR_daily/fullbackup/passwdfile/
#拷貝當(dāng)前實(shí)例的的密碼文件到passwdfile目錄下
cp ${ORACLE_HOME}/network/admin/{listener.ora,tnsnames.ora,sqlnet.ora} ${BACKUP_HOME}restoreDIR_daily/fullbackup/listenerfile/
#拷貝監(jiān)聽相關(guān)文件到listenerfile目錄下
if [ ! -d "${BACKUP_HOME}tarfileDIR_daily/full/$instance_name" ];then
mkdir -p ${BACKUP_HOME}tarfileDIR_daily/full/$instance_name;
fi
#判斷壓縮包存放目錄是否存在,否則創(chuàng)建
tar -zcPpf ${BACKUP_HOME}tarfileDIR_daily/full/${instance_name}/full_${instance_name}_$(date +%Y-%m-%d).tar.gz ${BACKUP_HOME}restoreDIR_daily/fullbackup
#打包當(dāng)前實(shí)例所有備份導(dǎo)出文件,加-p參數(shù)是保持文件原來屬性,而-P參數(shù)是按照第二個(gè)變量中的路徑進(jìn)行壓縮,解包出來之后也得到一個(gè)${BACKUP_HOME}restoreDIR_daily/fullbackup的多重目錄,這個(gè)在解包時(shí)需要注意當(dāng)前目錄,-P的具體效果可以參考幫助文檔
rm -rf ${BACKUP_HOME}restoreDIR_daily/fullbackup/*
#打包完畢后刪除當(dāng)前導(dǎo)出文件
mkdir -p ${BACKUP_HOME}restoreDIR_daily/fullbackup/{controlfile,datafile,passwdfile,spfile,listenerfile}
#由于上一步操作直接刪除整個(gè)目錄,所以重新創(chuàng)建各層級(jí)分類目錄以備下次循環(huán)使用
done
echo "The DB restore directory is ${BACKUP_HOME}restoreDIR_daily/fullbackup/" >> ${BACKUP_HOME}tarfileDIR_daily/full/readme.txt
#記下rman所使用的還原路徑到幫助文檔readme.txt
echo "The DB base directory is ${ORACLE_BASE}" >> ${BACKUP_HOME}tarfileDIR_daily/full/readme.txt
#記下源數(shù)據(jù)庫的根目錄到幫助文檔內(nèi)容
echo "Please extract the tar file with option -P , like tar -zxPf xxx.tar.gz" >> ${BACKUP_HOME}tarfileDIR_daily/full/readme.txt
#記錄解壓時(shí)注意使用-P參數(shù)到幫助文檔內(nèi)容
tar -zcPpf ${BACKUP_HOME}tarfileDIR_daily/full_all_$(date +%Y-%m-%d).tar.gz ${BACKUP_HOME}tarfileDIR_daily/full
#打包所有實(shí)例所導(dǎo)出數(shù)據(jù)的壓縮包,稍后一并發(fā)送到存放目的地
rm -rf ${BACKUP_HOME}tarfileDIR_daily/full
#刪除被打包文件節(jié)省空間
/usr/bin/expect << EOF
spawn bash -c "scp -P77 ${BACKUP_HOME}tarfileDIR_daily/full_*.tar.gz root@172.16.3.73:/opt/oracle72fullbackup/tlmtxmy_daily/"
expect "password:"
send "@7043005ec611857\r"
expect "]$"
set timeout 10800
expect eof
EOF
#使用expect交互腳本發(fā)送上一步所打包的總壓縮包到172.16.3.73服務(wù)器上的/opt/oracle72fullbackup/tlmtxmy_daily目錄下,此處密碼為明文,超時(shí)時(shí)間為10800秒即3小時(shí),這個(gè)值需要根據(jù)實(shí)際網(wǎng)絡(luò)帶寬情況和文件壓縮包大小作適當(dāng)調(diào)整,單位為秒s
/usr/bin/expect << EOF
spawn bash -c "ssh -p77 root@172.16.3.73"
expect "password:"
send "@7043005ec611857\r"
expect "]#"
send "chown -R oracle:oinstall /opt/oracle72fullbackup\r"
expect "]#"
send "exit\r"
expect eof
EOF
#同樣地,改變/opt/oracle72fullbackup目錄擁有者為oracle,群組為oinstall
rm -f ${BACKUP_HOME}tarfileDIR_daily/full_*.tar.gz
#文件發(fā)送完畢后刪除總壓縮包,節(jié)省空間
echo "tlm,txmy's daily full backup job is done at $(date +%Y-%m-%d_%T)" >> ${BACKUPTOOL_HOME}dailyfullbackup.result
#在本地的dailyfullbackup.result文件中記錄以上操作的結(jié)束時(shí)間,呼應(yīng)開頭統(tǒng)計(jì)開始時(shí)間
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。
網(wǎng)頁名稱:如何理解數(shù)據(jù)泵與rman腳本-創(chuàng)新互聯(lián)
文章出自:http://jinyejixie.com/article14/pipge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、外貿(mào)建站、網(wǎng)站制作、Google、微信公眾號(hào)、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容