ITPub博客

首页 > 数据库 > Oracle > ORA-04045 ORA-16000

ORA-04045 ORA-16000

原创 Oracle 作者:jijyoracle 时间:2016-03-23 18:18:52 0 删除 编辑
1.标题就是应用那边的报错,沟通得知是这条sql在dg备库上查询报的错:
SELECT a.SYSTEM_TRX_TIME
  FROM qpos_r.a, qpos_r.b
 WHERE a.BANK_CHANNEL_CODE = b.bank_code
   and a.STATUS = '10C'
   and a.ORDER_TYPE = '1'
   and b.channel_name = '北京全渠道'
   and a.SYSTEM_TRX_TIME >= to_date('20160202', 'yyyymmdd')
   and a.SYSTEM_TRX_TIME < to_date('20160210', 'yyyymmdd')

2.第一反应肯定看见ORA-04045有什么对象无效了,因为我这边dba权限查询都是可以的,ORA-16000 是备库被select之外的操作,和开发讲明。剩下的是ORA-04045
3.和开发沟通是哪个用户
4.查询dba_objects发现开发说的那个用户下a对象无效,这个对象类型是一个同义词synonyms,于是想到是前一晚将这个普通的订单表转换为分区表导致同义词无效。
5.ALTER SYNONYM 用户.同义词名字 COMPILE;重新编译同义词成功
6.查询无效对象已经没了
7.再次让应用那边运行代码,依然失败。对象不存在。
8.删除重建同义词,确实这个同义词是这个用户的所有者,dba权限用户.同义词可以查询到值。应用再次尝试报错对象不存在
9.几经折腾给表grant select on hkrt_pos_order_payment to public;没有给权限!
10.成功。


相关sql:
drop 【public】 synonym 同义词名字;--删除同义词
create 【public】synonym a_r.a for a.a; --创建同义词

查询同义词:
select * from user_synonyms where synonym_name=upper('hkrt_pos_order_payment');

查对象,可以看到表的同义词,分区,普通表信息:
select * from dba_objects where object_name=upper('hkrt_pos_order_payment');


友情提醒:普通表做分区,要看!触发器等

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30536096/viewspace-2062708/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 找当前窗口的sid
下一篇: DBA_TAB_MODIFICATIONS
请登录后发表评论 登录
全部评论

注册时间:2016-01-15

  • 博文量
    25
  • 访问量
    61833