在Oracle 10g中,如果数据库实例hang住了,应用及sqlplus都不能连接时,可以用sqlplus -prelim连接数据库。那么sqlplus连接时,加上-prelim这个参数有什么特别的地方呢?下面,让我们来研究一下:

测试环境:Linux AS4上的Oracle 10.2.0.1,客户端(sqlplus)版本为Windows 2003下的10.2.0.1。

首先在数据库上启用10046事件:

SQL> alter system set events ‘10046 trace name context forever’;

System altered.

先用普通的方式连接:

D:\>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 11月 15 15:36:02 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL> conn sys/manage@xty as sysdba
已连接。
SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 断开

再看看加prelim参数时的情况:

D:\>sqlplus -prelim /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 11月 15 15:36:34 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.

SQL> conn sys/manage@xty as sysdba
初级连接已建立
SQL> exit
从 ORACLE 断开

从上面的信息可以看到,在使用prelim连接时,提示为“初级连接已建立”,退出sqlplus没有显示banner。
也可以通过下面的方式来用prelim方式连接数据库:

[oracle@xty ~]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.3.0 - Production on Tue Dec 2 07:04:28 2008

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

SQL> set _prelim on
SQL> connect / as sysdba
Prelim connection established

再看看数据库的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

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

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

sqlplus -prelim能够在数据库hang住的情况下连接数据库,但只能说是连接,并不代表能够做很多操作。比如执行SQL查询。这种情况下,可能最有用的就是使用oradebug。

本文只是简单地“inside”,其实并不很深入,Oracle还会有其他的跟prelim有关的东西,是我们还没发现的。有兴趣的朋友,可以进一步研究。比如通过抓取tns包进行分析等等。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22907091/viewspace-715190/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22907091/viewspace-715190/

转至老熊三分地--inside sqlplus prelim相关推荐

  1. inside sqlplus prelim

    转自老熊的,主要是日常数据库HANG住,在服务端sqlplus / as sysdba,登录都卡住时,加一个参数prelim,通过10046事件发出查看sqlplus / as sysdba 其实执行 ...

  2. sqlplus prelim选项 常规情况下sqlplus无法登录

    2012-07-14 21:20 SYSTEM:HP-UX 11.31 ORACLE:10.2.0.5 RAC PDA RAC服务器其中一节点HANG住,应用及sqlplus都不能连接,印象中老白书中 ...

  3. sqlplus -prelim,sqplus区别

    偶尔在论坛上看见帖子说"sqlplus -prelim / as sysdba"去连接oracle,都一次见,于是去baidu了一下,如下转了一位兄台的blog文章. ****** ...

  4. Oracle hang 之sqlplus -prelim使用方法

    第一章  Oracle hang 之sqlplus -prelim使用方法 很多情况下,Oracle hang导致sqlplus无法连接,从而无法获得Oracle系统和进程状态,使得定位问题缺少强有力 ...

  5. Oracle sqlplus prelim 参数介绍

    从Oracle10g开始,sqlplus提供了一个参数选项-prelim,用这个参数,在系统已经hang的时候.我们可以连接到SGA而不是数据库,也就是说没有session被创建. 一. 通过以下步骤 ...

  6. sqlplus -prelim/ as sysdba用法

    原文见:eygle博客 在某些情况下,数据库失去响应,sqlplus也无法连接,此时通常只能通过杀掉进程来解决. 但是我们仍然希望能够获得此时的数据库状态信息,以便用于事后诊断. 从Oracle10g ...

  7. sqlplus -prelim使用方法

    很多情况下,Oracle hang导致sqlplus无法连接,从而无法获得Oracle系统和进程状态,使得定位问题缺少强有力的依据.从 Oracle10g 开始, sqlplus 提供了-prelim ...

  8. sqlplus prelim参数介绍

    从Oracle10g开始,sqlplus提供了一个参数选项-prelim,用这个参数,在系统已经hang的时候.我们可以连接到SGA而不是数据库,也就是说没有session被创建. 一. 通过以下步骤 ...

  9. Oracle hang 之sqlplus -prelim方法

       很多情况下,Oracle hang导致sqlplus无法连接,从而无法获得Oracle系统和进程状态,使得定位问题缺少强有力的依据. 所幸的是Oracle 10g推出了sqlplus -pr ...

最新文章

  1. 从5G入池看AI发展新方向 | 杜克大学陈怡然教授专访
  2. linux基础(一)
  3. java ios websocket_Java WebSocket的例子
  4. 服务器压力测试_魔兽世界怀旧服:美服18日开放安其拉开门测试,P5阶段即将来临...
  5. centos普通用户修改文件权限_用户管理(特殊权限、特殊属性、umask 默认权限 )
  6. vue接收json数据_Vue之使用ajax获取json数据,并用v-for循环显示在表格中
  7. 协作开发——使用git在多台机器上实现协作开发
  8. lodash是否是数组_lodash源码解析:for家族
  9. MODSCAN32的应用
  10. BES系列蓝牙开发总结
  11. 基于ORL库的PCA人脸识别系统matlab实现
  12. 基于canvas的图片反色处理
  13. 「数字电路系列」博文目录,学习总结
  14. oracle及操作系统对于文件大小的限制
  15. CodeForces 760B Frodo and pillows
  16. walking与Matlab入门教程-控制walking机器人移动
  17. 计算机键盘功能教案,键盘认识教案
  18. 完美解决网页无法上传大文件方法
  19. STM32对ad9854进行频率步进(按键)
  20. 天宇优配|钠电池汽车要来了,续航达500公里!持续高成长股揭秘

热门文章

  1. php微信jssdk获取位置,微信公众号获取用户地理位置
  2. 乱象?真象!——中国公有云服务市场大起底
  3. 自 下 而 上 分 析 法 的 一 般 原 理
  4. 编写高质量的代码——从命名入手
  5. 改变水平线hr的颜色
  6. AI时代——人工智能技术图谱,它来啦(机器学习+深度学习学习路线)
  7. 好和弦-5-调式和音阶
  8. OpenCVSharp 相机棋盘格校正
  9. Matlab 矩阵元素选取方法
  10. 使用ArcGIS实现数据的随机选取