我创建了新用户并授予他(数据库管理)权限。然后我连接到这个新用户。
当我在这个用户中创建一个新表然后尝试从这个表中选择它给了我
oracle-00942:表/视图不存在
当我尝试通过模式浏览器中的 toad 找到它时,我找不到它。我搜索它并在(sys)用户中找到了这个表。
当我创建具有模式名称的表时,我在模式浏览器中找到了它,但我也无法从中选择。
那么这有什么问题呢?
如果您能显示用于创建表的步骤顺序,将会有所帮助。我的猜测是您在错误的架构(所有者)下创建表。这样做可以找出它在哪里:
select owner, table_name from all_tables where table_name = 'MYTABLE'
如果连接为SYS
,您可以使用dba_tables
代替all_tables
。
我搜索它并在(sys)用户中找到了这个表。
听起来您已经使用 SYSDBA 权限连接到数据库,如下所示:
connect your_user/password as sysdba
当我们这样做时,Oracle 会忽略传递的用户名并将我们连接为 SYS。因此,我们采取的任何行动都以 SYS 身份执行。这意味着我们创建的任何表都是在 SYS 模式中创建的,除非我们在它们前面加上特定的模式名称。
如果您真正向我们展示您做了什么以及 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>
现在,轮到你了。