在实际的生产环境中,随着门户数据量和并发量的增加,iPortal 中默认存储门户数据的 SQLite 数据库在性能上可能无法满足实际的业务需求。

基于此,SuperMap iPortal 10i(2020) SP1 及以上版本内置了一个门户数据库迁移工具(migration.bat/sh),帮助用户实现门户数据(地图、服务、场景、数据、项目、账户等基本信息)的快速迁移。门户数据库迁移工具位于 %SuperMap iPortal_HOME%\support\migration 目录下,通过该门户数据库迁移工具,您可以在 SQLite、MySQL、Oracle 和 PostgreSQL 四种不同数据库间进行门户数据的任意迁移操作。如果您需要实现跨版本的门户数据库迁移,建议您先将旧版本 iPortal 升级后,再进行门户数据库迁移。

注:该数据库迁移工具支持的产品版本为 SuperMap iPortal 9D(2019) SP2 及以上版本,但 SuperMap iPortal 9D(2019) SP2- SuperMap iPortal 10i(2020) 版本的产品包中未内置数据库迁移工具。因此,如果您的 iPortal 版本在此区间内且需要进行门户数据库迁移,您可以联系 SuperMap iPortal 团队,获取数据库迁移工具,或将新版 iPortal 包中的数据库迁移工具及位于 %SuperMap iPortal_HOME%\webapps\iportal\WEB-INF\lib 路径下的 jar 包(iportal-database-migration-tool-***.jar) 复制到您产品包的对应位置,在此基础上进行门户数据库的迁移。

迁移门户数据

在进行门户数据迁移之前,您需要先完成数据库迁移配置,配置信息在安装目录(%SuperMap iPortal_HOME%\support\migration)下的 config.properties 配置文件中。其中,由 SQLite 数据库向 MySQL数据库、Oracle 数据库和 PostgreSQL 数据库迁移的配置范例已经写好,您只需打开注释,并填入实际的数据库连接池的配置信息即可。配置完成后,停止 iPortal 服务,启动门户数据迁移脚本(migration.bat/sh),即可进行门户数据的迁移。

SQLite 数据库迁移配置

config.properties 配置文件中提供了由 SQLite 数据库作为源数据库的配置范例,如果您希望将 SQLite 数据库作为迁移的目标数据库,只需将 SQLite 数据库配置变量的前缀名修改为 "target" 即可。

配置示例如下:

source.dbType=SQLITE

source.username=username

source.password=password

source.jdbcUrl=jdbc:sqlite:../../webapps/iportal/WEB-INF/iportaldata/iportal.db

source.maxPoolSize=1

source.minPoolSize=1

source.maxIdleTime=3000

source.maxWait=300000

source.initialPoolSize=1

source.skipTables=proxyserviceaccessrecords

source.step=1000

  • dbType:数据库类型,字符需要大写。
  • username:用户名。SQLite 数据库的用户名可以为空。
  • password:密码。SQLite 数据库的密码可以为空。
  • jdbcUrl:连接至驱动的 url,SQLite 数据库的文件路径。示例中填入了 iPortal 内置 SQLite 数据库的文件路径,您也可以根据实际情况进行更改。
  • maxPoolSize:连接池在同一时刻内所提供最大活动连接数。
  • minPoolSize:连接池在同一时刻内所提供最小活动连接数。
  • maxIdleTime:最大空闲时间,maxIdleTime 秒内未使用则连接被丢弃。若为0则永不丢弃。
  • maxWait:当发生异常时数据库等待最大毫秒数(当没有可用连接时)。
  • initialPoolSize:初始化连接池大小。
  • skipTables:指定不需要迁移的表,如有些表数据量过大但并不重要时,您可以在迁移时选择跳过。表名间需使用英文逗号分隔。
  • step:指定每次迁移的最大行数,默认值:1000。

MySQL 数据库迁移配置

config.properties 配置文件中提供了 MySQL 数据库作为目标数据库的配置范例,如果您希望将 MySQL 数据库作为迁移的源数据库,只需将 MySQL 数据库配置变量的前缀名修改为 "source" 即可。

配置示例如下:

target.dbType=MYSQL

target.username=supermap

target.password=supermap

target.jdbcUrl=jdbc:mysql://127.0.0.1:3306/iportal?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true

target.maxPoolSize=30

target.minPoolSize=5

target.maxIdleTime=3000

target.maxWait=300000

target.initialPoolSize=1

  • dbType:数据库类型,字符需要大写。
  • username:用户名。根据您实际使用的 MySQL 进行配置。
  • password:密码。根据您实际使用的 MySQL进行配置。
  • jdbcUrl:连接至驱动的 url,如果您的 SuperMap iPortal 和 MySQL 在同一台机器中,IP 就为 localhost,如果不在同一台机器上,此处的 IP 应该写 MySQL 所在机器的 IP 地址。MySQL 的默认端口为:3306,您可以根据您安装的 MySQL 的实际情况来配置。数据库名默认为 iportal,可根据您创建的数据库名称进行修改。
  • maxPoolSize:连接池在同一时刻内所提供最大活动连接数。
  • minPoolSize:连接池在同一时刻内所提供最小活动连接数。
  • maxIdleTime:最大空闲时间,maxIdleTime 秒内未使用则连接被丢弃。若为0则永不丢弃。
  • maxWait:当发生异常时数据库等待最大毫秒数(当没有可用连接时)。
  • initialPoolSize:初始化连接池大小。

