透過交易、合併式複寫在訂閱端建立索引

雖然複寫會將 ALTER TABLE 的定義帶到訂閱端,但建立非叢集索引的動作不會複寫。若要從發行項屬性對話窗設定"複製非叢集索引",這只是讓該精靈產生單一次的 snapshot,而為了某個索引做全面的"重新初始化"有些划不來…

image

image

一般的作法是將建立索引的T-SQL語法另存成一個檔案,記得要先測試無誤,最好有 DROP 再 CREATE 的邏輯。例如:

IF  EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[t]’) AND name = N’idxC2′)
DROP INDEX [idxC2] ON [dbo].[t] WITH ( ONLINE = OFF )
CREATE NONCLUSTERED INDEX [idxC2] ON [dbo].[t]
(
    [c2] ASC
)

而後透過 sp_addscriptexec 系統預存程序指定該檔案。這項功能會將指令碼複製到複寫工作目錄,如下:

sp_addscriptexec @publication=’test’,@scriptfile=’C:tempCreateIndex.sql’,@skiperror=0

SQL Server 會自動複製檔案

image

然後散發代理程式會利用 sqlcmd 將指令碼套用到訂閱者。

image

依預設,如果針對交易式發行集的訂閱套用指令碼時發生失敗,則散發代理程式將會停止。也可以利用這種方式,將T-SQL語法先複寫到多台訂閱者,建立預存程序後,再帶呼叫該預存程序並賦予不同參數的T-SQL語法,以此避免 Bulk 行為後的複寫

One Comment

  1. Ovda8aO
    Posted 2009 年 06 月 02 日 at 06:19:11 | Permalink | 回覆

    在通用程式中,通過標籤文件,把客戶端的資料庫連結檔案,放入資料庫程式中,是現在見到的方法。因為有許多的連結是透過專案開發,使用的執行環境需要套件,例如PHP 在SQL 2005上的方法和2008不同。因此需要將文件加上LOG,便利程式碼的記錄。每一個資料庫,都是原始狀況,使用後會產生資料保護問題,新資料和新的啟始資料,是一定相同,但是和啟始區塊就會不同。對於這種變化,最省的是只使用一個local 客戶端。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: