1. 概述编辑
1.1 应用场景
报表内置的数据库为 HSQL 数据库,HSQL 数据库不能多线程访问,集群环境、数据量较大可能会导致 HSQL 数据库不稳定的情况,适用于本地试用产品功能,而外接数据库适用于平台的正式使用。
1.2 功能简介
可通过配置外接数据库,可将内置的系统配置等数据迁移至外接的数据库,保证系统使用的性能。
2. 数据库配置编辑
2.1 支持的数据库
数据迁移目前只支持 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,其他版本暂未测试 |
2.2 硬件配置估算
用户数量 | 权限复杂度 | 推荐配置数据库空间大小(具体情况需考虑其他配置复杂度及访问量) |
---|---|---|
1~100 | 简单 | 25M + 仪表板数量 * 630 k |
100~2000 | 中等 | 50M + 仪表板数量 * 630 k |
简单 | 40M + 仪表板数量 * 630 k | |
中等 | 85M + 仪表板数量 * 630 k | |
复杂 | 150M + 仪表板数量 * 630 k | |
2000~30000 | 简单 | 130M + 仪表板数量 * 630 k |
中等 | 250M + 仪表板数量 * 630 k | |
复杂 | 500M + 仪表板数量 * 630 k |
3. 外接数据库配置步骤编辑
用户可在「初始化时」配置外接数据库或在「平台中」配置外接数据库。这两种配置方式除了入口不同,具体配置要求及步骤相同。
3.1 方式一:初始化时配置外接数据库
3.1.1 进入初始化界面
用户可在第一次进入平台时配置外接数据库,如下图所示:
3.1.2 准备数据要迁移到的数据库
准备将平台数据要迁移到的数据库,建议用户在本地数据库中新建一个空的数据库(数据库大小请参考本文 2.2 节)。后续外接数据库配置时的数据库名称需要填入对应迁入存储的数据库名称。
注:不同的 BI 工程,它们的外接数据库不能是同一数据库,否则数据可能会出现错乱。
3.1.3 配置外接数据库
点击「配置数据库」后,进入到外接数据库配置界面,数据库类型包含:MySQL、SQL Server、Oracle、DB2 四种,输入实际数据库相应的信息即可。如下图所示:
各设置项说明如下表所示:
设置项 | 说明 |
---|---|
数据库类型 | 包括 MySQL、SQL Server、Oracle、DB2 四种,用户根据实际情况选择 |
驱动 | 会根据所选择的数据库类型自动变化,默认即可 |
数据库名称 |
|
用户名/主机/密码/端口 |
|
模式 | 数据库类型不是 MySQL 时,需要设置「模式」,请根据数据库类型参考本文第四章内容 |
3.1.4 迁移成功
等待一段时间,提示已成功启用新数据库。如下图所示:
注:请勿在迁移过程中刷新页面。
3.2 方式二:平台中配置外接数据库
3.2.1 准备数据要迁移到的数据库
准备将平台数据要迁移到的数据库,建议用户在本地数据库中新建一个空的数据库(数据库大小请参考本文 2.2 节)。后续外接数据库配置时的数据库名称需要填入对应迁入存储的数据库名称。
注:不同的 BI 工程,它们的外接数据库不能是同一数据库,否则数据可能会出现错乱。
3.2.2 进入平台
管理员进入数据决策系统,点击「管理系统>系统管理>常规>待配置」,如下图所示:
注:若平台已配置外接数据库,则显示「已配置」。
3.2.3 配置外接数据库
输入实际数据库相应的信息,配置外接数据库。如下图所示:
各设置项说明如下表所示:
设置项 | 说明 |
---|---|
数据库类型 | 包括 MySQL、SQL Server、Oracle、DB2 四种,用户根据实际情况选择 |
驱动 | 会根据所选择的数据库类型自动变化,默认即可 |
数据库名称 |
|
用户名/主机/密码/端口 |
|
模式 | 数据库类型不是 MySQL 时,需要设置「模式」,请根据数据库类型参考本文第四章内容。 |
3.2.4 配置成功
等待一段时间,会跳出弹窗提示:已成功启用目标数据库,点击「确定」即可。如下图所示:
注1:请勿在迁移过程中刷新页面。
注2:数据库配置成功后无需重启。
3.2.5 效果查看
外接数据库配置成功后,平台界面如下图所示:
「迁移数据至要启用的数据库」按钮说明:
1)该按钮默认勾选。
2)勾选「迁移数据至要启用的数据库」:
进行二次迁移时,配置方式与初始化配置逻辑相同,不生成历史数据备份文件。
二次迁移时,若数据库中已存在平台数据,导入数据前将清空原有平台数据。提示如下图所示:
3)不勾选「迁移数据至要启用的数据库」:
二次迁移时,若外接数据库不为空,直接启用新数据库,迁移成功后,提示如下图所示:
且自动备份启用前数据库的配置信息,如下图所示:
注:只有不勾选数据迁移,直接启用新库时,才会生成db.properties.bak;如果迁移数据,则不生成db.properties.bak
二次迁移时,若外接数据库为空,提示将当前数据迁移到目标数据库。
4. 数据库类型编辑
注:MySQL、SQL Server、Oracle、DB2 四种数据库的用户,需要基本具备的权限:create、delete、alter、update、select;建议最好有最高 root 权限。
4.1 MySQL 数据库
注:RDS MySQL 数据库和正常的 MySQL 数据库使用相同,请参考本节进行配置。
4.1.1 配置步骤
1)新建 MySQL 数据库
准备将平台数据要迁移到的数据库,建议用户在本地数据库中新建一个空的数据库(数据库大小请参考本文 2.2 节)。本次示例准备的 MySQL 数据库是新建的名为 waijie 的数据库。如下图所示:
MySQL 数据库需要注意以下几点:
字符集:
1)平台外接 MySQL 数据库时,需要设置字符集排序规则(大小写敏感)。
2)推荐使用 utf8 – UTF-8 Unicode 编码
3)5.6.3 之前的版本不支持使用 utf8mb4 – UTF-8 Unicode 编码。
5.6.3 及之后版本的 MySQL 数据库,如需使用 utf8mb4 – UTF-8 Unicode 编码,需要开启三个数据库参数
innodb_large_prefix = 1
innodb_file_format = Barracuda
innodb_file_per_table = ON
排序规则:
MySQL 中存在多种格式的 UTF_8 编码的排序规则,其中最常见的两种如下表所示:
字符集排序规则 | 含义 | 示例 |
---|---|---|
utf8_bin | 将字符串中的每一个字符用二进制数据存储,区分大小写 | Alex 和 alex 被认为是两个不同的值 |
utf8_general_ci | ci 为 case insensitive 的缩写,即大小写不敏感,为 utf8 默认编码 | Alex 和 alex 被认为是相同的值 |
推荐在配置外接 MySQL 数据库前,先设置数据库默认字符集为 utf8 ,默认排序规则为 utf8_bin。如下图所示:
2)配置外接数据库
参考本文 3.2 节,进入平台,输入实际的数据库信息,配置外接数据库即可。
4.1.2 注意事项
如果一开始数据库排序规则没有设置 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 表,设置如下图所示:
注:此处在迁移至 MySQL 数据库时,需要数据引擎为 InnoDB ,详细可参考 MySQL数据库迁移失败
4.2 Oracle 数据库
1)新建账户
对于 Oracle 数据库,配置前最好单独建一个账户(新建一个表空间,并指定为该用户默认表空间)。
例如用 system 用户登录 Oracle,添加用户 finedb:
create tablespace finedb datafile '/u01/oraDatafile/finedb01.dbf' size 50M
autoextend on next 64M maxsize unlimited extent management local;
create user finedb identified by fr123 default tablespace finedb
并对该用户进行赋权限:
grant connect,resource to finedb;
grant create sequence to finedb;
grant create table to finedb;
grant unlimited tablespace to finedb;
grant create procedure to finedb;
grant create view to finedb;
grant create Trigger to finedb;
2)新建数据库
在 Oracle 中新建用于存储迁移数据的 FineDB 数据库。此处,若不新建的话,要求使用的表空间最好是空的,且在后续外接数据库配置时的数据库名称需要填入对应迁入存储的数据库名称。
3)配置外接数据库
参考本文 3.2 节,进入平台,输入实际的数据库信息,配置外接数据库即可。
配置到 Oracle 的时候,会有一个模式的选项。模式的名字和数据库用户的名字相同(Oracle 的用户名和模式推荐大写)。
注:此处模式是一系列逻辑数据结构或者对象的集合。一个数据库用户(普通)拥有一个模式,模式的名字和数据库用户的名字相同。每个用户有一个单独的模式,用户创建的对象放在自己的模式中,这个对象叫做模式对象。
数据库连接 URL 支持三种写法:
1)Oracle单机
jdbc:oracle:thin:@<host>:<port>:<SID>
2)Oracle 集群
写法一:jdbc:oracle:thin:@//<host>:<port>/<service_name>
写法二:jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=x.x.x.2)(PORT=1521)))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=xxrac)))
注:5.1.8 版本之后的工程,支持集群写法二。
4.3 SQL Server 数据库
参考本文 3.2 节,进入平台,输入实际的数据库信息,配置外接数据库即可。外接数据库为SQL Server 时,需要注意「模式设置」和「排序规则」,具体介绍如下所示。
4.3.1 模式设置
默认选择 dbo 即可。也可以用SELECT * FROM sys.database_principals查找一下已有的模式,或者使用 Navicat 连接查看各数据库的模式较直观。
4.3.2 排序规则
SQL Server 数据库的排序规则可选择 Chinese_PRC_CS_AS(大小写敏感)或 Chinese_PRC_CI_AS(大小写不敏感),建议使用 Chinese_PRC_CS_AS(区分大小写 )。
选择 Chinese_PRC_CS_AS ,将原封不动的把全部数据迁移过去。
选择 Chinese_PRC_CI_AS ,迁移时如果报 fine_conf_entity 表违反了 PRIMARY KEY 约束之类的字样,通常是工程有脏数据,可联系技术支持使用脏数据工具进行排查或者执行。可执行下面SQL语句查看脏数据:select lower(ID),COUNT(1) FROM FINE_CONF_ENTITY GROUP BY LOWER(ID) HAVING COUNT(1) >1
4.4 DB2 数据库
参考本文 3.2 节,进入平台,输入实际的数据库信息,配置外接数据库即可。外接数据库为 DB2 数据库时,需要注意「模式设置」和「日志空间配置」,具体介绍如下所示。
4.4.1 模式设置
外接到 DB2 数据库的时候,会有一个模式的选项。模式一般和用户名一样。
注:DB2 迁移的时候用户名是高权限的,会有和用户名同名的模式,也可以另外新建模式。
4.4.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