0

我创建了新用户并授予他(数据库管理)权限。然后我连接到这个新用户。

当我在这个用户中创建一个新表然后尝试从这个表中选择它给了我

oracle-00942:表/视图不存在

当我尝试通过模式浏览器中的 toad 找到它时,我找不到它。我搜索它并在(sys)用户中找到了这个表。

当我创建具有模式名称的表时,我在模式浏览器中找到了它,但我也无法从中选择。

那么这有什么问题呢?

4

3 回答 3

0

如果您能显示用于创建表的步骤顺序,将会有所帮助。我的猜测是您在错误的架构(所有者)下创建表。这样做可以找出它在哪里:

select owner, table_name from all_tables where table_name = 'MYTABLE'

如果连接为SYS,您可以使用dba_tables代替all_tables

于 2018-10-21T19:21:50.427 回答
0

我搜索它并在(sys)用户中找到了这个表。

听起来您已经使用 SYSDBA 权限连接到数据库,如下所示:

connect your_user/password as sysdba

当我们这样做时,Oracle 会忽略传递的用户名并将我们连接为 SYS。因此,我们采取的任何行动都以 SYS 身份执行。这意味着我们创建的任何表都是在 SYS 模式中创建的,除非我们在它们前面加上特定的模式名称。

于 2018-10-22T05:50:57.610 回答
0

如果您真正向我们展示您做了什么以及 Oracle 如何响应(即复制/粘贴整个 SQL*Plus 会话),那就更好了。

由于您可以创建用户,因此您可能可以以 SYS 身份连接。这样做,然后运行这样的语句:

SQL> select owner, object_type
  2  from dba_objects
  3  where object_name = 'EMP';

OWNER                          OBJECT_TYPE
------------------------------ -------------------
SCOTT                          TABLE

SQL>

它将显示该表真正属于谁。


我将模拟您所做的(实际上,我理解您所做的)。你会看到——如果你做对了——一切都会好的。

以 SYS 身份连接并创建新用户:

SQL> show user
USER is "SYS"
SQL> create user utest identified by utest
  2  default tablespace users
  3  temporary tablespace temp
  4  quota unlimited on users;

User created.

SQL> grant dba to utest;

Grant succeeded.

以新创建的用户连接,创建一个表:

SQL> connect utest/utest
Connected.
SQL> create table test (id number);

Table created.

SQL> select * from test;

no rows selected

好的; 该表是空的,但是 - 没有 ORA-00942 错误。

回到 SYS,检查谁拥有 TEMP 表:

SQL> connect sys as sysdba
Enter password:
Connected.
SQL> select owner, object_type
  2  from dba_objects
  3  where object_name = 'TEST'
  4  order by owner;

OWNER                          OBJECT_TYPE
------------------------------ -------------------
SCOTT                          TABLE
UTEST                          TABLE

SQL>

现在,轮到你了。

于 2018-10-21T19:26:13.713 回答