日期:2014-05-17  浏览次数:20791 次

关于数据表访问冲突的问题
现用PB+ORACLE开发的系统,由于每年的数据有几十万条,导致数据库访问速度下降,所以想把每年的数据放到一个用户名下。就是先把正在使用的用户username备份username.dmp,然后新建一用户如usename2005,username2006并导入数据username.dmp。。最后把正使用的用户username的历史数据清除。。


问题是,建好用户导入完数据后,系统中的某些模块有时就会访问刚建立的用户中的数据,导致不能对表进行读写如数据窗口错误。把刚新建的用户删除就又恢复正常。。。不知怎么才能解决用户的冲突问题?

------解决方案--------------------
这种活你1年才干一次,先把用户锁了,你干完了在解锁吧。
------解决方案--------------------
几十万条数据算多吗?上千万条查询都不应该有问题,只要你的表设计的合理
------解决方案--------------------
严格执行FROMUSER TOUSER是不会有什么问题的.
此外注意权限.
------解决方案--------------------
可以给以前的用户赋select的权限,查询语句做相应修改
------解决方案--------------------
一般来说,设定了fromuser 和 touser
不会出现你现有的程序访问刚刚建立的DB的情况。
除非你在中间出现DBLink等等,可以跨用户跨数据库的访问。
另外,数据窗口读写错误,让我怀疑是你的数据窗口有读取数据库结构的操作。
你需要仔细分析一下问题是否真的如你的设想,出现在数据冲突上。
------解决方案--------------------
交叉模块的逻辑有没有问题,新用户的授权有没有问题,仔细核对一下
------解决方案--------------------
用想要导出的用户的用户名和密码导出Dmp
在imp的时候
imp userid/password@sid file=filename fromuser=导出时使用的userid touser=想要导入哪个user就写哪个userid
------解决方案--------------------
你删除了哪个username?
------解决方案--------------------
可能是你的部分程序模块里有自动判断新用户是否存在并自动进行数据库切换的代码写逻辑有问题吧,结果只要有了username2006且有数据就自动转到username2006下登陆,同时还要访问旧用户下的表又没有对应的权限,结果造成程序异常,只要一删除username2006程序就又正常了;
你可以这样测试一下:
1 导入后在原用户和新用户下执行select * from username2006.yourtable_name,如果能查询出数据,证明数据导入是成功的,如果原用户下不成功就证明是授权问题,原用户没有访问新用户的权限;
2 在新用户下为原用户的每一个对象建个同义词,如果是因为切换用户的逻辑问题且是切换到了新用户,这时程序应该可以正常运行了,那么你可以考虑查看并改进相关模块的代码;
3 如果还是不行,看是不是某些视图/包/过程等对象移植不成功,重新编译未能通过编译的对象