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

目录:

1. 版本编辑

报表服务器版本
JAR 包
10.0
2019-05-20

2. 描述编辑

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

而迁移是建立在已有旧数据的基础上,旧数据的迁移过程存在不可预知的问题,因此客户可自行选择迁移数据或直接启用新数据库。

注:JAR 包版本低于 2019-05-20 时,用户配置外接数据库时只能迁移数据,不可直接启用新数据库。

注:请勿在迁移过程中刷新页面

3. 支持的数据库编辑

数据迁移支持的数据库类型及版本如下:

 JAR 包
数据库类型  支持数据库版本
不限
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
2018-12-27DB2

  9.7、8.2、11.1,其他版本暂未测试

  使用db2数据库时需要先放置驱动,[平台] IBM DB2数据连接

2019-05-20RDS MySQL  -

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

4.1 外接数据库设置

1)首次访问 数据决策系统 时,首先进入初始化设置,「账号设置」完毕后,进入「数据库设置」,如下图所示:

222

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

2)账号设置完成后,进入「数据库设置」,分为:内置数据库和外接数据库,这里选择「配置外接数据库」,如下图所示:

222

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

3)进入到配置界面,输入数据库相应的信息,如下图所示:

1.jpg

注:MySQL 数据库需要设置默认字符集为 utf8,默认排序规则为 utf8_bin,如下图所示:

222

注:其他数据库的注意事项请查看 本文第6节

4.2 外接数据库连接及导入

1)点击「启用新数据库」按钮,系统将连接外接数据库。连接成功,提示「连接成功,正在导入数据」;连接失败,请查看「详细信息」并修改重新连接。

2)初始化时配置外接数据库,数据默认迁移。

如外接数据库已有平台数据,系统跳出提示弹窗,点击确认将清空平台原有数据,然后开始导入数据;如外接数据库无平台数据,则直接开始导入。

如下图所示:

321.jpg

3)成功启用新数据库后,直接点击“登录”按钮,跳转到登录页面,外接数据库配置完成。如下图所示:

222

注:若想迁移后再改回原来的内置数据库,只需要将db.properties 文件删除,然后重启工程即可。

       文件路径:%FR_HOME%\webapps\webroot\WEB-INF\config\db.properties

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

5.1 系统管理

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

图片.png

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

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

3.jpg

注:若未在初始化时配置外接数据库,则上图不存在勾选项「迁移数据至要启用的数据库」,默认迁移。

5.2 外接数据库配置

在平台中配置外接数据库,可以选择是否「迁移数据至要启用的数据库」,默认迁移。如下图所示:

图片.png

1)勾选「迁移数据至要启用的数据库」:进行二次迁移,配置方式与初始化配置逻辑相同,不生成历史数据备份文件。

具体配置逻辑如下图所示:

111.jpg

2)不勾选「迁移数据至要启用的数据库」:

  • 若外接数据库不为空,直接启用新数据库,自动备份启用前数据库的配置信息。

  • 若外接数据库为空,提示迁移数据并启用数据库。

具体配置逻辑如下图所示:

2019-05-27_19-58-31.jpg

注:只有不勾选数据迁移,直接启用新库时,才会生成db.properties.bak;如果迁移数据,则不生成db.properties.bak

注:数据库配置成功后无需重启。

5.3 还原数据库

配置外接数据库后,原数据库文件db.properties 将备份到 %FR_HOME%\webapps\webroot\WEB-INF\config\db.properties.bak,若该文件已存在,则覆盖。

如在使用外置数据库时发生意外或其他情况,可通过备份文件恢复原数据库。如下图所示:

4.jpg

5.4 智能检测

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

222

5.5 系统消息

若未配置外接数据库,在正式注册后,管理员将收到系统消息,提醒配置。如下图所示:

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

222

6. 注意事项编辑

6.1 外接 MySQL 数据库

平台外接 MySQL 数据库时,需要设置字符集排序规则(大小写敏感)。

MySQL 中存在多种格式的 utf8 编码的排序规则,其中最常见的两种如下表所示:

字符集排序规则  含义示例  
utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写Alex和alex被认为是两个不同的值  
utf8_general_ci ci 为 case insensitive 的缩写,即大小写不敏感,为 utf8 默认编码Alex和alex被认为是相同的值

推荐在配置外接 MySQL 数据库前,先设置数据库默认字符集为 utf8 ,默认排序规则为 utf8_bin。如下图所示:

222

如果一开始数据库没有设置 utf8_bin ,但已经迁移过去了,那么有两张表 fine_conf_entity、 fine_conf_classname 需要修改为 utf8_bin,下面以 fine_conf_entity 为例:

