如何不使用sqlplus或srvctl获取Oracle数据库名称?
无需sqlplus/srvctl查询Oracle数据库名称的实现方法
以下方法均为操作系统层面执行,不需要连接数据库,也不需要提前知晓数据库名称:
- 查询Oracle后台进程名获取
Oracle实例运行时会生成固定格式的pmon进程,进程名格式为ora_pmon_<实例名>,RAC场景下实例名默认为db_name+节点序号,单实例场景下实例名与db_name完全一致。
执行命令:
输出示例:ps -ef | grep ora_pmon | grep -v grep
截取oracle 12345 1 0 Aug10 ? 00:00:12 ora_pmon_pstest1ora_pmon_后部分,RAC场景下去掉末尾的数字即可得到数据库名称pstest。 - 读取参数文件提取db_name
Oracle参数文件(spfile/pfile)默认存放在$ORACLE_HOME/dbs/目录下,命名格式为spfile<实例名>.ora或init<实例名>.ora,即使是二进制格式的spfile也可以通过strings命令读取内容。
执行命令(替换为实际的实例名):
输出示例:strings $ORACLE_HOME/dbs/spfilepstest1.ora | grep "db_name"
直接提取引号内的内容即可得到数据库名称。如果不知道实例名,可先通过上一步pmon进程获取实例名后再拼接参数文件路径。*.db_name='pstest' - 解析/etc/oratab文件获取
所有配置过的Oracle实例都会在/etc/oratab(部分Linux发行版为/var/opt/oracle/oratab)中留下记录,格式为<实例名>:<ORACLE_HOME路径>:<是否开机自启>。
执行命令:
输出示例:cat /etc/oratab | grep -v "^#" | grep -v "^$"
同样截取实例名部分,RAC场景下去掉末尾数字即可得到数据库名称。pstest1:/u01/app/oracle/product/19.0.0/dbhome_1:Y - 通过CRS命令查询集群资源获取(RAC场景适用)
无需使用srvctl,可直接用集群自带的crsctl命令查询数据库类型的集群资源,资源名格式固定为ora.<数据库名>.db。
执行命令:
输出示例中资源名部分会显示crsctl stat res -w "TYPE = ora.database.type"ora.pstest.db,中间的pstest即为数据库名称。
内容的提问来源于stack exchange,提问作者user219906
相关产品推荐
相关产品推荐

