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;
如果值是:
主要:
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是非常重要的。
假设我有一个主数据库和另一个备用数据库保护数据库,并且这两个数据库/实例都是主动使用的,但是看到下面的屏幕截图的区别:
主数据库:
备用数据守卫数据库: