如何在不使用 sqlplus 或 srvctl 的情况下在 oracle 中查找数据库名称?
How to find database name in oracle without using sqlplus or srvctl?
我想知道在不连接数据库的情况下查找数据库名称的不同方法,既不使用 sqlplus
也不使用 srvctl
在 Oracle 中,假设我在 RAC 运行 数据库 pstest
中有 2 个节点。我可以通过简单地连接到任何一个数据库实例和查询来获取数据库名称,如下所示
SQL> select name from v$database;
NAME
---------
PSTEST
或
SQL> show parameter db_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string pstest`
但我需要知道如何在不通过 sqlplus
连接到数据库的情况下获取此处的数据库名称 pstest
(因此以上两个都没有用)。
因为我的 pstest
数据库在 2 个实例中是 运行 - pstest1
在 node1 上,pstest2
在 node2 上。所以我可以使用 srvctl 如下
srvctl status database -d pstest
Instance pstest1 is running on node1
Instance pstest2 is running on node2
但是如何在不使用 srvctl
或 sqlplus
的情况下让 <db_name>
在 srvctl
中使用?
提前致谢。
甚至不理解你为什么需要这个,这有点奇怪,一种方法是(考虑到你正在使用 Oracle RAC
)
这种情况下的效用是csrsctl
例子
srvctl status database -d otcgr2ng
Instance otcgr2ng1 is running on node scglvdoraci0009
Instance otcgr2ng2 is running on node scglvdoraci0010
db_name=$(crsctl stat res -t | grep ".db$" | grep -v mgmt | awk -F '.' '{print }')
srvctl status database -d ${db_name}
Instance otcgr2ng1 is running on node scglvdoraci0009
Instance otcgr2ng2 is running on node scglvdoraci0010
我所做的是使用 crsctl
获取数据库名称。显然,它只适用于你有一个数据库的场景。
CRSCTL
is an interface between you and Oracle Clusterware, parsing and calling Oracle Clusterware APIs for Oracle Clusterware objects. You can use CRSCTL commands to perform several operations such as Starting and stopping Oracle Clusterware resources, Enabling and disabling Oracle Clusterware daemons, Checking the health of the cluster, etc...
我删除了 mgmtdb
,它是 Grid Infrastructure 的内部数据库。如果 Oracle RAC
中有多个数据库,则
for db_name in $(crsctl stat res -t | grep ".db$" | grep -v mgmt | awk -F '.' '{print }')
do
echo $db_name
done
我想知道在不连接数据库的情况下查找数据库名称的不同方法,既不使用 sqlplus
也不使用 srvctl
在 Oracle 中,假设我在 RAC 运行 数据库 pstest
中有 2 个节点。我可以通过简单地连接到任何一个数据库实例和查询来获取数据库名称,如下所示
SQL> select name from v$database;
NAME
---------
PSTEST
或
SQL> show parameter db_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string pstest`
但我需要知道如何在不通过 sqlplus
连接到数据库的情况下获取此处的数据库名称 pstest
(因此以上两个都没有用)。
因为我的 pstest
数据库在 2 个实例中是 运行 - pstest1
在 node1 上,pstest2
在 node2 上。所以我可以使用 srvctl 如下
srvctl status database -d pstest
Instance pstest1 is running on node1
Instance pstest2 is running on node2
但是如何在不使用 srvctl
或 sqlplus
的情况下让 <db_name>
在 srvctl
中使用?
提前致谢。
甚至不理解你为什么需要这个,这有点奇怪,一种方法是(考虑到你正在使用 Oracle RAC
)
这种情况下的效用是csrsctl
例子
srvctl status database -d otcgr2ng
Instance otcgr2ng1 is running on node scglvdoraci0009
Instance otcgr2ng2 is running on node scglvdoraci0010
db_name=$(crsctl stat res -t | grep ".db$" | grep -v mgmt | awk -F '.' '{print }')
srvctl status database -d ${db_name}
Instance otcgr2ng1 is running on node scglvdoraci0009
Instance otcgr2ng2 is running on node scglvdoraci0010
我所做的是使用 crsctl
获取数据库名称。显然,它只适用于你有一个数据库的场景。
CRSCTL
is an interface between you and Oracle Clusterware, parsing and calling Oracle Clusterware APIs for Oracle Clusterware objects. You can use CRSCTL commands to perform several operations such as Starting and stopping Oracle Clusterware resources, Enabling and disabling Oracle Clusterware daemons, Checking the health of the cluster, etc...
我删除了 mgmtdb
,它是 Grid Infrastructure 的内部数据库。如果 Oracle RAC
中有多个数据库,则
for db_name in $(crsctl stat res -t | grep ".db$" | grep -v mgmt | awk -F '.' '{print }')
do
echo $db_name
done