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

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

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

【问题讨论】:

    标签: oracle oracle11g sqlplus


    【解决方案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 个用于此服务的处理程序...命令成功完成

      【讨论】:

        猜你喜欢
        • 2014-06-16
        • 2015-12-10
        • 2014-07-09
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-09
        • 2016-01-15
        相关资源
        最近更新 更多