<一>、批處理部分:
01_導出垃圾附件.bat
@echo ********************************************************************************************************** @echo 導出垃圾附件(須知) @echo 1.該批處理是備份垃圾附件,先備份,然后才執行清理。 @echo 2.注意 @echo 輸入盤符參數p_path的值應與批處理腳本的盤符一樣,如輸入E,批處理腳本的盤符也應在E盤,如e:\atm_script\ @echo 盤符:\atm_script\back (存放導出垃圾附件的腳本) @echo 盤符:\atm_script\data (存放導出的垃圾附件及所產生的日志文件) @echo 盤符:\atm_script\delete (存放清理的垃圾附件的腳本) @echo 盤符:\atm_script\01_導出垃圾附件.bat (備份垃圾附件的批處理文件) @echo 盤符:\atm_script\02_清理垃圾附件數據.bat (清理垃圾附件的批處理文件) @echo 盤符:\atm_script\03_恢復垃圾附件.bat (恢復垃圾附件的批處理文件,需要時,才執行此批處理) @echo 3.執行批處理文件時,需要輸入數據庫用戶密碼(如用啟\密碼@SID),才能連接上數據庫 @echo 數據庫連接串舉例:atm01/HondaHsu2011@dw @echo ********************************************************************************************************** @echo off set /p p_user="請輸入數據庫用戶名:" set /p p_password="請輸入數據庫密碼:" set /p p_sid="請輸入數據庫連接串(TNS名):" set /p p_path="請輸入腳本所在的盤符(如e:\atm_script,則輸入e):" exp %p_user%/%p_password%@%p_sid% parfile=%p_path%:\atm_script\back\gd01.txt file=%p_path%:\atm_script\data\top_attachment_comtent_gd0930.dmp log=%p_path%:\atm_script\data\exp_top_att_comtent.log exp %p_user%/%p_password%@%p_sid% parfile=%p_path%:\atm_script\back\gd02.txt file=%p_path%:\atm_script\data\top_attachment_extend_gd0930.dmp log=%p_path%:\atm_script\data\exp_top_att_extend.log exp %p_user%/%p_password%@%p_sid% parfile=%p_path%:\atm_script\back\gd03.txt file=%p_path%:\atm_script\data\top_attachment_obj_rel_gd0930.dmp log=%p_path%:\atm_script\data\exp_top_att_ojb_rel.log exp %p_user%/%p_password%@%p_sid% parfile=%p_path%:\atm_script\back\gd04.txt file=%p_path%:\atm_script\data\top_attachment_pro_rel_gd0930.dmp log=%p_path%:\atm_script\data\exp_top_att_pro_rel.log pause
02_清理垃圾附件數據.bat
@echo ********************************************************************************************************** @echo 清理垃圾附件(須知) @echo 1.必須先執行"01_導出垃圾附件.bat"后,才能執行該清理垃圾附件的批處理 @echo 2.注意 @echo 輸入盤符參數p_path的值應與批處理腳本的盤符一樣,如輸入E,批處理腳本的盤符也應在E盤,如e:\atm_script\ @echo 盤符:\atm_script\back (存放導出垃圾附件的腳本) @echo 盤符:\atm_script\data (存放導出的垃圾附件及所產生的日志文件) @echo 盤符:\atm_script\delete (存放清理的垃圾附件的腳本) @echo 盤符:\atm_script\01_導出垃圾附件.bat (備份垃圾附件的批處理文件) @echo 盤符:\atm_script\02_清理垃圾附件數據.bat (清理垃圾附件的批處理文件) @echo 盤符:\atm_script\03_恢復垃圾附件.bat (恢復垃圾附件的批處理文件,需要時,才執行此批處理) @echo 3.執行批處理文件時,需要輸入數據庫用戶密碼(如用啟\密碼@SID),才能連接上數據庫 @echo 數據庫連接串舉例:atm01/HondaHsu2011@dw @echo ********************************************************************************************************** @echo off set /p p_user="請輸入數據庫用戶名:" set /p p_password="請輸入數據庫密碼:" set /p p_sid="請輸入數據庫連接串(TNS名):" set /p p_path="請輸入腳本所在的盤符(如e:\atm_script,則輸入e):" if exist %p_path%:\atm_script\data\top_attachment_comtent_gd0930.dmp ( sqlplus %p_user%/%p_password%@%p_sid% @"%p_path%:\atm_script\delete\del_top_attachment_data.sql" > "%p_path%:\atm_script\data\delete_attachment_data.log" echo **************************************************************************** echo 已經完成清理,可查看日志 %p_path%:\atm_script\data\delete_attachment_data.log ) else ( echo **************************************************************************** echo 沒有找到備份的垃圾附件數據,請先備份垃圾附件,然后再清理垃圾附件 ) pause>nul
03_恢復垃圾附件.bat
@echo ********************************************************************************************************** @echo 恢復垃圾附件(須知) @echo 1.在需要恢復被清理掉的附件時,使用該批處理 @echo 2.注意 @echo 輸入盤符參數p_path的值應與批處理腳本的盤符一樣,如輸入E,批處理腳本的盤符也應在E盤,如e:\atm_script\ @echo 盤符:\atm_script\back (存放導出垃圾附件的腳本) @echo 盤符:\atm_script\data (存放導出的垃圾附件) @echo 盤符:\atm_script\delete (存放清理的垃圾附件的腳本及所產生的日志文件) @echo 盤符:\atm_script\01_導出垃圾附件.bat (備份垃圾附件的批處理文件) @echo 盤符:\atm_script\02_清理垃圾附件數據.bat (清理垃圾附件的批處理文件) @echo 盤符:\atm_script\03_恢復垃圾附件.bat (恢復垃圾附件的批處理文件,需要時,才執行此批處理) @echo 3.執行批處理文件時,需要輸入數據庫用戶密碼(如用啟\密碼@SID),才能連接上數據庫 @echo 數據庫連接串舉例:atm01/HondaHsu2011@dw @echo ********************************************************************************************************** @echo off set /p p_user="請輸入數據庫用戶名:" set /p p_password="請輸入數據庫密碼:" set /p p_sid="請輸入數據庫連接串(TNS名):" set /p p_path="請輸入腳本所在的盤符(如e:\atm_script,則輸入e):" if exist %p_path%:\atm_script\data\top_attachment_comtent_gd0930.dmp ( imp %p_user%/%p_password%@%p_sid% file=%p_path%:\atm_script\data\top_attachment_comtent_gd0930.dmp log=%p_path%:\atm_script\data\imp_top_att_comtent.log grants=n rows=y ignore=y full=y ) else ( echo **************************************************************************** echo 沒有找到備份的垃圾附件數據: %p_path%:\atm_script\data\top_attachment_comtent_gd0930.dmp ) if exist %p_path%:\atm_script\data\top_attachment_extend_gd0930.dmp ( imp %p_user%/%p_password%@%p_sid% file=%p_path%:\atm_script\data\top_attachment_extend_gd0930.dmp log=%p_path%:\atm_script\data\imp_top_att_extend.log grants=n rows=y ignore=y full=y ) else ( echo **************************************************************************** echo 沒有找到備份的垃圾附件數據: %p_path%:\atm_script\data\top_attachment_extend_gd0930.dmp ) if exist %p_path%:\atm_script\data\top_attachment_obj_rel_gd0930.dmp ( imp %p_user%/%p_password%@%p_sid% file=%p_path%:\atm_script\data\top_attachment_obj_rel_gd0930.dmp log=%p_path%:\atm_script\data\imp_top_att_obj_rel.log grants=n rows=y ignore=y full=y ) else ( echo **************************************************************************** echo 沒有找到備份的垃圾附件數據: %p_path%:\atm_script\data\top_attachment_obj_rel_gd0930.dmp ) if exist %p_path%:\atm_script\data\top_attachment_pro_rel_gd0930.dmp ( imp %p_user%/%p_password%@%p_sid% file=%p_path%:\atm_script\data\top_attachment_pro_rel_gd0930.dmp log=%p_path%:\atm_script\data\imp_top_att_pro_rel.log grants=n rows=y ignore=y full=y echo **************************************************************************** echo 已經完成導入,可查看日志 %p_path%:\atm_script\data\imp_top_att_********.log ) else ( echo **************************************************************************** echo 沒有找到備份的垃圾附件數據: %p_path%:\atm_script\data\top_attachment_pro_rel_gd0930.dmp ) pause
<二>、SQL腳本組裝
- 備份腳本:
\atm_script\back\gd01.txt #導出附件內容表中垃圾數據(不存在於附件信息表中的附件) tables=(top_attachment_content) feedback=1000 buffer=102400000 TRIGGERS=N query="where attachment_id in (select a.attachment_id from top_attachment_content a where not exists (select 1 from top_attachment b where a.attachment_id=b.attachment_id))" \atm_script\back\gd02.txt #導出垃圾附件的擴展屬性條件數據 tables=(top_attachment_extend) TRIGGERS=N query=" where attachment_id in (select a.attachment_id from top_attachment_content a where not exists (select 1 from top_attachment b where a.attachment_id=b.attachment_id))" \atm_script\back\gd03.txt #導出垃圾附件的關聯對象條件 tables=(top_attachment_object_relation) TRIGGERS=N query="where attachment_id in (select a.attachment_id from top_attachment_content a where not exists (select 1 from top_attachment b where a.attachment_id=b.attachment_id))" \atm_script\back\gd04.txt #導出垃圾附件的關聯屬性條件 tables=(top_attachment_pro_relation) TRIGGERS=N query="where attachment_id in (select a.attachment_id from top_attachment_content a where not exists (select 1 from top_attachment b where a.attachment_id=b.attachment_id))"
- 清理腳本:
\atm_script\delete\del_top_attachment_data.sql delete from top_attachment_extend nologging where attachment_id in (select a.attachment_id from top_attachment_content a where not exists (select 1 from top_attachment b where a.attachment_id=b.attachment_id)); delete from top_attachment_object_relation nologging where attachment_id in (select a.attachment_id from top_attachment_content a where not exists (select 1 from top_attachment b where a.attachment_id=b.attachment_id)); delete from top_attachment_pro_relation nologging where attachment_id in (select a.attachment_id from top_attachment_content a where not exists (select 1 from top_attachment b where a.attachment_id=b.attachment_id)); delete from top_attachment_content nologging where attachment_id in (select a.attachment_id from top_attachment_content a where not exists (select 1 from top_attachment b where a.attachment_id=b.attachment_id) ); commit; exit;