如何使用 SQL*Plus 在 Oracle 11g 中显示数据库

Posted

技术标签:

【中文标题】如何使用 SQL*Plus 在 Oracle 11g 中显示数据库【英文标题】:How to display databases in Oracle 11g using SQL*Plus 【发布时间】:2011-03-01 13:21:20 【问题描述】:

借助这个命令 show databases; 我可以在 mysql 中查看数据库。

如何在Oracle中显示可用的数据库?

【问题讨论】:

【参考方案1】:

SELECT NAME FROM v$database; 在 oracle 中显示数据库名称

【讨论】:

我认为这就是问题所在。或者至少这是我在听到“数据库”时想到的......而不是架构(或用户)。 这应该是答案 如果例如您运行 Oracle Database Express Edition,它会打印出类似 XE 的内容,即唯一标识您的实例/数据库的唯一名称(是否称为 SID?)。另一方面,MySQL 的 show databases 命令打印 MySQL 所称的数据库(也称为模式)(大致与 Oracle 中的 SELECT USERNAME FROM DBA_USERS 相同)。【参考方案2】:

您可以将 MySQL“数据库”视为 Oracle 中的架构/用户。如果您有权限,可以查询DBA_USERS 视图以查看架构列表:

SELECT * FROM DBA_USERS;

【讨论】:

有些oracle数据库有很多没有对象的用户。对于这些,替代方法是 SELECT DISTINCT OWNER FROM ALL_OBJECTS; +1 不错的选择,请注意,如果您不是特权用户并发出此查询,您将只能看到您对其至少一个对象拥有特权的那些 OWNER。跨度> 对 DBA_USERS 的查询给出“ORA-00942:表或视图不存在”,可能是权限问题?评论“SELECT DISTINCT OWNER FROM ALL_OBJECTS;”中的那个正在使用相同的访问凭据。分贝 11g SELECT * FROM DBA_USERS;【参考方案3】:

Oracle 没有像 MySQL 或 MS SQL Server 这样的简单数据库模型。我发现最接近的是查询表空间和其中的相应用户。

例如,我有一个 DEV_DB 表空间,其中包含我所有的实际“数据库”:

SQL> SELECT TABLESPACE_NAME FROM USER_TABLESPACES;

导致:

SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
EXAMPLE
DEV_DB

也可以查询所有表空间的用户:

SQL> select USERNAME, DEFAULT_TABLESPACE from DBA_USERS;

或者在特定的表空间内(以我的 DEV_DB 表空间为例):

SQL> select USERNAME, DEFAULT_TABLESPACE from DBA_USERS where DEFAULT_TABLESPACE = 'DEV_DB';

ROLES DEV_DB
DATAWARE DEV_DB
DATAMART DEV_DB
STAGING DEV_DB

【讨论】:

【参考方案4】:

也许你可以使用这个视图,但我不确定。

select * from v$database;

但我认为它只会显示有关当前数据库的信息。

其他选项,如果数据库在 linux 中运行...应该是这样的:

SQL>!grep SID $TNS_ADMIN/tnsnames.ora | grep -v PLSExtProc

【讨论】:

第一个在 11g 中不起作用:“ORA-00942:表或视图不存在” 嗨@a1an。毫无疑问,v$database 存在于 11g 中。检查您是否正在以足够的权限执行查询。这里有关于 oracle 11g 的 v$database 的文档。 docs.oracle.com/cd/B28359_01/server.111/b28320/… Algo,这里有一篇关于在 oracle 11g 中使用 v%database 的示例的帖子。 neeraj-dba.blogspot.com.es/2011/10/…祝你好运! 可能只是权限问题,在 sysdba 工作时执行 好的@a1an,只需授予在该视图上选择的权限。将 v_$database 上的选择授予您的用户;请注意下划线! v$database 是同义词,您不能为同义词授予 proviledgest(它可能以 ORA-02030 错误结尾)。【参考方案5】:

我不清楚,但通常一台服务器有一个数据库(有很多用户),如果您创建许多数据库,则意味着您创建了许多实例、侦听器......以及。所以你可以检查你的LISTENER来识别它。

在我的测试中,我创建了 2 个数据库(dbtestdbtest_1),所以当我检查我的 LISTENER 状态时,它看起来像这样:

lsnrctl status

....

监听器的状态

.....

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.10.20.20)(PORT=1521)))

服务总结...

服务“dbtest”有 1 个实例。

实例“dbtest”,状态 READY,有 1 个用于此服务的处理程序...

服务“dbtest1XDB”有 1 个实例。

实例“dbtest1”,状态 READY,有 1 个用于此服务的处理程序...

服务“dbtest_1”有 1 个实例。

实例“dbtest1”,状态 READY,有 1 个用于此服务的处理程序...命令成功完成

【讨论】:

以上是关于如何使用 SQL*Plus 在 Oracle 11g 中显示数据库的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Plus 中,当在 Oracle 11g 及更高版本中使用 lpad 时,第二列会获得额外的尾随空格

如何使用 SQL Plus 从 DB 用户获取日志信息?

SQL*Plus Oracle 中的列格式化

oracle11g sql dever链接提示ora-12505,sql plus可以正常连接

如何整理 SQL*Plus 布局?

SQL*Plus BREAK 的行为如何/为啥取决于列顺序?