关于oracle中hint语法错误导致视图一直处于查询状态

乖乖福 2018-02-01 10:20:05
-------------------------------------第一段----------------------------------------
SQL> select SQL_TEXT
2 from v$sqltext where SQL_ID='&sql_id' order by piece;
Enter value for sql_id: 01grdaq0u7gkg
old 2: from v$sqltext where SQL_ID='&sql_id' order by piece
new 2: from v$sqltext where SQL_ID='01grdaq0u7gkg' order by piece

SQL_TEXT
----------------------------------------------------------------
SELECT /*+ FULL(P) +*/ * FROM "V_JF_KUANXIANG" P

SQL>

--------------------------------------第二段-----------------------------------------
SQL> select SQL_TEXT
2 from v$sqltext where SQL_ID='&sql_id' order by piece;
Enter value for sql_id: bzr6zhk94ashb
old 2: from v$sqltext where SQL_ID='&sql_id' order by piece
new 2: from v$sqltext where SQL_ID='bzr6zhk94ashb' order by piece

SQL_TEXT
----------------------------------------------------------------
SELECT /*+ FULL(P) +*/ * FROM "V_JF_ERROR" P

SQL>


-----------------------------------以下是运维分析出来的------------------------------------
这个hint语法错误。
应该是
SELECT /*+ FULL(P) */ * FROM "V_JF_KUANXIANG" P
没有后面那个+号。

SELECT /*+ FULL(P) */ * FROM "V_JF_ERROR" P 这个是正确的写法。


请定位应用程序相关代码,修改SQL语句。

...全文
514 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu志坚 2018-02-01
  • 打赏
  • 举报
回复
dblink处理端hint driving_site(table_name) 此hint常用于通过dblink连接处理数据的业务,它的作用是将本地表推送到远端数据库进行关联然后将结果返回,常用于本地表较小,远端表较大的情况,效果很是不错。 可以用这个hints试试有没有效果。 /*+ driving_site(P) */ SELECT /*+ driving_site(P) */ * FROM "V_JF_ERROR" P
liu志坚 2018-02-01
  • 打赏
  • 举报
回复
另外通过dblink的查询都是很耗性能的,跟网络关系还很大,你这个连视图是啥内容都看不到是没法分析的了。
liu志坚 2018-02-01
  • 打赏
  • 举报
回复
hint语法错误的话也就相当于hint不生效了。 hint是为了手动影响优化器得出的执行计划; 不过你这个虽然后面确实多了个+号,但是其实 hint是生效了的,你看下执行计划就知道了。/*+ FULL(P) */这个 hint 是让P表走全表扫描。 一直处理查询状态,性能慢,可以看下执行计划是不是走得不对。
乖乖福 2018-02-01
  • 打赏
  • 举报
回复
各位大神 在线急等
乖乖福 2018-02-01
  • 打赏
  • 举报
回复
我查了我库里面的sql语句,都没有找到运维说的那条查询语句。 这两个视图都是通过DBLINK共享到中间库里面,然后由业务系统通过DBLINK来访问中间库,查询我们提供的这两个视图。 经常是这两个视图用一天左右,结果第二天在用的时候就一直处于查询状态,在中间库也DROP不掉这两个视图,也不能查看创建语句。 各位大神能给分析一下 是啥原因吗?
liu志坚 2018-02-01
  • 打赏
  • 举报
回复
但是这个只能说找出了为什么出息 这个 /*+ FULL(P) +*/ 。至于一直处理查询状态这个性能问题还是没解决了
liu志坚 2018-02-01
  • 打赏
  • 举报
回复
解决了就好。
乖乖福 2018-02-01
  • 打赏
  • 举报
回复
我找到原因了 是因为oracle在通过DBLINK进行查询的时候 会在源端数据库自动拼接上HINT语法。 详情可以看下下面的这个连接 http://www.oracleplus.net/arch/830.html

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