windows計劃任務+批次檔實現oracle資料庫的定時備份與恢複

來源:互聯網
上載者:User

標籤:pyc   arc   資料   最優   2.4   exp   bat   media   建立   

1.  備份:

PS:2014-1-15

如果匯出的dmp資料檔案不大的話,就直接每天匯出好了,不要只儲存七天的資料。然後頂起通過winrar對檔案進行打包,我發現dmp檔案的壓縮包還是很高的。

那麼就需要考慮在匯出的dmp檔案末尾加上日期了。bat指令碼裡面有date和time的函數,通過以下函數我們就可以得到想要的日期了。如果要求日期是以"-"結束,需要設定日期的格式為YYYY-M-D,而不是YYYY/M/D才可以。

C:\Users\User>echo %date:~0,10%-%time:~0,2%-%time:~3,2%-%time:~6,2%2014-01-15-15-52-43

得到日期格式以後,我們的匯出指令碼就可以修改為

exp xuwei/[email protected] file=f:\mydata_mytest\oradata_%date:~0,10%-%time:~0,2%-%time:~3,2%-%time:~6,2%.dmp log=f:\mydata_mytest\oradata_%date:~0,10%-%time:~0,2%-%time:~3,2%-%time:~6,2%.log

然後建立計劃任務每天都執行一次即可。

PS:2014-4-3

今天發現以上指令碼不能執行,這是因為%time%有一個問題, 時間中的小時, 不足兩位不會自動補0(系統中不足兩位時, 是補空格的, 所以我們判斷到時空格, 用0來替換就可以了),具體參考:http://blog.csdn.net/bagboy_taobao_com/article/details/7198578 。修改以後的指令碼如下:

@echo offset NLS_LANG= AMERICAN_AMERICA.AL32UTF8set hour=%time:~,2%if "%time:~,1%"==" " set hour=0%time:~1,1%set temp=%date:~0,4%-%date:~5,2%-%date:~8,2%-%hour%-%time:~3,2%-%time:~6,2%exp BAOL4Dev_CGN/[email protected] file=D:\db_backup\daily_backup\oradata_%temp%.dmp log=D:\db_backup\daily_backup\oradata_%temp%.logpause
PS:2014-06-19對於時間格式的判斷

http://www.sql9.com/?id=86

http://bbs.csdn.net/topics/110143577

上面的日期格式還不是最佳化的,因為%date:~0,10%的輸出結果可能是2014/06/19,也有可能是2014-06-19,這取決於系統對於日期格式的設定。所以對於data不能直接取全部欄位,而是要將年月日單獨取出來。

C:\Users\wei.xu>echo %date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%20140619170757
1.1.  建立database_exp.bat批次檔

首先首先建立七天的dmp和log空檔案,然後建立一個用於匯出資料庫的批次檔,這個指令碼能夠備份最近七天的資料庫,database_ext.bat內如如下所示:

del f:\mydata_mytest\oradata7.dmp 
del f:\mydata_mytest\oradata7.log
ren f:\mydata_mytest\oradata6.dmp oradata7.dmp
ren f:\mydata_mytest\oradata5.dmp oradata6.dmp
ren f:\mydata_mytest\oradata4.dmp oradata5.dmp
ren f:\mydata_mytest\oradata3.dmp oradata4.dmp
ren f:\mydata_mytest\oradata2.dmp oradata3.dmp
ren f:\mydata_mytest\oradata.dmp oradata2.dmp
ren f:\mydata_mytest\oradata6.log oradata7.log
ren f:\mydata_mytest\oradata5.log oradata6.log
ren f:\mydata_mytest\oradata4.log oradata5.log
ren f:\mydata_mytest\oradata3.log oradata4.log
ren f:\mydata_mytest\oradata2.log oradata3.log
ren f:\mydata_mytest\oradata.log oradata2.log
exp xuwei/[email protected] file=f:\mydata_mytest\oradata.dmp log=f:\mydata_mytest\oradata.log

(ps:2013-8-8)

 

ren f:\mydata_mytest\oradata6.dmp oradata7.dmp 
ren命令第一個是帶路徑的,第二個參數是不帶路徑的,表示就在第一個檔案的目錄下。

 

(ps:2011-12-29)

database_exp.bat解析:上面的批處理語句其實非常簡單,就是讓七個dmp檔案組成一個長度為7的隊列,然後每次備份資料庫的時候刪除隊列頭部,也就是備份最後的那個oracle7.dmp檔案,這個時候oralce6.dmp成為隊列頭部元素,將oralce6.dmp命名為oracle7.dmp,後面的一次類推。知道最後將oracle.dmp重新命名為oracle2.dmp,然後使用exp命令匯出資料庫檔案,匯出的檔案存放在oracle.dmp檔案中。

今天碰到一個問題,就是有一個text.dmp檔案,我只想匯入這個.dmp檔案中的一個表或者是兩個表,那麼應該如何?。其實imp命令有一系列的參數,我們可以通過tables這個參數來控制需要匯入的資料庫表。匯入一張表的情況,匯入命令如下:

imp username/[email protected] file=f:\test.dmp tables=WORKFLOW ignore=y

如果是匯入兩張或者兩張表以上,那麼就需要通過括弧括起來,匯入命令如下:

imp username/[email protected] file=f:\test.dmp tables=(EMP,WORKFLOW) ignore=y
1.2.  執行database_ext.bat批次檔

可以雙擊這個批次檔,也可以將這個批次檔拖到cmd中執行。

2.  恢複2.1.  建立droptables.sql指令碼

這個sql指令碼是用來執行資料庫預存程序的。droptable.sql的內容如下所示:

execute droptables();
exit
2.2.  建立預存程序       

之所以要執行這個指令碼,是為了在恢複資料庫之前,首先刪除資料庫中的所有已存在的表。

droptables預存程序用來刪除當前資料庫中的所有表,預存程序內容如下所示:

CREATE OR REPLACE 
procedure droptables is
v_sql varchar2(2000) ;
CURSOR cur is select table_name from user_tables order by table_name;
begin for rows in cur loop v_sql := ‘drop TABLE ‘ || rows.table_name||‘ cascade constraints‘;
dbms_output.put_line(v_sql);
execute immediate v_sql;
end loop;
execute immediate ‘purge recyclebin‘;
end droptables;

可以在Sql Developer中建立預存程序,如所示:

PS-2014-2-25預存程序的執行

在cmd命令視窗下

execute droptables();exit

在sql視窗下

begindroptables();end;
2.3.  建立imp.bat批次檔

imp.bat這個批次檔用於恢複資料,其原理就是將前面備份的dmp資料庫檔案匯入到資料庫中。imp.bat內容如下所示:

sqlplus xuwei/[email protected] @f:\mydata_mytest\droptables.sql
imp xuwei/[email protected] file=f:\mydata_mytest\oradata.dmp full=y ignore=y
2.4.  bat檔案命名的注意點

上述的兩個批次檔分別命名為database_imp.bat和database_exp.bat,如果命名為imp.bat和exp.bat,雙擊這兩個檔案都會出錯,而將他們拖拽到cmd命令中則能夠正常執行。這是因為批次檔的檔案名稱不能是命令的單詞相同,上述imp和exp都是命令的名字,所以不能用來做bat檔案的檔案名稱。

3.  使用Windows工作排程器

在控制台中開啟計劃任務程式,然後按如進行計劃任務配置。

注意點:如果要是windows系統執行計畫任務,那麼必須開啟計劃任務程式的服務,

計劃任務程式所對應的服務叫做TaskSchedule,如所示:

windows計劃任務+批次檔實現oracle資料庫的定時備份與恢複

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.