有相当于MySQL的SHOW DATABASES
陈述吗?
是否可以在集群中找到数据库?即数据库存在于其他系统上的网络上?
我可以分析Oracle安装中存在的文件以找到相同的文件吗?
给定对Oracle系统的完整访问凭据,您将如何枚举所有存在的数据库?
有相当于MySQL的SHOW DATABASES
陈述吗?
是否可以在集群中找到数据库?即数据库存在于其他系统上的网络上?
我可以分析Oracle安装中存在的文件以找到相同的文件吗?
给定对Oracle系统的完整访问凭据,您将如何枚举所有存在的数据库?
Answers:
有相当于MySQL的
SHOW DATABASES
陈述吗?
哪有这回事。您可以查询计算机(lsnrctl status
)上的侦听器,以查看在其中注册了哪些服务,但这并不能一对一地映射到数据库(同一台计算机上可能有多个侦听器)。否则,通常使用的工具将连接到一个数据库实例,并且一个实例属于一个数据库。
如果您正在谈论Oracle RAC集群,则每个实例都知道其对等实例(为同一数据库提供服务的其他实例),并且可以使用该gv$instance
视图找到该数据库当前启动的其他实例。
您也可以使用该crsctl
实用工具列出集群中注册的服务(包括数据库)及其状态。
如果您正在谈论另一家供应商的集群软件,我可以肯定他们都具有要查询的这些类型的资源管理实用程序。
如果您只谈论一堆机器,那么没有,没有100%可靠的枚举网络上所有数据库的方法。
要查找活动(即已启动)的数据库,请*_pmon_*
在Unix(每个数据库实例有一个)上查找进程,在Windows上查找Oracle服务。
要查找Oracle数据库软件的安装,请在/etc/oratab
Unix上查看。这应该包含所有已ORACLE_HOME
安装的。您可以查看$ORACLE_HOME/dbs
for spfile<SID>.ora
和/或init<SID>.ora
文件中的每个文件-每个数据库都有一个。
(我相信您可以oratab
在下面的Windows注册表项中找到等效的信息HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
,但我不知道其结构。)
现在,当然,如果您在安装数据库时已将所有数据库注册到OEM(企业管理器)服务器,则可以在其中找到完整的列表-但我想您是否要求的不是这种情况。
Oracle没有数据库,只有模式,您可以使用它们列出
SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME;
或类似这样的东西:
SELECT TABLESPACE_NAME FROM USER_TABLESPACES;
简而言之,在Oracle上没有直接比喻MySQL的“数据库”或“集群”:最接近的匹配是“模式”,但这仍然有很大的不同。
随着可插拔数据库的引入,这显然将在12c中改变:
将数据库操作与用户内容完全分开是对传统数据库体系结构的重大转变。Kyte说,Oracle 11g及其所有以前的版本一次只能运行一个数据库。如果组织希望在一台服务器上运行多个数据库,则需要运行Oracle 11g的多个实例,每个数据库一个。顾名思义,可插拔数据库允许多个租户数据库在一个Oracle 12c副本下运行。
只需连接到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;
为了使独立数据库获取主机重新启动后自动启动的数据库列表:
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;