2015-10-22 21 views
0

一些背景信息:我目前正在分析使用NServiceBus的.Net應用程序對Oracle數據庫的負載。我們在運行應用程序時觀察到高重做日誌活動,因此 - 大量的歸檔日誌(我們在歸檔日誌模式下獲得了數據庫)。我們使用了Toad Logminer來找出導致它的原因,不幸的是許多操作都是UNSUPPORTED類型。我假設這是因爲使用安全文件類型的LOB。然而,我已經深入到數據庫Logminer視圖:v $ logmnr_contents看到有更多的列比Toad的Logminer更多。Oracle Log Miner - 操作規模

我需要的是每個操作的大小在重做。這裏是我的查詢到目前爲止:

SELECT TIMESTAMP, 
     RBABYTE, 
     SEG_OWNER, 
     SEG_NAME, 
     TABLE_NAME, 
     SEG_TYPE, 
     SEG_TYPE_NAME, 
     TABLE_SPACE, 
     ROW_ID, 
     OPERATION, 
     SQL_REDO 
    FROM V$LOGMNR_CONTENTS 
WHERE 1 = 1 AND OPERATION = 'UNSUPPORTED' 

我不知道,如果RBABYTE是用正確的值或者可能計算較爲複雜,對於我來說,它看起來像記錄尺寸包括LOB。 Oracle的文檔說它是「塊內的RBA字節偏移量」,但這還不夠。 請指教。

回答

1

嘗試此查詢:

with t1 as 
     (select rs_id, 
       ssn, 
       rbablk, 
       rbabyte, 
       rbablk * 512 + rbabyte curpos, 
       lead (rbablk * 512 + rbabyte, 1, rbablk * 512 + rbabyte) 
        over (partition by substr (rs_id, 1, 9)order by 
          rbasqn, 
          rbablk, 
          rbabyte, 
          scn, 
          redo_value) 
        nextpos, 
        lead (rbablk * 512 + rbabyte, 1, rbablk * 512 + rbabyte) 
        over (partition by substr (rs_id, 1, 9)order by 
           rbasqn, 
           rbablk, 
           rbabyte, 
           scn, 
           redo_value) 
       - (rbablk * 512 + rbabyte) 
        redo_size, 
       operation, 
       case 
        when operation = 'INTERNAL' and data_obj# != 0 then 
         (select t0.owner 
         from dba_objects t0 
         where t0.object_id = t1.data_obj#) 
        else 
         seg_owner 
       end 
        seg_owner, 
       case 
        when operation = 'INTERNAL' and data_obj# != 0 then 
         (select t0.object_name nome 
         from dba_objects t0 
         where t0.object_id = t1.data_obj#) 
        else 
         seg_name 
       end 
        seg_name, 
       sql_redo, 
       redo_value, 
       client_id, 
       timestamp 
      from v$logmnr_contents t1) 
    select rs_id, 
     ssn, 
     rbablk, 
     rbabyte, 
     curpos, 
     nextpos, 
     redo_size, 
     seg_owner, 
     seg_name, 
     operation, 
     sql_redo 
    from t1 
order by substr (rs_id, 1, 9), 
     ssn, 
     rbablk, 
     rbabyte, 
     redo_value