ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle数据库的关闭过程

oracle数据库的关闭过程

原创 Linux操作系统 作者:pingley 时间:2012-02-18 17:15:28 0 删除 编辑
oracle数据库的关闭过程
oracle数据库在关闭过程中经历的状态:
open
close
nomount
shutdown
下面介绍通常情况下一个open的数据库到shutdown的过程:
1、数据库close,这时候数据库还是mount的。oracle数据库会将SGA中的数据写入数据文件与在线重做日志文件。接下来关闭在线数据文件与重做日志文件。任何的offline的表空间或者数据文件都已经被关闭了,这些在closed前offline的表空间或者数据文件,在下次启动数据库的时候会被忽略,还是保持offline的状态。
2、数据库unmount,实例还在。但是数据库控制文件已经关闭了,这时候实例已经不再和某个数据库关联在一起。
3、实例shutdown,oracle实例已经不在内存中,oracle后台进程也不再继续运行。以上是正常的数据库关闭过程,如果一个实例被shutdown abort或者oracle系统崩溃,服务器掉电等,不会完全经历这些过程。这时候数据库与实例的关闭是立即的。
oracle数据库关闭的模式:
拥有sysdba,sysoper特权的用户可以使用sqlplus或者OEM关闭数据库.如果使用的是共享服务进程连接到数据库,是无法关闭数据库的。在数据库的关闭过程中,用户无法与数据库建立新的会话,用户会收到提示信息:ORA-01090: shutdown in progress - connection is not permitted
shutdown的可选模式有 abort,immediate,transactional,normal下面介绍这些关闭模式。
数据库表现                 abort    immediate    transactional    normal
允许新的用户会话         no         no             no            no
等待当前会话的终结     no         no             no            yes
等待当前事务的终结     no         no             yes           yes
执行一个checkpoint      no         yes            yes           yes
关闭打开的文件    
shutdown abort
这种关闭方式,适合在最紧急的情况下使用,比如其他关闭数据库的方式都不奏效的情况下,或者你知道服务器将快掉电了。使用这种方式关闭数据库是最快的,但是在下次打开数据库的时候,需要花费大量的时间来自动执行实例恢复,因为在关闭数据库的时候,没有执行checkpoint以保持数据文件的一致性。也就是说SGA中的数据,没有被写入到数据文件与在线重做日志文件。其他关闭数据库的方式不需要执行实例恢复。
shutdown immediate
这种关闭数据库的速度是仅次于shutdown abort的方式。在这种关闭方式中,oracle数据库关闭正在执行的SQL语句,断开用户连接,活动的事务被终止,没有提交的事务被rollback掉。
shutdown transactional
这种关闭数据库的方式,会阻止用户产生新的事务,但是会等待当前所有的事务执行完。这种关闭数据库的方式可能花费比较长的时间,取决于当前事务的大小与长度。当前没有在执行
事务的会话也会被马上终结。
shutdown normal
这是默认的关闭数据库的方式,数据库会等待所有用户会话的终结,然后在关闭数据库,但是这很可能需要长时间的等待。
甚至可以认为这种关闭数据库的方式是没有用的。
除了abort是非正常的关闭数据库的方式以外,其他是正常的关闭数据库的方式。
在某些情况下,数据库关闭以后可能导致下次无法重启数据库,因为还有残存的实例没有被关闭,或者某个oracle数据库后台进程没有终结。这时候可以使用sqlplus或者OEM,发出shutdown abort,彻底的关闭实例。当然把进程或者实例kill掉也是一种方法。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26110315/viewspace-716712/,如需转载,请注明出处,否则将追究法律责任。

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

注册时间:2012-02-06

  • 博文量
    169
  • 访问量
    721162