2016-04-07 16 views
2

Biz Oracle 12c yükseltme sürecinde olan ve uygulama tarafından yürütülmektedir sorguları izlemek gerekir. Başka bir deyişle, uygulama ikiliden 'foobar' seçmek gibi bir sorgu yürütürse; Çıkış dosyasında "select 'foobar' çiftinden" metinini görmek istiyorum. Ben buradaki talimatları izlerseniznasıl Oracle 12c sql sorguları izlerim?

: https://docs.oracle.com/database/121/TGSQL/tgsql_trace.htm#TGSQL809 Aşağıdaki ama gerçek sql sorguları gibi istatistikleri içeren dosyalar olsun. Böyle sorgu için bakarsak

WAIT #0: nam='rdbms ipc message' ela= 2999770 timeout=300 p2=0 p3=0 obj#=-1 tim=1103506389 
WAIT #0: nam='rdbms ipc message' ela= 9854 timeout=1 p2=0 p3=0 obj#=-1 tim=1103522400 

*** 2016-04-07 15:07:20.715 
WAIT #0: nam='rdbms ipc message' ela= 2999585 timeout=300 p2=0 p3=0 obj#=-1 tim=1106522506 
WAIT #0: nam='rdbms ipc message' ela= 9690 timeout=1 p2=0 p3=0 obj#=-1 tim=1106532500 

Ben 0 sonuç almak: grep "filanca" --include = -rnw * trc ./

enter image description here

+0

Ben mesela ... Ben sorunuzu anlamak emin değilim Bu sorguların ne sıklıkta yürütüldüğünden, uygulamadan ne tür sorgulamalar yapıldığı, bekleme sürelerinin ne olduğu, çalışma sürelerinin ne olduğu, yürütme planlarının ne olduğu, vb. Aşağıdaki görünümlerden ihtiyacınız olanı alabilirsiniz: v $ active_session_history, v $ sql ve v $ sql_plan –

+0

Burada kullanım durumu: Veritabanına verilen her sorguyu görmek istiyorum. – John

+0

O zaman kesin olarak bu bilgiyi v $ active_session_history külünden, v $ sql sql'den sql.sql_id = ash.sql_id order_ sample desc; ASH sadece birkaç saat bilgileri korur, ancak tutma iyileştirmek için gerekirse periyodik bir tarih tabloya sorguları atardım tavsiye edilebilir. –

cevap

0

Seçeneklerden biri yukarı bakıyor. Bunun için AWR depoları. Birkaç güne ait SQL'leri koruyacaktır. Orada sistem görünümlerinde ek bilgi bol, bu nedenle bu kesinlikle metni, ancak keşfetmek için çekinmeyin.

SELECT DISTINCT u.username, to_char(substr(h.sql_text, 1, 4000)) sqltxt 
    FROM dba_hist_sqltext h 
    JOIN dba_hist_active_sess_history a ON a.sql_id = h.sql_id 
    JOIN dba_users u ON u.user_id = a.user_id 
WHERE username = 'SYS'; 

SYS sonuçlarını bir örnek olarak filtreledim, ancak istediğiniz gibi değiştirebilirsiniz.

0

Tüm aktiviteyi görmek isterseniz, yapmanız gereken en iyi şey, sizin için bir EM (Enterprise Manager) ayarlanmıştır.

Yapmazsanız, gv $ activity_session_history iyi bir çağrı olur, gruplama işlevlerini kullanırken daha iyi görülür. Tek yapmanız gereken, uygulamanızın itmekte olduğu çağrı sayısına bağlı olarak karışıklık olacaktır.

başka yolu da, ortalama bir şekilde bunu görebiliyordu:

` 
select s.parsing_schema_name, 
      inst_id, 
      sql_id, 
      plan_hash_value, 
      child_number, 
      round(nullif(s.ELAPSED_TIME, 0)/nullif(s.EXECUTIONS, 0)/1000000, 4) elap_per_exec, 
     round(s.USER_IO_WAIT_TIME/nullif(s.ELAPSED_TIME, 0) * 100, 2) io_wait_pct, 
     round(s.CLUSTER_WAIT_TIME/nullif(s.ELAPSED_TIME, 0) * 100, 2) cluster_wait_pct, 
     round(s.application_wait_time/nullif(s.ELAPSED_TIME, 0) * 100, 2) app_wait_pct, 
     round(s.CPU_TIME/nullif(s.ELAPSED_TIME, 0) * 100, 2) cpu_time_pct, 
     round(s.PHYSICAL_READ_BYTES/nullif(s.EXECUTIONS, 0)/1024/1024, 2) pio_per_exec_mb, 
     round(s.PHYSICAL_READ_BYTES/nullif(s.PHYSICAL_READ_REQUESTS, 0), 2)/1024 read_per_request_kbytes, 
      round(s.buffer_gets/nullif(s.executions, 0), 4) BufferGets_per_Exec 
      s.executions, 
      to_char(s.last_active_time,'dd/mm/yyyy hh24:mi:ss') last_act_time, 
      s.first_load_time, 
      s.sql_fulltext,    
      s.sql_profile, 
      s.sql_patch, 
      s.sql_plan_baseline 
FROM gv$sql s 
WHERE 1=1 
and s.parsing_schema_name in ('LIST OF DATABASE USERS YOU WANT TO MONITOR') 
order by s.last_active_time desc; 
` 

Bu sizin ortalama eşik merkezli yapmanın ne kadar başarılı olduğunun iyi bir bakış açısı verecekti.