偶尔,我们会用完回滚段空间,导致查询/更新失败。 我可以从Oracle数据库pipe理员那里得到哪些最佳实践,确保这些措施能够被主动监控,并在发生故障之前采取适当措施?
你使用的是什么版本的Oracle? 你真的使用手动回滚段吗? 或者你正在使用自动UNDOpipe理? 如果您使用的是Oracle的适中版本(9i或更高版本),那么您确实应该使用自动UNDOpipe理。
假设您正在使用自动UNDOpipe理,那么您实际上只需要知道数据库每单位时间产生多lessUNDO,以及需要执行的最长查询应该运行多长时间(或者是闪回查询需要执行的最远的查询) 。 然后,只需将UNDO_RETENTION设置为最长的查询运行时间,并调整UNDO表空间以保存在该时间间隔内生成的所有撤销(尽pipe具体取决于特定的Oracle版本)。
从那里,DBA相对容易地监视UNDO保留率的变化。 DBA可能很难监视最长时间运行的“真实”查询中的变化,但是,因为生产数据库有时经常遇到可怕的失控查询,有人试图得到一个报告,并意外地进行笛卡尔连接或其他一些可怕的事情代价高昂的操作需要很长时间才能运行。 DBA可能无法判断是否有“真实的”长时间运行的查询花费更长的时间,或者长时间运行的查询是否只是错误。 对于应用程序开发人员来说,与DBA协作确定查询应该运行更长的时间通常更容易。 这可能是开发人员所知道的(也就是说,因为您正在部署一个您希望运行很长时间的新报告),或者是开发人员在某处login并与DBA定期一起查看的内容。