IANADBA,但我正在编写一个脚本,只要没有激活 oracle 备用数据库,它就会采取行动。我正在寻找的是两个查询(或查询集,如有必要)。
1 - 数据库是否已安装(例如,有人做过“alter database mount standby database”)
2 - 如何判断数据库是否已激活(如“alter database activate standby database”)?
正如我所提到的,我正在寻找查询,但如果系统中有办法告诉我,我也愿意接受。谢谢!
更新
我接受了以下建议(稍作修改,因为我正在处理 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 是关键
相对
这适用于物理备用,Oracle 10g(和更高版本)
从 v$database 中选择 open_mode;
如果值为:
在初级:
在奴隶上:
可能还有其他值,我不确定。
高温高压
由于我对备用数据库不太熟悉,因此这对于您所追求的可能过于简单
但只要实例启动,您就应该能够查询 v$instance 视图并获取数据库的状态,例如
我真的不知道这个问题的答案 - “我如何判断 Oracle 数据库是否已安装和激活?”,但我必须发布答案让人们知道请不要被这篇文章的答案误导,因为大多数都是大错特错。
那些说使用“v$instance”的人是绝对错误的,因为这将说明“instance”是否已安装、正在启动或是否处于活动状态。请注意,数据库和数据库实例是不同的东西,所以如果您不知道区别,那么最好阅读,并阅读有关Oracle RAC 和 Oracle Data Gurard的信息。
您说的那些使用
select CONTROLFILE_TYPE from v$database;
也不正确,因为根据Oracle,该列讲述了控制文件信息,并告诉数据库处于备用模式还是活动模式,这与数据库是否已挂载或数据库是否处于活动状态不同。就像我说的,我认为了解数据库和数据库实例之间的区别以及了解什么是 Oracle RAC 和 Oracle Data Gurard 非常重要。
假设,我有一个主数据库和另一个备用 databguard 数据库,并且两个数据库/实例都处于活动状态以供使用,但是从下面的屏幕截图中可以看出区别:
主数据库:
备用数据保护数据库:
你能通过 netstat/lsof 监控到数据库的连接吗?大概您会注意到客户开始使用它。
您还可以查看这些命令的存档日志。