2025年sqlplus -prelim使用方法

sqlplus -prelim使用方法很多情况下 Oracle hang 导致 sqlplus 无法连接 从而无法获得 Oracle 系统和进程状态 使得定位问题缺少强有力的依据 从 Oracle10g 开始 sqlplus 提供了 prelim 选项 在系统已经 hang 的时候可以连接到 SGA 而不是数据库 也就是说没有 session 被创建

大家好,我是讯享网,很高兴认识大家。

很多情况下,Oracle hang导致sqlplus无法连接,从而无法获得Oracle系统和进程状态,使得定位问题缺少强有力的依据。从 Oracle10g 开始, sqlplus 提供了-prelim选项,在系统已经hang的时候可以连接到 SGA 而不是数据库,也就是说没有 session 被创建。从而在Oracle挂起时依然能获得数据库状态。 

一、 主要用法

sqlplus -prelim "/as sysdba"

讯享网

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

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

可以使用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

SQL> oradebug setmypid  SQL> oradebug setinst all  SQL> oradebug -g def hanganalyze 3

dump 进程状态

讯享网SQL> oradebug dump processstate 10  Statement processed.

强行关闭数据库

SQL> shutdown abort  ORACLE instance shut down.

二、 prelim 参数特点

1. 在数据库上启用10046事件


讯享网

讯享网SQL> alter system set events ‘10046 trace name context forever’; System altered.

2. 先用普通方式连接

sqlplus /nolog SQL*Plus: Release 11.1.0.6.0 – Production on Tue Feb 23 13:21:59 2010 Copyright (c) 1982, 2007, Oracle. All rights reserved. idle> conn / as sysdba Connected SQL> exit Disconnected from Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 – 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options

3. 加prelim参数连接

讯享网sqlplus -prelim /nolog SQL*Plus: Release 11.1.0.6.0 – Production on Tue Feb 23 13:30:16 2010 Copyright (c) 1982, 2007, Oracle. All rights reserved. idle> conn / as sysdba Prelim connection established ERROR: ORA-01012: not logged on Process ID: 0 Session ID: 0 Serial number: 0 idle> exit Disconnected from ORACLE

从上面的信息可以看到,在使用 prelim 连接时,提示为“初级连接已建立”,退出 sqlplus没有显示 banner。

也可以通过下面的方式来用 prelim 方式连接数据库:

sqlplus /nolog set _prelim on connect / as sysdba Prelim connection established

4. 查看数据库10046 trace

从trace文件中可以发现在正常连接时,连接上数据库后, sqlplus自动执行了下面的SQL

讯享网ALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE' NLS_TERRITORY='CHINA' NLS_CURRENCY= '¥' NLS_ISO_CURRENCY='CHINA' NLS_NUMERIC_CHARACTERS='.,' NLS_CALENDAR='GREGORIAN' NLS_DATE_FORMAT='DD-MON-RR' NLS_DATE_LANGUAGE='SIMPLIFIED CHINESE' NLS_SORT='BINARY' TIME_ZONE='+08:00′ NLS_COMP='BINARY' NLS_DUAL_CURRENCY='¥' NLS_TIME_FORMAT='HH.MI.SSXFF AM' NLS_TIMESTAMP_FORMAT='DD-MON-RR HH.MI.SSXFF AM' NLS_TIME_TZ_FORMAT='HH.MI.SSXFF AM TZR' NLS_TIMESTAMP_TZ_FORMAT='DD-MON-RR HH.MI.SSXFF AM TZR' select value$ from props$ where name ='GLOBAL_DB_NAME' select SYS_CONTEXT('USERENV','SERVER_HOST'),SYS_CONTEXT('USERENV','DB_UNIQUE_NAME'),SYS_CONTEXT('USERENV','INSTANCE_NAME'),SYS_CONTEXT('USERENV','SERVICE_NAME'),INSTANCE_NUMBER,STARTUP_TIME,SYS_CONTEXT('USERENV','DB_DOMAIN') from v$instance where INSTANCE_NAME=SYS_CONTEXT('USERENV','INSTANCE_NAME') select decode(failover_method,NULL,0,'BASIC',1,'PRECONNECT',2,'PREPARSE',4,0),decode(failover_type,NULL,1,'NONE',1,'SESSION',2,'SELECT',4,1),failover_retries,failover_delay,flags from service$ where name = :1

而使用prelim 连接上数据库后,没有生成 10046 trace 文件,没有执行SQL,也就是没有执行任何初始化动作和查询必要的信息。也许这就是称之为“初级连接”的原因吧。

由于使用prelim方式连接没有执行sql语句,所以在某些数据库hang住的情况下,能够连接上数据库。比如由于library cache latch被长时间持有不能释放,不能解析SQL语句引起的hang。有的人会说,我的应用刚连上去还没做任何操作就 hang 住了。这只是表面现象,连接上数据库后,一般都会做一些初始化的操作,如设定环境之类的。

以上来自《Oracle运维**实践》

小讯
上一篇 2025-03-12 16:44
下一篇 2025-01-18 15:09

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/31739.html