我如何知道是否安装并激活了Oracle数据库?

IANADBA,但是我正在编写一个脚本,只要oracle备用数据库还没有被激活就会采取行动。 我正在寻找的是两个查询(或一组查询,如果有必要的话)。

1 – 数据库是否挂载(如在,有人做了“alter database mount standby database”)

2 – 如何判断数据库是否被激活(如“alter database activate standby database”)?

正如我所提到的,我正在寻找疑问,但是如果有一种方法可以在系统中进行说明的话,我也会接受。 谢谢!

更新

我采取了下面的build议(稍微修改,因为我正在处理Oracle 8i,我得到这个:

SQL> SELECT INSTANCE_NAME, DATABASE_STATUS, INSTANCE_ROLE from v$instance; INSTANCE_NAME DATABASE_STATUS INSTANCE_ROLE ---------------- ----------------- ------------------ RGR01 ACTIVE PRIMARY_INSTANCE 

目前,这个实例正在主动恢复归档日志,但不是“活的”。 我仍然在寻找一种方法来判断它是不是作为备用数据库挂载的。

我知道了!

v $ database中的CONTROLFILE_TYPE是关键

  SQL> select CONTROLFILE_TYPE from v$database; CONTROL ------- CURRENT 

  SQL> select CONTROLFILE_TYPE from v$database; CONTROL ------- STANDBY 

这适用于物理备用数据库,Oracle 10g(及更高版本)

SELECT open_mode FROM v $ database;

如果值是:

  1. 'MOUNTED',你的数据库被挂载。
  2. '读写',那么你可以认为它已被激活。
  3. 'READ ONLY',那么它可能被打开以只读模式查询,但是没有被激活。
  4. 使用活动的数据保护时,'仅适用于应用'。

主要:

 select database_role from v$database; DATABASE_ROLE ---------------- PRIMARY 

在奴隶:

 OPEN_MODE -------------------- -------------------- MOUNTED or READ ONLY WITH APPLY 

还有其他的价值,我不确定。

HTH

这可能是过分简单的,因为我不太熟悉备用数据库

但只要实例已经启动,您应该可以查询v $实例视图并获取数据库的状态

 SELECT INSTANCE_NAME, DATABASE_STATUS, INSTANCE_ROLE, ACTIVE_STATE FROM v$instance; 

你可以通过netstat / lsof监视到数据库的连接吗? 大概你会注意到客户开始使用它。

您也可以查看这些命令的存档日志。

我真的不知道这个问题的答案 – “我怎么知道Oracle数据库是否被安装并激活?”,但是我必须发布答案让人们知道,请不要误解这篇文章的答案,因为大部分都是错误的

  • 那些说使用“v $ instance”的人是绝对错误的,因为这会告诉“实例”是被挂载还是启动或者不活动。 请注意,数据库和数据库实例是不同的东西 ,所以如果你不知道区别,那么更好的阅读,并阅读有关Oracle RAC和Oracle Data Gurard

  • 那些你说的使用select CONTROLFILE_TYPE from v$database; 也是不正确的,因为按照Oracle这一列告诉控制文件信息,并且告诉数据库是处于待机模式还是活动模式,这是不同的,那么数据库是否挂载或数据库是否处于活动状态。

就像我说的,我认为了解数据库和数据库实例之间的不同以及了解什么是Oracle RAC和Oracle Data Gurard是非常重要的。

假设我有一个主数据库和另一个备用数据库保护数据库,并且这两个数据库/实例都是主动使用的,但是看到下面的屏幕截图的区别:

主数据库:

在这里输入图像说明

备用数据守卫数据库:

在这里输入图像说明