如何使用 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;”中的那个正在使用相同的访问凭据。分贝 11gSELECT * 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 个数据库(dbtest
和 dbtest_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 时,第二列会获得额外的尾随空格