我想知道在不连接数据库的情况下查找数据库名称的不同方法,既不使用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`
型
但是我需要知道如何在不通过sqlplus
连接到数据库的情况下获得数据库名称pstest
(因此上面两个都没有用)。
因为我的pstest
数据库在2个示例中运行-node 1上的pstest1
和node 2上的pstest2
。所以我可以像下面这样使用srvctl
srvctl status database -d pstest
Instance pstest1 is running on node1
Instance pstest2 is running on node2
型
但是,如何在不使用srvctl
或sqlplus
的情况下将<db_name>
用于srvctl
?
先谢了。
2条答案
按热度按时间velaa5lx1#
在不理解为什么需要这个的情况下,一种实现方法是(考虑到您使用的是
Oracle RAC
)本例中的实用程序为
csrsctl
范例
字符串
我所做的是使用
crsctl
来获取数据库名称。很明显,它只适用于只有一个数据库的场景。CRSCTL
是您与Oracle Clusterware之间的接口,用于解析和调用Oracle Clusterware对象的Oracle Clusterware API。您可以使用CRSCTL命令来执行数个作业,例如启动和停止Oracle Clusterware资源、启用和停用Oracle Clusterware常驻程式、检查丛集的状况等等。我删除了
mgmtdb
,它是网格基础架构的内部数据库。如果在Oracle RAC
中有多个数据库,则型
ztigrdn82#
“crsctl”命令为您提供数据库唯一名称,而不是数据库名称。如果这是备用数据库,则这两个参数可以不同。您需要执行srvctl(从RDBMS软件)以获取数据库名称。因此,如果数据库唯一名称与数据库名称不同(例如,对于备用数据库),则
因此,首先使用crstl获取数据库的唯一名称:
$CRS_HOME/bin/crsctl stat res -t|“.db$”|grep -v管理|awk -F '.' '{print $2}'
dbuniq_aws
然后使用srvctl获取数据库名称,使用大写的数据库唯一名称:
$ORACLE_HOME/bin/srvctl配置数据库-dDBUNIQ_AWS| grep '数据库名称:'| cut -d”:“-f2| cut -d”“-f2
DBUNIQ
如您所见,“srvctl config database”包含数据库名称的信息,只要您有数据库唯一名称信息。