Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5944
  • 博文数量: 6
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 65
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-24 16:38
文章分类

全部博文(6)

文章存档

2009年(6)

我的朋友
最近访客

分类: Oracle

2009-12-24 16:56:51

最高效的删除重复记录方法
DELETE FROM EMP E
 WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO);
减少对表的查询
低效 SELECT TAB_NAME FROM TABLES WHERE TAB_NAME = ( SELECT TAB_NAME FROM TAB_COLUMNS WHERE VERSION = 604) AND DB_VER= ( SELECT DB_VER FROM TAB_COLUMNS WHERE VERSION = 604)

高效 SELECT TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = ( SELECT TAB_NAME,DB_VER) FROM TAB_COLUMNS WHERE VERSION = 604)


Update 多个Column 例子:
低效: UPDATE EMP SET EMP_CAT = (SELECT MAX(CATEGORY) FROM EMP_CATEGORIES), SAL_RANGE = (SELECT MAX(SAL_RANGE) FROM EMP_CATEGORIES) WHERE EMP_DEPT = 0020;

高效:UPDATE EMP SET (EMP_CAT, SAL_RANGE) = (SELECT MAX(CATEGORY) , MAX(SAL_RANGE) FROM EMP_CATEGORIES) WHERE EMP_DEPT = 0020;

如何跟踪某个session的SQL

第一种方法:

获取当前用户所连接的所有session的sid:select sid from v$session where audsid=userenv('sessionid');

获取当前用户当前终端所连接的session的sid:select * from v$session where sid in(select sid from v$mystat);

首先你要确定跟踪哪个session,比如select sql_address from v$session where sid=505;

然后,select * from v$sqltext where address= order by piece;就可以找出session正在执行的sql了

另,也可以通过查v$open_cursor来完成。

第二种方法:

捕捉运行很久的SQL

SELECT username, SID, opname,
       ROUND (sofar * 100 / totalwork, 0) || '%' AS progress, time_remaining,
       sql_text
  FROM v$session_longops, v$sql
 WHERE time_remaining <> 0
   AND sql_address = address
   AND sql_hash_value = hash_value

如果跟踪自己的会话或者是别人的会话   
  [A]跟踪自己的会话很简单   
  Alter   session   set   sql_trace   true|false   
  如果跟踪别人的会话,需要调用一个包   
  exec   dbms_system.set_sql_trace_in_session(sid,serial#,true|false)   
  or   
  exec   dbms_system.set_sql_trace_in_session(sid,serial#,8,’’),这里的8是跟踪级别   
  跟踪的信息在user_dump_dest   目录下可以找到   
  可以通过Tkprof来解析跟踪文件,如   
  Tkprof   原文件   目标文件   sys=n   
  
  
  怎么设置整个数据库系统跟踪   
  [A]其实文档上的alter   system   set   sql_trace=true是不成功的   
  但是可以通过设置事件来完成这个工作,作用相等   
  alter   system   set   events   
      ‘10046   trace   name   context   forever,level   1’;   
  如果关闭跟踪,可以用如下语句   
  alter   system   set   events   
      ‘10046   trace   name   context   off’;   
  其中的level   1与上面的8都是跟踪级别   
  level   1:跟踪SQL语句,等于sql_trace=true   
  level   4:包括变量的详细信息     sql_text
  level   8:包括等待事件   
  level   12:包括绑定变量与等待事件

 
阅读(346) | 评论(0) | 转发(0) |
0

上一篇:DDL/DML

下一篇:ORACLE进阶之一:HINT 收藏

给主人留下些什么吧!~~