我目前有2个架构,A和B.
B有一个表,A执行选择插入和更新。
在我们的sql脚本中,我们已授予A权限,以便它可以完成其任务。
grant select on B.thetable to A
etc,etc
现在,表'thetable'被删除,另一个表每天至少重命名为B.
rename someothertable to thetable
执行此操作后,当A执行B.thetable上的选择时,我们会收到错误。
ORA-00942: table or view does not exist
执行drop + rename操作后,是否有可能丢失授权?
我们是否必须再次分配权限?
将数据插入'thetable'的每日进程每N次插入执行一次提交,因此无法执行任何回滚。这就是我们使用2张桌子的原因。
提前致谢
答案 0 :(得分:7)
是的,一旦你放弃了表格,拨款也会被取消。
您可以尝试创建一个VIEW
从thetable
中选择并授予SELECT
。
你定期放桌子的策略对我来说听起来不太合适。你为什么要这样做?
修改强>
除了每天放桌子之外还有更好的方法。
向thetable
添加另一列,说明该行是否有效。
在该列上添加索引(或扩展您用于从该表中选择的现有索引)。
为您的查询添加另一个条件,只考虑“有效”行或创建一个视图来处理它。
导入数据时,将新行设置为“新”。导入完成后,您可以删除所有“有效”行,并在单个事务中将“新”行设置为“有效”。
如果导入失败,您只需回滚事务。
答案 1 :(得分:1)
也许重命名表格的过程也应该执行一个为您提供补助的程序?您甚至可以获得想象并查询现有授权的字典并将其应用于重命名的表。
答案 2 :(得分:0)
否: “Oracle数据库自动将旧对象的完整性约束,索引和授权传递给新对象。” http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_9019.htm#SQLRF01608
你必须有另一个问题
答案 3 :(得分:0)
另一种方法是使用临时表来完成您正在进行的工作。毕竟,听起来只是数据是暂时的,至少在那个表中,并且每次你有一组新的数据/创建新表时你都不必重新申请补助