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