IANADBA,但我正在編寫一個腳本,只要 oracle 備用資料庫尚未激活,該腳本就會採取行動。我正在尋找的是兩個查詢(或一組查詢,如果需要的話)。
1 - 資料庫是否已安裝(例如,是否有人執行“alter database mountstandby database”)
2 - 如何判斷資料庫是否已啟動(如“alterdatabaseactivatestandbydatabase”)?
正如我所提到的,我正在尋找查詢,但如果系統中有一種方法可以告訴我,我也對此持開放態度。謝謝!
更新
我採納了下面的建議(稍作修改,因為我正在處理 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',您的資料庫已安裝。
- 'READ WRITE',那麼您可以假設它已啟動。
- 'READ ONLY' 那麼它可能會以唯讀模式開啟以供查詢,但不會啟動。
- 使用活動資料防護時「唯讀並套用」。
在小學:
select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY
在奴隸上:
OPEN_MODE
-------------------- --------------------
MOUNTED or READ ONLY WITH APPLY
可能還有其他值,我不確定。
華泰
答案3
我真的不知道這個問題的答案 - “如何判斷 Oracle 資料庫是否已安裝並啟動?”,但是我必須發布答案,讓人們知道,請不要被這篇文章的答案誤導,因為大多數答案都是嚴重錯誤的。
那些說使用「v$instance」的人絕對是錯誤的,因為這將告訴「instance」是否已安裝、正在啟動或處於活動狀態。請注意,資料庫和資料庫實例是不同的東西,所以如果您不知道差異,那麼最好閱讀,並且還閱讀有關Oracle RAC 和 Oracle Data Guard。
你所說的使用
select CONTROLFILE_TYPE from v$database;
也不正確,因為根據甲骨文該列講述控製文件訊息,並告知資料庫處於備用模式還是活動模式,這與資料庫是否已安裝或資料庫是否處於活動狀態不同。
就像我說的,我認為了解資料庫和資料庫實例之間的差異以及了解什麼是 Oracle RAC 和 Oracle Data Gurard 非常重要。
假設我有一個主資料庫和另一個備用 databguard 資料庫,並且兩個資料庫/實例都處於活動狀態可供使用,但請從下面的螢幕截圖中看到差異:
主資料庫:
備用資料衛士資料庫:
答案4
您可以透過 netstat/lsof 監視與資料庫的連線嗎?想必您會注意到客戶開始使用它。
您也許也可以查看這些指令的存檔日誌。