一個關於資料庫關閉很有意思的現象

pingley發表於2012-04-05
一個關於資料庫關閉很有意思的現象
又要關機睡覺了,先來關閉資料庫,雖然沒有錯誤提示但是一直關閉不了。這個問題雖然不是第一次出現,但是今天我這次把他弄明白。(是學習的態度在轉變,以前遇到問題愛抱怨一下,fuck。。。又有問題,現在是wow學習機會又來了。)
SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 4 23:20:32 2012
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate # 發起這個命令卡在那邊,不見資料庫關閉。
^CORA-01013: user requested cancel of current operation
SQL> shutdown immediate # 再來嘗試關閉一次吧。
^CORA-01013: user requested cancel of current operation
SQL> exit # 命令沒有錯,會話也沒有事務要提交或者回滾。所以我猜可能是會話巢狀的關係。
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@zeng ~]$ exit
exit
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
[oracle@zeng ~]$ exit # 果然是因為我在sqlplus 中使用host 進入OS 又開了一個本地的會話。
logout
[oracle@zeng ~]$ sql #現在 login 系統向資料庫發起一個會話,嘗試關閉資料庫成功。這是不存在
巢狀會話。
SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 4 23:24:02 2012
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
上面這個shutdown immediate 是由巢狀sqlplus 會話在本地發起的,在這種情況下是不能關閉資料庫的。那是否存在巢狀會話就不能在本地關閉資料庫能。我透過模擬,得出如果在本地存在巢狀會話,不管shutdown immediate 是由哪個會話發起的,只要存在巢狀會話,就不能
使用shutdown immediate關閉資料系統。(確定的說應該是不能斷開本地的巢狀會話。)
注:這裡的會話都是本地的,shutdown immediate 也是本地發起的。
我所說的巢狀會話是指:由一個sqlplus 會話中使用host 進入OS 再從OS 再次發起一個sqlplus 會話。
今天早上再來做一個小實驗,看那種情況下發出shutdown immediate 以後還能不能發起新的會話。
SQL*Plus: Release 11.2.0.1.0 Production on Thu Apr 5 09:15:08 2012
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area  627732480 bytes
Fixed Size                  1338336 bytes
Variable Size             448791584 bytes
Database Buffers          171966464 bytes
Redo Buffers                5636096 bytes
Database mounted.
Database opened.
SQL> host 
[oracle@zeng ~]$ sql
SQL*Plus: Release 11.2.0.1.0 Production on Thu Apr 5 09:16:06 2012
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown immediate # 還是一樣卡在那邊,不見資料庫關閉。
我clone 一個secure crt 會話想知道在這種情況下是否能夠發起新的會話。
[oracle@zeng ~]$ sql  
SQL*Plus: Release 11.2.0.1.0 Production on Thu Apr 5 09:17:36 2012
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected.
SQL> select count(*) from hr.employees;
select count(*) from hr.employees
*
ERROR at line 1:
ORA-01012: not logged on
Process ID: 0
Session ID: 0 Serial number: 0
SQL> conn hr/hr # 可以證明在這種情況下系統是不允許發起新的會話的。
ERROR:
ORA-01089: immediate shutdown in progress - no operations are permitted
Process ID: 0
Session ID: 0 Serial number: 0
Warning: You are no longer connected to ORACLE.
我決定在存在巢狀會話的情況下,嘗試各種關機方式。
[oracle@zeng ~]$ sql
SQL*Plus: Release 11.2.0.1.0 Production on Thu Apr 5 09:48:41 2012
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> shutdown normal
^CORA-01013: user requested cancel of current operation
SQL> shutdown transactional
^CORA-01013: user requested cancel of current operation
SQL> shutdown abort 
ORACLE instance shut down
可見在存在巢狀會話的情況下只有使用shutdown abort 這種暴力的方式才能關閉資料庫。
結論:本質上這裡要說明的是在存在巢狀會話的時候,資料庫斷開會話的方式與通常我們所認識到的不同。在除了使用shutdown abort 方式外,其他關閉資料庫的方式,斷開不了這種會話,所以關不資料庫。
注:為了嚴謹這裡要說明的是我所有與資料庫的會話都是本地的,至於
在這種情況下的遠端關閉沒有嘗試過。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26110315/viewspace-720335/,如需轉載,請註明出處,否則將追究法律責任。

相關文章