每个租户都有一个数据库,如下面的屏幕截图所示。我正在尝试删除租户数据库,清理并回收以前创建的租户的资源。我尝试了以下代码,但是,即使此方法成功执行,数据库中也没有发生任何更改。租户数据库仍然存在,Map仍然存在于[ShardsGlobal]表中。
从SQL Server中完全删除租户特定的数据库和引用的正确方法是什么?
请注意,我们将在生产中使用Azure弹性池。
string shardMapManagerConnectionString = configuration.GetShardMapMangerConnectionString();
ShardMapManager shardMapManager;
shardMapManager = ShardMapManagerFactory.GetSqlShardMapManager(
shardMapManagerConnectionString,
ShardMapManagerLoadPolicy.Lazy);
var shardMap = shardMapManager.GetListShardMap<T>(configuration.ShardMapName);
if (shardMap.TryGetMappingForKey(key, out PointMapping<T> mapping))
{
if (mapping.Status == MappingStatus.Online)
{
// `mapping =` on next line is needed
mapping = shardMap.MarkMappingOffline(mapping);
}
shardMap.DeleteMapping(mapping);
var shard = shardMap.GetShard(mapping.Shard.Location);
shardMap.DeleteShard(shard);
}
1条答案
按热度按时间jvidinwx1#
如果你看一下DeleteShard的文档,你会注意到这一部分:
这些方法对数据库本身没有任何影响,只对碎片Map中的元数据有影响。
您是否尝试过Azure Samples中介绍的方法?
要同时删除shard和DB,根据FAQ,我假设您必须先删除shard,然后再删除DB。