当前位置: 首页 > 面试题库 >

如何在Oracle中查找架构名称?当您使用只读用户在sql会话中连接时

乌修筠
2023-03-14
问题内容

我以只读用户身份连接到oracle数据库,并且在sql developer中设置连接时使用了服务名,因此我不知道SID(架构)。

如何找到我连接的架构名称?

我正在寻找它,因为我想生成ER图,并且在该过程中第一步要求选择架构。当我尝试选择用户名时,我会得到任何表,因为我猜所有表都已与架构用户映射。

编辑:我的评论部分是通过注释中提供的以下SQL Frank获得的,它给了我所有者名称,在我的情况下是架构。但是我不确定这是否是适用于所有情况的通用解决方案

select owner, table_name from all_tables.

编辑
:我认为上面的sql在所有情况下都是正确的解决方案,因为架构是所有db对象的所有者。因此,要么我得到架构,要么所有者都一样。早些时候,我对模式的理解是不正确的,我经历了另一个问题,发现模式也是用户。


问题答案:

要创建只读用户,您必须设置与拥有要访问的表的用户不同的用户。

如果仅创建用户并向只读用户授予SELECT权限,则需要在每个表名之前添加模式名。为了避免这种情况,您基本上有两个选择:

  1. 在会话中设置 当前模式

    ALTER SESSION SET CURRENT_SCHEMA=XYZ

  2. 为所有表创建同义词:

    CREATE SYNONYM READER_USER.TABLE1 FOR XYZ.TABLE1

因此,如果您没有被告知所有者模式的名称,则基本上可以使用三个选项。最后一个应该一直有效:

  1. 查询当前架构设置:

    SELECT SYS_CONTEXT(‘USERENV’,’CURRENT_SCHEMA’) FROM DUAL

  2. 列出您的同义词:

    SELECT * FROM ALL_SYNONYMS WHERE OWNER = USER

  3. 研究所有表(某些著名的标准架构除外):

    SELECT * FROM ALL_TABLES WHERE OWNER NOT IN (‘SYS’, ‘SYSTEM’, ‘CTXSYS’, ‘MDSYS’);



 类似资料:
  • 我使用只读用户连接到oracle数据库,并且在sql developer中设置连接时使用了服务名,因此我不知道SID(模式)。 我如何找到我连接到的架构名称?

  • 我正试图在Tomcat中添加JDBC会话持久性,正如这里所解释的:Tomcat链接我在Oracle中的my_schema数据库/schema中创建了一个会话表,并试图将其映射到Tomcat context.xml中。我的映射如下:

  • 我的网络上有一个Oracle数据库,我可以使用主机名、端口、用户名、密码和SID与Oracle SQL Developer连接。 我需要连接另一个应用程序(Quantum Gis),但它使用服务名称而不是SID。 当我通过SID在SQL Developer中连接时,有什么方法可以确定数据库的SERVICE\u名称吗? 我没有访问服务器的权限,也没有本地tnsnames.ora或类似的。

  • 如何在Flink SQL查询中使用SQL客户端进行窗口连接。窗口设置方式与下面链接中提到的方式相同https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/stream/operators/joining.html 需要窗口的示例查询:选择sourceKafka.*从sourceKafka内部连接SourceKafca上的bad

  • 我正在尝试在Oracle 12C中使用Oracle Real Application Security(RAS)实现POC。 我已经在Oracle端使用HR演示完成了RAS设置,运行良好(我使用SQLDeveloper进行了验证) 现在,我正在尝试使用“应用程序用户”(dispatcher)建立java jdbc连接,如下链接所述: http://docs.oracle.com/database/

  • Oracle版本: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production jdbc驱动版本: ojdbc8@19.3.0.0