背景
环境
- Oracle 12c 数据
- 批量服务器N
- 应用服务器M
情景
- 同一时点服务器N要truncat数据,服务器M则要向表中插入数据
- Oracle行级锁,truncat操作权限不如insert操作高
- 导致N的业务无法执行下去并报错
思路
未解决上面情境中的问题提供几种设想
1. 建立中间队列服务器,在N执行事务时停止对M的支持
当然,不仅仅是停止对M的支持,这种只是最简单粗暴的方式,可以根据条件进行队列筛选,执行应该执行的动作。服务器X可有可无,只要有功能可以充当队列管理者即可,这种方式的优点是不会大面积影响其他程序业务,缺点是由于队列管理方式较为复杂,管理程序短期不可能实现。
2. 保持原样不变,但两个原本操作同一个表的,改为不同表,建立数据同步机制
这个思路就很简单了,服务器N主要操作数据表X,并定期truncate数据Y,而服务器M业务主要操作Y,使用数据Y+X比Y多出来的补集,这种方式的优点是两个数据不受影响,最大程度避免的数据库事务的问题,但是缺点也同样明显,改造时服务器M的大量业务程序需要改动,在N定期truncate数据Y的时候,仍然存在服务器M正在操作数据Y的风险。