步驟清單:
每當 MobiLink 同步服務器在同步過程中遇到錯誤時都執行handle_error連接事件。如果未定義 handle_error 腳本或此腳本導致錯誤,則缺省動作代碼是 3000:回退當前事務並取消當前同步。
通常情況下,每個 SQL 操作只會出現一個錯誤,但也可能出現多個。在一組錯誤中每出現一次錯誤時都會調用一次 handle_error 腳本。傳遞到第一個錯誤的動作代碼是 3000,後續調用是在前一次調用所返回的動作代碼中傳遞的。MobiLink 將使用多個調用所返回的值中的最大值。
您可以修改腳本中的動作代碼並返回一個值以指示 MobiLink 如何繼續。動作代碼參數可以使用以下數值:
*1000 跳過當前行並繼續執行。
*3000 回退當前事務並取消當前同步。這是缺省動作代碼,在未定義 handle_error 腳本或此腳本導致錯誤時將使用此代碼。
*4000 回退當前事務,取消同步並關閉 MobiLink 同步服務器。
handle_error 事件的 SQL 腳本必須作為存儲過程執行。
如果錯誤是作為同步的一部分發生的,則提供用戶名。否則該值為空。
如果在操作某一特定表時發生錯誤,則提供表名稱。否則該值為空。表名稱是客戶端應用程序中表的名稱。該名稱在統一數據庫中是否存在直接對應的名稱取決於同步系統的設計。動作代碼將告知 MobiLink 同步服務器下一步該做什麼。在調用此腳本之前,MobiLink 同步服務器將動作代碼設置為缺省值,該缺省值的大小取決於錯誤的嚴重程度。您可以使用腳本修改該值。腳本必須返回或設置一個動作代碼。
在本例中,我們故意在針對emp表的download_cursor事件中輸入錯誤腳本,讓MobiLink在同步的過程中出錯。然而,我們進一步在handle_error連接事件中加入了對錯誤處理的相應腳本,處理錯誤後,返回值為1000,MobiLink將忽略當前錯誤,繼續運行。
本部分的腳本如下:
對remote:
CREATE PUBLICATION Lab_06 ( TABLE emp ) CREATE SYNCHRONIZATION USER "demo06" CREATE SYNCHRONIZATION SUBSCRIPTION TO Lab_06 FOR "demo06" TYPE 'TCPIP' ADDRESS 'host=localhost;port=2439' OPTION ScriptVersion='demo06'
對center:
CALL ml_add_table_script( 'demo06', 'emp', 'download_cursor', 'SELECT * FROM empxxxxxxx' ); COMMIT ALTER PROCEDURE MLHandleError( OUT @action INTEGER, IN @error_code INTEGER, IN @error_message VARCHAR(1000), IN @user_name VARCHAR(128), IN @table_name VARCHAR(128)) BEGIN COMMIT; SET @action = 1000; END CALL ml_add_connection_script( 'demo06', 'handle_error', 'CALL MLHandleError(?,?,?,?,?)') COMMIT