欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

如何处理HANG住的DB

程序员文章站 2024-02-10 18:18:10
...

如何处理HANG住的DB 1. 生成 systemstate dump:SQLgt;sqlplus -prelim / as sysdbaSQLgt; alter session set max_dump_file_si

如何处理HANG住的DB

首页 → 数据库技术

背景:

阅读新闻

如何处理HANG住的DB

[日期:2013-12-12] 来源:Linux社区 作者:zhou1862324 [字体:]

如何处理HANG住的DB

1. 生成 systemstate dump:
SQL>sqlplus -prelim / as sysdba
SQL> alter session set max_dump_file_size = unlimited;
SQL> alter session set events 'immediate trace name systemstate level 10';
Wait for some 30 seconds
SQL> alter session set events 'immediate trace name systemstate level 10';
Wait for some 30 seconds
SQL> alter session set events 'immediate trace name systemstate level 10;


2. 开一个新的SESSION:
SQL>sqlplus -prelim / as sysdba
SQL>oradebug setmypid
SQL>oradebug unlimit;
SQL>oradebug dump hanganalyze 3
Wait for 30 seconds
SQL>oradebug dump hanganalyze 3
Wait for 30 seconds
SQL>oradebug dump hanganalyze 3

对生成的文件进行分析。

附:system state dump when connection to the instance is not possible
There are several ways of getting more information when connection to an instance is not possible by sqlplus. It is useful to collect as much information about a hang before clearing the instance.

1.) Using OS debuggers like dbx or gdb.
For example:
$ps -ef |grep $Oracle_SID ## Use PID of any User Process instead of BG Process
$gdb $ORACLE_HOME/bin/oracle
print ksudss(10)
The systemstate dump will be in the bdump or udump depending on the PID chosen
2.) Using the new 10.1 sqlplus -prelim option.
For example:
export ORACLE_SID=PROD ## Replace PROD with the SID you want to trace
sqlplus -prelim / as sysdba
oradebug setmypid
oradebug unlimit;
oradebug dump systemstate 10
3.) Finally if either option (1) or (2) is not doable, please remember to take stacks of all the Oracle Background process using pstack or gdb
For example:
script stack.log
pstack
pstack
4.) Finally you may also want to collect some truss, tusc or strace of sqlplus
Note: The recommended systemstate level for 10g is 266