`
itspace
  • 浏览: 959426 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

如何快速关闭数据库

 
阅读更多
“一朝被蛇咬,十年怕井绳”。在没被“蛇”咬之前,很多DBA喜欢使用SHUTDOWN ABORT方式来关闭数据库。因为这种方式是最快速的关闭方法,但用此方式关闭数据库会使数据库处于不一致状态,极端的情况下甚至会损坏数据库,导致数据库无法启动。所以推荐使用SHUTDOWN IMMEDIATE方式来安全稳妥地关闭数据库。
5.9.1 影响数据库关闭速度的因素
当数据库以SHUTDOWN IMMEDIATE方式关闭时,Oracle会自动断开所有的客户端连接,并回滚所有未提交的事务,回滚完成之后还会将所有的脏块从BUFFER CACHE写进数据文件,所以以此方式关闭数据库,数据库内部会处于一致状态。这也就意味着再次启动数据库时,服务进程并不需要CRASH RECOVERY。这种方式是目前最常用的关闭方式,但是关闭速度较慢。数据库关闭速度受以下4个因素影响:
 连接的客户端进程数量。
 未提交的事务占用的UNDO BLOCK数量。
 长时间运行的会话。
 SMON进程清理临时段的速度。
1. 连接的客户端进程数量
    数据库关闭之前,需要清理连接的客户端会话。连接的客户端数量越多,那么SHUTDOWN IMMEDIATE关闭数据库时需要断开的会话就越多,消耗时间也就越长,如下所示:
Sun Jul 15 02:43:33 CDT 2012
Job queue slave processes stopped
Active process 6238404 user 'oracle' program 'oracle@P520'
。。。。。。
Active process 4678106 user 'oracle' program 'oracle@P520'
CLOSE: waiting for server sessions to complete.
为了加快数据库关闭速度,可以先关闭监听,然后手动“杀”死相关的客户端进程,如下所示:
ps -ef|grep "LOCAL=NO"|grep -v grep |awk '{print "kill -9 "  $2}'|sh
2. 未提交的事务占用的UNDO BLOCK数量
UNDO BLOCK的数量越多也就意味着事务越大,数据库关闭也就越慢。当数据库事务很大时,关闭数据库往往停留在如下阶段,如下所示:
Thu Dec 10 15:43:17 2009
ALTER DATABASE CLOSE NORMAL
Thu Dec 10 15:44:07 2009
Waiting for smon to disable tx recovery.
    所以我们在关闭数据库前最好评估回滚事务量的大小,如果事务很大,那只有耐心地等待了,相关SQL如下所示:
select sum(used_ublk) * <block size of the undo / rollback segment tablespace> from v$transaction;
3. 长时间运行的会话
可以kill长时间会话来加快数据库关闭速度。通过以下查询获得长时间运行的会话数量:
SQL> select count(*) from v$session_longops where time_remaining>0;
此外,关闭数据库前手动执行全量CHECKPOINT也能在一定程度上加快关闭速度:
ALTER SYSTEM CHECKPOINT;
    有时使用shutdown immediate不一定能关闭数据库,如在关闭数据库时,警告日志长时间出现如下错误:
Sat Apr 14 18:42:28 2007
Job queue slave processes stopped
Sat Apr 14 18:42:33 2007
Process OS id : 8888 alive after kill
Errors in file
Sat Apr 14 18:42:34 2007
PMON failed to acquire latch, see PMON dump
PMON failed to acquire latch, see PMON dump
PMON failed to acquire latch, see PMON dump
    当出现上述错误时,那么只能选择使用shutdown abort或者kill Oracle核心进程来异常关闭数据库(Instance Crash)。异常关闭数据库可能导致某些资源无法释放干净,所以关闭数据库后需要检查以下内容,如果存在则将其删除:
 数据库后台遗留进程,可以用以下命令检查:
$ ps -ef | grep $ORACLE_SID
 用ipcs命令检查实例的共享内存段和信号量。
 检查$ORACLE_HOME/dbs目录下是否存在lk<SID>,sgadef<sid>.dbf。
5.9.2 数据库无法关闭的诊断方法
有时候以SHUTDOWN IMMEDIATE方式关闭数据库时,会长时间hang住。为了诊断hang住的原因,可以在关闭数据库前设置10400和10046事件。当数据库关闭hang住时,10400事件会每隔5分钟进行SYSTEMSTATE DUMP,如下所示:
SQL> alter session set events '10400 trace name context forever, level 1';
SQL> alter session set events '10046 trace name context forever,level 12';
SQL> shutdown immediate
    如果仍未获得更多的诊断信息,可以使用另外的终端连接至数据库做HANGANALYZE(HANGANALYZE不一定能执行成功),如下所示:
SQL> oradebug setmypid
SQL> oradebug unlimit
SQL> oradebug hanganalyze 3
-- wait 90 seconds
SQL> oradebug hanganalyze 3
SQL> exit

注意 除非绝对需要,否则不推荐使用shutdown abort关闭数据库。受时间窗口所限,如果必须要在短时间内关闭数据库,比如升级数据库,那么建议将数据库以abort方式关闭之后,马上以限制模式方式开启数据库,然后再以shutdown immediate方式关闭。
0
0
分享到:
评论

相关推荐

    数据库开关

    数据库快速开启和数据库快速关闭

    数据库分析查看软件

    我自已开发的用于dbf,access和mssql数据库的查看工具,可以很快速的查看数据库里的数据表,可进行数据表结构分析,大量数据表的浏览只需要键盘就能快速查看数据,无须每开一个表关闭一个表,哪样效率太低了,你甚至...

    MySQL+Oracle+SQLServer数据库服务快速启动和关闭

    如果你是个开发者,或者你电脑安装了几个数据库,那么众多的数据库服务可能会让你烦心,不知道哪个主要,更重要的是不使用...本资源针对三个主流数据库的服务编写了对应开启和关闭的批处理文件,使得以上问题轻松解决。

    MySQL数据库入门到高级笔记快速学习pdf版本

    mysql的启动和关闭,使用数据库,对库的基本操作以及创建表,修改表删除表等操作 2. 对于数据表的查询操作,由简单的单表查询,到多表查询,分组查询,模糊查询,排序,起别名等 3. 数据库高级部分,视图,索引,...

    Linux系统重启db2数据库命令实例详解.docx

    快速方法 执行命令:db2stop force Linux系统重启db2数据库命令实例详解全文共4页,当前为第2页。Linux系统重启db2数据库命令实例详解全文共4页,当前为第2页。Linux系统db2数据库常用命令 Linux系统重启db2数据库...

    ACCESS数据库修复工具

    当因为意外导致Access数据库不能被正常访问(数据库格式无效或者需要修复)时,可以使用此工具快速修复数据库文件。实践证明,该工具是众多Access数据库修复工具中速度最快、修复率最高的几种之一。 当打开或者读写...

    Microsoft SQL Server数据库建模工具

    10、内置有SQL执行工具,该工具是一款简单的查询分析器,目的旨在将您对数据库所做的更改快速布置到其他开发机上。 复杂的SQL语句建议您使用查询分析器完成。 11、表字典生成器让您快速地将本工具使用溶入开发中...

    SYBASE_12.0数据库维护快速参考手册

    3.3.2 如何配置SQL Server 11,使得快速BCP具有更好的性能? 80 3.3.3如何将SQL/ASE SERVER移植到同种平台(相同操作系统)的系统上 81 3.3.4 如何做Rebuild Master 82 3.3.5 如何移植master设备 84 3.3.6 如何重建...

    电子记事本 数据库记事本 本地数据库 日记本升级版V1.3

    1.自制UI,生成本地数据库文件,自动抓取剪切板数据,只需您复制一下,即可快速保存至数据库,方便易用,无须手动粘贴,无须手动保存,是您开发工作生活的好帮手。 2.数据库是加密的,可以有效保存您的数据资料,以...

    Oracle数据库管理员技术指南

    1.7.9 配置数据库自动启动和关闭 1.7.10 在数据库投入使用之后对其进行 监控 1.7.11 怎样列出和描述初始化参数 1.7.12 怎样列出无记载参数 1.8 回顾 第2章 管理数据存储、对象和容量 2.1 配置数据存储 2.1.1...

    易语言SQLlite数据库

    易语言SQLlite数据库源码,SQLlite数据库,创建_库,打开_库,加_记录,到_首记录,到_尾记录,删除_记录,关闭_库,全部_关闭,取_字段名,取_字段位置,取_字段类型,取_字段数,取_记录数,取_记录索引,跳到指定记录,跳过记录,读...

    电子记事本 数据库记事本 本地数据库 日记本V1.4

    1.自制UI,生成本地数据库文件,自动抓取剪切板数据,只需您复制一下,无须手动粘贴,无须手动保存,即可快速保存至数据库,方便易用,是您开发工作生活的好帮手。 2.数据库是加密的,可以安全保存您的数据资料。 3....

    数据库快速查询-易语言

    数据库快速查询 原理:导入excel数据到edb数据库,然后要搜索数据时直接搜索edb数据库 软件牵涉到的学习内容: excel导入导出,虚表的操作(数据库可视化,一下载入几十万数据没问题),易语言 自带的数据库edb 软件...

    greendao数据库

    GreenDao是一个将对象映射到SQLite数据库中的轻量级且快速的ORM解决方案. 优点: 1. 一个精简的库 2. 性能最大化 3. 内存开销最小化 4. 易于使用的APIs 5. 对Android进行高度优化 GreenDAO 缺点: 1. 配置步骤...

    sql数据库命令大全.doc

    从sql的创建到查询执行等操作,为新手入门的必备武器。 可以快速的进行新手入门

    Linux系统怎么用命令重启db2数据库.docx

    快速方法 执行命令:db2stop force Linux系统怎么用命令重启db2数据库全文共4页,当前为第2页。Linux系统怎么用命令重启db2数据库全文共4页,当前为第2页。Linux系统db2数据库常用命令 Linux系统怎么用命令重启db2...

    cmd 管理oracle数据库服务工具

    cmd环境下的一个用命令来管理oracle数据库服务的工具,提供服务的打开,关闭功能。方便服务的快速管理不需要进入系统服务管理界面,动手能力强的可以扩展为管理其它服务也是可以的

    电子记事本 数据库日记本 本地数据库 日记本稳定版V1.4

    1.自制UI,生成本地数据库文件,自动抓取剪切板数据,只需您复制一下,无须手动粘贴,无须手动保存,即可快速保存至数据库,方便易用,是您开发工作生活的好帮手。 2.数据库是加密的,可以有效保存您的数据资料,以...

    mysql快速启动关闭脚本

    用于在windos下快速开启或关闭mysql数据库服务。双击使用。

Global site tag (gtag.js) - Google Analytics