0

私はさまざまな方法を試し、エラーについて多くのグーグル検索を行いましたが、これまでのところ運がありません.

既存のシャード マッピングを更新できる関数を作成しようとしていますが、次の例外が発生します。

Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.ShardManagementException: Store Error: Error 515, Level 16, State 2, Procedure __ShardManagement.spBulkOperationShardMappingsLocal, Line 98, Message: Cannot insert the value NULL into column 'LockOwnerId', table 'TEST-POS.__ShardManagement.ShardMappingsLocal'; column does not allow nulls. INSERT fails.

Create Shard 関数と Delete Shard 関数を作成しましたが、正常に動作しています。しかし、マッピングの更新中または作成中に上記のエラーが発生します。

以下は私のコードです:

                PointMapping<int> pointMapping;
                bool mappingExists = _listShardMap.TryGetMappingForKey(9, out pointMapping);
                if (mappingExists)
                {
                    var shardLocation = new ShardLocation(NewServerName, NewDatabaseName);
                    Shard _shard;
                    bool shardExists =
                    _listShardMap.TryGetShard(shardLocation, out _shard);

                    if (shardExists)
                    {
                        var token = _listShardMap.GetMappingLockOwner(pointMapping);
                        var mappingUpdate = new PointMappingUpdate { Shard = _shard, Status = MappingStatus.Online };
                        var newMapping = _listShardMap.UpdateMapping(_listShardMap.MarkMappingOffline(pointMapping), mappingUpdate, token);
                    }
                }

トークンを提供するかどうかに関係なく、同じエラーが発生します。次に、この方法でトークンを提供しようとしました MappingLockToken.Create() が、正しいトークンが提供されていないという別のエラーが発生します。それもtokenが違うので一目瞭然。

    _listShardMap.UpdateMapping(offlineMapping, mappingUpdate, MappingLockToken.Create());

Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.ShardManagementException: Mapping referencing shard '[DataSource=cps-pos-test-1.database.windows.net Database=Live_MSA_Test_Cloud]' belonging to shard map 'ClientIDShardMap' is locked and correct lock token is not provided. Error occurred while executing procedure 

データベースの [__ShardManagement].[ShardMappingsGlobal] テーブルの LockOwnerId も確認しました。これは ID = 00000000-0000-0000-0000-000000000000 です。

トークン ID がゼロであるため、null 挿入エラーが発生していますが、更新クエリを実行して、データベースで手動で 451a4da0-e3d4-42ac-bdc3-5b57022693d0 に更新しました。しかし、それは機能せず、同じ値 NULL を列 'LockOwnerId' エラーに挿入できません。

また、新しいマッピングの作成中に同じ Null エラーに直面しており、マッピングの作成中にトークンを提供する場所がコードに表示されません。以下はコードです。

PointMappingCreationInfo<int> newMappingInfo = new PointMappingCreationInfo<int>(10, newShard, MappingStatus.Online);
                        var newMapping = _listShardMap.CreatePointMapping(newMappingInfo);

Googleでよく検索し、いくつかのサンプルアプリケーションもダウンロードしましたが、解決策を見つけることができません. どんな種類の助けにも感謝します。

4

0 に答える 0