如何利用觸發(fā)器實現兩個數據庫間的同步

字號:

若對于同一數據庫實例中的兩個數據庫進行同步則直接對數據庫表創(chuàng)建Trigger。
    SQL Server 2005的聯機幫助:
    Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger)
    CREATE TRIGGER [ schema_name . ]trigger_name
    ON { table | view }
    [ WITH [ ,...n ] ]
    { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
    [ WITH APPEND ]
    [ NOT FOR REPLICATION ]
    AS { sql_statement [ ; ] [ ...n ] | EXTERNAL NAME }
    ::= [ ENCRYPTION ] [ EXECUTE AS Clause ]
    ::= assembly_name.class_name.method_name
    以下是一個例子
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    -- =============================================
    -- Author: gsoosg
    -- Create date: 2007-12-24
    -- Description:
    -- =============================================
    CREATE TRIGGER [Trigger_Add_Carduser]
    ON [dbo].[carduser]
    AFTER INSERT
    AS
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    set insert ParkFee.dbo.card_user(card_user_id,card_user_name,sex)
    select card_user_id,card_user_name,sex from inserted
    END
    說明:
    上例實現了為當前數據庫中表carduser創(chuàng)建觸發(fā)器當插入數據時,同步向ParkFee數據庫表dbo.card_user插入數據,從而達到同步插入。類同,可將insert語句改為update,delete。
    注意:
    若想利用此方法達到反向同步則可能出現問題,比如想在parkfee數據庫有新數據插入時讓當前數據庫也同時插入一條記錄,建立一個觸發(fā)器,則形成了一個循環(huán)觸發(fā),當插入數據時會報大于遞歸次數錯。因此因避免這樣的觸發(fā)循環(huán),若要達到類似效果還須想別的方法。(待續(xù))
    補充:
    若兩個庫處于不同的數據庫服務器則應先進行以下操作:
    在 server1 上創(chuàng)建連接服務器,以便在 server1 中操作 server2,實現同步
    exec sp_addlinkedserver 'server2','','SQLOLEDB','server2的數據庫實例名或ip'
    exec sp_addlinkedsrvlogin 'server2','false',null,'用戶名','密碼'
    go