1)查询当前的字符集排序规则 

show full columns from fine_conf_entity

2)设置字符集排序规则为 utf8_bin 

  • 设置列的默认校验规则 

ALTER TABLE fine_conf_entity MODIFY id VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin;
  • 设置表的校验规则 

ALTER TABLE fine_conf_entity DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

3)查看是否修改成功 

show full columns from fine_conf_entity

4)用上面1)2)3)相同的步骤将 fine_conf_entity 替换为 fine_conf_classname 表,设置如下图所示:

222

6.2 外接 Oracle 数据库

1)新建账户

对于 Oracle 数据库,配置前最好单独建一个账户(新建一个表空间,并指定为该用户默认表空间)。
例如用 system 用户登录 Oracle,添加用户 data_migration:

create user data_migration identified by data_migration;

并对该用户进行赋权限:

grant connect,resource to data_migration; 
grant create any sequence to data_migration;
grant create any table to data_migration;
grant delete any table to data_migration;
grant insert any table to data_migration;
grant select any table to data_migration;
grant unlimited tablespace to data_migration;
grant execute any procedure to data_migration;
grant update any table to data_migration;
grant create any view to data_migration;
grant create any Trigger to data_migration;


注:在迁移 FineDB 数据库时要求使用的表空间最好是空的。

2)模式选择

配置到 Oracle 的时候,会有一个模式的选项。模式的名字和数据库用户的名字相同(Oracle 的用户名和模式推荐大写)
222

当 Oracle 集群的时候,我们需要使用 jdbc:oracle:thin:@//<host>:<port>/<service_name> 格式,注意是/而不是 :拼写 URL,如下图所示:

222

6.3 外接 SQL Server 数据库

6.3.1 模式设置

1)2018-12-27 之后的 JAR:

外接 SQL Server 数据库的时候,会有一个模式(schema)的选项。默认选择 dbo 即可

也可以用SELECT * FROM sys.database_principals查找一下已有的模式,或者使用 Navicat 连接查看各数据库的模式较直观。

2)2018-12-27 之前的 JAR:

外接 SQL Server 数据库的时候,没有模式(schema)的选项。当升级 2018-12-27 之后的 JAR 时,需要手动添加模式(schema)。

添加方法:修改%FR_HOME%\webapps\webroot\WEB-INF\config\db.properties文件,手动添加模式(schema)。

若为dbo模式,hibernate.default_schema=dbo,如下图所示:

222

6.3.2 排序规则

SQL Server 数据库的排序规则需要选择 Chinese_PRC_CS_AS(区分大小写 )

CS 区分大小写,默认排序方式 CI 不分区大小写,导入时会产生问题。

6.4 外接 DB2 数据库

外接到 DB2 数据库的时候,会有一个模式的选项。模式一般和用户名一样。

注:DB2 迁移的时候用户名是高权限的,会有和用户名同名的模式,也可以另外新建模式。
222

DB2 日志空间配置 

如果 FineDB 数据量过大,而日志空间又不足,很可能在配置过程中出错(SQLCODE=-964, SQLSTATE=57011),所以需要确保日志空间足够

get db cfg for DATABASENAME

查看日志配置, 参考配置如下 

  • 修改日志文件大小:

db2 update db cfg for <DATABASENAME> using LOGFILSIZ 8192
  • 修改主日志文件个数:

db2 update db cfg for <DATABASENAME> using LOGPRIMARY 50
  • 修改辅助日志文件个数:

db2 update db cfg for <DATABASENAME> using LOGSECOND 20

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

6.5 外接 RDS MySQL 数据库

和 MySQL 数据库相同,RDS MySQL 数据库也需要设置字符集排序规则(大小写敏感),设置方法和 MySQL 相同,详细参见本文 6.1 节。

其他配置内容和 MySQL 相同,如下图所示:

222

6.6 配置失败报错

6.6.1 案例一

配置外接数据库 MySQL 报错 could not execute batch

1)日志:

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

2)分析:

检查确保是有权限的

Incorrect string value: '\xE6\xA8\xA1\xE6\x9D\xBF...' for column 'id' at row 1 应当是数据库编码的原因。

3)解决方案:

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

发现没有加约束条件,将语句改为:create database finedb DEFAULT CHARSET utf8 COLLATE utf8_bin

导入成功。

6.6.2 案例二

配置外接数据库 Oracle 报错 Oracle could not execute batch

1)出错日志:

Oracle could not execute batch

2)解决方案:

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