历史版本14 :配置外接数据库 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 描述编辑

hsql是报表内置的数据库,但由于hsql不能多线程访问、数据量大后不稳定等原因,导致碰到集群或者数据量比较大时,必须要迁移才能保证系统的稳定性。

而迁移是建立在已有旧数据的基础上,旧数据的迁移过程又存在不可预知的问题,因此在开始使用系统时就优先让用户选择外置数据库进行迁移。

注:若想迁移后再改回原来的内置数据库,只需要把WEB-INF/config文件夹下的db文件删除,然后重启工程即可。

2. 支持数据库版本编辑

数据迁移目前只支持Mysql、Oracle和SqlServer三种数据库类型,具体支持版本如下:

  数据库类型  支持数据库版本
  Mysql  5.1.73、5.5.31、5.5.46、5.5.56、5.6.22、5.6.31、5.7.16
  SqlServer  2000、2005、2008、2012、2014、2016
  Oracle  10g、11g、12c、9i
 DB2 9.7、8.2、11.1,其他版本暂未测试

注:从2018-12-27开始支持DB2

3. 初始化时配置外接数据库编辑

首次访问决策平台时,首先进入初始化设置,除了第一步的账号设置外,多出第二步数据库设置的选项,如下所示:

注:在已完成外接数据库设置的情况下进行管理员重置时,只需要进行账号设置。

222

账号设置完成后,进入数据库配置,分为:内置数据库和外接数据库,这里选择“配置外接数据库”,如下:

注:内置数据库适用于本地试用产品功能,而外接数据库适用于平台的正式使用。

222

进入到配置界面,如下所示:

222

输入数据库相应的信息,这里以mysql为例,本地新建finedb数据库,设置默认字符集为utf_bin,如下图:

注:迁移到mysql数据库时,需要将字符集设置为utf_bin

注:目前只支持mysql、oracle、sqlserver、db2。

222

点击“启用新数据库”按钮,连接并导入数据,如下图:

222

成功启用新数据库后,直接点击“登录”按钮,跳转到登录页面,如下:

222

4. 在平台中配置外接数据库编辑

4.1 系统管理

根据上面的步骤,完成了外接数据库配置,则进入平台系统,选择管理系统>系统管理-常规,可看到外接数据库为“已配置”状态,如下图:

注:若未在初始化时配置外接数据库,则此处显示“待配置”状态,点击可进行配置。

222

点击“已配置”按钮,查看连接配置详细信息,也可以修改配置,再启用新数据库,如下:

222

若数据库已配置完成,修改并启用新数据库时提示:“该数据库已存在平台数据,导入数据前将清空原有平台数据,确认连接该数据库”,如下:

222

4.2 智能检测

若未配置外接数据库进行迁移,在管理系统>智能检测-服务器配置检测中,会有相应的问题建议,点击“外接数据库配置”进行设置,如下:

222

4.3 系统消息

若未配置外接数据库进行迁移,在正式注册后,给管理员发送系统消息,提醒其迁移,如下图:

222

查看系统消息详情,点击“处理”,即可进入到外接数据库配置,如下:

222

5. 注意事项编辑

5.1 内置数据库迁移至DB2的注意事项 

因为迁移定时任务需要用到临时表,所以需要确保数据库有临时表空间,同时由于DB2的PAGESIZE大小限定了可放到表空间的表的行长度和列数。所以在迁移之前需要确保数据库PAGESIZE足够大,基于以上原因,需要一些数据库操作来保证迁移顺利完成。

查询当前database的表空间极其PAGESIZE,9.7以下版本PAGESIZE需要大于等于8K(8192),其余版本默认4K(4096)即可

select TBSPACE, OWNER, PAGESIZE from syscat.tablespaces

如果没有符合条件的数据库,需要创建指定PAGESIZE大小的数据库

CREATE DB TESTDB PAGESIZE 8192

创建临时表空间(自定义路径)

CREATE USER TEMPORARY TABLESPACE usr_tbsp

MANAGED BY DATABASE

USING (FILE 'D:\tblspaces\user_tbsp' 5000 );

参考文档: https://www-01.ibm.com/support/docview.wss?uid=swg21295503

5.2 迁移报错 could not execute batch

1)案例一:配置外接数据库mysql报错

日志:

16:59:48 Thread-45 ERROR [standard] could not execute batch
com.fr.third.org.hibernate.exception.GenericJDBCException: could not execute batch

......

Caused by: java.sql.SQLException: Incorrect string value: '\xE6\xA8\xA1\xE6\x9D\xBF...' for column 'id' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2487)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079)
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1756)
... 27 more

分析过程:首先检查是有权限的,查看百度 Incorrect string value: '\xE6\xA8\xA1\xE6\x9D\xBF...' for column 'id' at row 1 可能是数据库编码的原因。

解决方案:

查看客户建finedb数据库的语句:

 create database finedb,发现没有加约束条件,将语句改为:
 create database finedb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;   导入成功。

2)案例二:配置外接数据库oracle报错oracle could not execute statement

解决方案:

模式填thin就会报错,改成用户名。

3)案例三:配置外接数据库mysql报错

报错 ERROR SqlExceptionHelper: Table 'shaxiang.ht_fine_output_platform_msg' doesn't exist ,ht_fine_output_platform_msg表不存在,但是我们导入完成的表并没有ht开头的表。考虑是否可能是临时表之类的,看到下一个报错

WARN Helper: unable to drop temporary id table after use [Statement violates GTID consistency: CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can only be executed outside transactional context.  
These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions.]

使用后无法删除临时id表[语句违反GTID一致性:创建临时表和删除临时表只能在事务上下文之外执行。

在函数或触发器中也不允许使用这些语句,因为函数和触发器也被认为是多语句事务。

GTID开启后限制了CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE这些系统认为不安全的事务

解决方案:

去mysql配置文件关闭这个GTID配置参数 

enforce-gtid-consistency=OFF