现用PB+ORACLE开发的系统,由于每年的数据有几十万条,导致数据库访问速度下降,所以想把每年的数据放到一个用户名下。就是先把正在使用的用户username备份username.dmp,然后新建一用户如usename2005,username2006并导入数据username.dmp。。最后把正使用的用户username的历史数据清除。。
问题是,建好用户导入完数据后,系统中的某些模块有时就会访问刚建立的用户中的数据,导致不能对表进行读写如数据窗口错误。把刚新建的用户删除就又恢复正常不知怎么才能解决用户的冲突问题?

解决方案 »

  1.   

    严格执行FROMUSER TOUSER是不会有什么问题的. 
    此外注意权限.
      

  2.   

    可以给以前的用户赋select的权限,查询语句做相应修改
      

  3.   

    一般来说,设定了fromuser 和 touser
    不会出现你现有的程序访问刚刚建立的DB的情况。
    除非你在中间出现DBLink等等,可以跨用户跨数据库的访问。
    另外,数据窗口读写错误,让我怀疑是你的数据窗口有读取数据库结构的操作。
    你需要仔细分析一下问题是否真的如你的设想,出现在数据冲突上。
      

  4.   

    我在IMP和EXP时没用过fromuser 和 touser,不知是否会有影响?也不清楚如何使用的。
      

  5.   

    用想要导出的用户的用户名和密码导出Dmp
    在imp的时候
    imp userid/password@sid file=filename fromuser=导出时使用的userid touser=想要导入哪个user就写哪个userid
      

  6.   

    昨天试了下还是不行。。
    我是按照这个imp userid/password@sid file=filename fromuser=导出时使用的userid touser=想要导入哪个user就写哪个userid但是只要drop user username cascade;
    马上就又可以了
      

  7.   

    就是删了刚建立的用户username2006,只要执行drop user username cascade;没等执行完就可以了..
      

  8.   

    可能是你的部分程序模块里有自动判断新用户是否存在并自动进行数据库切换的代码写逻辑有问题吧,结果只要有了username2006且有数据就自动转到username2006下登陆,同时还要访问旧用户下的表又没有对应的权限,结果造成程序异常,只要一删除username2006程序就又正常了;
    你可以这样测试一下:
    1 导入后在原用户和新用户下执行select * from username2006.yourtable_name,如果能查询出数据,证明数据导入是成功的,如果原用户下不成功就证明是授权问题,原用户没有访问新用户的权限;
    2 在新用户下为原用户的每一个对象建个同义词,如果是因为切换用户的逻辑问题且是切换到了新用户,这时程序应该可以正常运行了,那么你可以考虑查看并改进相关模块的代码;
    3 如果还是不行,看是不是某些视图/包/过程等对象移植不成功,重新编译未能通过编译的对象
      

  9.   

    最后发现只有操作含触发器的表才有上述问题,把username2006中触发器全删除可解决问题..