none
使用Windows效能監視器收集SQL Server資訊的觸發問題 RRS feed

  • 問題

  • 問題:

                    建立Trigger效能監視器上 CounterData DefaultTable上,但Trigger沒有任何作用

    原因:

            效能監視器是使用 bulk insert,所以,不會啟用 Trigger

    http://technet.microsoft.com/en-us/library/ms187640(v=sql.105).aspx

    想請問:

    1.      Trigger上如何設定也可接 bulk insert的方式?
    2.      效能監視器是否可以設定【FIRE_TRIGGERS】的參數 (http://technet.microsoft.com/en-us/library/ms188365(v=sql.105).aspx)

    下列是我的Trigger語法:

    CounterData是效能監視器上的Default Table

    CounterMiddleData是我想要Insert的Table

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    CREATE TRIGGER [dbo].[Ctrg_Counter_ins_CounterMiddleData]

       ON  [dbo].[CounterData]

       AFTER INSERT

    AS

    BEGIN

        DECLARE @GUID uniqueidentifier

        DECLARE @CounterID int

        DECLARE @RecordIndex int

        DECLARE @CounterDateTime char

        DECLARE @CounterValue float

        DECLARE @FirstValueA int

        DECLARE @FirstValueB int

        DECLARE @SecondValueA int

        DECLARE @SecondValueB int

        DECLARE @MultiCount int

        DECLARE db_cursor CURSOR FOR

        Select GUID,CounterID,RecordIndex,CounterDateTime,CounterValue,FirstValueA,FirstValueB,SecondValueA,SecondValueB,MultiCount From inserted

        OPEN db_cursor

        FETCH NEXT FROM db_cursor into @GUID ,@CounterID ,@RecordIndex ,@CounterDateTime ,@CounterValue ,@FirstValueA ,@FirstValueB ,@SecondValueA ,@SecondValueB ,@MultiCount

        WHILE @@FETCH_STATUS = 0

        BEGIN

            INSERT INTO dbo.CounterMiddleData (GUID,CounterID,RecordIndex,CounterDateTime,CounterValue,FirstValueA,FirstValueB,SecondValueA,SecondValueB,MultiCount)

            VALUES (@GUID,@CounterID,@RecordIndex,@CounterDateTime,@CounterValue,@FirstValueA,@FirstValueB,@SecondValueA,@SecondValueB,@MultiCount);

            FETCH NEXT FROM db_cursor INTO @GUID ,@CounterID ,@RecordIndex ,@CounterDateTime ,@CounterValue ,@FirstValueA ,@FirstValueB ,@SecondValueA ,@SecondValueB ,@MultiCount

        END

        CLOSE db_cursor

        DEALLOCATE db_cursor

    End

    GO




    • 已編輯 Dogman99 2013年12月19日 上午 03:37
    • 已編輯 AChange 2013年12月19日 上午 05:01 編輯適當標題, 原標題: https://www.yammer.com/microsoftenterprisecustomerservicessupport
    2013年12月19日 上午 03:34

解答

  • Dear Rmiao:

    我已找到解決的方式了.

    方式:

    效能監視器有三個Table, 1) DisplayToID, 2) CounterDetails, 3) CounterData

    他 Insert資料的方式

    1) 使用 Bulk Insert到 CounterData裡 (無法觸發 CounterData裡的 Trigger)

    2) Update DisplayToID裡的 NumberOfRecords

    故我解決的方式是

    1) 在DisplayToID裡新增一個 For Update的Trigger

    2) 當他進行 Update DisplayToID裡的 NumberOfRecords欄位時, 就可以觸發該 Table裡的 Trigger

    3) 該 Trigger就去查詢 CounterData裡小於 NumberOfRecords的資訊, 在去 Insert到我想要的 Table中

    4) 可正常的觸發 DisplayToID裡的 Trigger 

    十分感謝您的回覆, 將結果提供給大家參考.
    • 已標示為解答 Dogman99 2013年12月23日 上午 03:46
    • 已編輯 Dogman99 2013年12月23日 上午 03:46
    2013年12月23日 上午 03:40

所有回覆

  • Bulk insert has option fire_triggers.
    2013年12月19日 上午 03:54
  • Dear Rmiao:

    I know (Bulk insert) has option 【fire_triggers】, but the question is I don't know how and where to setup this option in Performance Counter?

    2013年12月19日 上午 04:02
  • What do you mean? You specify it when run bulk insert.
    2013年12月19日 下午 02:31
  • Dear Rmiao:

    不好意思, 沒有說明清楚.

    因我是使用 Windows 2008 R2的效能監視器在收集一些效能的資訊, 把相關資訊都寫入到 SQL Server中.

    但在它預設建立的Table中建立客制的 Trigger, 發現都無法觸發該 Trigger, 後來我使用 SQL Server Profiler確認後, 發現效能監視器是使用 Bulk Insert的方式, 又查詢到使用 Bulk Insert, Trigger是不會被觸發的...

    所以, 目前我想要知道及遇到的問題是:

    1) Windows 2008 R2的效能監視器, 如何或哪裡可以設定參數 (-h fire_trigger)? 讓效能監視器收集到的資枓在 Insert Date到預設的 Table中 (CounterData), 可以觸發客制的 Trigger (因我沒法也不知道要去哪裡修改 Bulk Insert的語法)

    2) 或是在客制的 Trigger中, 可以設定當收到 Bulk Insert時, 也可以被觸發此客制的 Trigger(客制的 Trigger語法如第一封文章的內容)

    如有任何說明不清楚的地方, 還請告知.

    另十分感謝您耐心的回覆, 謝謝~

    Bulk Insert 無法觸發 Trigger的資訊:

    http://technet.microsoft.com/en-us/library/ms187640(v=sql.105).aspx


    • 已編輯 Dogman99 2013年12月20日 上午 01:44
    2013年12月20日 上午 01:31
  • You are using data collection? Have to look at collector side to find out how to fire trigger, can't set that inside trigger. 
    2013年12月20日 上午 03:35
  • Dear Rmiao:

    Yes, I used data collection and it's point that I don't know how and where can setup fire trigger in collector...

    So I list two question as below...

         Trigger上如何設定也可接 bulk insert的方式?

    1.      效能監視器是否可以設定【FIRE_TRIGGERS】的參數 (http://technet.microsoft.com/en-us/library/ms188365(v=sql.105).aspx)
    2013年12月23日 上午 02:10
  • Nothing you can do it trigger here.
    2013年12月23日 上午 03:22
  • Dear Rmiao:

    我已找到解決的方式了.

    方式:

    效能監視器有三個Table, 1) DisplayToID, 2) CounterDetails, 3) CounterData

    他 Insert資料的方式

    1) 使用 Bulk Insert到 CounterData裡 (無法觸發 CounterData裡的 Trigger)

    2) Update DisplayToID裡的 NumberOfRecords

    故我解決的方式是

    1) 在DisplayToID裡新增一個 For Update的Trigger

    2) 當他進行 Update DisplayToID裡的 NumberOfRecords欄位時, 就可以觸發該 Table裡的 Trigger

    3) 該 Trigger就去查詢 CounterData裡小於 NumberOfRecords的資訊, 在去 Insert到我想要的 Table中

    4) 可正常的觸發 DisplayToID裡的 Trigger 

    十分感謝您的回覆, 將結果提供給大家參考.
    • 已標示為解答 Dogman99 2013年12月23日 上午 03:46
    • 已編輯 Dogman99 2013年12月23日 上午 03:46
    2013年12月23日 上午 03:40