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
目前,此实例正在积极恢复存档日志,但尚未“活跃”。我仍在寻找一种方法来判断它是否未作为备用数据库安装。
答案1
我得到了它!
v$database 中的 CONTROLFILE_TYPE 是关键
SQL> select CONTROLFILE_TYPE from v$database;
CONTROL
-------
CURRENT
相对
SQL> select CONTROLFILE_TYPE from v$database;
CONTROL
-------
STANDBY
答案2
这适用于物理备用数据库 Oracle 10g(及更高版本)
从 v$database 中选择 open_mode;
如果值为:
- ‘MOUNTED’,您的数据库已安装。
- '读写',那么您可以假设它已被激活。
- '只读' 那么它可能以只读模式打开以供查询,但不会被激活。
- 使用活动数据保护时,‘只读且应用’。
在主服务器上:
select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY
在从站上:
OPEN_MODE
-------------------- --------------------
MOUNTED or READ ONLY WITH APPLY
可能还有其他价值,我不确定。
高血压
答案3
我真的不知道这个问题的答案——“如何知道 Oracle 数据库是否已安装并激活?”,但是我必须发布答案,让人们知道,请不要被这篇文章的答案误导,因为大多数答案都是严重错误的。
那些说使用“v$instance”的人是完全错误的,因为这将告诉您“实例”是否已安装或正在启动或处于活动状态。请注意,数据库和数据库实例是不同的东西,所以如果你不知道区别,那么最好阅读,也阅读关于Oracle RAC 和 Oracle 数据保护。
你所说的使用
select CONTROLFILE_TYPE from v$database;
也是不正确的,因为根据甲骨文此列讲述控制文件信息,并告诉数据库是否处于待机模式还是活动模式,这与数据库是否已安装或数据库是否处于活动状态不同。
正如我说的,我认为了解数据库和数据库实例之间的区别以及了解什么是 Oracle RAC 和 Oracle Data Gurard 非常重要。
假设我有一个主数据库和另一个备用 databguard 数据库,并且两个数据库/实例都处于活动状态可供使用,但从下面的屏幕截图中可以看出区别:
主数据库:
备用数据保护数据库:
答案4
您能通过 netstat/lsof 监控数据库连接吗?想必您会注意到客户端开始使用它。
您还可以查看这些命令的存档日志。