绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
使用Event修改SCN报ORA-01031权限不足的解决方法。
2020-06-27 23:11:58
断网一个多星期,宽带还没有接通,今天到公司,把我之前遇到一个恢复的小例子总结一下。 3月初碰到的一个奇怪问题今天终于有了答案。一客户数据库,突然当机,重启时报01555,在告警日志中可以看到是一查询seq$的SQL,导致OPEN失败。客户有备份,催着解决问题,就没在深入研究,直接恢复了事。 这个问题再次重现,解决步骤如下: 前些天,又遇到一台小机的磁盘突然崩溃,磁盘有损坏,主库再也打不开。有几张表比较紧急,等不急恢复。客户希望快速打开数据库,导出数据到另一个中。在去掉校验和,并且设置了_db_always_check_system_ts去掉系统表空间的块校验后。再次OPEN数据库,告警日志中报如下错误: OPEN过程中,告警日志中报如下错误: Tue Jul 10 14:47:03 2012 alter database open Tue Jul 10 14:47:03 2012 SMON: enabling cache recovery Tue Jul 10 14:47:03 2012 ORA-01555 caused by SQL statement below (SQL ID: 4krwuz0ctqxdt, Query Duration=1341902820 sec, SCN: 0x0000.00230351): Tue Jul 10 14:47:03 2012 select ctime, mtime, stime from obj$ where obj# = :1 怀疑是SYSTEM表空间中某个块的SCN比较新,OPEN时Oracle要做回滚,这种问题解决方法也简单,打SCN调大,大于块的SCN,Oracle就不会再去回滚。alter session set events 'IMMEDIATE trace name ADJUST_SCN level 1'命令可以增大SCN,这种方法很多网站上都有,我曾经也使用过,但,这次使用的时候,报如下错误: *** 2012-07-10 14:56:10.276 ksedmp: internal or fatal error ORA-01031: insufficient privileges Current SQL statement for this session: alter session set events 'IMMEDIATE trace name ADJUST_SCN level 1' 没有权限。我已经是SYS用户了,还报没有权限。三月份的时候,就是报这个错,所以用户只能等着从备份恢复数据。 其实解决方法很简单,既然使用Event没法改,我们可以直接修改SGA中的SCN,步骤如下: sqlplus / as sysdba startup mount; oradebug setmypid oradebug DUMPvar SGA kcsgscn_ 上面这条语句,可以显示出SCN的地置,比如,显示结果如下: kcslf kcsgscn_ [7000000100120C0, 7000000100120F0) = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 07000000 从7000000100120C0开始的8个地节,就是SCN,只不过库还处于Mount状态,显示结果还是0.接下来,可以按如下步骤,将此处的SCN改大点: 1、查询当前的SCN: SQL> col CURRENT_SCN for 999999999999999 SQL> select current_scn from v$database; CURRENT_SCN ---------------- 12622610288579 2、以查询结果为基础,将SCN改大些: oradebug poke 0x7000000100120C 8 0xC7AEE33CFC3 原来的SCN是B7AEE33CFC3(十进制是12622610288579),我改成C7AEE33CFC3。把高位从B改成C。 修改之后,以alter database open read only,可以成功打开数据库,供用户导出表数据。
分享好友

分享这个小栈给你的朋友们,一起进步吧。

调试数据库 ---- 源码研究方法论
创建时间:2020-06-16 17:28:11
能让你坚持下去的源码学习方法 ---- 调试数据库。Oracle的各种DUMP、Trace和Event,增加了研究这个数据库的“乐趣”,使用Oracle成为一个可研究的数据库。开源数据库当然也可以通过钻研源码的方式去研究,但这样的学习周期太长。本课程教你用调试技术不断为MySQL/PostgreSQL扩展功能,在学习源码的同时,不断开发自己的、类似Oracle DUMP、Trace、Event的小工具,这就是我所说的“正向反馈”。用正向反馈,激励自己坚持下去,终成功。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • vage
    栈主

小栈成员

查看更多
  • 叶子,你好
  • 小雨滴
  • 潘佳伟
  • 东风快递
戳我,来吐槽~