我们有一个带有Oracle后端的系统,我们可以访问它(虽然可能不是管理访问权限)和我们没有源代码的前端.数据库非常庞大,不易理解 - 我们没有文档.我对甲骨文一般也不是特别了解.
前端的一个方面向数据库查询特定数据集并显示它.我们需要确定正在进行的查询,以便我们可以在没有前端的情况下复制和自动化它(例如,通过定期生成csv文件).
您将使用哪些方法来确定检索此数据集所需的SQL?
目前我倾向于使用EeePC,Wireshark和集线器(在客户端机器上安装Wireshark可能无法实现),但我很想听到任何其他想法以及是否有人能想到这个特定的任何陷阱做法.
显然有很多方法.我觉得最容易的是:
(1)以SYS或SYSTEM身份连接到数据库
(2)查询V $ SESSION以识别您感兴趣的数据库会话.记录SID和SERIAL#值.
(3)执行以下命令以激活会话的跟踪:
exec sys.dbms_system.set_bool_param_in_session( *sid*, *serial#*, 'timed_statistics', true ) exec sys.dbms_system.set_int_param_in_session( *sid*, *serial#*, 'max_dump_file_size', 2000000000 ) exec sys.dbms_system.set_ev( *sid*, *serial#*, 10046, 5, '' )
(4)在客户端应用程序中执行一些操作
(5)终止数据库会话(例如,通过关闭客户端)或停用跟踪(exec sys.dbms_system.set_ev(sid,serial#,10046,0 ,''))
(6)在数据库服务器上找到udump文件夹.将有一个数据库会话的跟踪文件,显示执行的语句和每次执行中使用的绑定值.
此方法不需要任何访问客户端计算机,这可能是一个好处.它确实需要访问数据库服务器,如果您不是DBA并且他们不允许您进入计算机,这可能会有问题.此外,如果您有许多客户端或客户端应用程序打开多个会话,则识别正确的跟踪会话可能很困难.
首先查询Oracle系统视图,如V $ SQL,v $ sqlarea和v $ sqltext.