Oracle SQL Developer - 看不到表

Posted

技术标签:

【中文标题】Oracle SQL Developer - 看不到表【英文标题】:Oracle SQL Developer - tables cannot be seen 【发布时间】:2011-08-10 14:18:50 【问题描述】:

我使用的是 SQL Developer 1.1。我最近升级到 SQL Developer 3。升级后,我注意到我的一些连接没有显示它们的表。我可以在表格上进行选择并显示数据。我可以看到其他对象,如视图等。我仍然可以使用我的旧版本,并且可以看到针对相同模式列出的所有表。不过,还有其他连接显示良好。

似乎找不到这方面的信息。我试过删除过滤器,但没有用。

有人遇到过这个吗?请帮忙。

【问题讨论】:

【参考方案1】:

您要查找的表可能位于不同的架构中。有几个选项。您可以单击连接下树中的其他用户,或右键单击连接并选择架构浏览器,然后选择所需的架构。

【讨论】:

如果您没有为用户提供默认架构,但您只想查看所有存在的表和视图怎么办?或者,至少,该帐户有权访问的所有表格/视图? 我不想在不同的scema下更改数据库。我要更改的架构是不显示表格的架构。【参考方案2】:

从中选择“其他用户”并选择您的用户(架构),您将能够在该用户下查看您的表格和视图。

【讨论】:

我正在使用的帐户没有出现在这里。为什么会呢?它不是“其他”用户,它是用户实际上登录的。 你的“你的用户”是什么意思。有数百个用户,没有一个是我的。【参考方案3】:

我已经尝试了 Michael Munsey 建议的两个选项,并且对我有用。

我想提供另一个选项来查看过滤后的表格。鼠标右键单击您的表树节点并选择“应用过滤器”并选中“包含同义词”复选框,然后单击“确定”。就是这样,您应该可以在那里查看表格。这个对我有用。

礼貌:http://www.thatjeffsmith.com/archive/2013/03/why-cant-i-see-my-tables-in-oracle-sql-developer/

【讨论】:

@vapcguy - 很抱歉听到。由于没有合适的环境,我恐怕帮不上什么忙。 @Thayz 谢谢!这必须是我读过的最有用的答案之一——你实际上已经提供了一种方法来让它像我期望的那样工作——不像甲骨文似乎认为更好。他们应该将此作为默认视图 - 并且可以将其关闭! 不用担心@kiltannen。很高兴听到。一切顺利。 版本 19 中没有“包含同义词”【参考方案4】:

我在 sqlDeveloper64-3.0.4.34 和 sqlDeveloper64-3.1.07.42 有同样的问题。

根据https://forums.oracle.com/forums/thread.jspa?threadID=2202388 看来,JDBC 驱动程序中存在与“带外中断”有关的错误 - 基本上是低级别的 TCP 问题。

解决方法是使用 JVM 属性启动 sql developer -Doracle.net.disableOob=true 我在 3.0 和 3.1 上尝试了这个解决方案,它可以工作。

所以我在这里引用论坛的解决方案:


我相信我已经确定了导致某些用户而不是其他用户出现这些问题的原因。似乎 JDBC 驱动程序中存在与“带外中断”有关的错误 - 基本上是低级别的 TCP 问题。该错误似乎以多种方式表现出来。到目前为止,我已经确定使用共享连接(特别是使用 Vista 或 Windows 7)和通过 *** 连接(任何操作系统)作为常见方案。在所有情况下,没有 DBA 访问权限也是一个问题。

首先,让我解释一下为什么 DBA 访问会有所作为。当我们第一次访问任何特定的数据字典视图时,我们首先尝试查看是否可以访问该视图的 DBA 版本(或者某些情况下是 tab$ 等)。这些视图比普通的 USER 版本效率更高,因此我们希望尽可能使用它们。我们只在每个会话中检查每个 DBA 视图一次(并且仅在需要时),但我们最终可能会检查对一堆视图的访问。

当我们进行此检查时,OOB 错误似乎重新抬头。我们应该从数据库中得到一个很好的、简单的响应。但是,在发生错误的情况下,此低级网络错误反而会导致发生错误,从而使连接进入不可用状态。这会导致所有的连接关闭错误。 似乎确实有一种解决方法 - JDBC 驱动程序支持禁用 OOB。但是,这样做会影响取消正在执行的语句的能力,所以我一般不建议使用这种解决方法,但它应该可以解决用户遇到此特定问题的情况。 p>

要启用解决方法,需要设置 Java 系统属性- oracle.net.disableOob=true。您可以通过两种方式进行设置。第一种是在命令行中将其作为 sqldeveloper -J-Doracle.net.disableOob=true 传入。当然,这仅在您通常从命令行运行时才有效。您还可以在 sqldeveloper.conf 文件(位于 +sqldeveloper\bin+ 下)中添加一行。该行将是 AddVMOption -Doracle.net.disableOob=true

