li
  当前位置:主页 > 性能优化 > 文章内容
li
如何有效的关闭生产数据库?
来源: www.ixdba.net  作者: IXDBA.NET官方    时间:2008-04-21   阅读:29  

主题:如何有效的关闭生产数据库?

在运行系统上大家都采用哪种关闭方式?昨日运行系统中需要关闭数据库重新启动,为了安全起见采用了shutdown immediate方式,但是等了20多分钟系统还没有关闭,无奈取消该操作接着采用了shutdown abort
请问大家一般都采用哪种方式的?大家采用shutdown abort关闭然后启动数据库有没有遇到过启动错误?

回复:

一般规范的操作在关闭DB 的时候就是安全的使用 shutdown immediate 了,但是如果在使用immediate 关闭数据库的时候数据库正在进行大的事务,或者数据库比较慢,这个时候虽然说别的session 无法连接DB ,但是数据库要rollback 那些未提交的事务,如果这个时候有大的事务在处理还没有提交的话,那immediate 就很慢了,这在7*24小时不间断运行的DB 重新启动中,这个时间是不能容忍的。

www.ixdba.net



    那么建议最好在数据库不忙,事务少小的情况下重新启动DB 比较的好,或者可以事先关闭连接到DB的程序,比如webserver 或者其他的程序。然后手工kill 掉所有的session 然后再immediate 比较的好一点了。

较好的重新启动数据库的步骤

因为各种各样的原因,有时候工作数据库需要重新启动.

我列出一个较好的操作步骤,希望对初学者有些帮助.

1.
停应用层的各种程序.

2.
oralce的监听进程:

$lsnrctl stop

3.
在独占的系统用户下,备份控制文件:

SQL>alter database backup controlfile to trace;

4SQL> alter system checkpoint;

5.
在独占的系统用户下,手工切换重作日志文件,确保当前已修改过的数据存入文件:

SQL>alter system switch logfile;

6.
在独占的系统用户下,运行下面SQL语句,生成杀数据库用户连接的kill_all_session.sql文件:

set head off;
set feedback off;
set newpage none;
spool /oracle_backup/bin/kill_all_session.sql
select 'alter system kill session '''||sid||','||serial#||''';' from v$session where username is not null;
spool off;

7.
在独占的系统用户下,执行杀数据库用户连接的kill_all_session.sql文件

SQL>@/oracle_backup/bin/kill_all_session.sql

8.
在独占的系统用户下,用immediate方式关闭数据库:

SQL>shutdown immediate;
或者
SVRMGRL>shutdown immediate;

9.
启动oralce的监听进程

$lsnrctl start

10.
进入独占的系统用户下,启动oralce数据库

$sqlplus /nolog
SQL>connect / as sysdba
SQL>startup;

或者
$svrmgrl
SVRMGRL>connect internal;
SVRMGRL>startup;

11.
启动应用层的各种程序.

我们是电信移动的数据库,不能停很久的,每次重新启动数据库的时候,先中断所有与DB 的连接,然后stop listener.然后kill 掉所有的session ,然后用shutdown immediate 但是时间还是很长,最后还是停不了,NND 直接abort ,好几次了,也没有出现过大的问题,只是open 的时候慢一点,因为open 的时候还是要回滚的

有点不明白,abort 之后重新启动DB,open 的时候同样要回滚那些应该在immediate 需要回滚的事务,为什么open 的时候速度还是比较的快的而immediate 的时候怎么回滚那么慢呢?不排除immediate 的时候要触发dbwr 写脏数据到数据文件,但是这个过程还是比较的快的,就算回滚量大,但是也不能immediate 需要等1个多小时啊,特别在大的数据库里面,难道immediate 的时候还需要 做别的大的动作处理吗?

回答:

shutdown immediate的时候,要等待所有的回滚完成,所有数据文件同步。而启动做实例恢复 instance recovery 时,只需要前滚完成,也就是说,将日志里的动作做完,并不等待 recovery 的完成就可以open数据库了。在使用到需要回滚的数据块时,再执行回滚。所以,open的速度要快很多。因为有很多应该完成的工作,在 open的时候都没有做。




  上一篇: oracle OCA知识考点   下一篇: oracle SQL性能调整之一:SQL性能...
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·oracle OCA知识考点
·ORA-12560: TNS: 协议适配器错误
·关于Oracle后台進程问题的讨论
·关于EXTENT MANAGEMENT LOCAL UN...
·statspack统计内容信息含义详解
·关于 v$sysstat 与 v$filestat 中...
·关于 cursor_sharing = similar
·pga浅谈
·Oracle Standby数据库专题探讨
·ora-04031处理过程,欢迎进行讨论
·oracle SQL性能调整之一:SQL性能...
·oracle SQL性能调整之二:深入理解...
·oracle SQL性能调整之三: 稳定执...
·oracle SQL性能调整之四: 关于物...
·oracle SQL性能调整之五: 关于索...
·oracle SQL性能调整之六: 关于分...
·oracle SQL性能调整之七: 关于簇
·oracle 性能调优:调整共享池之理...
·oracle 性能调优:调整共享池之测...
·oracle 性能调优:调整共享池之改...
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接