如果使用“alter database open;”命令打开一个曾经被“alter database close;”命令关闭的
数据库
时,您将会收到如下的报错信息:
"ORA-16196: database has been previously opened and closed"
这个报错的原因是什么呢?
原因是:
一个
实例
在其生存期中最多只能装载和打开一个数据库。
要想再打开此数据库,必须先停掉这个实例再重新启动数据库。
基于上面的报错信息和原因,我来通过一个
实验
来展示一下这个过程,以便有一个感性上的认识。
1.为了保证实验环境的“纯洁”,先重新启动一下数据库(这里我使用的
Oracle
版本是10.2.0.3)
ora10g@secDB /home/oracle$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.3.0 - Production on Sun Oct 25 23:07:57 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database
10g
Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
sys@ora10g> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ora10g> startup;
ORACLE instance started.
Total System Global Area 2147483648 bytes
Fixed Size 2074152 bytes
Variable Size 637536728 bytes
Database Buffers 1493172224 bytes
Redo Buffers 14700544 bytes
Database mounted.
Database opened.
sys@ora10g>
2.在数据库启动成功之后,我们通过v$database视图和v$instance视图查看一下当前数据库的状态,以便和close后的状态进行比较
sys@ora10g> select open_mode from v$database;
OPEN_MODE
----------
READ WRITE
sys@ora10g> select status from v$instance;
STATUS
------------
OPEN
可以看到现在的数据库状态是open并且是可读写操作的状态。
3.此时我们使用“alter database close;”命令关闭数据库(注意这里我的用词,关闭的是“数据库”不是“实例”)
执
行这个命令需要等待一段时间才能完成,存在一个数据库连接清理的过程。如果在Oracle
9i的环境下使用这个close命令,若数据库中存在其他的连接,命令将无法完成,会收到“ORA-01093: ALTER DATABASE
CLOSE only permitted with no sessions
connected”报错信息,这里的演示环境时10g,在10g中即使是存在着其他的连接也同样可以完成close过程。
sys@ora10g> alter database close;
Database altered.
4.再次查询v$database视图和v$instance视图中有关数据库状态的信息,与上面的信息进行比较
sys@ora10g> select open_mode from v$database;
OPEN_MODE
----------
MOUNTED
sys@ora10g> select status from v$instance;
STATUS
------------
MOUNTED
可以看到,此时数据库的状态已经变为“MOUNTED”的状态
。
进一步检查一下此时数据库服务器有关该实例的后台数据库进程信息。通过下面的结果信息可以进一步确信,“alter database close;”操作并没有将数据库的实例关闭,仅仅是将数据库的状态从“OPEN”状态带到了“MOUNT”状态
sys@ora10g> !ps -ef | grep 'ora_.*ora10g' | grep -v grep
oracle 867 1 0 22:31 ? 00:00:00 ora_pmon_ora10g
oracle 869 1 0 22:31 ? 00:00:00 ora_psp0_ora10g
oracle 871 1 0 22:31 ? 00:00:00 ora_mman_ora10g
oracle 873 1 0 22:31 ? 00:00:00 ora_dbw0_ora10g
oracle 875 1 0 22:31 ? 00:00:00 ora_dbw1_ora10g
oracle 877 1 0 22:31 ? 00:00:00 ora_lgwr_ora10g
oracle 879 1 0 22:31 ? 00:00:00 ora_ckpt_ora10g
oracle 881 1 0 22:31 ? 00:00:00 ora_smon_ora10g
oracle 883 1 0 22:31 ? 00:00:00 ora_reco_ora10g
oracle 887 1 0 22:31 ? 00:00:00 ora_mmon_ora10g
oracle 889 1 0 22:31 ? 00:00:00 ora_mmnl_ora10g
5.既然数据库的状态现在是mount状态,我们尝试使用open命令重新开启该数据库。结果很显然,在这样的状态下,我们是无法再次open该数据库的。
sys@ora10g> alter database open;
alter database open
*
ERROR at line 1:
ORA-16196: database has been previously opened and closed
6.使用oerr工具查看一下“ORA-16196”报错信息含义。从原因信息描述中可以非常清晰的得到具体的原因和后续的处理方法
。
sys@ora10g> ! oerr ora 16196
16196, 00000, "database has been previously opened and closed"
// *Cause: The instance has already opened and closed the database,
// which is allowed only once in its lifetime.
// *Action: Shut down the instance.
7.此时如果想要重新使用该数据库,只有按照上面提示信息中“Action:”部分描述的操作:关闭数据库并重新开启。
sys@ora10g> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
sys@ora10g> startup ;
ORACLE instance started.
Total System Global Area 2147483648 bytes
Fixed Size 2074152 bytes
Variable Size 637536728 bytes
Database Buffers 1493172224 bytes
Redo Buffers 14700544 bytes
Database mounted.
Database opened.
sys@ora10g>
sys@ora10g> select open_mode from v$database;
OPEN_MODE
----------
READ WRITE
sys@ora10g> select status from v$instance;
STATUS
------------
OPEN
OK,到此,数据库又一个崭新的生命周期开始了。
8.小结
通过上面的演示,大家应该对“
一个实例在其生存期中最多只能装载和打开一个数据库。
”这句话有了一个更加具体的理解。其实Oracle数据库的每一个状态都很值得认真研究,其中充满了N多令人神往的细节。
分享到:
相关推荐
### Oracle12cRAC数据库出现ora-12520, ora-12516问题解析 #### 一、问题概述 在使用Oracle12cRAC(Real Application Clusters)数据库的过程中,可能会遇到客户端连接时出现ora-12520或ora-12516错误的问题。这两...
ORA-00132错误通常出现在网络配置不正确或数据库实例无法通过网络名识别目标数据库的情况。此错误表明Oracle在尝试解析数据库服务名时遇到了语法错误或者未能找到对应的网络配置。 ##### 2. 产生原因 - **网络配置...
它具有完整的数据管理功能,作为一个关系数据库,它是一个非常实用的关系数据库产品。但是在实际应用过程中经常会出现“ORACLE 的 JOB 无法执行”、“ORA-04031”等错误情况,给维护及使用带来问题。 ORA-04031错误...
ORA-00702错误信息表明数据库实例试图访问一个尚未完全初始化的数据文件或控制文件。这可能是由于数据库在不正常的情况下关闭,例如突然断电、系统崩溃或者人为错误导致的。 **Windows系统下的解决步骤** 1. **检查...
EXP工具可以将数据库中的数据导出到一个文件中,方便数据的备份和迁移。 知识点2:ORA-06553报错的原因 ORA-06553报错是指在使用EXP工具导出数据库数据时出现的错误信息。这个错误信息通常是由于EXP工具在执行...
Oracle数据库不同版本间的客户端与服务端的连接问题通常涉及到安全和兼容性配置,这篇文章主要讲述了在Oracle 11g R2客户端尝试连接Oracle 19c服务端时,遇到了两个特定的错误:ORA-28040和ORA-01017,以及如何解决...
在使用Oracle Data Pump工具IMPDP(Import Data Pump)进行数据导入的过程中,可能会遇到ORA-39002和ORA-39070等错误。本文将针对这些错误的排查方法进行详细介绍,帮助用户理解问题的原因及解决策略。 ### 错误...
### Oracle数据库ORA-29275错误解析与解决方案 #### 错误概述 在Oracle数据库操作过程中,遇到ORA-29275错误时,通常意味着系统内部发生了某些问题,影响了数据库的正常运行。根据提供的部分脚本内容及上下文推测,...
### 解决Drop Goldengate 用户时报ORA-00604 ORA-20782 ORA-06512问题 #### 一、问题背景与现象 在进行Oracle数据库管理过程中,经常会遇到需要删除用户的场景。当尝试执行`drop user goldengate cascade;`命令时,...
在Oracle数据库操作过程中,用户可能会遇到一个特定的错误提示——ORA-29275:部分多字节字符。这一错误通常出现在执行查询`SELECT * FROM V$SESSION`时。该错误的出现意味着在查询结果中存在一些多字节字符(通常是...
在创建Oracle数据库连接时遇到的错误ORA-01017和ORA-02063涉及到用户认证问题以及Oracle数据库版本之间的差异处理。ORA-01017错误表示用户名或密码无效,登录被拒绝,而ORA-02063则通常表示在Oracle数据库之间进行...
在本文中,我们将深入探讨一个特定的Oracle数据库在Linux环境下启动失败的问题,涉及错误代码ORA-27154、ORA-27300、ORA-27301和ORA-27302,这些错误通常与系统信号量相关。此问题可能发生在尝试启动一个新的数据库...
### 离线误删空间文件导致的ORA-01033及ORA-01145问题的解决办法 #### 概述 在Oracle数据库管理过程中,偶尔会遇到因误操作导致的数据文件出现问题的情况,例如误删除数据文件或者数据文件损坏等。这些问题可能会...
如果数据库尚未打开,则会收到ORA-01109错误提示: ``` ORA-01109: database not open ``` 这是正常的,因为我们在尝试立即关闭数据库。接下来,数据库将会被卸载并最终关闭。 ##### 步骤三:分析问题原因 根据...
在解决 ORA-03113 问题时,我们需要了解 Oracle 数据库的日志文件结构和恢复机制。通过了解日志文件的工作原理和恢复机制,我们可以更好地解决数据库启动问题,并确保数据库的高可用性和数据安全性。 此外,为了...
ORA-00604: 递归SQL层1出现错误 ORA-03106: 致命的双工通信协议错误 ORA-02063: 紧接着line(源于dblink) 以及 ORA-04052: 在查找远程对象时出错 ORA-00604: 递归SQL层1出现错误 ORA-03120: 双工转换例行程序:整数...
ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法ora-00604 错误 解决 方法
在Oracle数据库管理与维护的过程中,遇到各种错误代码是家常便饭,其中“ORA-227101”错误虽然在题目中被误标,实际案例中展示的是“ORA-27101”错误,这是一个较为常见的问题,通常发生在数据库服务未能正确启动或...