如何跟踪oracle用户,并得到跟踪信息
用hibernate没有,用的设置属性show_sql为true
成都创新互联是一家专业提供普安企业网站建设,专注与成都网站建设、成都网站制作、HTML5、小程序制作等业务。10年已为普安众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
没用,只想从后台数据库看对这个数据库执行的sql问题补充:unika_ly12 写道
那你直接查询 v$sqltext 和 v$session 好了
首先,你要以dba身份登陆数据库。
第二,为某个用户开启sql跟踪。那个用户就是你要跟踪的、正在执行sql语句的那个用户。命令如下:
execute dbms_system.set_sql_trace_in_session(sid,serial#,true)
其中参数的意义是,sid-会话id,serial#-序列号,这两个参数可以从v$session中得到。
第三,上面的命令执行成功之后数据库就自动对该用户所发出的所有sql语句进行跟踪,并把结果写在用户跟踪文件里。用户跟踪文件存放在数据库服务器上,路径请参考init.ora文件中的udump参数值。文件名为ora_sid_xxxx.trc(for unix)或者oraxxxxx.trc(for NT),其中xxxx文件系统进程编号,这个编号可以从v$process和v$session两个表通过关联的方式查询得到。当然你也可以简单的查看一下哪个trc文件的日期最新,哪个文件就是你要的结果了。
首先,你要以dba身份登陆数据库。
第二,为某个用户开启sql跟踪。那个用户就是你要跟踪的、正在执行sql语句的那个用户。命令如下:
execute dbms_system.set_sql_trace_in_session(sid,serial#,true)
其中参数的意义是,sid-会话id,serial#-序列号,这两个参数可以从v$session中得到。
第三,上面的命令执行成功之后数据库就自动对该用户所发出的所有sql语句进行跟踪,并把结果写在用户跟踪文件里。用户跟踪文件存放在数据库服务器上,路径请参考init.ora文件中的udump参数值。文件名为ora_sid_xxxx.trc(for unix)或者oraxxxxx.trc(for NT),其中xxxx文件系统进程编号,这个编号可以从v$process和v$session两个表通过关联的方式查询得到。当然你也可以简单的查看一下哪个trc文件的日期最新,哪个文件就是你要的结果了。
execute dbms_system.set_sql_trace_in_session(sid,serial#,false)Good Luck我按你说的做了一遍,execute dbms_system.set_sql_trace_in_session(sid,serial#,true)
oracle怎样打开跟踪tracing
trc文件是oracle的系统跟踪文件(trace), 当系统启动或运行过程中出现错误时,系统会自动记录跟踪文件到指定的目录, 以便检查问题原因。备注:trace文件有后台进程或者服务在发生错误时产生的,每个进程或者服务会产生单独的一个trace文件,如果没用的话,可以直接删除就可以了。
如何在Oracle 10g中跟踪SQL
在具有许多活跃用户的繁忙生产环境中,跟踪SQL会话是费时且十分复杂的,因为在任何使用连接池的多层系统中处理SQL语句可能要涉及多个进程,或者甚至是不同的实例。
利用Oracle数据库10g,Oralce通过一个新的内置软件包DBMS_MONITOR合理化了SQL的跟踪,这个软件包中包含以前无书面记载的跟踪工具(如DBMS_SUPPORT软件包)的功能。现在,您可以轻松地从头到尾--从客户机到中间层再到后端--跟踪任何用户的会话,并且基于特定的客户ID、模块或动作生成跟踪文件。
此外,Oracle数据库10g包含一种新的实用程序trcsess,它可以让您基于会话ID或模块名称之类的条件,有选择地从大量跟踪文件中抽取出跟踪数据,并将它们保存到一个文件中。该实用程序在共享服务器配置中特别有用,因为调度程序可能把每一个用户请求传递给不同的共享服务器进程,从而为任何给定的会话产生多个跟踪文件。与通过大量跟踪文件发掘信息不同,Oracle数据库10g的trcsess可以让您获得关于单一用户会话的整合后的跟踪信息。
开始
和Oracle数据库的以前版本一样,跟踪文件将被输出到由服务器的初始化文件(或spfile)的user_dump_dest参数指定的目录中。默认的位置取决于操作系统;例如,对于使用DBCA的Microsoft Windows平台,默认位置是$ORACLE_BASE\instance_name\admin\udump,其中instance_ name是Oracle实例的名称。您可以通过使用以下改变会话命令来动态地更改该参数:
alter session set user_dump_dest="c:\kflosstrace";
您还可以把您自己的标记添加到跟踪文件名中,以便您能够更容易地找到生成的文件。为此,可以在启动跟踪之前设置tracefile_identifier初始化参数:
alter session set
tracefile_identifier ="kfloss_test";
通过该命令生成的跟踪文件带有您设置的附加在文件名后的字符串值。尽管这些改变会话命令都不是必要的,但是它们都会使查找跟踪会话的结果更容易。
现在,我们已经设置了这些参数,那么让我们看看新的跟踪软件包和Oracle企业管理器的界面。让我们使用新的DBMS_MONITOR软件包通过模块名称和客户机名称来建立一个跟踪。
用DBMS_MONITOR建立跟踪
DBMS_MONITOR包具有多个例程,用于启用和禁用统计数据集合,以及用于根据会话ID进行跟踪、或者基于服务名称、模块名称和动作名称的组合进行跟踪。(它们三者从层次结构上是关联的:您不能在不指定模块和服务名称的情况下指定一个动作,但是您可以只指定服务名称,或者只指定服务名称和模块名称)。 模块名称和动作名称(如果有的话)都来自于应用程序代码内部。例如,Oracle电子商务套件应用程序在代码中提供了模块名称和动作名称,这样您就可以在任何Oralce企业管理器页面中通过名称来识别它们。 (PL/SQL开发人员可以通过使用DBMS_APPLICATION_INFO包设置模块名称和动作名称,把一些调用嵌入到他们的应用程序中)。
请注意,设置模块、动作及其他参数(如client_id)将不造成对数据库的往返操作--这些例程携带来自应用程序的所有调用。
服务名称由用于连接该服务的连接字符串来确定。未与特定服务关联的用户会话将由sys$users处理(sys$background是后台进程的默认服务)。由于我们具有一个服务和一个模块名称,因而我们可以启动对该模块的跟踪,如下所示:
SQL exec dbms_monitor.serv_mod_act_trace_enable
(service_name='testenv', module_name='product_update');
PL/SQL过程已成功完成。
我们可以启动对客户机的跟踪:
SQL exec dbms_monitor.client_id_trace_enable
(client_id='kimberly');
PL/SQL过程已成功完成。
请注意,所有这些设置都是永久性的--所有与该服务和模块关联的会话都会被跟踪,而不仅仅是跟踪当前会话。
为了基于会话ID跟踪SQL,可以查看Oracle企业管理器的Top Sessions页面,或者像您当前做的那样查询V$SESSION视图。
SQL select sid, serial#, username
from v$session;
SID SERIAL# USERNAME
------ ------- ------------
133 4152 SYS
137 2418 SYSMAN
139 53 KIMBERLY
140 561 DBSNMP
141 4 DBSNMP
. . .
168 1
169 1
170 1
28 rows selected.
通过会话ID(SID)和序号,您可以使用DBMS_MONITOR只对下面的会话启用跟踪:
SQL exec dbms_monitor.session_trace_enable(139);
PL/SQL过程已成功完成。
该序号默认为该SID的当前序号(除非另外指定),因此如果那就是您想跟踪的会话和序号,那么您就不必查看更多的内容了。还有,默认情况下,WAITS设置为true而BINDS设置为false,因此上面的语法实际上与下面的语法效果相同:
SQL exec dbms_monitor.session_trace_enable
(session_id=139, serial_num=53, waits=true, binds=false);
请注意,WAITS和BINDS是相同的参数,您在过去可能已经使用DBMS_SUPPORT和10046事件对它们进行了设置。
如果您正在一个生产环境中工作,那么此时您最好重新运行出错的SQL或应用程序,并且相应地创建跟踪文件。
用企业管理器建立跟踪
通过Oracle企业管理器建立跟踪从Top Consumers页面(可以通过Additional Monitoring Links区域中的Performance页面得到,如图1所示)开始。该页面显示服务、模块、客户和动作对系统资源的当前使用情况。
图1:Oracle企业管理器的Top Consumers页面
您可以单击Top Services、Top Modules、Top Actions、Top Clients或Top Sessions选项卡,来查看这些类别的顶级消费者中每一种的详细信息,随后您可以通过这些页面中的每一个页面轻松启用(或禁用)SQL跟踪。从页面上的列表中简单地选择项目,然后单击启用SQL跟踪(Enable SQL Trace)开始跟踪(当您完成跟踪时,单击禁用按钮)。
您还可以启用(或禁用)这些页面上列出的任何项目的统计数据集合。(DBMS_MONITOR还提供了用于启用和禁用数据集合的例程)。
分析跟踪结果
获取关于Kimberly Floss的图书的信息
无论您是使用DBMS_MONITOR或者是使用Oracle企业管理器建立跟踪,您都将使用trcsess 命令行工具来整合跟踪文件。单击Oracle企业管理器中的查看SQL跟踪(View SQL Trace)按钮显示一个页面,其中显示了您将用于整合所有跟踪文件的语法。
要确保用双引号括住字符串,并在文件名后添加一个".trc"扩展名;否则,TKPROF将不会把它作为一个文件名来接受。在执行该命令之前,找到在user_dump_dest(或者,如果您没有更改该参数名,则在\udump)中指定的目录。
C:\...\udump trcsess output="kfloss.trc" service="testenv"
module="product update"
action="batch insert"
随后,您可以对整合的跟踪文件运行TKPROF,以生成一份报告。
C:\...\udump tkprof kfloss.trc
output=kfloss_trace_report SORT=(EXEELA, PRSELA, FCHELA)
如果您不终止跟踪,那么运行该服务和模块的每一个会话都会被跟踪。因此,当您完成跟踪时,要确保通过使用Oralce企业管理器或DBMS_MONITOR包来终止跟踪。
如何实时跟踪oracle的sql语句
如何实时跟踪oracle的sql语句
这个要开启oracle的audit功能。
select * from DBA_AUDIT_OBJECT
如何在Oracle数据库10g中跟踪SQL
1. 启用 sql_trace 跟踪当前 session 开启会话跟踪:alter session set sql_trace=true; 关闭会话跟踪:alter session set sql_trace=false; 2. 启用 10046 事件跟踪全局 session 这将会对整个系统的性能产生严重的影响,所以一般不建议开启。 ...
如何利用JDBC启动Oracle 自动追踪
1.下载Debug版本jar包
首先要下载一个Debug版本的JDBC jar包,Debug版本的jar包命名形式为jdbcX_g.jar
2.启动Logging模式
第一种方式:设置运行环境变量 java -Doracle.jdbc.Trace=true ...(elipse中run-run configurations-arguments一栏)
第二种方式:在程序中控制(建议采用这种方式)
1
2
3
4
5
6
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
String loader = Thread.currentThread().getContextClassLoader().toString().replaceAll("[,=:\"]+", "");
ObjectName pattern = new ObjectName("com.a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dBmhRYnHTkmh7-myFhPA7W0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnWbznWcYrjD3rHDzPHnYPs" target="_blank" class="baidu-highlight"oracle/a.jdbc:type=diagnosability,name=" + loader);
ObjectName diag = ((ObjectName[]) (mbs.queryNames(pattern, null).toArray(new ObjectName[0])))[0];
mbs.setAttribute(diag, new Attribute("LoggingEnabled", true));
System.out.println("LoggingEnabled = " + mbs.getAttribute(diag, "LoggingEnabled"));
如果用的是Oracle 10g,直接执行:
1
2
3
/**oracle 10g 启动方法*/
oracle.jdbc.driver.OracleLog.setTrace(true); // enable logging
oracle.jdbc.driver.OracleLog.setTrace(false); // disable logging
3.配置log文件
jdbc使用的是 java.util.logging包中的Logger对象打印log。
1
2
3
4
5
6
/**配置a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dBmhRYnHTkmh7-myFhPA7W0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnWbznWcYrjD3rHDzPHnYPs" target="_blank" class="baidu-highlight"log文件/a*/
Handler fh = new FileHandler("./oracle_jdbc_log.log");
fh.setLevel(Level.ALL);
fh.setFormatter(new SimpleFormatter());
Logger.getLogger("").addHandler(fh);
Logger.getLogger("").setLevel(Level.ALL);
完成的Demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import javax.management.Attribute;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.InvalidAttributeValueException;
import javax.management.MBeanException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.ReflectionException;
public void run() throws SQLException {
DriverManager.registerDriver(new OracleDriver());
//需在加载OracleDriver之后开启log
enableOracleLogging();
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
try {
conn = getConnection();
System.out.println("Connection retrieved..");
stmt = conn.createStatement();
rset = stmt.executeQuery("select empno from emp");
while (rset.next()) {
System.out.println(rset.getInt(1));
}
} catch (SQLException sqle) {
sqle.printStackTrace();
} finally {
if (rset != null) {
rset.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
}
public static void enableOracleLogging() {
try {
/** 配置a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dBmhRYnHTkmh7-myFhPA7W0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnWbznWcYrjD3rHDzPHnYPs" target="_blank" class="baidu-highlight"log文件/a */
Handler fh = new FileHandler("./oracle_jdbc_log.log");
fh.setLevel(Level.ALL);
fh.setFormatter(new SimpleFormatter());
Logger.getLogger("").addHandler(fh);
Logger.getLogger("").setLevel(Level.ALL);
/** oracle a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1dBmhRYnHTkmh7-myFhPA7W0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnW0dnWbznWcYrjD3rHDzPHnYPs" target="_blank" class="baidu-highlight"11g/a 启动方法 */
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
String loader = Thread.currentThread().getContextClassLoader().toString().replaceAll("[,=:\"]+", "");
ObjectName pattern = new ObjectName("com.oracle.jdbc:type=diagnosability,name=" + loader);
ObjectName diag = ((ObjectName[]) (mbs.queryNames(pattern, null).toArray(new ObjectName[0])))[0];
mbs.setAttribute(diag, new Attribute("LoggingEnabled", true));
System.out.println("LoggingEnabled = " + mbs.getAttribute(diag, "LoggingEnabled"));
/** oracle 10g 启动方法 */
// oracle.jdbc.driver.OracleLog.setTrace(true); // enable logging
// oracle.jdbc.driver.OracleLog.setTrace(false); // disable logging
} catch (Exception e) {
e.printStackTrace();
}
}
分享名称:oracle如何开启跟踪,oracle怎么跟踪sql
URL分享:http://scgulin.cn/article/hcchdd.html