程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 2008新功能 捕獲數據變化(2)

SQL Server 2008新功能 捕獲數據變化(2)

編輯:關於SqlServer
能夠監控表的變化,這是SQL Server 2008的一個新特征。我們可以通過SQL Server 2008的變化數據捕獲功能輕松地監控表的變化。

  文章的第一部分說明了如何在數據庫中啟動SQL Server這項新功能--捕捉數據變化,同時也講解了如何對數據表啟用這項功能,並監控表上數據定義語言的變化,並解釋了CDC模式以及該模式下各對象實現的功能。

  注:本文根據SQL Server 2008-11月CTP寫作而成。

  這一部分將繼續討論在數據庫和表上啟動捕獲數據變化這一功能,對於開啟了CDC的表,SQL Server又是如何監控它們的數據變化的。

  在文章的第一部分,我們創建了一個名為Mydatabase的數據庫,並在該數據庫中創建了一個名為Mytable的表,現在我們要在該表上增加一些列,來看看數據定義語言的變化是如何被捕捉的。

  下面,我們先向數據庫中添加一些數據。

  第一步

  執行如下T-SQL語句,如下圖Fig 1.1所示。

  useMyDataBase
  go
  select*fromMyTable
  go
  InsertintoMytablevalues(1,'DanceDoll','221,WestBroadst,
  Greenbay,Wisconsin',60000,1000)
  InsertintoMytablevalues(2,'RainbowColors','21,Eastst,
  Denville,NewJersey',68000,1300)
  InsertintoMytablevalues(3,'RiverDance','1,SouthBroadst,
  Quincy,Massachusetts',76000,1600)
  InsertintoMytablevalues(4,'MickeyMouse','5,Main,
  Greenbay,Wisconsin',120000,12000)
  InsertintoMytablevalues(5,'UniversalStudiOS','7,Newroad,
  Danbury,Connecticut',45000,1600)
  go

  執行結果

  ID,Name,Address,Salary,Bonus
  homesql2008(HOMEMAK):(0row(s)affected)
  homesql2008(HOMEMAK):(1row(s)affected)
  homesql2008(HOMEMAK):(1row(s)affected)
  homesql2008(HOMEMAK):(1row(s)affected)
  homesql2008(HOMEMAK):(1row(s)affected)
  homesql2008(HOMEMAK):(1row(s)affected)

  圖Fig 1.1

  CDC模式下,表lsn_time_mapping記錄了lsn名稱,事務開始和結束時間。我們可以查詢一下這個表,查詢語句如下:參考圖Fig 1.2 

select*fromcdc.lsn_time_mapping

  執行結果

  start_lsn,tran_begin_time,tran_end_time,tran_id
  0x0000001C0000018B002F,2008-01-1601:53:38.840,2008-01-1601:53:38.840,0x00000000029C
  0x0000001C000001920003,2008-01-1601:53:38.857,2008-01-1601:53:38.857,0x00000000029F
  0x0000001C000001930003,2008-01-1601:53:38.857,2008-01-1601:53:38.857,0x0000000002A0
  0x0000001C000001940003,2008-01-1601:53:38.857,2008-01-1601:53:38.857,0x0000000002A1
  0x0000001C000001950003,2008-01-1601:53:38.857,2008-01-1601:53:38.857,0x0000000002A2
  homesql2008(HOMEMAK):(5row(s)affected)

  圖Fig 1.2

  對於SQL Server監控的每一個表,在CDC模式下都會創建一個相應的表來與之對應。這個表的命名方式為“原模式名_原表名_CT”,在這個例子中,這個對應的表叫做dbo_MyTable_CT。參考圖Fig 1.3

SQL Server 2008新功能 捕獲數據變化(2)

  圖Fig 1.3

  接下來我們查詢一下dbo_MyTable_CT這個表,如下所示:(參考圖Fig 1.4)

  select * from cdc.dbo_MyTable_CT

  執行結果

  __$start_lsn,__$end_lsn,__$seqval,__$Operation,__$update_mask,ID,Name
  0x0000001C0000018B002F,NULL,0x0000001C0000018B002E,2,0x03,1,DanceDoll
  0x0000001C000001920003,NULL,0x0000001C000001920002,2,0x03,2,RainbowColors
  0x0000001C000001930003,NULL,0x0000001C000001930002,2,0x03,3,RiverDance
  0x0000001C000001940003,NULL,0x0000001C000001940002,2,0x03,4,MickeyMouse
  0x0000001C000001950003,NULL,0x0000001C000001950002,2,0x03,5,UniversalStudiOS
  homesql2008(HOMEMAK):(5row(s)affected)

  圖Fig 1.4

  第二步

  我們更新表的一些數據,另外再刪除掉一些數據,如下所示:(參考圖Fig 1.5)

  useMyDataBase
  go
  UpdateMyTablesetsalary=125000whereid=4
  go
  deleteMytablewhereId=4
  go

  執行結果

  homesql2008(HOMEMAK):(1row(s)affected)
  homesql2008(HOMEMAK):(1row(s)affected)

  圖Fig 1.5

  查詢表lsn_time_mapping,如下所示:

  select * from cdc.lsn_time_mapping

  執行結果

  start_lsn,tran_begin_time,tran_end_time,tran_id
  0x0000001C0000018B002F,2008-01-1601:53:38.840,2008-01-1601:53:38.840,0x00000000029C
  0x0000001C000001920003,2008-01-1601:53:38.857,2008-01-1601:53:38.857,0x00000000029F
  0x0000001C000001930003,2008-01-1601:53:38.857,2008-01-1601:53:38.857,0x0000000002A0
  0x0000001C000001940003,2008-01-1601:53:38.857,2008-01-1601:53:38.857,0x0000000002A1
  0x0000001C000001950003,2008-01-1601:53:38.857,2008-01-1601:53:38.857,0x0000000002A2
  0x0000001C000001BB0004,2008-01-1602:08:37.357,2008-01-1602:08:37.357,0x0000000002B1
  homesql2008(HOMEMAK):(6row(s)affected)

  我們可以看到,在表中有一條新的lsn記錄。

  查詢表cdc.dbo_MyTable_CT,如下所示

  select * from cdc.dbo_MyTable_CT

  執行結果

  __$start_lsn,__$end_lsn,__$seqval,__$Operation,__$update_mask,ID,Name
  0x0000001C0000018B002F,NULL,0x0000001C0000018B002E,2,0x03,1,DanceDoll
  0x0000001C000001920003,NULL,0x0000001C000001920002,2,0x03,2,RainbowColors
  0x0000001C000001930003,NULL,0x0000001C000001930002,2,0x03,3,RiverDance
  0x0000001C000001940003,NULL,0x0000001C000001940002,2,0x03,4,MickeyMouse
  0x0000001C000001950003,NULL,0x0000001C000001950002,2,0x03,5,UniversalStudiOS
  0x0000001C000001BB0004,NULL,0x0000001C000001BB0002,1,0x03,4,MickeyMouse
  homesql2008(HOMEMAK):(6row(s)affected)

  我們嘗試一下更新一行,但不刪除這行。

  UpdateMyTablesetsalary=1200whereid=1
  UpdateMyTablesetname='abc'wherename='DanceDoll'

  查詢表cdc.dbo_MyTable_CT,如下所示

  select * from cdc.dbo_MyTable_CT

  執行結果

  __$start_lsn,__$end_lsn,__$seqval,__$Operation,__$update_mask,ID,Name
  0x0000001C0000018B002F,NULL,0x0000001C0000018B002E,2,0x03,1,DanceDoll
  0x0000001C000001920003,NULL,0x0000001C000001920002,2,0x03,2,RainbowColors
  0x0000001C000001930003,NULL,0x0000001C000001930002,2,0x03,3,RiverDance
  0x0000001C000001940003,NULL,0x0000001C000001940002,2,0x03,4,MickeyMouse
  0x0000001C000001950003,NULL,0x0000001C000001950002,2,0x03,5,UniversalStudiOS
  0x0000001C000001BB0004,NULL,0x0000001C000001BB0002,1,0x03,4,MickeyMouse
  0x0000001C000001E40004,NULL,0x0000001C000001E40002,3,0x02,1,DanceDoll
  0x0000001C000001E40004,NULL,0x0000001C000001E40002,4,0x02,1,abc
  homesql2008(HOMEMAK):(8row(s)affected)

  從這些數據中可以很明顯的看出,所有的數據變化都已經被捕獲。

  注:本文根據SQL Server 2008-11月CTP寫作而成。

  結論

  本文繼續討論了如何在數據庫和表上啟動捕獲數據變化這一功能,以及對於開啟了CDC的表,SQL Server又是如何監控它們的數據變化的。在接下來的文章中,我們將討論如何以一種有效的方式取得這些數據變化。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved