简体   繁体   English

无法还原OrientDB备份

[英]Can't restore OrientDB Backup

I'm having trouble restoring an OrientDB database from a backup. 我无法从备份还原OrientDB数据库。 I'm using OrientDB version 1.2.0 (this backup is from November 2012) and the backup was produced by OrientDB (same version) using the built-in backup utility. 我使用的是OrientDB 1.2.0版(此备份来自2012年11月),该备份是由OrientDB(相同版本)使用内置备份实用程序生成的。 I'm trying to restore the backup to a new database using the OrientDB console: 我正在尝试使用OrientDB控制台将备份还原到新数据库:

create database remote:localhost/dbname root password local graph
import database backup.json

But when I run those commands, I get the following error in the console: 但是,当我运行这些命令时,在控制台中出现以下错误:

Importing indexes ...
- Index 'dictionary'...Error on database import happened just before line 22258, column 6
com.orientechnologies.orient.core.exception.OConcurrentModificationException: Cannot update record #0:1 in storage 'dbname' because the version is not the latest. Probably you are updating an old record or it has been modified by another user (db=v2 your=v1)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at com.orientechnologies.orient.enterprise.channel.binary.OChannelBinary.createException(OChannelBinary.java:429)
    at com.orientechnologies.orient.enterprise.channel.binary.OChannelBinary.handleStatus(OChannelBinary.java:382)
    at com.orientechnologies.orient.enterprise.channel.binary.OChannelBinaryAsynch.beginResponse(OChannelBinaryAsynch.java:145)
    at com.orientechnologies.orient.enterprise.channel.binary.OChannelBinaryAsynch.beginResponse(OChannelBinaryAsynch.java:59)
    at com.orientechnologies.orient.client.remote.OStorageRemote.beginResponse(OStorageRemote.java:1556)
    at com.orientechnologies.orient.client.remote.OStorageRemote.command(OStorageRemote.java:727)
    at com.orientechnologies.orient.client.remote.OStorageRemoteThread.command(OStorageRemoteThread.java:191)
    at com.orientechnologies.orient.core.command.OCommandRequestTextAbstract.execute(OCommandRequestTextAbstract.java:60)
    at com.orientechnologies.orient.core.index.OIndexManagerRemote.dropIndex(OIndexManagerRemote.java:80)
    at com.orientechnologies.orient.core.index.OIndexManagerProxy.dropIndex(OIndexManagerProxy.java:80)
    at com.orientechnologies.orient.core.db.tool.ODatabaseImport.importIndexes(ODatabaseImport.java:687)
    at com.orientechnologies.orient.core.db.tool.ODatabaseImport.importDatabase(ODatabaseImport.java:127)
    at com.orientechnologies.orient.console.OConsoleDatabaseApp.importDatabase(OConsoleDatabaseApp.java:1419)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.orientechnologies.common.console.OConsoleApplication.execute(OConsoleApplication.java:238)
    at com.orientechnologies.common.console.OConsoleApplication.executeCommands(OConsoleApplication.java:127)
    at com.orientechnologies.common.console.OConsoleApplication.run(OConsoleApplication.java:92)
    at com.orientechnologies.orient.console.OConsoleDatabaseApp.main(OConsoleDatabaseApp.java:130)

All of the records import correctly, but it fails on the indexes. 所有记录均正确导入,但在索引上失败。 I have 15+ backups of the same database and they all have this issue, so it seems unlikely that they're all corrupted. 我有15个以上同一数据库的备份,而且它们都有这个问题,因此似乎它们都没有损坏。 How can I restore my database? 如何还原数据库? (I'm OK with having to modify the JSON if needbe.) (如果需要,我可以不必修改JSON。)


When trying to use local mode rather than remote mode, I get a different error: 当尝试使用本地模式而不是远程模式时,出现另一个错误:

Started import of database 'local:dbname' from dbname.json...
Importing database info...OK
Importing clusters...
- Creating cluster 'internal'...OK, assigned id=0
- Creating cluster 'default'...Error on database import happened just before line 13, column 52
com.orientechnologies.orient.core.exception.OConfigurationException: Imported cluster 'default' has id=3 different from the original: 2. To continue the import drop the cluster 'manindex' that has 1 records
    at com.orientechnologies.orient.core.db.tool.ODatabaseImport.importClusters(ODatabaseImport.java:544)
    at com.orientechnologies.orient.core.db.tool.ODatabaseImport.importDatabase(ODatabaseImport.java:130)
    at com.orientechnologies.orient.console.OConsoleDatabaseApp.importDatabase(OConsoleDatabaseApp.java:1414)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.orientechnologies.common.console.OConsoleApplication.execute(OConsoleApplication.java:269)
    at com.orientechnologies.common.console.OConsoleApplication.executeCommands(OConsoleApplication.java:157)
    at com.orientechnologies.common.console.OConsoleApplication.run(OConsoleApplication.java:97)
    at com.orientechnologies.orient.graph.console.OGremlinConsole.main(OGremlinConsole.java:53)

Error: com.orientechnologies.orient.core.db.tool.ODatabaseExportException: Error on importing database 'dbname' from file: dbname.json
Error: com.orientechnologies.orient.core.exception.OConfigurationException: Imported cluster 'default' has id=3 different from the original: 2. To continue the import drop the cluster 'manindex' that has 1 records

It seems like the issue is that my old cluster IDs don't match the ones in the new database. 看来问题在于我的旧群集ID与新数据库中的ID不匹配。 Perhaps there are creation options that affect which clusters are created by default? 也许有一些创建选项会影响默认情况下创建的集群?

It turns out that the issue was that the database was being imported with OrientDB version 1.2.0 but was created with 1.0.1 (or 1.0.0). 事实证明,问题在于该数据库是使用OrientDB 1.2.0版导入的,但是是使用1.0.1(或1.0.0)创建的。 The JSON file listed version 1.2.0 as the engine-version , but that was the engine that backed it up, not created it. JSON文件将1.2.0版列为engine-version ,但这是备份它而不是创建它的引擎。 After I tried Lvca's suggestion of using local mode, I discovered that the cluster IDs weren't matching up. 在尝试了Lvca关于使用本地模式的建议之后,我发现群集ID不匹配。 From there I guessed that the version numbers might not be correct. 从那里我猜测版本号可能不正确。 So it seems that even though I was running the database using the 1.2.0 server and the 1.2.0 Java library, the database was never "upgraded" to use the new 1.2.0 schema. 因此,即使我使用1.2.0服务器和1.2.0 Java库运行数据库,该数据库也从未被“升级”为使用新的1.2.0模式。

Thanks to Lvca for a nudge in the right direction. 感谢Lvca向正确的方向推进。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM