Oracle sqlplus prelim 參數介紹

來源:互聯網
上載者:User

從Oracle10g開始,sqlplus提供了一個參數選項-prelim,用這個參數,在系統已經hang的時候。我們可以串連到SGA而不是資料庫,也就是說沒有session被建立。

一.通過以下步驟可以擷取系統資訊:
sqlplus -prelim / as sysdba
oradebug setmypid
oradebug unlimit;
oradebug dump systemstate 10
 
對於9i資料庫,可以通過安裝10g的用戶端串連9iR2工作正常。
 
 
二.prelim參數特點
 
1.首先在資料庫上啟用10046事件:
SQL> alter system set events ‘10046 trace name context forever’;
System altered.
 
2.先用普通的方式串連:
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 as sysdba
已串連。
SQL> exit
從Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options斷開
 
3.看看加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 as sysdba
初級串連已建立
SQL> exit
從ORACLE斷開
 
從上面的資訊可以看到,在使用prelim串連時,提示為“初級串連已建立”,退出sqlplus沒有顯示banner。
4.也可以通過下面的方式來用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
 
5.看看資料庫的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。
 
 
6. oradebug介紹
oradebug是oracle最初設計的時候做調試的一個工具,後來進一步發展到通過事件(event)來定義跟蹤,然後event又發展到支援  sql  trace,而sql trace就是編號為10046的event
也就是說這是一個從底層調試到進階支援的一個發展的過程,oracle逐步完善。oracle的events事件支援這一體系的定義和延伸出來的功能,非常強大。其實也就是從  軟體開發人員自己調試代碼的工具逐漸發展到給使用者提供介面進行跟蹤和調試應用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.