如何查看对 oracle 数据库的查询

如何查看对 oracle 数据库的查询

所讨论的数据库是 Oracle 10g Enterprise 软件

可用的工具有 Toad、SQL Developer 和其他内置的 Oracle 工具

我在网络内有一个应用服务器,在网络内有一个数据库服务器。我在防火墙外还有一个系统。

使用我当前的监控工具:Toad 中的 SGA 监视器

我可以看到从应用程序服务器到数据库的查询,但我看不到从防火墙发送到系统/从系统发送的内容,而防火墙确实与数据库进行通信。

运行数据包嗅探器,我可以看到数据库与防火墙外部的系统(dmz)进行通信

什么命令可以让我查看所有正在进行的查询,以及如何运行它?

答案1

我使用以下 sql 显示内存中所有包含“ITEM_F”的 sql。您可以将“ITEM_F”更改为任何您想要的。然后我使用另一个名为 HASH_VALUE.sql 的 sql 显示完整的 sql

EXECUTIONS HASH_VALUE  GETS_PER_EXEC SEC_PER_EXEC SQL_TEXT
---------- ---------- -------------- ------------ ---------------------
         1 3605439262      507993.00   4.24581775 BEGIN    IF '%CAPA%'
         1  671043237      517057.00   26.5039965 BEGIN    IF '%DEV%' =
         1  336821122      527328.50   1422.86585 /* MV_REFRESH (INS) *
         1  484748009      539104.00    22.037663 BEGIN    IF '%MCO%' =
         1 3169765572      564994.50   1274.37927 INSERT /*+ BYPASS_REC
         1 2692239685      573682.50   172.683195 BEGIN DBMS_MVIEW.REFR
         1 2023740499      577038.00   3.74569625 INSERT INTO MDS.MATT_
         1 2724147626      655448.00   58.4461736 INSERT /*+ BYPASS_REC
         1 3939050362      730432.00   23.7762682 INSERT INTO MDS.MATT_
         1 3275016008      792977.50   142.068046 INSERT /*+ BYPASS_REC
         1   60973157      915308.50    1074.8388 BEGIN dbms_mview.refr
         1 1262896430     1044207.50   145.147301 BEGIN DBMS_MVIEW.REFR
         1  481615044     1185227.50   197.121223 INSERT /*+ BYPASS_REC
         1  832862631     1259484.50   1483.57486 /* MV_REFRESH (INS) *
         1  413596320     1327330.00   213.819306 BEGIN dbms_mview.refr
         1 1471539484     1340705.50   1091.36564 INSERT INTO MATT_AML_
         1  846352950     1929911.50   1243.53836 /* MV_REFRESH (INS) *
        18 3947679100      316931.68   3.47618447 SELECT  distinct  TOT
        18 1224535723     6558946.68    29.210453 SELECT  distinct  CHA
        20 1746064953    59020824.67   1370.51753 INSERT /*+ BYPASS_REC

EQADMRT > list
  1  select sql_id,address,parse_calls,buffer_gets,executions,hash_value,buffer_gets/(executions+1) gets_per_exec,
  2  elapsed_time/1000000/(executions+.000001) sec_per_exec,sql_text
  3  from gv$sqlarea
  4  where ( upper(sql_text) like upper('%&1%') )
  5  -- and buffer_gets > 0
  6* order by buffer_gets

EQADMRT > @hash_value 1471539484

HASH_VALUE=1471539484

INSERT INTO MATT_AML_STATUS_3 ( SELECT DISTINCT F.PJ_PK, F.SCI_I
TEM_SRC_ID, F.RS_SUPPLIER_ID,D.PC_MCO_ID,H.ENTRY_VALUE, G.ITEM_M
FR_PART_ID,I.PC_MCO_NO,AGILE_FLEX.TEXT FROM PCM_ANALYSIS_F F, OD
M.ODM_BUYER_LINE_CARD B , ODM_MANUFACTURER_OBJ_D C, PC_MCO_ITEM_
F D, ITEM_MFR_PART_F G,ODM_AML_PREF_STATUS_D H , PC_MCO_F I,ODM.
ODM_AGILE_FLEX_STG AGILE_FLEX WHERE F.RS_SUPPLIER_ID = B.BLC_SUP
PLIER_ID(+) AND D.PC_MCO_ID = I.PC_MCO_ID AND D.PC_MCO_WORKFLOW_
ID=I.PC_MCO_WORKFLOW_ID AND B.BLC_OBJECT_ID = C.ENTRY_ID (+) AND
 F.SCI_ITEM_SRC_ID = D.ITEM_ID (+) AND C.ENTRY_ID = G.MANUFACTUR
ER_ID AND D.PC_MCO_WORKFLOW_ID IN ( SELECT PC_MCO_WORKFLOW_ID FR
OM PC_MCO_WORKFLOW_D G WHERE WORKFLOW='PCM OEM MCO V1.1' AND WOR
KFLOW_STATE NOT IN ('Canceled') ) AND D.CREATED_TIME_ID = (SELEC
T MAX(E.CREATED_TIME_ID) FROM PC_MCO_ITEM_F E WHERE E.PC_MCO_ID=
D.PC_MCO_ID) AND G.CHANGE_ID = D.PC_MCO_ID AND G.ITEM_MFR_PART_P
REFER_STATUS_ID = H.ENTRY_ID AND F.SCI_ITEM_SRC_ID=G.ITEM_ID(+)
AND G.ITEM_ID = AGILE_FLEX.ID(+) AND G.MANUBY_ID =AGILE_FLEX.OBJ
_ID(+))
EQADMRT > list
  1  select
  2  --inst_id,sql_id,hash_value,
  3  piece, sql_text
  4  from gv$sqltext b
  5  where b.hash_value=&1
  6  -- and inst_id=1
  7* order by inst_id,hash_value,b.piece

答案2

您有权访问 Oracle 企业管理器 (OEM) 吗?

您应该能够检查在那里针对您的数据库运行的 SQL 语句...例如:

这是 oracle 11 文档,但 10g 有类似的界面

相关内容