sqlplus prelim使用方法

2021-09-19 14:45:14 字數 3829 閱讀 1455

很多情況下,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
對於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.

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

idle> conn / as sysdba

connected

sql> exit

disconnected from oracle database 11g enterprise edition release 11.1.0.6.0 – 64bit production

3. 加prelim引數連線

sqlplus -prelim /nolog

sql*plus: release 11.1.0.6.0 – production on tue feb 23 13:30:16 2010

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運維最佳實踐》

使用GraphEdit使用

1 註冊元件。其實乙個filter就是乙個com元件,所以使用之前需要註冊,可以有兩種方法對元件進行註冊。1.直接使用命令。命令列下輸入 regsvr32 hqtlystd.ax 編譯之後你會在工程目錄下的debug中找到hqtlystd.ax,這個就是要用的filter 即可註冊成功。2.vc6....

MySQL使用學習使用 mysql學習使用

1 mysql學習 1 安裝 ubuntu下直接安裝 apt get install mysql server 2 檢查伺服器是否啟動 sudo netstat tap grep mysql,如果啟動成功,出現以下資訊 tcp00localhost.localdomain mysql listen ...

學習使用CSDN markdown使用

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...