select table_name,OWNER from user_tables; 看看owner是谁。看看table_name是大写还是小写另外,你建表的时候是否是用create table “table”这样的形式,如果是这样的形式的话,需要用“table”这样来访问的。另外 我新建立了一个账户,给了dba权限,用sysdba登录可以操作表,但是用normal登录却不行这里能不能把你用sysdba的登录的命令 贴上来dba和sysdba不是一个概念的。
谢谢楼上的朋友,我详细的说明一下我是用别人的dmp还原的数据库, 还原之后所有表的owner都是 sys然后我新建立了一个test用户,给了所有的角色权限和部分系统权限我还用了 grant select any table to TEST; 执行后返回授权成功然后test 以 sysdba登录,可以用select * from testtable访问并且返回结果但是用 normal登录就说表不存在
按你的描述,这个对象的owner已经是sys了所以访问需要加上sys就可以了 SQL>select * from sys.testtable;
给用户赋予查询的权限,如下:SQL> show user USER 为 "SYS"SQL> select * from zzw_temp8; ID ---------- 1 2 8 8 8SQL> create user test678 identified by test678 2 /用户已创建。SQL> grant create session,resource to test678;授权成功。SQL> conn test678/test678; 已连接。 SQL> select * from sys.zzw_temp8; select * from sys.zzw_temp8 * 第 1 行出现错误: ORA-00942: 表或视图不存在 SQL> conn / as sysdba 已连接。 SQL> show user USER 为 "SYS" SQL> grant select on zzw_temp8 to test678;授权成功。SQL> conn test678/test678; 已连接。 SQL> select * from sys.zzw_temp8; ID ---------- 1 2 8 8 8SQL>
我新建立了一个账户,给了dba权限,用sysdba登录可以操作表,但是用normal登录却不行这里能不能把你用sysdba的登录的命令 贴上来dba和sysdba不是一个概念的。
还原之后所有表的owner都是 sys然后我新建立了一个test用户,给了所有的角色权限和部分系统权限我还用了 grant select any table to TEST; 执行后返回授权成功然后test 以 sysdba登录,可以用select * from testtable访问并且返回结果但是用 normal登录就说表不存在
SQL>select * from sys.testtable;
任何用户当他以sysdba登录的时候,使用的都是sys的schema,所以建的对象的owner也是sys。
USER 为 "SYS"SQL> select * from zzw_temp8; ID
----------
1
2
8
8
8SQL> create user test678 identified by test678
2 /用户已创建。SQL> grant create session,resource to test678;授权成功。SQL> conn test678/test678;
已连接。
SQL> select * from sys.zzw_temp8;
select * from sys.zzw_temp8
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> conn / as sysdba
已连接。
SQL> show user
USER 为 "SYS"
SQL> grant select on zzw_temp8 to test678;授权成功。SQL> conn test678/test678;
已连接。
SQL> select * from sys.zzw_temp8; ID
----------
1
2
8
8
8SQL>
上面的兄弟,其实是用个实例给你演示了,需要通过sys.table这样的方式来访问你的sysdba方式登录建的表。
应该是不行的,按你原来的做法,你没有注意sysdba的schema是sys的问题,所以虽然你登录是test用户,但是是用sysdba登陆的,所以建立的所有对象都在sys这个schema里,而且系统表空间里有很多的系统表,所以直接transport表空间没有意义。你可以通过下面两种方式来做,如果表少的话,还比较方便,如果表多,你就麻烦了这两种方法多需要
a. 建立自己的表空间
b. 把test的默认表空间指定到建立的表空间上去。记住不要在用test以sysdba登录了
方法1. 给test dba的权限,用exp和imp来做, 基于表的导出导入
方法2. 给test dba的权限, 通过 create table test.tablename as select * from sys.tablename;的形式在test用户下建立相同的表,然后drop table sys.tablename cascade constraints;把sys下的表drop掉。