问题描述
我正在将RavenDB实例从3.5(内部版本35295)移动到5.0.3(在撰写本文时为最新)。我通过“设置”>“导入数据”>“从RavenDB”开始迁移。我只包含文件和索引。旧数据库使用修订版已有一段时间,但停止了。迁移失败的文档不是经过修订的文档。
导入大约650k文档后,RavenDB引发错误
An item with the same key has already been added. Key: [Value: Redacted description,GlobalSortOrder: -1,PropertyId: 342,Value: Redacted description,PropertyId: 342]
System.ArgumentException: An item with the same key has already been added. Key: [Value: Redacted description,PropertyId: 342]
at System.Collections.Generic.TreeSet`1.AddIfNotPresent(T item)
at System.Collections.Generic.SortedDictionary`2.Add(TKey key,TValue value)
at Sparrow.Json.CachedProperties.UnlikelyGetProperty(LazyStringValue propName) in C:\Builds\RavenDB-Stable-5.0\50011\src\Sparrow\Json\CachedProperties.cs:line 157
at Sparrow.Json.BlittableJsonDocumentBuilder.ReadInternal[TWriteStrategy]() in C:\Builds\RavenDB-Stable-5.0\50011\src\Sparrow\Json\BlittableJsonDocumentBuilder.cs:line 296
at Sparrow.Json.Parsing.UnmanagedJsonParserHelper.ReadObject(BlittableJsonDocumentBuilder builder,PeepingTomStream peepingTomStream,UnmanagedJsonParser parser,MemoryBuffer buffer) in C:\Builds\RavenDB-Stable-5.0\50011\src\Sparrow\Json\Parsing\UnmanagedJsonParserHelper.cs:line 96
at Raven.Server.Smuggler.Documents.StreamSource.ReadDocuments(INewDocumentActions actions)+MoveNext() in C:\Builds\RavenDB-Stable-5.0\50011\src\Raven.Server\Smuggler\Documents\StreamSource.cs:line 1184
at Raven.Server.Smuggler.Documents.DatabaseSmuggler.ProcessDocuments(SmugglerResult result,BuildVersionType buildType) in C:\Builds\RavenDB-Stable-5.0\50011\src\Raven.Server\Smuggler\Documents\DatabaseSmuggler.cs:line 612
at Raven.Server.Smuggler.Documents.DatabaseSmuggler.ProcessType(DatabaseItemType type,SmugglerResult result,BuildVersionType buildType,Boolean ensureStepsProcessed) in C:\Builds\RavenDB-Stable-5.0\50011\src\Raven.Server\Smuggler\Documents\DatabaseSmuggler.cs:line 190
at Raven.Server.Smuggler.Documents.DatabaseSmuggler.Execute(Boolean ensureStepsProcessed,Boolean isLastFile) in C:\Builds\RavenDB-Stable-5.0\50011\src\Raven.Server\Smuggler\Documents\DatabaseSmuggler.cs:line 95
at Raven.Server.Smuggler.Migration.Migrator_V3.MigrateDatabase(String json,Boolean readLegacyEtag) in C:\Builds\RavenDB-Stable-5.0\50011\src\Raven.Server\Smuggler\Migration\Migrator_V3.cs:line 338
at Raven.Server.Smuggler.Migration.Migrator_V3.Execute() in C:\Builds\RavenDB-Stable-5.0\50011\src\Raven.Server\Smuggler\Migration\Migrator_V3.cs:line 99
at Raven.Server.Smuggler.Migration.Migrator.<>c__DisplayClass15_1.<<StartMigratingSingleDatabase>b__1>d.MoveNext() in C:\Builds\RavenDB-Stable-5.0\50011\src\Raven.Server\Smuggler\Migration\Migrator.cs:line 318
“编辑过的描述”包含在文档中找到的描述。它没有给我一个ID(即 products-1 ),而是给了我一部分文档。该文档具有唯一的标识符。
经过一番挖掘,我检索了文档,看起来像这样:
{
... other properties
"Description": "Redacted description",... other properties
"Localisation": {
"nl" {
... more translated content
"Redacted description": "dutch translation (which is identical to Redacted description"
... more translated content
},"fr": {
... more translated content
"Redacted description": "french translation"
... more translated content
}
},... more properties
}
省略的属性与编辑的描述不同,它们是日期,金额,百分比,布尔值,标签等。
有人知道为什么该文档上的数据库失败吗?
如果我需要提供其他信息,可以。
很抱歉,我无法发布实际文档,但是我不想泄漏任何公司数据。 :)在这段电晕时期,我的客户对我来说太宝贵了,GDPR罚款对我的钱包来说太高了。
更新: 我尝试了选项2,以便在创建数据库时从3.X数据库导入。现在,我收到以下错误:
[18:13:01 INFO] Path of temporary export file: C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp\export-MF.Studio-20201106_181301.ravendump
[18:13:22 INFO] Failed to initialize the storage it is probably been locked by RavenDB.
Error occurred during migration. Exception: System.ApplicationException: The data export tool have exited with code -532462766.
at Raven.Server.Web.System.AdminDatabasesHandler.<>c__DisplayClass24_1.<<MigrateDatabaseOffline>b__2>d.MoveNext() in C:\Builds\RavenDB-Stable-5.0\50011\src\Raven.Server\Web\System\AdminDatabasesHandler.cs:line 1320. Process pid: 14668,killed: True
System.InvalidOperationException: Error occurred during migration. Exception: System.ApplicationException: The data export tool have exited with code -532462766.
at Raven.Server.Web.System.AdminDatabasesHandler.<>c__DisplayClass24_1.<<MigrateDatabaseOffline>b__2>d.MoveNext() in C:\Builds\RavenDB-Stable-5.0\50011\src\Raven.Server\Web\System\AdminDatabasesHandler.cs:line 1320. Process pid: 14668,killed: True
at Raven.Server.Web.System.AdminDatabasesHandler.<>c__DisplayClass24_1.<<MigrateDatabaseOffline>b__2>d.MoveNext() in C:\Builds\RavenDB-Stable-5.0\50011\src\Raven.Server\Web\System\AdminDatabasesHandler.cs:line 1353
我已经为运行RavenDB5服务(本地服务)的用户提供了对生产数据库文件夹(实际上是副本,但我也使用实际的生产db文件夹进行了完全控制)的完全控制权。
我可以看到初始化在目标位置上创建了文件,因此它在那里具有足够的权限。
解决方法
这似乎是一个错误,如果可以提供转储文件(可以将其匿名化),则需要进行调查,然后将其发送到support@ravendb.net
要解决此问题,您可以尝试使用其他选项迁移数据吗?
- 您可以从3.5到4.x / 5.0设置单向复制,就像在3.5服务器之间设置复制的方式一样。
为了允许复制到受保护的4.x / 5.0服务器,您可以修改配置文件并添加以下配置选项:
Raven / Replication / CertificatePath
Raven / Replication / CertificatePassword(可选)
该证书必须从4.x / 5.0服务器生成,并包含所需数据库的权限。 (如果您还需要迁移索引,请执行此操作。)