亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQL Server審計功能入門:更改跟蹤(Change Trac

系統 2156 0
原文: SQL Server審計功能入門:更改跟蹤(Change Tracking)

介紹

?????? 更改跟蹤是一種輕量型解決方案,它為應用程序提供了一種有效的更改跟蹤機制。常規的,自定義變更跟蹤和讀取跟蹤數據,會使用觸發器,存儲過程和記錄變更的用戶表等,

還需要保證訪問一致和相關清理工作。 使用CT會減少額外工作量和保證訪問一致性。

啟用CT的表上必須得有主鍵,所有版本適用。為了保證更改信息的有效性,官方建議結合快照隔離使用。

CT只能提供:

??????????????????? 哪些行/列發生了更改

??????????????????? 被更改行的最新數據。

不能提供 :更改發生的次數,中間值。

應用 :離線緩存的更新,ETL更新

注意事項

????????????????? 1. 寫入變更到變更記錄表,所以執行計劃會多一個操作符,增加開銷。

????????????????? 2. 每個啟用CT的表會創建一個內部更改表。

????????????????? 3. 對于用戶表中每行的每個更改,都會向內部更改表中添加一行。? 該行有一個較小的固定開銷,外加一個大小等于主鍵列大小的可變開銷。

????????????????? 4. 對于每個已提交的事務,都會向內部事務表中添加一行。

實現

1. 在庫級別啟用CT
???????

      
        alter
      
      
        database
      
      
         TestCT 




      
      
        set
      
       change_tracking
      
        =
      
      
        on
      
      
         



( 



  change_retention
      
      
        =
      
      
        2
      
      
         days, 



  auto_cleanup
      
      
        =
      
      
        on
      
      
         



)
      
    

2. 對要跟蹤的對象啟用CT
        
          alter
        
        
          table
        
        
           sometable 



enable change_tracking 




        
        
          go
        
      
3. 使用 CHANGETABLE 函數查看CT數據 。SYS_CHANGE_VERSION是 庫中任何行 的變改的最新版本號。

?? 返回行的最新更改數據:

        
          SELECT
        
         t.
        
          *
        
        
           



      , ct.
        
        
          *
        
        
          FROM
        
        
           dbo.SomeTable t 




        
        
          CROSS
        
         APPLY CHANGETABLE(VERSION dbo.SomeTable, (ID), (t. ID)) 
        
          AS
        
         ct;
      
?? 返回指定last_sync_versiion 改變的數據:
        
          DECLARE
        
        
          @version
        
        
          BIGINT
        
        
          =
        
        
          2
        
        
          ; 




        
        
          SELECT
        
         t.
        
          *
        
        
           



, ct.
        
        
          *
        
        
          FROM
        
         CHANGETABLE (CHANGES dbo.SomeTable, 
        
          @version
        
        ) 
        
          AS
        
        
           ct 



      
        
        
          INNER
        
        
          JOIN
        
         dbo.SomeTable t 
        
          ON
        
         t. ID 
        
          =
        
        
           ct. ID 




        
        
          Go
        
      

4. 對列啟用CT

        
          CREATE
        
        
          TABLE
        
        
           dbo.NewTable ( 



ID 
        
        
          INT
        
        
          NOT
        
        
          NULL
        
        
          IDENTITY
        
        (
        
          1
        
        , 
        
          1
        
        ) 
        
          CONSTRAINT
        
         PK_NewTable 
        
          PRIMARY
        
        
          KEY
        
        
           



      , BigColumn 
        
        
          VARCHAR
        
        (
        
          255
        
        ) 
        
          NOT
        
        
          NULL
        
        
           



      , AnotherBigColumn 
        
        
          VARCHAR
        
        (
        
          255
        
        ) 
        
          NOT
        
        
          NULL
        
        
           



) 




        
        
          GO
        
        
          ALTER
        
        
          TABLE
        
        
           NewTable 



ENABLE CHANGE_TRACKING 




        
        
          WITH
        
         (TRACK_COLUMNS_UPDATED
        
          =
        
        
          ON
        
        )
      
5. 查詢CT列的變更數據

??? 使用 CHANGE_TRACKING_IS_COLUMN_IN_MASK 結合CHANGETABLE

        
          DECLARE
        
        
          @version
        
        
          BIGINT
        
        
           ; 




        
        
          --
        
        
          get previous version 
        
        
          SELECT
        
        
          @version
        
        
          =
        
         CHANGE_TRACKING_CURRENT_VERSION()
        
          -
        
        
          1
        
        
          ; 




        
        
          SELECT
        
        
          *
        
        
          , 



CHANGE_TRACKING_IS_COLUMN_IN_MASK( 



              
        
        
          COLUMNPROPERTY
        
        ( 
        
          OBJECT_ID
        
        (
        
          '
        
        
          dbo.NewTable
        
        
          '
        
        ),
        
          '
        
        
          BigColumn
        
        
          '
        
        ,
        
          '
        
        
          COLUMNID
        
        
          '
        
        
            



               ), 



         CT.SYS_CHANGE_COLUMNS 



              ) 
        
        
          AS
        
        
           BigColumn_Changed, 



CHANGE_TRACKING_IS_COLUMN_IN_MASK( 



                                    
        
        
          COLUMNPROPERTY
        
        
          ( 



                        
        
        
          OBJECT_ID
        
        (
        
          '
        
        
          dbo.NewTable
        
        
          '
        
        
          ), 



                        
        
        
          '
        
        
          AnotherBigColumn
        
        
          '
        
        ,
        
          '
        
        
          COLUMNID
        
        
          '
        
        
           



               ), 



         CT.SYS_CHANGE_COLUMNS 



              ) 
        
        
          AS
        
        
           AnotherBigColumn_Changed 




        
        
          FROM
        
         CHANGETABLE(CHANGES dbo.NewTable,
        
          @version
        
        ) 
        
          AS
        
        
           CT 




        
        
          INNER
        
        
          JOIN
        
        
           dbo.NewTable NT 




        
        
          ON
        
         CT.ID
        
          =
        
        NT.ID
      

總結

??? 1. 所謂輕量,是相對的。CT仍需要記錄變更記錄,需要額外的開銷。

??? 2. CT只能記錄最終值,所以實際應用中用得不多,只適用于特定場景。

SQL Server審計功能入門:更改跟蹤(Change Tracking)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美日片| 国产精品视频一区二区猎奇 | 999毛片免费 | 国外成人在线视频 | 午夜精品在线视频 | 国产综合视频 | 国产中文一区 | 青春草禁区视频在线观看 | 在线免费看a | 日韩毛片免费线上观看 | 国产在线欧美日韩一区二区 | 亚洲国产精品一区二区不卡 | 呦系列视频一区二区三区 | 中文字幕美日韩在线高清 | 久草精品视频在线播放 | 日韩专区第一页 | 日韩一区二区国色天香 | 欧美综合精品一区二区三区 | 4虎永免费最新永久免费地址 | 毛片机地 | 精品久久久久久久久久中文字幕 | 日韩欧美国产偷亚洲清高 | 国产亚洲精品久久麻豆 | 日日夜夜噜噜 | 国产在线一区二区 | 国产精品99爱免费视频 | 四虎国产精品免费视 | 亚洲国产日韩在线一区 | 69日本人xxxx16-18 | 日本一级毛片视频无遮挡免费 | 一级做a免费视频观看网站 一级做a爰片久久毛片唾 | 久久96国产精品 | 久久中文字幕亚洲精品最新 | 亚洲精品久久成人福利 | 大学生一级毛片高清版 | 亚洲乱强 | 欧美精品在线一区 | 一级aa 毛片高清免费看 | 手机看片精品高清国产日韩 | 97免费看| 久久精品vr中文字幕 |