我已经创建了新用户,并授予了他(数据库管理)特权。 然后,我连接到了这个新用户。
当我在该用户中创建新表时,尝试从该表中进行选择
oracle-00942:表/视图不存在
当我尝试通过模式浏览器中的toad查找蟾蜍时,找不到它。我搜索了它,并在(sys)用户中找到了该表。
当我创建具有架构名称的表时,我在架构浏览器中找到了它,但是我也无法从中选择。
那这是怎么回事?
答案 0 :(得分:0)
如果显示用于创建表的步骤顺序,将很有帮助。我的猜测是以某种方式在错误的架构(所有者)下创建表。执行此操作以找出其位置:
create
如果以select owner, table_name from all_tables where table_name = 'MYTABLE'
连接,则可以使用SYS
代替dba_tables
。
答案 1 :(得分: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>
现在轮到你了。
答案 2 :(得分:0)
我搜索了它,并在(sys)用户中找到了该表。
听起来您已使用SYSDBA特权连接到数据库,如下所示:
connect your_user/password as sysdba
执行此操作时,Oracle将忽略传递的用户名,并将我们连接为SYS。因此,我们执行的所有操作都将作为SYS执行。这意味着我们创建的任何表都是在SYS模式中创建的,除非我们为它们添加特定的模式名称作为前缀。