一個關於資料庫關閉很有意思的現象
一個關於資料庫關閉很有意思的現象
又要關機睡覺了,先來關閉資料庫,雖然沒有錯誤提示但是一直關閉不了。這個問題雖然不是第一次出現,但是今天我這次把他弄明白。(是學習的態度在轉變,以前遇到問題愛抱怨一下,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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 3.3.1 關於關閉資料庫資料庫
- 資料庫關閉資料庫
- 一個很有意思的hook庫:react-hangerHookReact
- 再次理解:關閉資料庫的幾個模式資料庫模式
- 關於資料庫批次查詢的一個想法資料庫
- 關於查詢不用重啟或者關閉資料庫的引數資料庫
- 安全關閉Oracle資料庫Oracle資料庫
- 關於如何形成一個好的資料庫設計資料庫
- 關於Oracle中重啟資料庫的一個bugOracle資料庫
- 關於一個資料庫列設計的問題資料庫
- oracle資料庫的關閉過程Oracle資料庫
- 資料庫關閉的學問 (轉)資料庫
- mongodb關閉資料庫例項MongoDB資料庫
- 資料庫啟動和關閉資料庫
- 關閉資料庫出現PMON failed to acquire latch資訊資料庫AIUI
- 關於資料儲存的一個故事
- RAC 資料庫的啟動與關閉資料庫
- Oracle資料庫的啟動與關閉Oracle資料庫
- Oracle資料庫的啟動和關閉Oracle資料庫
- 關閉資料庫比較好的方法資料庫
- 關於同一個連線不同資料庫之間的 Eloquent 關聯查詢資料庫
- 關於使用 go cron 庫(任務排程)平滑關閉的實現Go
- 關於資料庫故障資料庫
- 一個關於資料庫閃回區問題的處理資料庫
- 關於資料庫中的一些name資料庫
- 關於你的網際網路生活的十個有趣現象
- 關於Oracle 資料庫備份的幾個概念Oracle資料庫
- 關閉資料庫出現ORA-21779錯誤資料庫
- 3.3.3 使用immiedit模式關閉資料庫模式資料庫
- 資料庫自動啟動關閉資料庫
- rac 管理 啟動關閉資料庫資料庫
- MySQL關於資料字典的一個疑問MySql
- openGauss 由於RemoveIPC未關閉導致資料庫crashREM資料庫
- 從0開始弄一個面向OC資料庫(一)--開啟、關閉資料庫,動態建表資料庫
- 一個資料庫要關注的問題資料庫
- 關閉資料庫的備份與恢復資料庫
- 資料庫連線未關閉的問題資料庫
- ORACLE資料庫的啟動和關閉(轉)Oracle資料庫