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

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條評論
主站蜘蛛池模板: 亚洲精品久久麻豆蜜桃 | 日本二级毛片免费 | 色爱区综合激月婷婷激情五月 | 久久国产精品一区二区三区 | 91在线 | 欧美 | 天天影视欧美综合在线观看 | 日本不卡在线观看 | 亚洲成人xxx | 亚洲国产一区二区三区 | 国产日韩网站 | 亚洲丶国产丶欧美一区二区三区 | 婷婷激情五月 | 手机国产日韩高清免费看片 | 成人午夜精品久久久久久久小说 | 五月天婷婷网址 | 亚洲精品在线播放视频 | 97色精品视频在线观看免费 | 日本aaaa视频 | 中文字幕免费在线看线人动作大片 | 色吧久久 | 国产区视频在线观看 | 深夜日韩 | 亚洲免费精品 | 欧美日韩性视频在线 | 五月天激情婷婷 | 天天干夜操 | 欧美色国 | 夜夜夜爽爽爽久久久 | 香蕉网站狼人久久五月亭亭 | 久久这里只有精品66 | 国产精品二区三区 | 中文字幕不卡在线观看 | 国产粉嫩白浆在线观看 | 在线人成精品免费视频 | 中文字幕视频不卡 | 最新仑乱免费视频 | 亚洲欧美第一页 | 国产主播福利在线 | 青青青草视频在线 | 国产视频久久久久 | 欧美一级特黄乱妇高清视频 |