如何查看Oracle中的数据库列表?

Ksh*_*rma 41 oracle

是否有等效于 MySQL 的SHOW DATABASES语句?

是否可以在集群中找到数据库?即存在于其他系统上的网络上的数据库?

我可以分析 Oracle 安装中存在的文件以找到相同的文件吗?

给定对 Oracle 系统的完整访问凭证,您将如何枚举存在的所有数据库?

Mat*_*Mat 26

是否有等效于 MySQL 的SHOW DATABASES语句?

哪有这回事。您可以查询机器 ( lsnrctl status)上的侦听器以查看在那里注册了哪些服务,但这不会一对一地映射到数据库(并且同一台机器上可能有多个侦听器)。否则,常用工具连接一个数据库实例,一个实例属于单个数据库。

如果您谈论的是 Oracle RAC 集群,那么每个实例都知道它的对等体(为同一数据库提供服务的其他实例),并且您可以使用该gv$instance视图找到当前为该数据库启动的其他实例。
您还可以使用该crsctl实用程序列出集群中注册的服务(包括数据库)及其状态。
如果您在谈论其他供应商的集群软件,我很确定他们都有这些类型的资源管理实用程序可供查询。

如果您只是在谈论一堆机器,那么不,没有 100% 可靠的方法来枚举网络上的所有数据库。

要查找活动(即启动)数据库,请查找*_pmon_*Unix 上的进程(每个数据库实例有一个)和 Windows 上的 Oracle 服务。

要查找 Oracle 数据库软件的安装位置,请查看/etc/oratabon Unix。这应该包含所有ORACLE_HOME安装的s。您可以查看$ORACLE_HOME/dbsforspfile<SID>.ora和/或init<SID>.ora文件中的每个文件 - 每个数据库都有一个。

(我相信您可以oratab在下面的 Windows 注册表项中找到等效的信息HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,但我不知道它的结构。)

现在,当然,如果您在安装时已向 OEM(企业管理器)服务器注册了所有数据库,您可以在那里找到完整列表 - 但我想如果您问的是事实并非如此。


Dev*_*udh 14

Oracle 没有数据库,只有模式,你可以用

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;
Run Code Online (Sandbox Code Playgroud)

  • 表空间通常不链接到模式。 (2认同)
  • 全部用户?USER_TABLESPACES? (2认同)
  • @DevYudh:Oracle 中的表空间与 MySQL 中的“数据库”**完全**不同。第一个查询如果正确,第二个查询是完全错误的 (2认同)

Jac*_*las 11

简而言之,Oracle 上的 MySQL“数据库”或“集群”没有直接的类比:最接近的匹配是“模式”,但这仍然非常不同。

随着可插拔数据库的引入,这显然会在 12c 中改变

将数据库操作与用户内容完全分开是对传统数据库架构的重大转变。Kyte 说,Oracle 11g 及其所有前身一次只能运行一个数据库。如果组织想要在单个服务器上运行多个数据库,则需要运行多个 Oracle 11g 实例,每个数据库一个。顾名思义,可插拔数据库允许多个租户数据库在 Oracle 12c 的一个副本下运行。


小智 9

我认为 *nix 上未来浏览器的答案可能是:

猫 /etc/oratab


小智 5

如果您在 Oracle 12 上有可插入数据库(推荐),您可以执行以下操作:

SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;
Run Code Online (Sandbox Code Playgroud)