我们正在研究其他解决方案,但目前该解决方法应该使您能够使用 SQL Developer。

- 约翰

SQL 开发团队

【讨论】:

为我修复了它,但这个错误似乎不知从何而来,一天一切正常,然后第二天,没有桌子。感谢发帖! (我在 3.2) 也解决了我的问题!谢谢! ubuntu 10.10下使用sqlDeveloper Version 3.0.04 我们的 SOE 出了点问题,这解决了它。我现在不得不通过谷歌再次找到这个答案! 我使用的是 19 版,但仍未修复。显然他们并没有足够在意来修复它。【参考方案5】:

关于“其他用户”的答案很接近,但不够明确,所以我觉得有必要在下面添加这个答案。

在 Oracle 中,它只会向您显示属于您登录帐户所拥有的模式(MS SQL Server 中的数据库)的表。如果该帐户没有/没有创建任何内容,您将什么也看不到,即使您拥有数据库中所有内容的权限/权限! (这与 MS SQL Server Management Studio 不同,您可以在其中看到您拥有权限的任何内容,并且所有者始终是“dbo”,禁止某些管理员进入并出于某种不可预见的原因对其进行更改。)

只有所有者才能在树中的“表格”下看到这些表格。如果您因为不是他们的所有者而看不到他们,您将不得不进入“其他用户”并展开每个用户,直到您发现谁创建/拥有该架构(如果您不知道的话)。无论您的帐户是否具有对表格的权限,您仍然必须在“其他用户”下找到拥有它的用户才能在“表格”下查看它!

可以帮助您的一件事:当您编写查询时,您实际上在命名法中指定了该所有者是谁,例如。

Select * from admin.mytable

表示“admin”是拥有它的用户,因此您进入“Other Users > Admin”并展开“Tables”就可以了。

【讨论】:

有超过 300 个用户。我不会一一展开。你为什么不能告诉我谁创建了这个表。 @PhilipRego 如果您通过脚本访问表格,正如我所演示的,您已经拥有该信息。在 Oracle 中,您需要知道所有者是谁,然后才能访问它。 不确定我是否在关注你。我没有在语句中指定用户的任何脚本。我无权更改桌子,也不知道如何查看所有者是谁。我只能看到select * [tablename]的表格 @PhilipRego 我不知道你怎么可能在不指定所有者的情况下使用select * [tablename] 访问表(无论如何你忘记了from),除非它是你是谁以拥有它的身份登录。【参考方案6】:

您可能无权访问 SQL Developer 3 正在查询的元表之一。如果我选择了正确的查询,它将运行以下 SELECT 语句:

select * from (
  SELECT o.OBJECT_NAME, o.OBJECT_ID ,'' short_name, decode(bitand(t.property, 32), 32, 'YES', 'NO') partitioned,
                decode(bitand(t.property, 64), 64, 'IOT',
               decode(bitand(t.property, 512), 512, 'IOT_OVERFLOW',
               decode(bitand(t.flags, 536870912), 536870912, 'IOT_MAPPING', null))) iot_type, 
         o.OWNER OBJECT_OWNER, o.CREATED, o.LAST_DDL_TIME, O.GENERATED, O.TEMPORARY, case when xt.obj# is null then 'N' else 'Y' end EXTERNAL
    FROM SYS.Dba_OBJECTS O ,sys.tab$ t, sys.external_tab$ xt
    WHERE O.OWNER = :SCHEMA
    and   o.object_id = t.obj#(+)
    and   o.object_id = xt.obj#(+)
    AND O.OBJECT_TYPE = 'TABLE' 
union all
SELECT OBJECT_NAME, OBJECT_ID , syn.SYNONYM_NAME short_NAME, decode(bitand(t.property, 32), 32, 'YES', 'NO') partitioned,
                decode(bitand(t.property, 64), 64, 'IOT',
               decode(bitand(t.property, 512), 512, 'IOT_OVERFLOW',
               decode(bitand(t.flags, 536870912), 536870912, 'IOT_MAPPING', null))) iot_type, 
       SYN.TABLE_OWNER OBJECT_OWNER, o.CREATED, o.LAST_DDL_TIME, O.GENERATED, O.TEMPORARY, case when xt.obj# is null then 'N' else 'Y' end EXTERNAL
              FROM SYS.Dba_OBJECTS O, sys.user_synonyms syn,sys.tab$ t, sys.external_tab$ xt
              WHERE  syn.table_owner = o.owner
              and    syn.TABLE_NAME = o.object_NAME
              and    o.object_id = t.obj#
              and   o.object_id = xt.obj#(+)
              and    o.object_type = 'TABLE'
              and    :INCLUDE_SYNS = 1
)
 where /**/object_name not in (select object_name from recyclebin)
                         AND not object_name like 'BIN$%'

