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


33

有相当于MySQL的SHOW DATABASES陈述吗?

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

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

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


4
还请注意,MySQL和Oracle数据库之间存在术语不匹配的情况。在体系结构方面,Oracle具有table-> schema-> database,同时还具有table-> tablespace-> database。MySQL仅具有table-> database。因此,也许您实际上是在搜索Oracle模式列表(想想:表的SQL名称空间)或Oracle表空间列表(想想:表的OS文件组)。
2012年

Answers:


22

有相当于MySQL的SHOW DATABASES陈述吗?

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

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

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

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

要查找Oracle数据库软件的安装,请在/etc/oratabUnix上查看。这应该包含所有已ORACLE_HOME安装的。您可以查看$ORACLE_HOME/dbsfor spfile<SID>.ora和/或init<SID>.ora文件中的每个文件-每个数据库都有一个。

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

现在,当然,如果您在安装数据库时已将所有数据库注册到OEM(企业管理器)服务器,则可以在其中找到完整的列表-但我想您是否要求的不是这种情况。


12

Oracle没有数据库,只有模式,您可以使用它们列出

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 

或类似这样的东西:

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;

2
表空间通常不链接到架构。
2012年

2
全部用户?USER_TABLESPACES?
kubanczyk 2012年

“是否有等同于MySQL SHOW DATABASES语句的内容?” 我试图回答这个问题。不要说你不知道
DevYudh 2012年

1
@DevYudh:Oracle中的表空间与MySQL中的“数据库” 完全不同。第一个查询正确无误,第二个查询完全错误
a_horse_with_no_name 2015年

11

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

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

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


嗯,更多的麻烦,更多的工作保障...
kubanczyk 2012年

6

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

猫/ etc / oratab


3

只需连接到ASM并检查数据库客户端。

set pages 999 lines 120
col SOFTWARE_VERSION for A15
col INSTANCE_NAME for A20
col DB_NAME for A20 trunc
select INSTANCE_NAME, DB_NAME, STATUS, SOFTWARE_VERSION as "version"
from  V$ASM_CLIENT;

1
假设正在使用ASM!存储在文件系统或SAN上的数据库呢?
Colin't Hart 2015年

3

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

SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;

0

为了使独立数据库获取主机重新启动后自动启动的数据库列表:

cat /etc/oratab | grep -i ":y" | grep -v "^#"

或者只是为了获取所有数据库的列表:

cat /etc/oratab | grep -v "^#"

对于RAC数据库,以下方法可能有用:

crsctl stat res -t | grep "\.db"

同样正如已经提到的,MySQL中的数据库与Oracle中的数据库不同。在Oracle中,它更接近于模式-被称为用户对象的容器。要获取方案列表,可以使用以下SQL语句:

select username from dba_users order by 1;

或获取不是系统相关方案的列表(在Oracle RDBMS中从版本12c开始可用):

select username from dba_users where ORACLE_MAINTAINED='N' order by 1;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.