配置外接数据库

编辑
  • 文档创建者:doreen0813
  • 浏览次数:6013次
  • 编辑次数:5次
  • 最近更新:susie 于 2019-07-03
  • 1、描述

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

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

    注:1. 若想迁移后再改回原来的内置数据库,可参考外接数据库如何回迁内置数据库; 2. 不推荐在迁移过程中刷新页面;

    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,其他版本暂未测试,使用db2数据库时需要先放置驱动,[平台]IBM DB2数据连接

    注:从2018-12-27开始支持DB2。此处若迁移至MySQL数据库,需要数据引擎为InnoDB,详细可参考MySQL数据库迁移失败.

    3、初始化时配置外接数据库

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

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

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

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

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

    输入数据库相应的信息,这里以mysql为例,本地新建finedb数据库,设置默认字符集排序规则为utf_binmysql数据库需要设置排序规则为utf8_bin),如下图:

    注:其他数据库oracle、db2的注意事项查看章节五


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

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


    4、在平台中配置外接数据库

    4.1 系统管理

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

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


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


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

    4.2 智能检测

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

    4.3 系统消息

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



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


    5、注意事项

    5.1 迁移到mysql时,设置字符集校验规则

    平台外接的数据库,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为例:

    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表,设置下


    5.2 迁移到oracle的注意事项

    对于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数据库时要求使用的表空间最好是空的。


    迁移到oracle、sqlserver、db2的时候,会有一个模式的选项。

    模式是一系列逻辑数据结构或者对象的集合。一个数据库用户(普通)拥有一个模式,模式的名字和数据库用户的名字相同。每个用户有一个单独的模式,用户创建的对象放在自己的模式中,这个对象叫做模式对象。

    5.3 迁移至DB2的注意事项 

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

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

    select TBSPACE, OWNER, PAGESIZE from syscat.tablespaces

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

    CREATE DB TESTDB PAGESIZE 8192

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

    CREATE USER TEMPORARY TABLESPACE usr_tbsp MANAGED BY DATABASE USING (FILE 'D:\tblspaces\user_tbsp' 5000 );

    4)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

    5.4 迁移至sqlserver的注意事项

    迁移到sqlserver的时候,需要将数据库的排序规则修改为大小写敏感,若不修改,可能会导致在FineBI中添加sql数据集报错。

    SQLServer数据库默认排序规则为Chinese_PRC_CI_AS,字符集不区分大小写字符。需要在数据库中点击右键>属性>选项>排序规则,将其修改为Chinese_PRC_CS_AS,大小写敏感。

    5.5 迁移报错 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_bin;   导入成功。

    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



    附件列表


    主题: 管理系统
    标签: 暂无标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]