尝试运行此语句以获取完整的错误消息,指示哪个表不存在(相当于“由于缺少访问权限而不可见”)。 SQL Developer 将询问SCHEMAINCLUDE_SYNS 的值。将SCHEMA 设置为您的用户名,将INCLUDE_SYNS 设置为0。

SQL Developer 1.1 可能使用了一个更简单的查询来处理您的访问权限。

【讨论】:

感谢您的意见。我使用了上面的查询,但它在 sys.external_tab$ 附近失败了。所以我可能需要在那里请求权限。 Oracle 论坛中的一篇帖子也让我早先得出了同样的结论。但是您的解释要全面得多。非常感谢。 在后来的跟进中,我发现我无法在正常工作的连接中访问 external_tab$。因此,上面给出的查询可能不是 SQL Developer 用户显示其表列表的一个。【参考方案7】:

用于创建连接的标识定义了您可以在 Oracle 中看到的表。您在为新版本设置连接时是否提供了不同的凭据?

【讨论】:

不,两个版本的用户凭据相同。 嗯。这是整体升级的一部分(可能是到 Oracle 11.g)吗?你使用什么样的连接? (TNS, Basic..) 你的 TNS 文件是一样的吗? (试着从基本的东西开始,如果你已经看过这些东西了,抱歉..) 我在两个版本中都使用基本连接类型。我对 TNS 文件了解不多,但我没有做任何事情,所以我想这应该不是问题。 刚刚注意到一些有趣的事情.. 日志页面显示类似“SEVERE 100 0 oracle.dbtools.db.DBUtil 警告,未处理的异常:ORA-00942:表或视图不存在”每次我正在刷新连接树中的表文件夹。【参考方案8】:

3.1 对我来说并不重要。

我花了一些时间,但我设法找到了 2.1 版本来在这里试用: http://www.oracle.com/technetwork/testcontent/index21-ea1-095147.html

1.2 http://www.oracle.com/technetwork/testcontent/index-archive12-101280.html

但这也不起作用,仍然没有表格,所以看起来像是有权限的东西。

【讨论】:

我遇到了与 OP 相同的问题,但可以使用 SQLPlus 中的相同帐户读取表/值,并通过使用 12c ODP .NET dll 的 .NET 应用程序读取就可以了在 SQL Developer 中看不到任何内容。不太可能的权限 - 至少对于我的问题。【参考方案9】:

将 sys.external_tab$ 上的选择授予 [myUser];为我工作。 谢谢科多

【讨论】:

【参考方案10】:

我在我的 Mac 上遇到了这个问题。 通过卸载它并删除 /Users/aa77686/.sqldeveloper 文件夹来修复它。 在不删除该文件夹的情况下卸载并不能修复它。 然后重新下载并重新安装。 启动它,添加连接,它工作正常。 退出它,重新启动它几次,到目前为止,它每次都能正确显示表格等。

【讨论】:

【参考方案11】: 打开 oracle sql 开发者工具 转到窗口(在顶部菜单栏) 点击重置窗口恢复出厂设置 它对我有用。

【讨论】:

【参考方案12】:

SQL Developer 3.1 修复了这个问题。不过,它目前是早期采用者版本。

【讨论】:

我在 3.2 中遇到了问题。【参考方案13】:

对我来说,这最终是一个权限问题。

我通过创建超级用户角色 (CREATE ROLE root WITH SUPERUSER LOGIN PASSWORD 'XXXXX';) 解决了这个问题,然后使用该超级用户帐户连接到数据库。

这显然不是在所有情况下都是可行的解决方案。

【讨论】:

【参考方案14】:

您需要在 All_users 视图上选择权限

【讨论】:

除非您的系统真的出现问题,否则每个用户都可以选择表格 ALL_USERS。【参考方案15】:

以管理员身份启动 SQL Developer

【讨论】:

这不是管理员问题,它适用于应该有权访问他们有权访问的数据库的帐户,但登录 SQLD 不会显示它们。

以上是关于Oracle SQL Developer - 看不到表的主要内容,如果未能解决你的问题,请参考以下文章

如何将 .JSON 文件导入 Oracle SQL Developer

ORACLE SQL Developer 所需的属性主机名不能为空或为空

PLSQL Developer 中decode()函数的基本用法?

PLSQL Developer 连接oracle 看不见数据库

oracle sql developer工具 如何给用户分配权限

怎样在pl/sql developer中给oracle添加一个调度作业