`
dingjun1
  • 浏览: 213607 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ORACLE 10 JDBC SQL跟踪示例

阅读更多
ORACLE 10 JDBC SQL跟踪示例
1、查询v$parameter视图,查看以下参数的值:
timed_statistics(动态参数,控制计时是否可用,设为TRUE,计时信息会添加到跟踪文件中)
如果为false进行设置
alter session set timed_statistics = TRUE;

max_dump_file_size(跟踪文件大小,一般不用调整)
alter session set max_dump_file_size = 45K;
alter session set max_dump_file_size = 45M;
alter session set max_dump_file_size = unlimited;(不做限制)

确定跟踪文件的位置:
user_dump_dest(专有服务器进程创建的跟踪文件所在目录)
background_dump_dest(后台进程创建的跟踪文件所在的目录)
select name,value from v$parameter where name like '%dump\_dest' escape '\';

background_dump_dest     /home/oracle/oracle/product/10.2.0/db_2/admin/test/bdump

user_dump_dest           /home/oracle/oracle/product/10.2.0/db_2/admin/test/udump


11g使用diagnostic_dest初始化参数

开启跟踪事件(10064)
alter session set events '10064 trace name context forever, level 12';(开启)
alter session set events '10064 trace name context off';(关闭)

在ORACLE 10G可以使用如下方法:
dbms_monitor.session_trace_enable;没有指定参数,使用默认参数,表示对当前调用的会话开启
waits:默认为TRUE,binds 默认为FALSE。
dbms_monitor.session_trace_enable(session_id =>127,
                                  serial_num =>29,
                                  waits      =>TRUE,
                                  binds      =>FALSE)

关闭
dbms_monitor.session_trace_disable(session_id =>127,
                                  serial_num =>29)

dbms_monitor默认只能被sys用户执行
grant execute on dbms_monitor to user;


public Object doInJdbc(Connection conn)  throws Exception{
String[] strArr = new String[OracleConnection.END_TO_END_STATE_INDEX_MAX];
//设置客户端、模块、操作信息,可以对具体的模块或是操作启用SQL跟踪
                                //dbms_monitor.client_id_trace_enable(client_id=>'dj.client',waits=>TRUE,binds=>FALSE);
                                //dbms_monitor.client_id_trace_disable(client_id=>'dj.client');
                                //dbms_monitor.serv_mod_act_trace_enabl(service_name=>'test',没有默认值
                                //                                      module_name=>'test.module',默认值为any_module
                                //                                      action_name=>'test.action',默认值为any_action
                                //                                      waits=>TRUE,
                                //                                      binds=>FALSE,
                                //                                      instance_name=>NULL)RAC环境下需要指定具体的实例
strArr[OracleConnection.END_TO_END_CLIENTID_INDEX] = "dj.client";
strArr[OracleConnection.END_TO_END_ACTION_INDEX] = "test.action";//操作
strArr[OracleConnection.END_TO_END_MODULE_INDEX] ="test.module";//模块

OracleConnection oc = (OracleConnection)conn;
oc.setEndToEndMetrics(strArr, (short)0);

CallableStatement callStmt = conn.prepareCall("{call dbms_monitor.session_trace_enable}");
callStmt.execute();

boolean flag = stmt.execute("alter session set tracefile_identifier = 'arer'");//设置跟踪文件方便查找
System.out.print("set trace_file_identifier success:"+flag);//flag为false,原因待查,但是能设置上。

String sql = "select c_id,c_name,d_booking from t_eg_book where c_name like '%孔%'";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);

rs.close();
stmt.close();
callStmt.close();



return null;
}

根据生成的跟踪文件,提取自己需要的信息:
trcsess [output=<output file name>]  [session=<session ID>][clientid=<clientid>][action=<>][module=<>]

比如从test_ora_12489_arer.trc中提取action为test.action的信息,输出到test_ora_12489.trc2

trcsess output=test_ora_12489.trc2 action="test.action" test_ora_12489_arer.trc;

下面对跟踪文件进行分析:
把分析结果输出到test_ora_12489.txt.
tkprof test_ora_12489.trc test_ora_12489.txt aggregate=no
tkprof参数:
tkprof tracefile outputfile [explain=<user/passwd@url>] [table=][print=<num 打印SQL条数>][aggregate=yes|no]
aggregate指定是否单独处理同样内容的SQL语句。默认情况下不单独处理,设为no表示进行单独处理。


跟踪文件格式解释:
len : Length of SQL statement
dep: Recursive SQL depth
 0 = External / client-originated SQL
 >0 = SQL originated within database*
uid : Parsing user ID
tim : Relative timestamp
 <Oracle9i = 10 millisecond (=1/100 sec.)
 >Oracle9i = microsecond
hv: Hash value
ad: Address (in V$SQLAREA)
err : Error reported
c: CPU time*
 <Oracle9i = 10 millisecond (=1/100 sec.)
 >Oracle9i = microsecond
e: Elapsed time*
p: Number of physical reads
oct : Oracle command type
 2 = INSERT
 3 = SELECT
 6 = UPDATE
 7 = DELETE
og: Optimizer goal
 1 = All_Rows
 2 = First_Rows
 3 = Rule
 4 = Choose
cr: Logical reads (consistent)
cu: Logical reads (current; e.g., “select for update...”)
mis: Cursor missed in the cache (motivates hard parse)
r: Number of rows processed
p1,p2,p3: Wait event parameters
dty: Bind variable data type
 1 = VARCHAR
 2 = NUMBER
 12 = DATE
 96 = CHAR
--------------------------------------------
查看是否有统计信息:
select * from DBA_tab_col_statistics where table_name='';
select * from dba_indexes where table_owner='' and index_name=upper('');
select * from dba_ind_statistics where table_owner='' and index_name=upper('');

user_tab_col_statistics

select histogram from DBA_tab_col_statistics where table_name='';
取值有:none:表示没有直方图信息,
frequency:使用频度直方图,不同值的数目应该小于254
HEIGHT BALANCED:等高直方图,不同值的数据大于254

直方图最多统计254桶(bucket)
查看直方图信息:
select * from dba_tab_histograms

收集某个表中的统计信息
dbms_stats.gather_table_stats(ownname =>'myname' ,tabname =>'mytable' ,method_opt =>'FOR ALL INDEXED COLUMNS size 254' );


OPTIMIZER_INDEX_CACHING
这个初始化参数代表一个百分比,取值范围在0到99之间。缺省值是0,代表当CBO使用索引访问数据时,在内存中发现数据的比率是0%,这意味着通过索引访问数据将需要产生物理读取,代价昂贵。如果使用缺省设置,Oracle评估成本的时候,很多时候就会错误的选择全表扫描。


OPTIMIZER_INDEX_COST_ADJ
这个初始化参数代表一个百分比,取值范围在1到10000之间。该参数表示索引扫描和全表扫描成本的比较。缺省值100表示索引扫描成本等于全表扫描。

这些参数对于CBO的执行具有重大影响,其缺省值对于数据库来说通常需要调整。一般来说对于OPTIMIZER_INDEX_CACHING可以设置为90左右。对于大多数OLTP系统,OPTIMIZER_INDEX_COST_ADJ可以设置在10到50之间。对于数据仓库和DSS系统,可能不能简单的把 OPTIMIZER_INDEX_COST_ADJ设置为50,通常我们需要反复调整取得一个合理值。
分享到:
评论

相关推荐

    Java使用Jdbc连接Oracle执行简单查询操作示例

    Java使用Jdbc连接Oracle执行简单查询操作示例 Java使用Jdbc连接Oracle执行简单查询操作,是指使用Java语言通过Jdbc(Java Database Connectivity)连接Oracle数据库并执行简单查询操作的过程。本文将通过实例形式...

    oracle 12c JDBC驱动 UCP 下载 版本12.1.0.2

    Oracle 12c JDBC驱动与Universal Connection Pool (UCP) 是数据库连接的重要组成部分,尤其对于Java开发者来说,它们是与Oracle数据库进行交互的关键工具。在本文中,我们将深入探讨这两个概念,以及如何下载和使用...

    oracle-jdbc官方文档

    根据提供的文件信息,我们可以深入探讨Oracle JDBC的相关知识点。Oracle JDBC(Java Database Connectivity)是一种用于连接Java应用程序与Oracle数据库的技术。它允许开发人员使用标准的Java编程接口来访问Oracle...

    Oracle-jdbc-12.2.0.1.zip

    Oracle JDBC驱动程序是Oracle公司提供的一种Java数据库连接(JDBC)接口,用于在Java应用程序中与Oracle数据库进行交互。在Oracle-jdbc-12.2.0.1.zip压缩包中,包含了Oracle JDBC驱动的特定版本,即12.2.0.1,这是...

    Oracle的jdbc8jar及版本说明.zip

    Oracle的JDBC驱动是连接Java应用程序与Oracle数据库的关键组件,ojdbc8.jar是Oracle公司针对Java 8及以上版本提供的最新JDBC驱动程序。这个压缩包"Oracle的jdbc8jar及版本说明.zip"包含了ojdbc8.jar文件以及一个名为...

    weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB 类型转换解决办法

    这是因为 WebLogic 服务器为了更好地管理和操作数据库连接,会使用自己的包装类 `weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB` 来表示 CLOB 类型的数据,而不是直接使用 Oracle 提供的标准 `oracle.sql.CLOB` 类。...

    oracle的jdbc驱动包

    在这个示例中,`"jdbc:oracle:thin"`是URL模式,`"@//hostname:port/service_name"`是Oracle数据库的连接信息,`"username"`和`"password"`是数据库登录凭证。 JDBC接口提供了Statement、PreparedStatement和...

    oracle 10g jdbc 驱动

    使用Oracle 10g JDBC驱动时,你需要在Java代码中加载驱动,建立数据库连接,执行SQL语句,然后关闭连接。例如: ```java import java.sql.*; public class OracleJDBCDemo { public static void main(String[] ...

    sql server mysql oracle jdbc连接

    本篇文章将深入探讨标题"sql server mysql oracle jdbc连接"所涉及的知识点,包括SQL Server、MySQL和Oracle这三种主流数据库的JDBC连接。 首先,JDBC是Java API,它允许Java程序通过Java代码与数据库进行通信。...

    Oracle 官方 JDBC Demo JAVA

    Oracle官方JDBC Demo是Oracle公司提供的Java数据库连接(JDBC)示例代码,旨在帮助开发者理解和使用JDBC驱动程序与Oracle数据库进行交互。这个压缩包包含了一些基础到高级的JDBC操作实例,对于初学者和有经验的开发...

    通过ORACLE通用连接访问SQLServer数据库的方法

    本文将详细探讨如何使用Oracle的通用连接(JDBC)技术来访问SQL Server数据库,帮助你理解这一跨数据库操作的过程。 首先,我们要明白的是Oracle的JDBC驱动程序(Java Database Connectivity)是实现这一目标的基础...

    Oracle_JDBC_ALL.zip

    Oracle JDBC ALL.zip是一个包含Oracle...以上代码展示了如何通过JDBC建立与Oracle数据库的连接,执行SQL查询并处理结果集。在实际应用中,还需要考虑异常处理、资源关闭以及事务管理等因素,以确保代码的健壮性和性能。

    oracle database jdbc developer's guide and reference 10g release1(10/1) part no. B10979-02 June 2004

    根据提供的文档信息,本文将对《Oracle Database JDBC Developer's Guide and Reference 10g Release1 (10.1)》中的关键知识点进行详细介绍。 ### 一、Oracle 10g JDBC 概述 #### 1.1 JDBC简介 Java Database ...

    JDBC汇总 包含sql oracle的jdbc代码

    在标题和描述中提到的“JDBC汇总”指的是对不同数据库(如SQL Server、Oracle、MySQL和Sybase)的JDBC驱动程序及其连接代码的总结。以下是这些数据库的JDBC连接代码示例: 1. **Microsoft SQL Server**: - 对于...

    jdbc连接oracle简单示例

    本示例将详细解释如何在Eclipse集成开发环境中,通过JDBC连接到Oracle数据库。 首先,我们需要了解JDBC的基本概念。JDBC是一个Java API,它提供了一组接口和类,使得Java程序可以与各种数据库进行交互。它允许...

    testOracle测试jdbc for Oracle

    标签“demo for jdbc Oracle 测试”表明这是一个示例程序,旨在展示如何在实际项目中使用JDBC连接Oracle数据库。这对于我们学习和调试JDBC代码非常有帮助,可以作为模板参考,快速搭建与Oracle数据库交互的基础框架...

    oracle 11g jdbc

    Oracle 11g JDBC是Oracle数据库与Java应用程序之间的一个重要桥梁,它允许Java开发者通过编写Java代码来访问和操作Oracle数据库。JDBC(Java Database Connectivity)是Java平台的标准API,用于连接各种数据库,包括...

    jdbc-oracle.rar_JDBC ORACLE_java JDBC orac_java jdbc oracle_jdbc

    在Java编程语言中,JDBC(Java Database Connectivity)是一个用于与各种数据库进行交互的标准接口。...通过实践这个例子,你可以了解到JDBC连接Oracle的具体步骤,以及如何执行SQL查询和处理结果。

    JDBC实现Oracle数据库的增删改查

    针对Oracle数据库,JDBC提供了特殊的功能,如使用Oracle的CallableStatement执行PL/SQL存储过程。以下是一些示例代码: ```java // 加载Oracle驱动 Class.forName("oracle.jdbc.OracleDriver"); // 建立连接 ...

    oracle-jdbc分页实现(只需传入sql语句即可实现分页)

    Oracle JDBC分页实现是数据库操作中的一个重要环节,尤其是在处理大量数据时,为了...总之,Oracle JDBC分页实现涉及SQL查询语句的设计和Java代码的配合,合理利用Oracle的特性可以有效地实现高效、灵活的分页功能。

Global site tag (gtag.js) - Google Analytics