本帖最后由 YuccaWei 于 2009-09-21 10:32:12 编辑

解决方案 »

  1.   

    以sysdba方式登录任何账户都是进入sys模式下
      

  2.   

    不要将表建在sys,system用户下
    进行一般操作不要as sysdba登录
    要用Normal模式
      

  3.   

    你用yucca用户登陆plSQL的时候肯定不是选择的normal方式
      

  4.   


    楼主好像没有弄清楚表和用户之间的关系你用用户A建的表,就属于用于A,如果没有授权给用户B,用用户B是查询不到这个表的. 就会报表或视图不存在..一般在项目中,都会新建个用户,然后把所有的表建在这个用户下..  
      

  5.   


    1.用system登陆的PLSql,创建了表tbTest,查询的时候 SELECT * FROM  SYSTEM.TBTEST 可以顺利执行 
    但SELECT * FROM  TBTEST 却报错“表或视图不存在”。为什么会这样? 可以用show user命令,看看当前用户的schema,如果你SYSTEM.TBTEST可以访问,但是TBTEST不能访问是shcmea不同的问题2.还是上面刚建的那个表TBTEST ,我在C#中连接oracle,用的system登陆,查询语句 不管查SYSTEM.TBTEST 还是TBTEST 又都ok了,不会报错,这里连接与上方连接PLSQL有何不同之处,为什么这里两种情况又都可以了?你用C#连接的时候,是用的system做用户名的,所以scheam是SYSTEM,所以都可以连接3.用system登陆的PLSql,新建了个用户yucca, 角色是dba,为何不能查询TBTEST 表? 
    grant select any table to yucca 之后yucca才有权限查询表 。那我以后每次需要一个新用户都需要这样grant一次吗?这样太麻烦了。 不需要,dba的权限过大,要查询表,可以用select any table的系统权限,或者针对于当个对象的对象权限比如select on SYSTEM.TBTEST, 一般的用户,我们都指定connect, resource这两个角色权限,比如grant connect, resource to newuser;4.用yucca登陆plSQL,creat 了表 tbYucca,在plSQL内查询select * from tbYucca 没问题,但在C#内使用yucca登陆Oracle,执行刚刚的查询语句也会报“表或视图不存在”,这是怎么回事? 还是schema的问题
    5.在plSQL内看tbYucca的属性,owner居然是sys,这又是为什么? 
    你的tbYucca登录的时候,用的是as sysdba的方式,这种方式的schema是 SYS,既是用户SYS6.后来在C#内查询 select count(*) from sys.tbYucca 还是会报错“表或视图不存在 ” 
    sys的用户需要单独由SYS附对象权限才行。问题总结主要是schema的问题,要不通过shcmea.TBTEST这样的形式反问表,必须是scheam和当前schema一致的情况下,可以通过show user查看当前schema
      

  6.   

    请问 inthirties,关于schema我怎么控制保证创建的table都在同一个schema内呢?
    就如这里为什么schema会不同呢?请高手详解
      

  7.   

    你用哪个USER创建的表,默认就在该SCHEMA下
      

  8.   

    如下
    那用户yucca怎样登陆创建的表才属于他自己呢?
    请高手解惑。多谢
      

  9.   

    自己又捣鼓了捣鼓,总算明白一点了
    总结了以下几点
    1.使用自己创建的用户登录时,需要登陆模式为"标准"(nomal),这样创建的表的拥有者就是他自己了。
    2.不管哪个用户只要是使用dba方式登录PL/sQL创建的表的拥有者都是sys
    3.一般报错“表或视图不存在”,除非这个表或视图真不存在,问题一般是权限的问题。把用户的权限之类的理吧清楚了,就不会有这种问题了。再次感谢inthirties!
      

  10.   

    这个理解..不太正确
    1.创建的表的拥有者本来就是创建者自己。只不过你以sysdba登录的时候,你登录的就是sys账户,拥有者和创建者都是sys
    2.企业版在本机上默认有两种验证方式,当你以sysdba方式登录的话,是以os方式验证,登入sys。若你将这个验证方式去掉,则不会出现这种情况
    3.你的表名和视图名之前不加用户名的话,查出来的是自己用户下的表和视图,提示表或视图不存在,就是在当前用户下不存在。若你在表名前加上一个用户名,而且该用户名下有这张表,那么如果出现该提示,可能是权限问题。
      

  11.   


    lz这里的总结和你说的并不矛盾。 
    1.使用自己创建的用户登录时,需要登陆模式为"标准"(nomal),这样创建的表的拥有者就是他自己了。确实,以normal的方式,就可以把表创建到自己的schema里,只要你不指定一个schema的话。sysdba和sysoper
    这两个特殊身份,一般是用来管理和维护的。不要用他们来创建表和其他对象。2. 不管哪个用户只要是使用dba方式登录PL/sQL创建的表的拥有者都是sys
    这个也是正确的,不过有错误的是,是使用sysdba,不是dba,dba和sysdba的区别可以看另外一个文章,用sysdba登录的schema就是sys叻,所以拥有者就是sys了。 这个和wildwave兄弟解答是说的sysdba认证方面的问题,描述也是正确的,不过和lz解答的是两码事。 3.般报错“表或视图不存在”,除非这个表或视图真不存在,问题一般是权限的问题。把用户的权限之类的理吧清楚了,就不会有这种问题了。
    这里也是对的,wildwave兄弟说的不同schema的问题,其实属于表不存在的问题。确实别的schema的对象在你的schema里是没有的。 也有可能你加了schema,但是表名写的不对,还是报 不存在的错呀。