1. oradebug介绍 oradebug是Oracle提供的一个内部工具,可用于: debug Oracle错误 trace Oracle错误 跟踪SQL 语句并使用tkprof工具格式化分析 分析...进入oradebug 使用该命令需要dba权限,一般使用sys用户 sqlplus / as sysdba SQL> oradebug help ?...Oracle 10046 事件 Oradebug 使用events来捕获Oracle的各种事件 对于 SQL trace来说,使用的是10046事件 对于10046事件来说,它提供了不同等级来满足不同的需求...使用oradebug 4.1 使用oradebug 追踪当前会话 SQL> oradebug setmypid Statement processed....工具详解 Oracle oradebug 命令 使用说明
2662] "Block SCN is ahead of Current SCN" (文档 ID 28929.1) 1.查看当前数据库的Current SCN 2.重新启动数据库到mount阶段 3.使用oradebug...SYS@orcl> oradebug setmypid Statement processed....SYS@orcl> oradebug dumpvar sga kcsgscn_ kcslf kcsgscn_ [06001AE70, 06001AEA0) = 00000000 00000000 00000000...c代表:Arg [c] dependent SCN WRAP d代表:Arg [d] dependent SCN BASE oradebug setmypid oradebug dumpvar sga...kcsgscn_ oradebug poke 0x060012658 8 10014077592 oradebug dumpvar sga kcsgscn_ alter database open;
SQL> oradebug setmypid 已处理的语句 SQL> oradebug event 10049 trace name context forever,level 528 已处理的语句...我们换一个10gR2的版本: SQL> select * from v$version; SQL> oradebug setmypid 已处理的语句 SQL> oradebug event 10049...SQL> oradebug setmypid 已处理的语句 SQL> oradebug event 10049 trace name context forever,level 528 已处理的语句...SQL> oradebug setmypid 已处理的语句 SQL> oradebug event 10049 trace name context forever,level 528 已处理的语句...SQL> oradebug setmypid 已处理的语句 SQL> oradebug event 10049 trace name context forever, level 528 已处理的语句
2662] "Block SCN is ahead of Current SCN" (文档 ID 28929.1) 1.查看当前数据库的Current SCN 2.重新启动数据库到mount阶段 3.使用oradebug...poke推进SCN 我这里直接把十万位的"4"改为"9"了,相当于推进了50w左右: 说明:实验发现oradebug poke 推进的SCN值,既可以指定十六进制的0x11008DE74,也可以直接指定十进制的...SYS@orcl> oradebug setmypid Statement processed....c代表:Arg [c] dependent SCN WRAP d代表:Arg [d] dependent SCN BASE oradebug setmypid oradebug dumpvar sga...kcsgscn_ oradebug poke 0x060012658 8 10014077592 oradebug dumpvar sga kcsgscn_ alter database open; 最后要说的是
/opatch lsinventory 4.确认MMON 是否挂起(Suspension) 查看本节点的MMON状态:SQL> oradebug setmypid SQL> oradebug unit_test...SQL> connect /as sysdba SQL> oradebug setmypid SQL> oradebug unlimit SQL> oradebug setinst all SQL> oradebug...SQL> oradebug setmypid SQL> oradebug unlimit SQL> oradebug setinst all SQL> oradebug -g all hanganalyze...4 SQL> oradebug -g all dump systemstate 266 SQL> quit SQL> connect /as sysdba SQL> oradebug...setmypid SQL> oradebug unlimit SQL> oradebug setinst all SQL> oradebug -g all hanganalyze 4 SQL> oradebug
跟踪spid: SQL> oradebug setospid 15552 SQL> oradebug unlimit SQL> oradebug tracefile_name SQL> oradebug...Event 10046 trace name context forever, level 12 实际过程记录: SYS@jyzhao1 >oradebug setospid 15552 Oracle...SYS@jyzhao1 >oradebug tracefile_name /opt/app/oracle/diag/rdbms/jyzhao/jyzhao1/trace/jyzhao1_ora_15552....trc SYS@jyzhao1 >oradebug Event 10046 trace name context forever, level 12 Statement processed. 2.4...至此,问题完美解决,该案例的定位,主要用到了oradebug的跟踪技能。
查看kcsgscn_的显示结果一致: SQL> oradebug setmypid Statement processed....中可以用poke命令来修改内存,其语法为: “oradebug poke ” allows you to modify a given region...的显示结果一致: SQL> oradebug setmypid Statement processed....SQL> oradebug dumpvar sga kcsgscn_ kcslf kcsgscn_ [06001AD30, 06001AD60) = 40012D2C 00000000 00000000...SQL> oradebug setmypid Statement processed.
poke进行SCN推进: oradebug setmypid oradebug dumpvar sga kcsgscn_ oradebug poke 0x700000000019B70 8 32581432072...oradebug dumpvar sga kcsgscn_ 推进SCN后,尝试直接开库报错ORA-00399、ORA-00353、ORA-00312: SQL> oradebug setmypid Statement...SQL> oradebug dumpvar sga kcsgscn_ kcslf kcsgscn_ [700000000019B70, 700000000019BA0) = 00000000 00000000...00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 07000000 00019850 SQL> oradebug...setmypid oradebug dumpvar sga kcsgscn_ oradebug poke 0x700000000019B70 8 32681432564 oradebug dumpvar
setmypid/oradebug setospid SPID; oradebug event 10046 trace name context forever, level 12; (2)....使用sysdba登录后,可以查看oradebug的帮助: ? ?...使用oradebug设置10046事件之前需要首先设置待跟踪的会话: (a) 跟踪本会话,使用:oradebug setmypid即可。...此时如果需要跟踪24061这个session执行的SQL,可以用oradebug setospid 24061,然后oradebug event 10046 trace name context forever...显然22235这个进程是sqlplus登陆后执行ORADEBUG的客户端,例如: ? (3).
跟踪当前会话: 1SQL> oradebug setmypid; 2Statement processed. 3SQL> oradebug unlimit; 4Statement processed...8SQL> oradebug tracefile_name 9SQL> oradebug event 10046 trace name context off; 10Statement processed...或者: 1SQL> oradebug setorapid 313; 2Statement processed. 3SQL> oradebug unlimit; 4Statement processed....5SQL> oradebug event 10046 trace name context forever,level 12; 6Statement processed. 7SQL> oradebug...使用oradebug help可以查看oradebug的命令帮助。 本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
7*power(2,32) + 2516660859 from dual; select 7*power(2,32) + 2516661000 from dual; 32581432072 使用oradebug...poke进行SCN推进: SQL> oradebug setmypid Statement processed....SQL> oradebug dumpvar sga kcsgscn_ kcslf kcsgscn_ [700000000019B70, 700000000019BA0) = 00000000 00000000...00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 07000000 00019850 SQL> oradebug...setmypid SQL>oradebug dumpvar sga kcsgscn_ SQL>oradebug poke 0x700000000019B70 8 32681432564 SQL>oradebug
setmypid SQL>oradebug unlimit; SQL>oradebug dump systemstate 266; --等1~2分钟 SQL>oradebug dump systemstate...266; --等1~2分钟 SQL>oradebug dump systemstate 266; SQL>oradebug tracefile_name;==>这是 生成的 文件名 ---------...------------在RAC上 生成systemstate dump--------------------- SQL>oradebug setmypid SQL>oradebug unlimit...SQL>oradebug -g all dump systemstate 266 --等1~2分钟 SQL>oradebug -g all dump systemstate 266 --等1~2分钟...SQL>oradebug -g all dump systemstate 266 在我们使用prelim参数仍然无法登录数据库时,可以使用gdb调试后台进程方式生成systemstate dump,例子如下
1024*1024=16043850334208 Oracle数据库10g控制文件推进可以在pfile中加入参数:_minimum_giga_scn; ORACLE 11.2.0.4 SCN推进方法oradebug... 本次数据库控制文件SCN推进步骤步骤 SQL> oradebug setmypid Statement processed. ...SQL> oradebug dumpvar sga kcsgscn_ kcslf kcsgscn_ [700000000019B70, 700000000019BA0) = 00000000 00000000...00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 07000000 00019850 SQL> oradebug...700000000019B78) = 00000000 00000000 AFTER: [700000000019B70, 700000000019B78) = 00000E97 80000000 SQL> oradebug
在发生问题时使用如下命令取得systemstate dump: (a) Non-Rac sqlplus "/ as sysdba" oradebug setmypid oradebug unlimit...oradebug dump systemstate 266 wait 90 seconds oradebug dump systemstate 266 wait 90 seconds oradebug...dump systemstate 266 quit (b) RAC $ sqlplus '/ as sysdba' oradebug setmypid oradebug unlimit oradebug...setinst all oradebug -g all hanganalyze 4 oradebug -g all dump systemstate 266 quit 当已经找到阻塞进程和被阻塞进程...$ sqlplus SQL> oradebug setospid oradebug dump errorstack 3 > oradebug
<<<<<<select spid from V$process, V$session where audsid=userenv('SESSIONID') and paddr=addr; SQL> oradebug...unlimit SQL> oradebug tracefile_name SQL> oradebug event sql_trace [sql: 5qcyrymp65fak] level=12...关闭 event ++: SQL> oradebug event sql_trace [sql: 5qcyrymp65fak] off 3....Using Oradebug (as SYS)To start tracing: oradebug setospid xxxx oradebug event 10046 trace name context...forever, level 12; /* In the session being traced execute the selects */ To stop tracing: oradebug
重建控制文件 重建控制文件的核心步骤: **3.1 备份控制文件到trace** startup mount alter database backup controlfile to trace; oradebug...setmypid oradebug tracefile_name 3.2 启动数据库到nomount状态 shutdown abort startup nomount; 3.3 确认重建控制文件的语句...SQL> oradebug setmypid Statement processed....SQL> oradebug tracefile_name /s01/oracle/admin/cxywdb/udump/cxywdb_ora_3983.trc SQL> shutdown abort ORACLE
通过ORADEBUG IPC可以得到variable所存放的SHM的SHMID号,在OS下使用ipcrm -m SHMID可以删掉这一段共享内存。...ORADEBUG IPC命令如下所示: SQL> ORADEBUG SETMYPID SQL> ORADEBUG IPC SQL> ORADEBUG TRACFILE_NAME sysresv命令如下所示
领取专属 10元无门槛券
手把手带您无忧上云