我想知道在不連接資料庫的情況下找到資料庫名稱的不同方法,既不用sqlplus也不用srvctl
在oracle中,假設我在一個RAC中擁有2個節點,運行資料庫pstest。我可以通過簡單地連接到任何一個資料庫實體來獲得資料庫的名稱,并進行如下查詢
SQL> select name from v$database;
名稱
---------
PSTEST
或者
SQL> show parameter db_name
名稱型別 VALUE
------------------------------------ ----------- ------------------------------
db_name字串pstest`。
但是我需要知道,如果不通過sqlplus連接到資料庫,我怎樣才能在這里得到資料庫的名字,也就是pstest(所以上面的兩個都沒有用)。
由于我的pstest資料庫在兩個實體中運行 - pstest1在節點1和pstest2在節點2。所以我可以使用srvctl,如下所示
srvctl status database -d pstest
實體pstest1 正在 運行 在節點1上。
實體pstest2 is running on node2
但是我怎樣才能讓<db_name>在srvctl中使用,而不使用srvctl或sqlplus?
提前感謝。
uj5u.com熱心網友回復:
甚至不理解為什么你需要這個,這有點奇怪,一個方法是(考慮到你正在使用Oracle RAC)
這種情況下的工具是csrsctl
示例
srvctl status database -d otcgr2ng
實體otcgr2ng1 正在 運行 在節點scglvdoraci0009上。
實體otcgr2ng2 is running on節點scglvdoraci0010
db_name=$(crsctl stat res -t | grep " 。 db$" | grep -v mgmt | awk -F ' 。 ' '{print 2}')
srvctl狀態資料庫 -d ${db_name}
實體otcgr2ng1 正在 運行 在節點scglvdoraci0009上。
實體otcgr2ng2 is running on節點scglvdoraci0010
我所做的是使用 我洗掉了
標籤:crsctl來獲得資料庫名稱。很明顯,它只在你有一個資料庫的情況下作業。
CRSCTL是您和Oracle Clusterware之間的一個介面,決議和呼叫Oracle Clusterware物件的Oracle Clusterware APIs。您可以使用CRSCTL命令來執行一些操作,如啟動和停止Oracle Clusterware資源、啟用和禁用Oracle Clusterware守護程式、檢查集群的健康狀況等等。
mgmtdb,這是網格基礎設施的一個內部資料庫。如果你在Oracle RAC中擁有一個以上的資料庫,那么for db_name in $(crsctl stat res -t | grep " . db$" | grep -v mgmt | awk -F ' 。 ' '{print 2}')
做
echo $db_name
完成
