- 浏览: 213663 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
strong8808:
activemq5.8.0 客户端,服务端启动序列图 -
xurichusheng:
第一题,如果使用 not exists 的话,可以改成:SEL ...
SQL笔试题 -
dingjun1:
cuisuqiang 写道如何解决呢?我的是对了也照样缓存增加 ...
事务未正确关闭引起的HIBERNATE SESSION不能正确关闭 -
dingjun1:
aijezdm915 写道lz ,我也是在写项目描述是犯愁,能 ...
如果在简历中描述项目 -
aijezdm915:
lz ,我也是在写项目描述是犯愁,能否给个你的简历demo,我 ...
如果在简历中描述项目
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,通常我们需要反复调整取得一个合理值。
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,通常我们需要反复调整取得一个合理值。
发表评论
-
tomcat配置数据源(转载)
2012-02-23 10:57 949转载:http://www.douban.com/note/7 ... -
行连接检测(待整理 )
2010-12-17 10:54 1322网上搜集的,待整理 pctused(percent used ... -
在Oracle 9i下的display_cursor脚本
2010-12-08 13:37 1253转载:http://www.laoxiong.net/orac ... -
事务级别及相关内容
2010-09-19 20:18 875事务的四个属性:原子 ... -
ORACLE 内存结构 事件相关 statspack
2010-09-05 16:16 1306基本的内存结构包括:System Global Area SG ... -
ORA-12560及修改sys密码
2010-09-01 10:44 2120修改了,tnsnames.ora listener.ora中的 ... -
数据库设计经验谈(转)
2010-07-27 22:07 873一个成功的管理系统,是由:[50% 的业务 + 50% 的软件 ... -
Oracle 数据类型及存储方式
2010-07-13 08:29 1070http://www.iteye.com/topic/2207 ... -
not in null 与null运算
2010-04-23 12:09 1652Not in \ in中包含有null值的列,不会排除null ... -
触发器
2010-04-15 16:41 42select * from user_trig ... -
ORACLE索引
2010-04-01 14:52 1186转载:http://log-cd.iteye.co ... -
inner join left join right join on where
2010-03-31 18:49 1890理解 inner join 和 outer join inne ... -
理解ORACLE字符集
2010-03-23 19:08 1155转载:http://silverw0396.iteye.com ... -
isqlplus不能正常访问的问题
2010-03-19 13:02 1106rhel5.2 oracle 10.0.2.0.1.0 1、 ... -
red hat enterprise linux 5.2 install and startup oracle 10.2.0
2010-03-17 21:04 1710d rhel5.2下安装ORACLE 10G 我的安装步骤参考 ... -
PreparedStatement.setObject(int i,Object obj) 无效的列类型
2009-10-26 17:21 4953当往下面的方法传递参数时,传入了java.util.Date类 ... -
ORA-01791: 不是 SELECTed 表达式
2009-10-26 16:50 2366ORA-01791: 不是 SELECTed 表达式,这报错莫 ... -
ORACLE SQL基础知识
2009-04-15 18:41 2097问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也 ... -
ORACLE TEXT全文检索
2008-10-07 18:23 2316ORACLE 版本10.0.2 查看数据库相关的信息selec ... -
SQL笔试题
2008-07-15 15:12 39981.用一条SQL语句 查询出 ...
相关推荐
Java使用Jdbc连接Oracle执行简单查询操作示例 Java使用Jdbc连接Oracle执行简单查询操作,是指使用Java语言通过Jdbc(Java Database Connectivity)连接Oracle数据库并执行简单查询操作的过程。本文将通过实例形式...
Oracle 12c JDBC驱动与Universal Connection Pool (UCP) 是数据库连接的重要组成部分,尤其对于Java开发者来说,它们是与Oracle数据库进行交互的关键工具。在本文中,我们将深入探讨这两个概念,以及如何下载和使用...
根据提供的文件信息,我们可以深入探讨Oracle JDBC的相关知识点。Oracle JDBC(Java Database Connectivity)是一种用于连接Java应用程序与Oracle数据库的技术。它允许开发人员使用标准的Java编程接口来访问Oracle...
Oracle JDBC驱动程序是Oracle公司提供的一种Java数据库连接(JDBC)接口,用于在Java应用程序中与Oracle数据库进行交互。在Oracle-jdbc-12.2.0.1.zip压缩包中,包含了Oracle JDBC驱动的特定版本,即12.2.0.1,这是...
Oracle的JDBC驱动是连接Java应用程序与Oracle数据库的关键组件,ojdbc8.jar是Oracle公司针对Java 8及以上版本提供的最新JDBC驱动程序。这个压缩包"Oracle的jdbc8jar及版本说明.zip"包含了ojdbc8.jar文件以及一个名为...
这是因为 WebLogic 服务器为了更好地管理和操作数据库连接,会使用自己的包装类 `weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB` 来表示 CLOB 类型的数据,而不是直接使用 Oracle 提供的标准 `oracle.sql.CLOB` 类。...
在这个示例中,`"jdbc:oracle:thin"`是URL模式,`"@//hostname:port/service_name"`是Oracle数据库的连接信息,`"username"`和`"password"`是数据库登录凭证。 JDBC接口提供了Statement、PreparedStatement和...
使用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连接。 首先,JDBC是Java API,它允许Java程序通过Java代码与数据库进行通信。...
Oracle官方JDBC Demo是Oracle公司提供的Java数据库连接(JDBC)示例代码,旨在帮助开发者理解和使用JDBC驱动程序与Oracle数据库进行交互。这个压缩包包含了一些基础到高级的JDBC操作实例,对于初学者和有经验的开发...
本文将详细探讨如何使用Oracle的通用连接(JDBC)技术来访问SQL Server数据库,帮助你理解这一跨数据库操作的过程。 首先,我们要明白的是Oracle的JDBC驱动程序(Java Database Connectivity)是实现这一目标的基础...
Oracle JDBC ALL.zip是一个包含Oracle...以上代码展示了如何通过JDBC建立与Oracle数据库的连接,执行SQL查询并处理结果集。在实际应用中,还需要考虑异常处理、资源关闭以及事务管理等因素,以确保代码的健壮性和性能。
根据提供的文档信息,本文将对《Oracle Database JDBC Developer's Guide and Reference 10g Release1 (10.1)》中的关键知识点进行详细介绍。 ### 一、Oracle 10g JDBC 概述 #### 1.1 JDBC简介 Java Database ...
在标题和描述中提到的“JDBC汇总”指的是对不同数据库(如SQL Server、Oracle、MySQL和Sybase)的JDBC驱动程序及其连接代码的总结。以下是这些数据库的JDBC连接代码示例: 1. **Microsoft SQL Server**: - 对于...
本示例将详细解释如何在Eclipse集成开发环境中,通过JDBC连接到Oracle数据库。 首先,我们需要了解JDBC的基本概念。JDBC是一个Java API,它提供了一组接口和类,使得Java程序可以与各种数据库进行交互。它允许...
标签“demo for jdbc Oracle 测试”表明这是一个示例程序,旨在展示如何在实际项目中使用JDBC连接Oracle数据库。这对于我们学习和调试JDBC代码非常有帮助,可以作为模板参考,快速搭建与Oracle数据库交互的基础框架...
Oracle 11g JDBC是Oracle数据库与Java应用程序之间的一个重要桥梁,它允许Java开发者通过编写Java代码来访问和操作Oracle数据库。JDBC(Java Database Connectivity)是Java平台的标准API,用于连接各种数据库,包括...
在Java编程语言中,JDBC(Java Database Connectivity)是一个用于与各种数据库进行交互的标准接口。...通过实践这个例子,你可以了解到JDBC连接Oracle的具体步骤,以及如何执行SQL查询和处理结果。
针对Oracle数据库,JDBC提供了特殊的功能,如使用Oracle的CallableStatement执行PL/SQL存储过程。以下是一些示例代码: ```java // 加载Oracle驱动 Class.forName("oracle.jdbc.OracleDriver"); // 建立连接 ...
Oracle JDBC分页实现是数据库操作中的一个重要环节,尤其是在处理大量数据时,为了...总之,Oracle JDBC分页实现涉及SQL查询语句的设计和Java代码的配合,合理利用Oracle的特性可以有效地实现高效、灵活的分页功能。