检查 DB Link oracle 运行的历史会话

问题描述 投票:0回答:1

我在

DB1
 中创建了从 
table2
DB2

的数据库链接
Create database link mylink
Connect to user identified by passwd
Using DB2

然后在

DB1
我运行查询:

Select * from table2@mylink

在 DB2 中,我可以检查上面的 sql 文本并找出运行它的机器、操作系统用户吗?

oracle dblink
1个回答
0
投票

是的,当然可以。但请注意,Oracle 通过远程链接转换您的 SQL,它不会完全相同,但仍然基本上可以识别。您会注意到的一件事是所有标识符均全部大写并用双引号引起来。第二件事是

osuser
将是
oracle
(假设默认软件所有者用于源数据库),并且
machine
将是源数据库的主机。它不会有任何识别信息将您直接绑定到客户端会话,因为您的 Oracle 拥有的“影子进程”正在建立与远程的连接。换句话说,本地会话的 v$process.spid 值将是远程会话的
v$session.process
如果你知道你的本地会话,你可以这样找到它:

本地:

select spid from gv$process where (inst_id,addr) in (select inst_id,paddr from gv$session where sid = ? and session# = ? and inst_id = ?)

远程:

select * from gv$session where process = {spid from above} and machine = {source db host}

否则,您可以尝试在共享池中搜索 SQL。在目标数据库中,查询 

gv$sqlarea

过滤表名称,全部大写并用双引号括起来:

select * from gv$sqlarea where sql_fulltext like '%"TABLE2"%'

,看看你是否可以通过这种方式找到它。如果当前正在运行,您可以加入

sql_id
gv$session
以获取会话信息。如果它是最近运行的,您也许可以在
gv$active_session_history
中找到它。
    

© www.soinside.com 2019 - 2024. All rights reserved.