命令 - IMPORT

导入一个数据库到当前打开的实例上。

输入的文件必须使用EXPORT导出的Export Format。默认,文件使用GZIP算法压缩。

使用EXPORT命令,允许你不丢数据的情况下在不同的发布版之间迁移,旧版本导出的数据可以导入新版本。

语法

IMPORT DATABASE <input-file> [-preserveClusterIDs = <true|false>]
                             [-merge = <true|false>]
                             [-migrateLinks = <true|false>]
                             [-rebuildIndexes = <true|false>]
  • <inputy-file> 定义导入文件的路径。
  • -preserveClusterIDs 定义导入时是否保留簇的ID。如果关闭,导入时会创建临时的簇ID,有时会失败。这个选项只有PLocal存储类型时才有效。
  • -merge 定义是否将导入的内容和当前库中的内容合并。关闭的时候(默认),导入会覆盖当前的数据,除了安全相关的类之外(ORole, OUser, OIdentity), 这些类的数据会保留。版本1.6.1引入了这个特性。
  • -migrateLinks 定义是否在导入后迁移连接。如果开启,会更新所有连接为新的RID。默认是开启。建议你在合并的时候关闭,但是你要确认已经存在的记录没有连接到你导入的记录。版本1.6.1引入了这个特性。
  • -rebuildIndexes 定义是否在导入后重建索引。默认是开启的。你可以设置为false来加速导入,但是你必须要确认导入不会影响索引。版本1.6.1引入了这个特性。

例子

  • 导入数据库petshop.export:

    orientdb> IMPORT DATABASE C:/temp/petshop.export -preserveClusterIDs=true
    
    Importing records...
    - Imported records into the cluster 'internal': 5 records
    - Imported records into the cluster 'index': 4 records
    - Imported records into the cluster 'default': 1022 records
    - Imported records into the cluster 'orole': 3 records
    - Imported records into the cluster 'ouser': 3 records
    - Imported records into the cluster 'csv': 100 records
    - Imported records into the cluster 'binary': 101 records
    - Imported records into the cluster 'account': 1005 records
    - Imported records into the cluster 'company': 9 records
    - Imported records into the cluster 'profile': 9 records
    - Imported records into the cluster 'whiz': 1000 records
    - Imported records into the cluster 'address': 164 records
    - Imported records into the cluster 'city': 55 records
    - Imported records into the cluster 'country': 55 records
    - Imported records into the cluster 'animalrace': 3 records
    - Imported records into the cluster 'ographvertex': 102 records
    - Imported records into the cluster 'ographedge': 101 records
    - Imported records into the cluster 'graphcar': 1 records
    

更多备份和恢复,导入和导出,参考下面命令:

导出格式参考:

导入API

Java API的方式,使用类ODatabaseImport

ODatabaseDocumentTx db = new ODatabaseDocumentTx("plocal:/temp/mydb");
db.open("admin", "admin");
try{
  OCommandOutputListener listener = new OCommandOutputListener() {
    @Override
    public void onMessage(String iText) {
      System.out.print(iText);
    }
  };

  ODatabaseImport import = new ODatabaseImport(db, "/temp/export/export.json.gz", listener);
  import.importDatabase();
  import.close();
} finally {
  db.close();
}

故障排除

验证的错误

有时,你会在导入时遇到验证的错误OValidationException。2.2版本之后,可以在数据库级别使用命令ALTER DATABASE 进行设置,从而让导入继续进行。

  1. 禁止当前数据库的验证:

    orientdb> ALTER DATABASE validation false
    
  2. 导入已经导出的数据库:

    orientdb> IMPORT DATABASE /path/to/my_data.export -preserveClusterIDs=TRUE
    
  3. 重新开启校验:

    orientdb> ALTER DATABASE validation true
    

簇ID

在导入期间,有时你会遇到如下错误: Imported cluster 'XXX' has id=6 different from the original: 5。一般情况下这种错误是由于从太老版本的OrietnDB导出的。可以执行命令DROP CLASS删除类ORIDs, 然后再重新导入。

  1. 导入数据库:

    orientdb> IMPORT DATABASE /path/to/old_data.export
    
    Importing records...
    - Creating cluster 'company'...Error on database import happened just before line
    16, column 52 com.orientechnologies.orient.core.exception.OConfigurationException:
    Imported cluster 'company has id=6 different from the original: 5 at 
    com.orientechnologies.orient.core.db.tool.ODatabaseImport.importClusters(
    ODatabaseImport.java:500) at 
    com.orientechnologies.orient.core.db.tool.ODatabaseIMport.importDatabase(
    ODatabaseImport.java:121)
    
  2. 删除类ORIDs:

    orientdb> DROP CLASS ORIDs
    
  3. 导入数据库:

     orientdb> IMPORT DATABASE /path/to/old_data.export
     

数据库现在导入就没有错误了。