2010-09-10 112 views
2

嗨,我们正在构建一个多租户解决方案,其中每个租户都有自己的数据库。 我们会将有关租户的信息保存在索引数据库中。 创建租户时,将执行以下步骤。写入数据库并创建数据库时的事务

创建租户类,将其保存到数据库中,在该数据库中将获得一个增量数,该数将用于命名我们将创建的数据库。 用增量编号创建数据库。 然后更新数据库模式。

这完全没有问题,问题是如果某些第二阶段将抛出异常。然后我们想要回滚租户的储蓄。我们可以在更大的交易中做到这一点吗?为了能够使用增量编号,我们被迫提交交易来获取它。我们是否应该使用其他命名策略?

想法?

+0

您是否使用表中的IDENTITY /自动编号列来获取编号?您可以使用T-SQL中的SCOPE_IDENTITY()函数来获取添加的最后一条记录的标识值。 INSERT INTO X(a,b)VALUES(x,y); SET @TenantID = SCOPE_IDENTITY(); – 2010-09-13 01:03:18

回答

0

MSDN

CREATE DATABASE语句必须在自动提交模式(默认事务管理模式),并在显式或隐式的交易是不允许的运行。

(这也适用于ALTER DATABASE为好。)

但是,如果你的应用程序逻辑判定该操作应该会失败(注:将尽可能多的检查的,你可以在逻辑,你早可以),您可以简单地使用DROP DATABASE(并回滚索引数据库事务),因为下一次尝试应该可能重新创建整个事情。通过任何方式都不是一个理想的解决方案,但是你必须解决上面引用的约束。