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

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條評論
主站蜘蛛池模板: 亚洲国产精品一区二区三区 | 久久久久久久久综合影视网 | 色老头老太做爰视频在线观看 | 四虎国产精品永久地址51 | 国产青草亚洲香蕉精品久久 | 成人中文字幕一区二区三区 | 免费女人18a级毛片视频 | 香蕉久久精品 | 国产做爰免费视频观看 | 高清国产天干天干天干不卡顿 | 超碰最新上传 | 欧美日韩一区二区高清免费视频 | 性欧美高清come | 欧美激情视频二区 | 日韩欧美伦理 | 日本高清不卡免费 | 日本免费人成黄页网观看视频 | 精品久久洲久久久久护士 | 精品国产品香蕉在线 | 97在线资源站 | 亚洲天天网综合自拍图片专区 | 日本高清中文字幕一区二区三区a | 日本最新在线 | 真人一级毛片免费观看视频 | 综合久久伊人 | 国产在线干 | 欧美日韩高清观看一区二区 | 尤物黄色| 国产一区二区免费播放 | 国产精品亚洲综合一区在线观看 | 国内精品视频在线播放一区 | 欧美视频在线一区 | 亚洲香蕉中文网 | 宅男看片午夜大片啪啪mv | 9久re在线观看视频精品 | 操操网站 | 四虎论坛 | 男人天堂欧美 | 中文字幕1区 | 呦呦精品 | 亚洲九九精品 |