我正在做一个项目,我需要将旧数据从生产服务器传输到存档服务器。如果在传输过程中出现任何故障,我在处理跨服务器的数据一致性时会遇到问题。只不过是执行交易而已。
每当数据传输过程中出现系统故障时,该过程应从存档服务器中删除所有传输的记录,并在系统恢复时重新启动整个传输过程。
注意:由于客户场所的某些权限/设置原因,我无法使用分布式事务来实现。
有没有办法在 C#.net 或 SQL Server 2008 中处理这个问题?
我正在做一个项目,我需要将旧数据从生产服务器传输到存档服务器。如果在传输过程中出现任何故障,我在处理跨服务器的数据一致性时会遇到问题。只不过是执行交易而已。
每当数据传输过程中出现系统故障时,该过程应从存档服务器中删除所有传输的记录,并在系统恢复时重新启动整个传输过程。
注意:由于客户场所的某些权限/设置原因,我无法使用分布式事务来实现。
有没有办法在 C#.net 或 SQL Server 2008 中处理这个问题?
DECLARE @TranCounter INT;
SET @TranCounter = @@TRANCOUNT;
IF @TranCounter > 0
SAVE TRANSACTION savepointrb1;
ELSE
BEGIN TRANSACTION;
BEGIN TRY
-- your code will be here. if you are using multiple stored procedures then
apply this code on that
IF @TranCounter = 0
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF @TranCounter = 0
ROLLBACK TRANSACTION;
ELSE
IF Xact_state() <> -1
ROLLBACK TRANSACTION savepointrb1;
END CATCH
当整个事务的任何部分失败时,以下代码用于“回滚”到编辑数据库之前。您可以尝试对其进行修改以满足您的需求。
(首先参考 System.Transactions-namespace)
System.Transactions
using(TransactionScope transaction = new TransactionScope())
{
try
{
//modify your database here
transaction.Complete();
}
catch(Exception)
{
transaction.Dispose();
}
}