MS SQL Server 複寫用法注意事項(同步)

摘要:複寫使用(SQL Server 同步) for MS SQL 2000 Server

先暫時記下重點,改天有空再來補上詳細資料。

注意事項

1. 必須先建立一個本機帳戶,其必須有足夠的權限,來啟用 SQLSERVERAGENT 服務。(要使用此帳戶來啟用服務,不能使用預設的)

2. 在設定快照集網路位置時候,要注意路徑。
    預設路徑通常類似 \\TEST\C$\Program Files\Microsoft SQL Server\MSSQL\REPLDATA 
    最好修改成 \\TEST\REPLDATA ,並確定分享在網芳可以讀取得到。

3. 訂閱建立好後,要檢查訂閱的執行帳戶設定。在所訂閱的規則上按右鍵,選內容,同步頁,代理程式屬性,查看擁有者。
    這邊最好選一個擁有足夠權限來執行訂閱動作的 DB 帳戶。(不知道就選 sa)

4. 當一個發行與訂閱建立完成後,若要新增修改資料表或欄位設定,則要注意相關的發行集設定。
    要新增資料表,直接新增後,在發行集中,將新增的資料表添加到發行集中。
    若要修改資料表,則必須在發行集中設定,不能直接編輯資料表欄位。且僅能對資料表作新增與刪除動作。新增動作,
    必須搭配 SQL 語法來執行。

5. 錯誤訊息【您必須重新執行快照集,因為目前的快照集檔已經過時。】。發生原因為我將啟用 SQLSERVERAGENT
    服務的帳號權限降為 User ,導致權限不足以啟用 SQLSERVERAGENT 。將權限加回,並重新啟用代理程式即可。
   (發行集的內容,狀態頁,啟用服務 + 立即執行代理程式)

 6. 延續 4.  。使用的 SQL 語法,事實上是很簡單的。即使不會語法也能來做這步驟。
    a. 首先先在測試表格上建立要新增的欄位與其格式,可用精靈來做這步驟。
    b. 接著,對此測試表格產生 SQL 語法,會產生類似如下的文字檔
 

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Base_SignCodes]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Base_SignCodes]
GO

CREATE TABLE [dbo].[Base_SignCodes] (
    [SignCode] [char] (2) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
    [Prefix] [char] (1) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
    [Suffix] [char] (1) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
    [Sort] [int] NOT NULL  
) ON [PRIMARY]
GO

    c. 擷取我們要新增的欄位那行,舉例,要多新增 Suffix 這個欄位,則除了將 Suffix 欄位名稱複製到資料行名稱欄位,後面語法也另外複製起來,貼到資料行定義欄位

[char] (1) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL

    d. 照上面的步驟就可以完成一個資料行的新增了,完全不需要自行撰寫語法。缺點就是一個欄位就要重複一次這樣的動作,
        如果有多個欄位要新增,那就...

 

 2009/7/28 Update:

更新的這段,早在數天前就得知。經強者我朋友的告知,MS SQL 2000 在同步上的支援並不是很好,有些許的 bug ,他建議我更換為 2005 來開發較好。至於2000有什麼問題或詳細內容則尚待查找,最近實在沒空阿~