“一朝被蛇咬,十年怕井绳”。在没被“蛇”咬之前,很多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方式关闭。
分享到:
相关推荐
- **应用场景**:当需要快速关闭数据库且可以接受未提交事务被回滚时使用此命令。 #### 2. `SHUTDOWN ABORT` - **命令含义**:`SHUTDOWN ABORT`命令强制关闭数据库,不等待任何事务的完成。 - **特点**: - 不...
- ABORT:中止关闭,虽然可以快速关闭数据库,但可能会丢失未提交的数据,对数据完整性造成损害。 此外,数据库的状态也可以分为正常状态和特殊状态: - 静默状态:数据库未被访问且不进行任何操作。 - 挂起状态:...
- **一般操作**:包括启动和关闭数据库、在同一JVM中使用多个数据库实例等。 - **数据库引擎**:介绍HSQLDB中可用的不同表类型(如临时表、持久化表)、约束和索引机制、SQL支持情况及JDBC接口的使用。 #### 四、...
标题 "Excel大量数据快速导入数据库源码" 描述的是一个编程解决方案,用于高效地将Excel电子表格中的大量数据批量导入到数据库系统中。这个过程通常涉及到数据预处理、数据清洗和数据传输等步骤,是数据处理工作流程...
- 使用`SQL*Plus`作为管理员(SYSDBA)连接到数据库,执行`SHUTDOWN IMMEDIATE`命令快速关闭数据库,这会立即中断所有用户连接并关闭数据库。 - 若有未提交的事务,可以使用`SHUTDOWN TRANSACTIONAL`,等待所有...
### VB代码实现从数据库快速导出数据到EXCEL的知识点详解 #### 一、核心概念与技术背景 在企业级应用开发中,数据处理与报表生成是常见的需求之一。使用VB(Visual Basic)进行编程,可以高效地实现从数据库提取...
### 深刻理解Oracle数据库的启动和关闭 Oracle数据库作为企业级...而在紧急情况下,则可能需要使用`SHUTDOWN ABORT`来快速关闭数据库。了解这些不同模式的特点可以帮助DBA更有效地管理和优化Oracle数据库的运行状态。
5. **关闭数据库连接**:最后,确保在完成所有操作后关闭数据库连接,释放资源。 ```python conn.close() ``` 以上就是使用7行Python代码生成Excel文件的基本流程。实际应用中,可能还需要根据需求进行一些额外的...
- **启动与关闭**:用SQL*Plus中的startup和shutdown命令控制数据库实例。 4. **SQL基础** - **SQL语言**:学习INSERT、UPDATE、DELETE和SELECT等基本语句,理解JOIN、子查询和聚合函数的用法。 - **PL/SQL**:...
- **SHUTDOWN IMMEDIATE**:立即关闭数据库,不等待用户断开,适合快速关闭数据库但可能导致未提交事务丢失。 - **SHUTDOWN TRANSACTIONAL**:等待所有当前事务完成后关闭,确保数据一致性,但可能比NORMAL模式慢。 ...
### Sybase数据库维护快速参考手册知识点详述 #### 基本概念篇 **1.1 什么是Sybase Adaptive Server Enterprise (ASE)?** Sybase Adaptive Server Enterprise (ASE) 是Sybase公司开发的一款高性能的关系型数据库...
然而,由于各种原因,如系统崩溃、电源故障、病毒感染或不正确的关闭,Access数据库可能会遭受轻微损坏,导致数据丢失或无法正常访问。这时,“Access数据库快速修复修改程序”就显得尤为重要。 该程序的主要功能是...
金仓数据库镜像使用指南是一份详细的指导手册,旨在帮助用户快速掌握金仓数据库的安装、配置和使用方法。本指南涵盖了金仓数据库的安装目录结构、管理员账号密码、数据库服务启动和关闭、初始库说明、 WEB 方式管理...
8. **数据库关闭命令**:`shutdown immediate`命令快速关闭数据库,但可能不等待所有活动事务完成;`shutdown abort`则强制关闭,可能导致数据不一致。在正常关闭过程中,应优先考虑`shutdown transactional`或`...
改变数据库的运行方式需要关闭数据库,备份已有的数据,然后修改数据库的运行方式。在创建数据库时,可以选择数据库的初始存档方式,一般情况下为 NOARCHIVELOG 方式。可以根据需要把数据库改成 ARCHIVELOG 方式。 ...
- **关闭**:在较新版本中,通常使用`shutdown immediate`或`shutdown abort`快速关闭数据库,而在旧版本中,可能需要使用`sqlplus /nolog`和`shutdown`命令。 Oracle数据库的复杂性在于其强大的功能和高度可配置...
### Sybase 12.5 数据库快速参考手册知识点概览 #### 一、基本概念篇 ##### 1.1 Sybase Adaptive Server Enterprise (ASE) Sybase ASE 是一款高性能的关系型数据库管理系统,专为企业级应用设计。它支持SQL标准,...
4. **关闭数据库**:在需要停机维护时,可以使用`shutdown immediate`命令快速关闭数据库。注意,这将中断所有当前的数据库会话。 遇到无法连接数据库的情况,可能是因为防火墙规则限制了1521端口(Oracle默认端口...
“数据库开关”这一概念,通常指的是对数据库实例进行快速启动(Open)与快速关闭(Close)的操作。 #### 二、数据库快速开启 ##### 2.1 快速开启的概念 快速开启是指在最短的时间内启动数据库服务,以便用户能够...