您好,登錄后才能下訂單哦!
花了一天多時間,搗鼓出一個SQL 腳本,用于執(zhí)行ORACLE自動冷備份。記錄如下:
set echo off --關(guān)閉命令回顯,但會顯示執(zhí)行后的命令。 set serveroutput on --返回結(jié)果,如果關(guān)閉,將無法把結(jié)果傳到下一個文件。 set escape on --打開轉(zhuǎn)義符功能,否則遇到/無法進(jìn)行。 set heading off --關(guān)閉結(jié)果標(biāo)題行顯示 set line 300 --設(shè)置返回結(jié)果顯示寬度,避免遇到結(jié)果跨行后sed命令取結(jié)果不完整。 ho mkdir $ORACLE_HOME/`date +%Y_%m_%d` --創(chuàng)建存放備份文件的目錄,以當(dāng)天日期命名。要保證與下面SQL中目錄一致。 spool /tmp/bak1.sql declare --聲明一個變量。用于接收當(dāng)前日期的值。 v_time varchar2(30); begin select to_char(sysdate,'yyyy_mm_dd') into v_time --獲取當(dāng)天日期。 from dual; dbms_output.put_line('select ''ho cp ''\|\|name\|\|'' $ORACLE_HOME\/'||v_time||''' from v$controlfile;'); dbms_output.put_line('select ''ho cp ''\|\|name\|\|'' $ORACLE_HOME\/'||v_time||''' from v$datafile;'); dbms_output.put_line('select ''ho cp ''\|\|member\|\|'' $ORACLE_HOME\/'||v_time||''' from v$logfile;'); dbms_output.put_line('select ''ho cp ''\|\|name\|\|'' $ORACLE_HOME\/'||v_time||''' from v$tempfile;'); dbms_output.put_line('create pfile=''$ORACLE_HOME\/'||v_time||'\/init$ORACLE_SID.ora'' from spfile;'); dbms_output.put_line('ho cp $ORACLE_HOME\/dbs\/orapw$ORACLE_SID $ORACLE_HOME\/'||v_time); end; / spool off --以上通過獲取日期后,得到帶有日期值的完整的SQL原始語句和一些結(jié)果說明語句。 --以下獲取純凈的用來執(zhí)行的原始SQL語句。 ho sed -n '/select/p' /tmp/bak1.sql >/tmp/bak2.sql ho sed -n '/^create/p' /tmp/bak1.sql >>/tmp/bak2.sql ho sed -n '/^ho cp/p;' /tmp/bak1.sql >>/tmp/bak2.sql --以下用來將原始SQL語句執(zhí)行得到SQLPLUS語句,并備份了參數(shù)文件和密碼文件,以及結(jié)果說明語句。 spool /tmp/bak3.sql start /tmp/bak2.sql spool off ho sed -n '/^ho cp/p' /tmp/bak3.sql >$ORACLE_HOME/back.sql --過濾掉無用的結(jié)果說明語句。獲取最終有用的SQLPLUS命令。 shutdown immediate --關(guān)閉數(shù)據(jù)庫進(jìn)行冷備。 start $ORACLE_HOME/back.sql startup ho rm /tmp/bak*.sql $ORACLE_HOME/back.sql --刪除臨時生成的執(zhí)行腳本。
說明:1.SQL下獲取當(dāng)前日期值,并應(yīng)用到SQLPLUS命令的目錄中是一個難點,折騰了一天。
2.sed命令可以用sed -i來簡化生成的過渡性sql腳本。
3.應(yīng)該可以在SQLPLUS下定義變量并賦予當(dāng)天日期值,再運用到其他備份命令中,暫時沒搞成功,回頭有時間再研究。
4.這是為了學(xué)習(xí)而搞得一個SQL腳本,或許用系統(tǒng)shell腳本來做,會更簡潔有效。下一步再做一個系統(tǒng)shell腳本。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。