Oracle 数据库迁移配置

config.properties 配置文件中提供了 Oracle 数据库作为目标数据库的配置范例,如果您希望将 Oracle 数据库作为迁移的源数据库,只需将 Oracle 数据库配置变量的前缀名修改为 "source" 即可。

配置示例如下:

target.dbType=ORACLE

target.username=supermap

target.password=supermap

target.jdbcUrl=jdbc:oracle:thin:@127.0.0.1:1521:orcl

target.maxPoolSize=30

target.minPoolSize=5

target.maxIdleTime=3000

target.maxWait=300000

target.initialPoolSize=1

  • dbType:数据库类型,字符需要大写。
  • username:用户名。填写已授予数据库权限的用户的用户名。
  • password:密码。填写已授予数据库权限的用户的密码。
  • jdbcUrl:连接至驱动的 url,如果您的 SuperMap iPortal 和 Oracle 在同一台机器中,IP 就为 localhost,如果不在同一台机器上,此处的 IP 应该写 Oracle 所在机器的 IP 地址。Oracle 的默认端口为:1521,您可以根据您安装的 Oracle 的实际情况来配置。orcl 为数据库实例名,只需与您创建的数据库实例名称一致即可。
  • maxPoolSize:连接池在同一时刻内所提供最大活动连接数。
  • minPoolSize:连接池在同一时刻内所提供最小活动连接数。
  • maxIdleTime:最大空闲时间,maxIdleTime 秒内未使用则连接被丢弃。若为0则永不丢弃。
  • maxWait:当发生异常时数据库等待最大毫秒数(当没有可用连接时)。
  • initialPoolSize:初始化连接池大小。

注意:如果在 Oracle 数据库迁移过程中报错“缺少 Oracle 驱动包”,您需要将 Oracle 的 JDBC 驱动包添加到 iPortal 中,具体请参见: 添加_JDBC_驱动包

PostgreSQL 数据库迁移配置

config.properties 配置文件中提供了 PostgreSQL 数据库作为目标数据库的配置范例,如果您希望将 PostgreSQL 数据库作为迁移的源数据库,只需将 PostgreSQL 数据库配置变量的前缀名修改为 "source" 即可。

配置示例如下:

target.dbType=POSTGRESQL

target.username=supermap

target.password=supermap

target.jdbcUrl=jdbc:postgresql://127.0.0.1:5432/iportal?useUnicode=true&characterEncoding=UTF-8

target.maxPoolSize=30

target.minPoolSize=5

target.maxIdleTime=3000

target.maxWait=300000

target.initialPoolSize=1

  • dbType:数据库类型,字符需要大写。
  • username:用户名。根据您实际使用的 PostgreSQL 进行配置。
  • password:密码。根据您实际使用的 PostgreSQL 进行配置。
  • jdbcUrl:连接至驱动的 url,如果您的 SuperMap iPortal 和 PostgreSQL 在同一台机器中,IP 就为 localhost,如果不在同一台机器上,此处的 IP 应该写 PostgreSQL 所在机器的 IP 地址。PostgreSQL 的默认端口为:5432,您可以根据您安装的 PostgreSQL 的实际情况来配置。iportal 为数据库名,只需与您创建的数据库名称一致即可。
  • maxPoolSize:连接池在同一时刻内所提供最大活动连接数。
  • minPoolSize:连接池在同一时刻内所提供最小活动连接数。
  • maxIdleTime:最大空闲时间,maxIdleTime 秒内未使用则连接被丢弃。若为0则永不丢弃。
  • maxWait:当发生异常时数据库等待最大毫秒数(当没有可用连接时)。
  • initialPoolSize:初始化连接池大小

切换门户数据库

在完成门户数据的迁移后,您还需要修改门户数据的存储配置,将门户数据库切换至迁移后的数据库。门户数据库的配置信息在安装目录(%SuperMap iPortal_HOME%\webapps\iportal\WEB-INF)下的 iportal.xml 配置文件中,默认使用内置的 SQLite 数据库存储门户数据,您也可以根据需要切换至 MySQL 数据库Oracle 数据库 PostgreSQL 数据库

此外,您还需在 iPortal.xml 文件中,将 <searchModuleConfig> 节点下的 <reindexAllResources>节点的值设为 true,重建全局搜索的索引,具体配置如下:

<IportalConfig>

  ...

  <modulesConfig>  

       ...

      <reindexAllResources>true</reindexAllResources>  

  </modulesConfig>  

<IportalConfig>

  • <reindexAllResources>:是否重新索引已有 iPortal 资源。重建索引后,此配置会自动设置为 false。

 

完成以上配置后,重启 iPortal 即可生效。