0

我想知道在不连接数据库的情况下查找数据库名称的不同方法,既不使用也不sqlplus使用srvctl

在 oracle 中,假设我在运行数据库的 RAC 中有 2 个节点pstest。我可以通过简单地连接到任何一个数据库实例并查询如下来获取数据库名称

SQL> select name from v$database;
NAME
---------
PSTEST

或者

SQL> show parameter db_name
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_name                              string      pstest`

但是我需要知道如何pstest在不连接到数据库的情况下获取此处的数据库名称sqlplus(因此上述两个都没有用)。

由于我的pstest数据库在 2 个实例中运行 -pstest1在 node1 和pstest2node2 上。所以我可以使用 srvctl 如下

  srvctl status database -d pstest
  Instance pstest1 is running on node1
  Instance pstest2 is running on node2

但是我怎么能<db_name>srvctl不使用srvctlor的情况下使用 to insqlplus呢?

提前致谢。

4

1 回答 1

0

甚至不了解您为什么需要这个,这有点奇怪,一种方法是(考虑到您正在使用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 $2}')
srvctl status database -d ${db_name}
Instance otcgr2ng1 is running on node scglvdoraci0009
Instance otcgr2ng2 is running on node scglvdoraci0010

我所做的是crsctl用来获取数据库名称。显然,它只适用于您拥有一个数据库的场景。

CRSCTL是您和 Oracle Clusterware 之间的接口,用于解析和调用 Oracle Clusterware 对象的 Oracle Clusterware API。您可以使用 CRSCTL 命令执行多项操作,例如启动和停止 Oracle 集群件资源、启用和禁用 Oracle 集群件守护进程、检查集群的运行状况等...

我删除了mgmtdbGrid Infrastructure 的内部数据库。如果您在 中拥有多个数据库Oracle RAC,那么

for db_name in $(crsctl stat res -t | grep ".db$" | grep -v mgmt | awk -F '.' '{print $2}')
do
echo $db_name
done
于 2021-09-15T06:51:19.723 回答