我该如何获取Oracle并查看正在运行的过程?

6
下午好。我该如何获取Oracle并查看正在运行的过程?

请查看此链接:https://dev59.com/vEXRa4cB1Zd3GeqPtab3 - T.S.
2个回答

25

根据您的需求,这可能足够了(但需要访问v$session和dba_objects):

select 'CALLED PLSQL', vs.username, d_o.object_name -- whatever info you need
  from dba_objects d_o
       inner join
       v$session vs
          on d_o.object_id = vs.plsql_entry_object_id
union all
select 'CURRENT PLSQL', vs.username, d_o.object_name
  from dba_objects d_o
       inner join
       v$session vs
          on d_o.object_id = vs.plsql_object_id

根据文档:
PLSQL_ENTRY_OBJECT_ID - 栈顶PL/SQL子程序的ID;如果栈上没有PL/SQL子程序,则为NULL。
PLSQL_OBJECT_ID - 当前正在执行的PL/SQL子程序的对象ID;如果执行SQL,则为NULL。

谢谢。这正是我需要的。现在就借此机会问一下,您是否知道如何查看特定过程正在运行的查询?! - Daniel Sousa
3
您可以添加v$sql以在您检查时获取当前正在运行的SQL:在SELECT列表中LEFT OUTER JOIN v$sql vsq ON vsq.sql_id = vs.sql_id,并添加vsq.sql_fulltext。哦,您可能还想包括WHERE vs.status ='ACTIVE'。 - Patrick Marchand
我已经按照你说的做了,它显示了我想要的,但是生成的值出现在B3:,:B2的位置。你不能显示实际的值吗? - Daniel Sousa
我不理解你所说的“生成值”和“实际值”的区别。 - Patrick Marchand
在SGL_FULLTEXT tabeka v $ sql领域中,查询正在执行。但是,在该查询中,出现了id_number =:B2而不是例如id_number:1234。我的问题是是否可以查看:B2对应的值。 - Daniel Sousa
当然,可以查看v$sql_bind_capture:http://docs.oracle.com/cd/B28359_01/server.111/b28320/dynviews_3043.htm - Patrick Marchand

0
select 'CALLED PLSQL', vs.username, d_o.object_name -- whatever info you need
  from dba_objects d_o
       inner join
       v$session vs
          on d_o.object_id = vs.plsql_entry_object_id
union all
select 'CURRENT PLSQL', vs.username, d_o.object_name
  from dba_objects d_o
       inner join
       v$session vs
          on d_o.object_id = vs.plsql_object_id

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接