標籤: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資料庫的定時備份與恢複