Oracle hang 之sqlplus -prelim使用方法

第一章  Oracle hang 之sqlplus -prelim使用方法 

很多情况下,Oracle hang导致sqlplus无法连接,从而无法获得Oracle系统和进程状态,使得定位问题缺少强有力的依据。所幸的是Oracle 10g推出了sqlplus -prelim选项,在Oracle挂起时依然能使用sqlplus,从而能获得数据库状态。
使用方法如下

引用

$ sqlplus -prelim "/as sysdba"

SQL*Plus: Release 10.2.0.4.0 - Production on Sun Mar 28 06:40:21 2010

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

在prelim模式下,不可以查询数据字典,但可以关闭数据库

引用

SQL> select status from v$instance;
select status from v$instance
*
ERROR at line 1:
ORA-01012: not logged on

 

引用

SQL> shutdown abort
ORACLE instance shut down.

但可以使用oradebug,但对于系统诊断,已经足够了
dump系统状态

引用

SQL> oradebug setmypid                                            
Statement processed.
SQL> oradebug unlimit
Statement processed.
SQL> oradebug dump systemstate 266
Statement processed.

或者dump hanganalyze

引用

SQL> oradebug  hanganalyze 3
Hang Analysis in /oracle/app/oracle/admin/ora10g/udump/ora10g_ora_52642.trc

对于rac

引用

SQLPLUS> oradebug setmypid

SQLPLUS>oradebug setinst all

SQLPLUS>oradebug -g def hanganalyze 3

或者dump 进程状态

引用

SQL> oradebug dump processstate 10
Statement processed.

进一步,如果有10g客户端,数据库是9i,依然可以用-prelim

引用

$ sqlplus -prelim /nolog

SQL*Plus: Release 10.2.0.4.0 - Production on Sun Mar 28 06:50:19 2010

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

SQL> conn sys/oracle@ora9i as sysdba
Prelim connection established
SQL>  oradebug setmypid
Statement processed.
SQL> oradebug unlimit
Statement processed.
SQL>  oradebug dump systemstate 266
Statement processed.

 

There are two ways to connect to sqlplus using a preliminary connection.

1. sqlplus -prelim / as sysdba

2. sqlplus /nolog
set _prelim on
connect / as sysdba

 

1. While running system state dump with "-prelim" option:

sqlplus -prelim / as sysdba

SQL*Plus: Release 10.2.0.2.0 - Production on Mon Dec 11 17:28:14 2006

SQL> oradebug setmypid
Statement processed.
SQL> oradebug unlimit
Statement processed.
SQL> oradebug dump systemstate 266
ORA-03113: end-of-file on communication channel
ORA-24323: value not allowed

 

2. The following error is reported in the alert.log:

ORA-07445: exception encountered: core dump [kgllkd()+1254] [SIGSEGV] [Address not mapped to
object] [0x000000030] [] []

The error did not crash background process or terminate the instance.

 

The issue is not resolved in any known patches.

Use any of the below workarounds:

· Connect / as sysdba (without -prelim)

OR

· Force the variable PGA to be initialized:

 

sqlplus -prelim '/ as sysdba'
oradebug setmypid
oradebug unlimit
oradebug call ksmcpg
oradebug dump systemstate 10

--测试环境11g,获lgwr的spid
SQL> select * from v$process where username='SYSTEM' and program like '%LGWR%';
 
ADDR                    PID SPID                     PNAME USERNAME           SERIAL# TERMINAL         PROGRAM                                                          TRACEID                                                                          TRACEFILE                                                                        BACKGROUND LATCHWAIT        LATCHSPIN        PGA_USED_MEM PGA_ALLOC_MEM PGA_FREEABLE_MEM PGA_MAX_MEM
---------------- ---------- ------------------------ ----- --------------- ---------- ---------------- ---------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ---------- ---------------- ---------------- ------------ ------------- ---------------- -----------
000007FF614CD768         11 17428                    LGWR  SYSTEM                   1 123-PC           ORACLE.EXE (LGWR)                                                                                                                                 d:\oracle11g_64bit\diag\rdbms\second\second\trace\second_lgwr_17428.trc          1                                                 5007762       5465314           131072     9921762

--另启一会话窗口,暂挂lgwr进程
SQL> oradebug setsospid 17428
ORA-00070: command setsospid is not valid
SQL> oradebug setospid 17428
Oracle pid: 11, Windows thread id: 17428, image: ORACLE.EXE (LGWR)
SQL> oradebug suspend
Statement processed.

--发生日志切换hang住
SQL> alter system switch logfile;
 
System altered
--新建一个会话窗口
create table t_h(a int);--语句hang住

--解挂lgwr进程,上述lgwr及create操作顺利执行完毕
SQL> oradebug resume
Statement processed.

小结:如果日志切换时,会暂住一切所有的数据库前端事务create and dml

 

About Me

....................................................................................................................................................

