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

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條評論
主站蜘蛛池模板: 中文字幕国产欧美 | 日本aⅴ在线 | 欧美成人午夜精品一区二区 | 久久精品这里有 | 又爽又黄又无遮挡的视频在线观看 | 五月天婷婷在线观看高清 | 久久人与动人物a级毛片 | 奇米影视777俺要去888 | 日韩欧美在线观看视频一区二区 | 99资源在线 | 欧美孕妇乱大交xxxxx | 日韩久久免费视频 | 亚欧乱色视频大全 | 最新日本免费一区二区三区中文 | 欧美天天性 | 国产精品456 | 成人a视频高清在线观看 | 亚洲精品成人a | 欧美日韩国产最新一区二区 | 久草狼人 | 欧美成人黄色网 | 91综合久久婷婷久久 | 久久综合亚洲一区二区三区 | 免费国产a | 成人网18免费网 | 99r在线 | 天天操精品视频 | 69色视频日韩在线视频 | 日本免费一区二区三区看片 | 欧美色99| 亚洲欧洲综合网 | 国产精品99久久久久久宅男 | 久久精品国产线看观看亚洲 | 日本不卡在线观看 | 成年女人看片免费视频频 | 777奇米影视网 | 四虎影视永久免费观看网址 | 一级做人免费观看c欧美网站 | 四虎网站在线 | 久久九九久精品国产 | 在线观看久草 |