对大数据量查询时,合理使用索引能极大的提高查询效率,以下几则案例是前一段时间优化系统时做的,简单记录一下。
案例一,优化前的查询执行计划:
SQL> set autotrace traceonly
SQL> set timing on
SQL> set linesize 200
SQL>
SQL> select count(*) from busilink
2 where (wpcode='074' or wpcode='078' or wpcode='099' ) and wcode ='0795'
3 or (wcode in (select rwcode from ratifyauth where wcodeto = '0795') and (wpcode='074' or wpcode='078' or wpcode='099' [...]
最近接触到的一个系统,出现了莫名其妙的数据丢失,怀疑是应用程序的问题,可是如何定位出问题的程序位置很难,最后根据大概的数据丢失时间,结合Logminer工具找出了有问题的程序,下面记录定位程序错误的过程:
一、根据大概的时间定位需要哪些归档文件
ERPDB1@/orabak>rman target /
Recovery Manager: Release 10.2.0.3.0 - Production on Tue Apr 6 09:26:15 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: CNDERPDB (DBID=2400249746)
RMAN> list backup of archivelog time between "to_date('2010-04-01 22:00:00','yyyy-mm-dd hh24:mi:ss')" and "to_date('2010-04-02 23:00','yyyy-mm-dd hh24:mi:ss')";
using target database control file instead of recovery catalog
List [...]
前段时间通过dba_outstanding_alerts发现表空间增长超过了85%,然后加了个裸设备做为数据文件,虽然这个数据文件可用,但dba_outstanding_alerts中的警告信息并没有消失:
SQL> col reason for a50
SQL> SELECT REASON
2 , METRIC_VALUE
3 , TO_CHAR(CREATION_TIME,'DD-MON-YYYY HH24:MI:SS') cdate
4 FROM SYS.DBA_OUTSTANDING_ALERTS;
REASON METRIC_VALUE CDATE
-------------------------------------------------- ------------ -----------------------
Tablespace [ERP_INDEX] is [94 percent] full 94.5023148 26-MAR-2010 19:45:05
可见Oracle在这里认为这个表空间已经使用了94%以上,查看一下预警阀值的设定:
SQL> col METRICS_NAME for a50
SQL> col WARN_VAL for a10
SQL> col [...]
在一个大型系统开发环境,有人反映无法连接到数据库,经检查判断是listener的问题,找到对应的进程杀掉后重启listener 就解决了。
开始怀疑是只是单个session的问题:
[oracle@erpdevdb bdump]$ sqlplus banping/banping
SQL*Plus: Release 10.2.0.1.0 - Production on Mon May 17 10:23:07 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL>
SQL> select machine from v$session;
[...]
前段时间把一个在Linux 平台运行的应用程序部署一套到windows平台上,是java开发的基于oracle10g的程序,部署完成后,发现有个写入操作会报错,而后台跟踪到的SQL是插入日期时侯出现的问题。
insert into t ( fromtime ) values ( '2009-4-15' )
其中的fromtime是date 类型,而SQL中并没有对字符串做to_date转化。程序不大好修改,只能在环境变量等参数配置上下手。而奇怪的是这样的SQL在原来的Linux 平台上能运行的很好,说明是和环境问题是有关的。
首先修改了oracle的nls_date_format参数,原来是空的,改为yyyy-mm-dd hh24:mi:Ss,用sqlplus连到服务器测试SQL能执行,但是java程序还是报错,看来得改客户端的nls_date_format设置,老熊说有些jdbc驱动可以采用设置数据库的nls_data_format方式来解决,因为这种驱动连接上后自动将会话的这个设为跟数据库一样的。修改windows系统的环境变量仍然不行,看来java程序可以不从操作系统来读变量。以下是测试过程:
SQL> create table t1 (mydate varchar2(20));
Table created.
SQL> insert into t1 mydate values (2010-10-10);
1 row created.
SQL> alter table t1 modify mydate date;
Table altered.
SQL>
SQL> desc t1;
Name Null? Type
----------------------------------------- [...]
技术组织
最近评论
历史归档
广告位

