`
JEmql
  • 浏览: 62381 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

【ORA-16196】一个实例在其生命周期里最多只能装载和打开一个数据库

阅读更多

如果使用“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数据库出现ora-12520, ora-12516问题解析 #### 一、问题概述 在使用Oracle12cRAC(Real Application Clusters)数据库的过程中,可能会遇到客户端连接时出现ora-12520或ora-12516错误的问题。这两...

    ORACLE ORA-00132 ORA-00214

    ORA-00132错误通常出现在网络配置不正确或数据库实例无法通过网络名识别目标数据库的情况。此错误表明Oracle在尝试解析数据库服务名时遇到了语法错误或者未能找到对应的网络配置。 ##### 2. 产生原因 - **网络配置...

    Oracle数据库发生ORA-04031错误原因浅析及处理.pdf

    它具有完整的数据管理功能,作为一个关系数据库,它是一个非常实用的关系数据库产品。但是在实际应用过程中经常会出现“ORACLE 的 JOB 无法执行”、“ORA-04031”等错误情况,给维护及使用带来问题。 ORA-04031错误...

    oracle重启报错ORA-00702解决办法

    ORA-00702错误信息表明数据库实例试图访问一个尚未完全初始化的数据文件或控制文件。这可能是由于数据库在不正常的情况下关闭,例如突然断电、系统崩溃或者人为错误导致的。 **Windows系统下的解决步骤** 1. **检查...

    ORACLE8I数据库应用EXP工具时ORA-06553报错的解决方法.pdf

    EXP工具可以将数据库中的数据导出到一个文件中,方便数据的备份和迁移。 知识点2:ORA-06553报错的原因 ORA-06553报错是指在使用EXP工具导出数据库数据时出现的错误信息。这个错误信息通常是由于EXP工具在执行...

    Oracle 11gr2连Oracle 19c 报ORA-28040 ORA-01017解决方法.pdf

    Oracle数据库不同版本间的客户端与服务端的连接问题通常涉及到安全和兼容性配置,这篇文章主要讲述了在Oracle 11g R2客户端尝试连接Oracle 19c服务端时,遇到了两个特定的错误:ORA-28040和ORA-01017,以及如何解决...

    使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查

    在使用Oracle Data Pump工具IMPDP(Import Data Pump)进行数据导入的过程中,可能会遇到ORA-39002和ORA-39070等错误。本文将针对这些错误的排查方法进行详细介绍,帮助用户理解问题的原因及解决策略。 ### 错误...

    oracle数据库ORA-29275.txt

    ### Oracle数据库ORA-29275错误解析与解决方案 #### 错误概述 在Oracle数据库操作过程中,遇到ORA-29275错误时,通常意味着系统内部发生了某些问题,影响了数据库的正常运行。根据提供的部分脚本内容及上下文推测,...

    Drop goldengate用户时报ORA-00604 ORA-20782 ORA-06512问题解决

    ### 解决Drop Goldengate 用户时报ORA-00604 ORA-20782 ORA-06512问题 #### 一、问题背景与现象 在进行Oracle数据库管理过程中,经常会遇到需要删除用户的场景。当尝试执行`drop user goldengate cascade;`命令时,...

    如何处理错误ORA-29275:部分多字节字符

    在Oracle数据库操作过程中,用户可能会遇到一个特定的错误提示——ORA-29275:部分多字节字符。这一错误通常出现在执行查询`SELECT * FROM V$SESSION`时。该错误的出现意味着在查询结果中存在一些多字节字符(通常是...

    关于创建oracle 连接时报以下错误,ORA-01017 ORA-02063

    在创建Oracle数据库连接时遇到的错误ORA-01017和ORA-02063涉及到用户认证问题以及Oracle数据库版本之间的差异处理。ORA-01017错误表示用户名或密码无效,登录被拒绝,而ORA-02063则通常表示在Oracle数据库之间进行...

    Oracle Database on Linux Fails to Start - ORA-27154 ORA-27300 OR

    在本文中,我们将深入探讨一个特定的Oracle数据库在Linux环境下启动失败的问题,涉及错误代码ORA-27154、ORA-27300、ORA-27301和ORA-27302,这些错误通常与系统信号量相关。此问题可能发生在尝试启动一个新的数据库...

    离线误删空间文件导致的ORA-01033及ORA-01145问题的解决办法

    ### 离线误删空间文件导致的ORA-01033及ORA-01145问题的解决办法 #### 概述 在Oracle数据库管理过程中,偶尔会遇到因误操作导致的数据文件出现问题的情况,例如误删除数据文件或者数据文件损坏等。这些问题可能会...

    Oracle 10g启动后报ORA-16038错误的解决方法

    如果数据库尚未打开,则会收到ORA-01109错误提示: ``` ORA-01109: database not open ``` 这是正常的,因为我们在尝试立即关闭数据库。接下来,数据库将会被卸载并最终关闭。 ##### 步骤三:分析问题原因 根据...

    解决启动数据库时ORA-03113问题

    在解决 ORA-03113 问题时,我们需要了解 Oracle 数据库的日志文件结构和恢复机制。通过了解日志文件的工作原理和恢复机制,我们可以更好地解决数据库启动问题,并确保数据库的高可用性和数据安全性。 此外,为了...

    ORA-04052p5731178_92080_WINNT.zip

    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 错误 解决 方法ora-00604 错误 解决 方法

    ora-227101错误解决办法

    在Oracle数据库管理与维护的过程中,遇到各种错误代码是家常便饭,其中“ORA-227101”错误虽然在题目中被误标,实际案例中展示的是“ORA-27101”错误,这是一个较为常见的问题,通常发生在数据库服务未能正确启动或...

Global site tag (gtag.js) - Google Analytics