网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>数据库技术>>Oracle技术>>Oracle开发>查看文档  
  rac环境中查询不到其他实例执行的sql     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:128次  录入:管理员--2008-02-27  
 

问题:在检查sql语句状态的时候,rac环境中的一个实例可能无法查询到另一个实例上所执行的sql。

解决方法:在下面这个示例中大家可以看到正在运行的sql:

sql> select instance_number, instance_name from v$instance;

instance_number instance_name
--------------- ----------------
1 tradedb1

sql> select sql_text from v$sql 
2 where hash_value in (select sql_hash_value from v$session where sid = 135);

sql_text
---------------------------------------
begin dbms_mview.refresh('ord_hit_comm', 'c'); end;

但在以下的示例中却无法查询到结果:

sql> select instance_number, instance_name from v$instance;

instance_number instance_name
--------------- ----------------
2 tradedb2

sql> select sql_text 
2 from gv$sql 
3 where inst_id = 1
4 and hash_value in 
5 (
6 select sql_hash_value 
7 from gv$session 
8 where sid = 135 
9 and inst_id = 1
10 );

未选定行

相同的语句在第一个示例上可以得到正确的结果:

sql> select instance_number, instance_name from v$instance;

instance_number instance_name
--------------- ----------------
1 tradedb1

sql> select sql_text 
2 from gv$sql a
3 where a.inst_id = 1
4 and a.hash_value in 
5 (
6 select /*+ no_merge(b) */ sql_hash_value 
7 from gv$session b
8 where b.sid = 135 
9 and b.inst_id = 1
10 );


sql_text
----------------------------------
begin dbms_mview.refresh('ord_hit_comm', 'c'); end;

而且在实例2上,如果分布执行上面的语句,是可以得到结果的:

sql> select instance_number, instance_name from v$instance;

instance_number instance_name
--------------- ----------------
2 tradedb2

sql> select sql_hash_value from gv$session where sid = 135 and inst_id = 1;

sql_hash_value
--------------
1300018675

sql> select sql_text from gv$sql where hash_value = '1300018675';

sql_text
---------------------------------
begin dbms_mview.refresh('ord_hit_comm', 'c'); end;

此处可能是oracle的执行计划出现了错误,尝试使用rule提示,结果为正常:

sql> select /*+ rule */ sql_text 
2 from gv$sql a
3 where a.inst_id = 1
4 and a.hash_value in 
5 (
6 select sql_hash_value 
7 from gv$session b
8 where b.sid = 135 
9 and b.inst_id = 1
10 );

sql_text
-----------------------------------
begin dbms_mview.refresh('ord_hit_comm', 'c'); end;

如果不用in的方式,而采用关联的写法,也可以得到正确结果:

sql> select sql_text 
2 from gv$sql a, gv$session b
3 where a.inst_id = 1
4 and b.inst_id = 1
5 and b.sid = 135
6 and a.hash_value = b.sql_hash_value 
7 ;

sql_text
---------------------------------
begin dbms_mview.refresh('ord_hit_comm', 'c'); end;

总结

现在我们就可以断定是oracle在merge视图gv$session的时候出现了错误,这个错误是因为没有在metalink上找到类似的信息。

 
 
上一篇: 监控数据库性能的"sql"语句都有哪些? (1)    下一篇: 建库的过程中dbca报错,错误号为ora-12547
  相关文档
如何在SQL Server中构建并利用UDF表格 07-07
讲解oracle数据库提供的多种安全性措施 (1) 05-05
数据变更日志记录表及触发器的自动生成脚本 03-04
关闭ORACLE SERVLET ENGINE 11-12
oracle数据库导入导出方法的个人总结 04-23
经验谈之项目中的Oracle开发技巧 05-13
深入讲解如何才能杀掉带锁的oracle进程 02-01
当数据积累到一定时间后执行会越来越慢 07-25
Oracle数据库应用系统调优方法介绍 04-11
“数字公交”项目中的Oracle开发技巧 05-27
如何获取指定表中指定字段内的可用编号 04-23
讲解oracle优化器的优化方式和优化模式 (1) 03-27
解析Oracle/Oracle Forms 的多用途代码 09-01
解析:执行drop表操作后数据库无法起动 11-15
轻松解决:Oracle8i回滚段表空间的坏块 08-05
解析:学习oracle架构应当掌握哪些知识 11-19
Oracle动态并行处理框架及其优越性 04-12
教你Oracle的数据缓冲区是如何工作 04-11
自定义临时表实现及在Oracle Spatial应用 05-27
甲骨文撤回67亿美元报价不排除卷土重来 11-15
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息