是否有与MySQL SHOW DATABASES语句等效的内容?

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

我可以分析Oracle安装中存在的文件以找到相同的文件吗?您将如何枚举所有存在的数据库?

评论

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

#1 楼


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


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

如果您谈论的是Oracle RAC集群,则每个实例都知道其对等实例(其他实例服务同一个数据库),然后可以使用gv$instance视图找到该数据库当前启动的其他实例。
还可以使用crsctl实用工具列出集群中注册的服务(包括数据库)及其状态。
如果您谈论的是另一家供应商的群集软件,我可以肯定他们都可以查询这些类型的资源管理实用程序。一堆机器,然后,没有,没有100%可靠的方法枚举网络上的所有数据库。

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

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

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

现在,当然,如果您在安装数据库时已向OEM(Enterprise Manager)服务器注册了所有数据库,在此处找到完整的列表-但是我想您是否不是那样。

#2 楼

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

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 


或类似这样的列表列出它们:

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;


评论


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

–垫子
2012年11月7日7:12

全部用户? USER_TABLESPACES?

– Kubanczyk
2012年11月21日14:55

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

–DevYudh
2012年11月23日下午4:14

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

– a_horse_with_no_name
15年6月22日在14:35

#3 楼

简单地说,在Oracle上没有直接比喻MySQL的“数据库”或“集群”:最接近的匹配是“模式”,但仍然有很大不同。在12c中引入了可插拔数据库:


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


评论


呃,更多的麻烦,更多的工作保障...

– Kubanczyk
2012年11月21日15:03

#4 楼

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

cat / etc / oratab

#5 楼

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

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


#6 楼

只需连接到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;


评论


假设正在使用ASM!存储在文件系统或SAN上的数据库呢?

–科林·哈特(Colin't Hart)
15年6月22日在14:25

#7 楼

对于独立数据库,获取主机重新启动后自动启动的数据库的列表:
cat /etc/oratab | grep -i ":y" | grep -v "^#"

,或者仅获取所有数据库的列表:
cat /etc/oratab | grep -v "^#"

对于RAC数据库,请采用以下方法可能有用:
crsctl stat res -t | grep "\.db"

或更详细的信息
crsctl status resource -w 'TYPE = ora.database.type' -f

也已经提到,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;