ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 一个关于数据库关闭很有意思的现象

一个关于数据库关闭很有意思的现象

原创 Linux操作系统 作者:pingley 时间:2012-04-05 10:02:21 0 删除 编辑
一个关于数据库关闭很有意思的现象
又要关机睡觉了,先来关闭数据库,虽然没有错误提示但是一直关闭不了。这个问题虽然不是第一次出现,但是今天我这次把他弄明白。(是学习的态度在转变,以前遇到问题爱抱怨一下,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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    169
  • 访问量
    717546