是否有等效于 MySQL 的SHOW DATABASES
语句?
是否可以在集群中找到数据库?即存在于网络上的其他系统上的数据库?
我可以分析 Oracle 安装中存在的文件以找到相同的文件吗?
给定对 Oracle 系统的完整访问凭据,您将如何枚举所有存在的数据库?
是否有等效于 MySQL 的SHOW DATABASES
语句?
是否可以在集群中找到数据库?即存在于网络上的其他系统上的数据库?
我可以分析 Oracle 安装中存在的文件以找到相同的文件吗?
给定对 Oracle 系统的完整访问凭据,您将如何枚举所有存在的数据库?
哪有这回事。您可以查询机器 (
lsnrctl status
) 上的侦听器以查看那里注册了哪些服务,但这不会一对一地映射到数据库(同一台机器上可能有多个侦听器)。否则,常用的工具连接到一个数据库实例,一个实例属于单个数据库。如果您谈论的是 Oracle RAC 集群,那么每个实例都知道它的对等点(为同一数据库提供服务的其他实例),您可以使用该
gv$instance
视图找到当前为该数据库启动的其他实例。您还可以使用该
crsctl
实用程序列出在集群中注册的服务(包括数据库)及其状态。如果您谈论的是其他供应商的集群软件,我很确定他们都有这些类型的资源管理实用程序可供查询。
如果您只是在谈论一堆机器,那么不,没有 100% 可靠的方法来枚举网络上的所有数据库。
要查找活动的(即已启动的)数据库,请查找
*_pmon_*
Unix 上的进程(每个数据库实例一个)和 Windows 上的 Oracle 服务。要查找 Oracle 数据库软件的安装,请查看
/etc/oratab
Unix。这应该包含所有已ORACLE_HOME
安装的 s。您可以查看$ORACLE_HOME/dbs
forspfile<SID>.ora
和/或init<SID>.ora
文件中的每一个 - 每个数据库都有一个。(我相信您可以在
oratab
下面的 Windows 注册表项中找到等效的信息HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
,但我不知道它的结构。)现在,当然,如果您在安装时已将所有数据库注册到 OEM(企业管理器)服务器,您可以在那里找到完整的列表 - 但我想如果您问的不是这种情况。
Oracle 没有数据库,只有模式,您可以使用
或类似的东西:
简单地说,Oracle 上的 MySQL“数据库”或“集群”没有直接的类比:最接近的匹配是“模式”,但仍然非常不同。
随着可插拔数据库的引入,这显然会在 12c 中发生变化:
我认为 *nix 上未来浏览器的答案可能是:
猫 /etc/oratab
如果您在 Oracle 12 上有可插拔数据库(推荐),您可以执行以下操作:
只需连接到 ASM 并检查数据库客户端。
对于独立数据库获取主机重启后自动启动的数据库列表:
或者只是获取所有数据库的列表:
对于 RAC 数据库,以下方法可能很有用:
或更详细的信息
此外,正如已经提到的,MySQL 中的数据库与 Oracle 中的数据库不同。在 Oracle 中,它更接近于模式——即用户对象的命名容器。要获取方案列表,您可以使用以下 SQL 语句:
或获取与系统无关的方案列表(从版本 12c 开始的 Oracle RDBMS 中可用):
从 all_tables 中选择 DISTINCT 所有者;。这将列出数据库。