删除SQL Server中的数据库碎片Map和碎片数据库以清理租户资源

wqsoz72f  于 2023-02-11  发布在  SQL Server
关注(0)|答案(1)|浏览(124)
    • bounty将在3天后过期**。回答此问题可获得+50的声望奖励。Patola正在寻找规范答案

每个租户都有一个数据库,如下面的屏幕截图所示。我正在尝试删除租户数据库,清理并回收以前创建的租户的资源。我尝试了以下代码,但是,即使此方法成功执行,数据库中也没有发生任何更改。租户数据库仍然存在,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);
}
jvidinwx

jvidinwx1#

如果你看一下DeleteShard的文档,你会注意到这一部分:
这些方法对数据库本身没有任何影响,只对碎片Map中的元数据有影响。
您是否尝试过Azure Samples中介绍的方法?
要同时删除shard和DB,根据FAQ,我假设您必须先删除shard,然后再删除DB。

相关问题