本文来自于微信公众号转载文章,若有侵权,请联系小麦苗及时删除

ITPUB BLOG:http://blog.itpub.net/26736162

QQ:642808185 若加QQ请注明您所正在读的文章标题

【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】

....................................................................................................................................................

时间: 2024-10-25 01:08:44

Oracle hang 之sqlplus -prelim使用方法的相关文章

Oracle sqlplus prelim参数简介

从Oracle10g开始,sqlplus提供了一个参数选项-prelim,用这个参数,在系统已经hang的时候.我们可以连接到SGA而不是数据库,也就是说没有session被创建. 一.通过以下步骤可以获取系统信息: sqlplus -prelim / as sysdba oradebug setmypid oradebug unlimit; oradebug dump systemstate 10 对于9i数据库,可以通过安装10g的客户端连接 9iR2工作正常. 二.prelim参数特点 1

Oracle数据库数据文件位置修改方法

 数据文件就是以dbf结尾的文件也也就是用来存储我们数据的一个文件了,此文件通常比较大所以我们一般存储在空间比较大的目录了,下面一起来看看Oracle数据库数据文件位置修改方法   如何更改Oracle数据文件的位置 A:归档模式下 1.在sqlplus中连接到要移动文件的Oracle数据库,然后执行如下SQL语句查看Oracle数据库文件位置: SQL>select file_name   from   sys.dba_data_files; FILE_NAME ---------------

Oracle数据库的启动与关闭方法

这篇文章主要介绍了Oracle数据库的启动与关闭方法,需要的朋友可以参考下   一.启动数据 $sqlplus "sys/pass as sysdba" sql>startup 二.启动监听器 数据库启动后,如果未启动监听进程,则客户端无法与数据库连接.监听进程的启动方法为: $lsnrctl start 在widnows中,可以从服务列表中启动监听器. 监听里程配置文件为listener.ora,位于目录/home/app/oracle/product/10.1.0/db1/n

修改oracle数据库用户名及密码的方法_oracle

改oracle数据库用户名称和密码(Linux为例),有需要的朋友可以参考下. 一.修改前准备工作: 使用ssh工具以root身份连接服务器, 然后切换到oracle用户:su - oracle(回车) 使用sqlplus连接数据库:sqlplus /nolog(回车) 以管理员身份登录sys用户:conn sys/sys as sysdba(回车) 数据库连接成功,至此准备工作完成. 二.修改用户名称. 数据库连接成功后,在SQL>提示后面继续输入: 首先查到到所需修改用户名称的用户需要:se

ORACLE中一些问题的解决方法

oracle|解决|问题  ORACLE中一些问题的解决方法 在ORACLE管理和应用中,难免出现一些问题.通常,ORACLE会显示错误标号和简短说明,我们可以根据显示的信息去处理问题.但有时显示的信息很少,处理起来有些麻烦.本文讨论了这样几个问题,根据一些资料和经验,提出了解决方法.   一.             ORA-00604 error occurred at recursive SQL level 这个信息表明,在数据库执行内部SQL语句时,发生了错误.比如,要往表中插入一行数据

Oracle损坏数据文件的恢复方法

一:非归档模式下丢失或者损坏数据文件 在非归档模式下损坏或者丢失数据文件,如果有相应的备份,在一定程度上是可以恢复的,但是如果oracle过多的读写操作记录信息而导致redo重写的时候,恢复就会停滞,非归档下系统能自动恢复的仅仅限于redo中存在的记录. 可以成功恢复案例 SQL> startup ORACLE instance started. Total System Global Area  235999352 bytes Fixed Size                   4506

分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节

1:MSSQL SQL语法篇: BULK INSERT      [ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ]         FROM 'data_file'        [ WITH       (      [ [ , ] BATCHSIZE = batch_size ]      [ [ , ] CHECK_CONSTRAINTS ]      [ [ , ] CODEP

Oracle Connect to Idle Instance解决方法_oracle

解决Connect to Idle Instance问题 第一步 查看Oracle_SID. [oracle@linuxserver ~]$ echo $ORACLE_SID cjdl 这里的SID要和初始化文件spfilecjdl.ora里的一样才行. [oracle@linuxserver ~]$ cd $ORACLE_HOME [oracle@linuxserver 11.2.0]$ cd dbs [oracle@linuxserver dbs]$ ls hc_cjdl.dat hc_DB

Linux下安装Oracle(CentOS-Oracle 12c)的方法_Linux

第一步:网络连接,在我的上一篇博客中有介绍,不再多说. 网络连接的目的:为了能使用yum命令,在网上直接下载文件. 第二步:前往oracle官网下载12c database服务器端的两个文件:(安装在Linux) linuxamd64_12102_database_1of2.zip linuxamd64_12102_database_2of2.zip 将这两个文件放在Linux的tmp目录下,使用 unzip 命令来解压. database的client的一个文件:(安装在Windows) 32