目录:
1. 概述编辑
1.1 功能介绍
hsql 是 FineBI 内置的数据库,但由于 hsql 不能多线程访问、数据量大后不稳定等原因,导致碰到集群或者数据量比较大时,必须要迁移才能保证系统的稳定性。通过配置外接数据库,可将内置的系统配置等数据迁移至外接的数据库,保证系统使用的性能。
配置外接数据库有两种方式:
1)在安装完 FineBI 产品后,进入初始化配置界面会提供配置外接数据库入口,在开始使用产品之前即将数据库外迁;
2)若使用产品前未配置,使用的是内置数据库,则管理员在决策系统的管理系统中也可以进行迁移操作;
若已迁移至外接数据库,想再改回原来的内置数据库,可参考文档:外接数据库如何回迁内置数据库
1.2 支持的数据库
数据迁移目前只支持 Mysql、Oracle、SqlServer、DB2 四种数据库类型,具体支持版本如下:
数据库类型 | 支持数据库版本 |
---|---|
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,其他版本暂未测试 |
1.3 硬件配置估算
用户数量 | 权限复杂度 | 推荐大小( 具体情况需考虑其他配置复杂度及访问量 ) |
---|---|---|
1~100 | 简单 | 25M + 模板数量 * 630 k |
中等 | 50M + 模板数量 * 630 k | |
100~2000 | 简单 | 40M + 模板数量 * 630 k |
中等 | 85M + 模板数量 * 630 k | |
复杂 | 150M + 模板数量 * 630 k | |
2000~30000 | 简单 | 130M + 模板数量 * 630 k |
中等 | 250M + 模板数量 * 630 k | |
复杂 | 500M + 模板数量 * 630 k |
2. 配置外接 MySQL 数据库编辑
2.1 配置步骤
1)首次访问决策平台时,进入初始化设置中的数据库选择阶段,选择配置数据库,如下图所示:
2)进入到配置界面,如下图所示:
3)在输入数据库相应信息之前,需要登录外接数据库,并在其中新建finedb数据库,设置默认字符集排序规则为 utf_bin(mysql数据库需要设置排序规则为utf8_bin),如下图:
finedb创建完成以后,可以在第二步的配置界面输入外接数据库相应信息了,包括选择数据库类型为mysql,数据库名称为第三步创建的finedb,主机为外接数据库的ip(本地直接localhost),端口为外接数据库端口(默认为3306),驱动选择默认的com.mysql.jdbc.Driver,用户名和密码填写外接数据库对应信息;配置填写完成后,下方的数据库连接URL即自动生成,无需更改,如下图:
点击启用新数据库,连接并导入数据,如下图:
注:不推荐在迁移过程中刷新页面。
成功启用新数据库后,直接点击登录按钮,跳转到登录页面,如下:
2.2 注意事项
配置外接的数据库时,mysql需要设置字符集排序规则(大小写敏感),MySQL中存在多种格式的utf8编码的排序规则,其中最常见的两种如下:
字符集排序规则 | 含义 | 示例 |
---|---|---|
utf8_bin | 将字符串中的每一个字符用二进制数据存储,区分大小写 | Alex和alex被认为是两个不同的值 |
utf8_general_ci | ci为case insensitive的缩写,即大小写不敏感,为utf8默认编码 | Alex和alex被认为是相同的值 |
推荐在迁移之前在mysql中新建数据库时,就设置好utf8_bin,如下图:
但是如果一开始数据库没有设置utf8_bin已经迁移过去了之后,那么数据库中两张表fine_conf_entity、 fine_conf_classname需要修改为utf8_bin,下面以fine_conf_entity为例:
查询当前的字符集排序规则:
show full columns from fine_conf_entity
设置字符集排序规则为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;
查看是否修改成功:
show full columns from fine_conf_entity
上面1)2)3)相同的步骤将fine_conf_entity替换为fine_conf_classname表,设置下:
注:此处在迁移至MySQL数据库时,需要数据引擎为InnoDB,详细可参考MySQL数据库迁移失败。
3、配置外接Oracle数据库编辑
3.1 配置步骤
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;
2)新建数据库
在Oracle中新建用于存储迁移数据的finedb数据库。此处,若不新建的话,要求使用的表空间最好是空的,且在后续外接数据库配置时的数据库名称需要填入对应迁入存储的数据库名称。
3)模式选择
按照3.1章节进入外接数据库配置界面,选择Oracle后,会有一个模式的选择,模式的名字和数据库用户的名字相同(Oracle 的用户名和模式推荐大写)。
注:此处模式是一系列逻辑数据结构或者对象的集合。一个数据库用户(普通)拥有一个模式,模式的名字和数据库用户的名字相同。每个用户有一个单独的模式,用户创建的对象放在自己的模式中,这个对象叫做模式对象。
其余与3.1章节步骤基本一致。
3.2 注意事项
当 Oracle 集群的时候,我们需要使用 jdbc:oracle:thin:@//<host>:<port>/<service_name> 格式,注意是用/而不是 :拼写 URL,如下图所示:
4、配置外接SqlServer数据库编辑
4.1 连接步骤
SqlServer的外接配置数据库方法与Mysql基本一致,按照3.1章节步骤操作即可,但在选择 SQL Server 数据库后,会有一个模式(schema)的选项。默认选择 dbo 即可。
也可以用SELECT * FROM sys.database_principals查找一下已有的模式,或者使用 Navicat 连接查看各数据库的模式较直观。
4.2 注意事项
1)SQL Server 数据库的排序规则需要选择 Chinese_PRC_CS_AS(区分大小写 )
CS 区分大小写,
2019-09后的 5.1 版本选择 Chinese_PRC_CI_AS。
5、配置外接DB2数据库编辑
5.1 配置步骤
DB2的外接配置数据库方法与Mysql基本一致,按照3.1章节步骤操作即可,但在选择 DB2 数据库后,会有一个模式选择,模式一般和用户名一样。
注:DB2 迁移的时候用户名是高权限的,会有和用户名同名的模式,也可以另外新建模式。
5.2 注意事项
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、在管理系统中配置外接数据库编辑
6.1 系统管理
根据上面的步骤,完成了外接数据库配置,则进入平台系统,选择管理系统>系统管理-常规,可看到外接数据库为“已配置”状态,如下图:
注:若未在初始化时配置外接数据库,则此处显示“待配置”状态,点击可进行配置。
点击“已配置”按钮,查看连接配置详细信息,也可以修改配置,再启用新数据库,如下:
若数据库已配置完成,修改并启用新数据库时提示:“该数据库已存在平台数据,导入数据前将清空原有平台数据,确认连接该数据库”,如下:
6.2 智能检测
若未配置外接数据库进行迁移,在管理系统>智能检测-服务器配置检测中,会有相应的问题建议,点击“外接数据库配置”进行设置,如下:
6.3 系统消息
若未配置外接数据库进行迁移,在正式注册后,给管理员发送系统消息,提醒其迁移,如下图:
查看系统消息详情,点击“处理”,即可进入到外接数据库配置,如下:
7、配置失败报错编辑
案例一:配置外接数据库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_bin; 导入成功。
案例二:配置外接数据库oracle报错oracle could not execute statement
解决方案:
模式填thin就会报错,改成用户名。