【问题标题】:Rollback SQL Server from code从代码回滚 SQL Server
【发布时间】:2013-04-24 19:29:47
【问题描述】:

猜我的问题很受欢迎,比如INFORMIX DB ROLLBACK,我们正在使用 DELPHI 和 SQL Server 在我们的数据库上开发长期运行的算法。如果这些程序失败,我们需要将数据库设置回初始状态。在服务器端分离数据库,从备份中恢复旧数据库,然后重新开始我们的程序测试。漫长而耗时的过程。

如果我的测试失败,我可以使用 Delphi 在数据库中设置保存点并从 Delphi 恢复数据库吗?

【问题讨论】:

  • 您不能批量运行查询并提交它们吗?我曾经不得不做这样的事情,但这是复制大约 2000 万条记录。所以我所做的就是分块读取它们,完成需要的操作并进行多次插入,然后继续下一个块。唯一额外的事情是您需要识别最后插入的记录,这可以通过简单的比较来完成。也许还有别的东西,但这对你有用吗?
  • 如果你在 Delphi 中使用TADOConnection,你可以这样做:ADOConnection.BeginTrans; <your-Delphi-db-procedure>; ADOConnection.CommitTrans;。例外情况:ADOConnection.RollbackTrans.

标签: sql-server delphi


【解决方案1】:

您可以轻松地为此使用 SQL Server 的 Database Snapshots 功能:

  • 在开始之前创建一个数据库快照(使用CREATE DATABASE snapshot_name.... AS SNAPSHOT OF database_name

  • 运行您的应用程序

  • 如果失败,只需从该快照恢复(使用RESTORE DATABASE .... FROM DATABASE_SNAPSHOT = '....'

【讨论】:

  • 我有点困惑。来自文档:As the source database is updated, the database snapshot is updated.。这是真的吗?
  • @kobik:我同意你的困惑 - 似乎与 数据库快照是 SQL Server 数据库(源数据库)的只读静态视图完全矛盾。该段开头的声明
  • 好的,我应该试试做一些编码吗?
  • @Franz:我认为 kobik 提到的文档要么是错误的,要么具有误导性。我使用数据库快照取得了巨大成功——据我所知,数据库快照在给定时间的静态、只读“快照”(因此得名!)。以后对基本数据库的更改不会影响快照。我会继续尝试使用它们 - 我非常有信心它们应该适合你
猜你喜欢
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 1970-01-01
  • 2011-03-28
  • 2010-12-17
  • 1970-01-01
相关资源
最近更新 更多