Subscription DB 因故毀掉,但從備份回復的資料庫內容較舊

Distribution Agent 會自動解決這個狀況,從 Profiler 可以截取到許多自我檢測、重起的動作

實驗如下:

select * from northwind.dbo.t2

backup database d to disk=’c:tempd.bak’ with init

insert Northwind.dbo.t2(c1,c2) values(1234,1234)
insert Northwind.dbo.t2(c1,c2) values(5678,5678)

–確定訂閱端已經帶入新資料
select * from d.dbo.t2

–砍掉存取訂閱端資料庫的連接
select * from sysprocesses where dbid=DB_ID(‘d’)

–這導致 Distributeion Agent 在下一次要傳遞紀錄給訂閱端時
–因無法連接到目標端,而自動重起 Distribution Agent
kill 65

–故意模擬災難後,從備分回到從前
–但 Distribution 還保有交易資料
restore database d from disk=’c:tempd.bak’
with replace

select * from d.dbo.t2
–故意發生一個動作,要 Distribution Agent 傳遞
delete Northwind.dbo.t2 where c1=1234

–Distribution Agent 會自動檢測,而重新將某個 LSN 之後的語法重新到目的端執行
–所以一段時間後,自動會趨於一致
select * from d.dbo.t2

delete Northwind.dbo.t2 where c1=5678

透過 Profiler 可以錄到許多 Distribution Agent 重新初始化的動作,在此僅截取複寫發現錯誤後,先到 Subscription 端找尋其最後執行的交易,而後從 Distribution 系統資料庫取出該交易後的指令,重新傳到訂閱端同步:

image

可以在訂閱端資料庫測試 Profiler 錄下的查詢語法:

exec sp_executesql N’select hashid = case datalength(transaction_timestamp) when 16
then isnull(substring(transaction_timestamp, 16, 1), 0) else 0 end, transaction_timestamp,
subscription_guid from MSreplication_subscriptions
where UPPER(publisher) = UPPER(@P1) and publisher_db = @P2 and publication= @P3
and subscription_type = 0 ‘,N’@P1 nvarchar(10),@P2 nvarchar(9),@P3 nvarchar(4)’,N’P714P4USER’,N’Northwind’,N’test’

可以知道訂閱端最後執行的交易:

image

看來,回復訂閱端是最為容易的…

2 Comments

  1. Ovda8aO
    Posted 2009 年 09 月 04 日 at 03:14:34 | Permalink | 回覆

    9月4日在程式語言上面臨的備份檔案:在MCS 發表的認識Framework.NET 由陳會安先生提供的表示,Visual Basic 在第二 版和第三版的ASP 上提供 邏輯磁區傳送的函數式snapId ,探查Web services 是使用scoket()方法,把status.add(public namestatus(pvolumn))以snaoId 包裝後以socket(status) 為.Net Visual Basic .NET執行檔簡單地用ASP.NET,加入Try…. Catch if status=0 then throw Nullexception.

  2. Ovda8aO
    Posted 2009 年 09 月 04 日 at 03:44:56 | Permalink | 回覆

    the profile查詢語言第一段說明交易伺服器開始工作,它是一個空值,因為沒有在伺服器上記錄關聯資料庫,接下來是使用複寫資料庫@P1 ,@P2, @P3這些資料庫分散在關聯資料庫伺服服務中,且把類別規定為nvarchar不是可變字元。這個值在記錄時在@P1 是10格,在@P2是9格,在@P3是4格。因此用這種方式覆寫備份資料庫,在效能上增加記憶體使用量,可以說是一個病毒。在微軟病毒定義上並沒以這種情形說明,而是以其他廠商提供的hotfix說明,它不但是耗損執行SQL2000的資源,還必須付出廠商費用。

發表迴響

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

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 位部落客按了讚: