我们如何在perl脚本中使数据库可恢复

时间:2014-09-02 08:32:46

标签: database perl

我有一个Perl代码,它连接数据库并扫描来自不同表的数据。如果我失去连接,我会遇到问题:它会回滚所有交易。如何让Perl脚本恢复连接并启动中断发生的过程?我是否可以使用Perl恢复连接或任何其他技术来启动中断发生的过程,如果有任何人可以指导我的步骤请。

它实际上是必需的,因为我们有大量数据,需要1周时间扫描所有数据并插入特定表中,如果我们运行数据库脱机备份,它会断开所有连接,并且无论发生什么事务,它都会回滚并且需要从一开始就再次运行。

我们可以提交交易无论做什么,但挑战是我们如何从中断发生的地方开始处理,所以我们不需要从一开始就运行。

1 个答案:

答案 0 :(得分:0)

依靠数据库连接持续开放超过一天是错误的方法。

可能的解决方案包括:

1)连接到DB以创建DB句柄。使用无限循环和睡眠等待,直到你有一个良好的数据库句柄。把它放到子程序中。

2)将各个表的各个请求放在数组结构中 在循环中的单独语句中执行单独的查询(。 在每个请求之前检查dbh是否过时。如有必要,清洁并重新创建手柄。使用1)

中的子程序

使用" redo"处理EVAL块中请求期间的故障声明以确保不会跳过任何语句。

3)将请求之间的数据保存在内存或任何非SQL存储中,如Key / Value Store(Redis,)

4)计算任何需要计算的东西 5)当您拥有提交事务的所有数据时,请执行。

此解决方案假设您不关心阅读和提交之间的变化。如果这样做,您需要先锁定受影响的表。你可能不想在一周内锁定一张桌子。