Oracle SQL Developer - 无法看到表

时间:2011-04-21 20:13:59

标签: sql oracle oracle-sqldeveloper

我使用的是SQL Developer 1.1。我最近升级到SQL Developer 3.升级后,我注意到我的一些连接没有显示他们的表。我可以对表格进行选择,并显示数据。我可以看到其他对象,如视图等。我仍然可以使用我的旧版本,并且可以看到所有表格都适用于相同的模式。还有其他连接显示正常。

似乎无法找到相关信息。我尝试删除过滤器,但它没有用。

有没有人碰到这个?请帮忙。

14 个答案:

答案 0 :(得分:44)

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

答案 1 :(得分:20)

我尝试了Michael Munsey建议的两个选项并为我工作。

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

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

答案 2 :(得分:15)

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

Screenshot

答案 3 :(得分:7)

我在sqlDeveloper64-3.0.4.34和sqlDeveloper64-3.1.07.42中遇到同样的问题。

根据https://forums.oracle.com/forums/thread.jspa?threadID=2202388,似乎JDBC驱动程序中存在一个与“Out of Band Breaks”有关的错误 - 基本上是一个低级TCP问题。

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

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


  

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

     

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

     

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

     

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

     

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

     

- 约翰

     

SQL Developer Team

答案 4 :(得分:3)

您可能无法访问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可能使用了一个更符合您访问权限的简单查询。

答案 5 :(得分:2)

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

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

所有者将是唯一一个将在树中的“表”下看到这些表的人。如果您没有看到它们,因为您不是它们的所有者,则必须在“其他用户”下展开并展开每个用户,直到找到谁创建/拥有该模式(如果您还不知道)。如果您的帐户具有表格权限,则无关紧要,您仍然必须在“其他用户”下找到拥有它的用户才能看到它,在“表格”下!

有一件事可以帮到你:当你编写查询时,你实际上在命名法中指明了所有者是谁,例如

Select * from admin.mytable

表示“admin”是拥有它的用户,因此您在“其他用户>管理员”下展开并展开“表格”,就在那里。

答案 6 :(得分:1)

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

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

答案 7 :(得分:1)

将sys.external_tab $上的select赋予[myUser];为我工作。 thanx Codo

答案 8 :(得分:1)

我的Mac上出现了这个问题。 通过卸载并删除/Users/aa77686/.sqldeveloper文件夹来修复它。 卸载而不删除该文件夹没有修复它 然后重新下载并重新安装。
启动它,添加连接,它工作正常 退出它,重新启动它几次,并且每次都正确地显示表格等。

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

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

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

答案 12 :(得分:-2)

您需要在All_users视图

上选择权限

答案 13 :(得分:-3)

以管理员身份启动SQL Developer