# 海量数据库项目化部署手册
北京致远互联软件股份有限公司
2024年12月修订
# 前言
海量数据库标准产品未支持,目前可项目化支持适配,适配方案不保证所有功能绝对可用,并且OA版本后续升级的成本比其他标准支持的数据库要高。
项目化支持,意味着可能存在项目化适配成本,可能存在缺陷,并且后续产生的BUG可能需要额外项目化成本解决
适配版本:8.2SP1及更高版本,暂不涉及客开代码适配
数据库基础信息:
数据库url格式=jdbc:postgresql://127.0.0.1:5432/zyoa
JDBC驱动名driverClassName=org.postgresql.Driver
JDBC连接获取数据库名DatabaseMetaData.getDatabaseProductName()=PostgreSQL
驱动jar:使用海量数据库安装程序下的JDBC驱动jar
根据海量数据库特性,产品的初始化SQL和代码逻辑会采用PostgreSQL标准。
总部项目化支持成本预估:
- 新客户:理论不涉及客开,总部项目环境运维支持成本2人天,项目实施成本自行预估
- 老客户转海量数据库:理论不涉及客开,总部项目环境运维支持成本4人天(主要成本是转库后字段异常的问题分析),项目实施成本自行预估(主要是验证及问题协调解决)
- 未来OA升级:客开+项目运维成本7人天(标准工具不认识海量库,涉及升级程序修改、兼容、测试等),项目实施成本自行预估(主要是验证及问题协调解决)
# 海量数据库注意事项
致远OA对数据库的要求:大小写不敏感(如存在此配置,需勾选)、UTF8字符集、兼容PG标准、单机或主备(不支持读写分离)。
必须联系海量数据库厂商忽略如下关键字:body、sample、image,这三个关键字在致远产品中使用着。
海量数据库一个帐号支持多模式,必须将OA表数据所在的模式设置在最前面(如下图所示假设dbo是OA相关的表数据,必须设置search_path在第一个):
因为OA程序会将海量当作Postgresql运行,部署时请选择PG标准。
如果是致远老客户,涉及升级OA,一般是先用非信创的SeeyonInstall升级到OA目标版本,再做转库。转库的字段映射请让海量厂商参考致远的字段对照表去做,避免转库字段错误。
SQLServer转海量常见错误: image字段转海量之后还是image导致异常,要求映射成bytea类型!
以下是标准产品不同数据类型、字段的映射关系,可以提供给第三方数据库厂商参考,如厂商不需要,可忽略本步操作:
MySQL | ORACLE | SQLSERVER | POSTGRESQL | JAVA POJO类型 | 场景 |
---|---|---|---|---|---|
BIGINT | INTEGER | BIGINT | INT8 | java.lang.Long | 主键 |
DATE | DATE | DATETIME | TIMESTAMP(0) | java.util.Date | 日期 |
DATETIME | DATE | DATETIME | TIMESTAMP(0) | java.util.Date | 日期时间 |
DECIMAL | NUMBER | NUMERIC | NUMERIC | java.lang.Double | 小数 |
INT | INTEGER | INT | INT4 | java.lang.Integer | 整数 |
LONGBLOB | BLOB | IMAGE | BYTEA | java.lang.String | 二进制对象 |
LONGTEXT | CLOB | NTEXT | TEXT | java.lang.String | 大文本 |
SMALLINT | NUMBER(4) | SMALLINT | INT2 | java.lang.Integer | 数字枚举 |
VARCHAR | VARCHAR2 | NVARCHAR | VARCHAR | java.lang.String | 文本 |
# 部署示例
OA版本:A8-N V9.0SP1
金蝶V10
海量数据库版本:2.2.15.PSU3
通过select version();
语句查询此版本采用PostgreSQL 9.2.4内核:
关联支持项目:JSFW-2024-00229、PMP-JFZC-2024-4555、JSFW-2024-00669、JSFW-2024-02459
# 部署流程
1、中间件(东方通、金蝶、宝兰德)提前准备,海量数据库提前准备(如果是新客户就准备一个空库,如果是老客户就做好转库)
2、参考信创环境部署手册,准备对应的XinChuang.zip信创部署包,使用信创部署工具将OA相关基础配置写入中间件中,数据库选择“不初始化数据库”,初始化结束后将-N的加密授权注册更新并放置到OA程序base/license目录下。
再次提醒:标准支持的中间件用信创部署工具去部署,减少部署复杂度,降低部署失败概率!!!
3、如果是新客户,由海量厂商安装好数据库并新建一个空库后,执行数据库初始化操作,继续使用上一步的XinChuang.zip部署包。
初始化数据库脚本在XinChuang文件夹下的deploytools\file\sql\init目录中找到对应版本的PostgreSQL(A8N-1是企业版,A8N-2是集团版),如企业版命名为:A8N-1_ALL_IN_ONE_POSTGRESQL.SQL。
将SQL拷贝到海量数据库对应空库下,执行脚本初始化即可。
4、配置数据库JDBC相关信息:
到信创中间件的JVM配置中增加自定义参数:-Djdbcproxydriver.driverclass=org.postgresql.Driver
- 金蝶V10到管理控制台-配置管理-server-config-JVM配置-JVM选项中添加或修改此参数
- 东方通到管理控制台界面-启动参数配置-服务器参数中添加或修改此参数,如果在服务器端改jvm,路径是/TongWeb7.0/bin/external.vmoptions
- 宝兰德到管理控制台-实例管理菜单-点击实例名称,进入配置页面,点击JVM配置
到信创中间件管理控制台,新建JDBC配置:
- 新建JNDI名称必须是
jdbc/ctpDataSource
- 数据库驱动类名
com.seeyon.ctp.monitor.perf.jdbcmonitor.proxyobj.JMProxyDriver
- 数据库连接URL地址以瀚高厂商提供为准,一般格式为
jdbc:postgresql://127.0.xx.xx(数据库ip):5432(端口)/test_oa(数据库名)
海量驱动Jar(格式如VastbaseG100_jdbc_2.9p_2023120616.jar
)要将其放置到中间件的lib下,不要手动选择驱动jar位置,放置后需要重启一次中间件才生效:
- 金蝶V10驱动jar放置到TongWeb/lib目录下
- 东方通驱动jar放置到aas/lib目录下
- 宝兰德多实例版本驱动jar放置到宝兰德实例lib下
5、最后是参考信创环境部署手册,去部署应用/ROOT、/static、/seeyon、/sportal,部署完成后正常启动测试即可
# 常见问题
# 问题一:body、sample关键字失败
数据库的脚本共1073张表,成功导入1069张,还有4张由于存在关键词失败
1.CTP_TEMPLATE body关键字
2.CTP_TEMPLATE_HISTORY body关键字
3.DOC_FORUMS body关键字
4.CTP_FORMULAS sample关键词
解决方案:数据库方把对应字段从关键字中去掉处理
# 问题二:image关键导致登录报错:null
解决方案:数据库方把image关键字做屏蔽处理
# 问题三:数据库默认配置大小写敏感
据数据库厂商反馈新版本增加了大小写敏感相关设置,当大小写敏感时,OA启动可能报错,找不到表
大小写敏感设置:
报错截图:
# 问题四:保存表单提示saveTableIndex Error: ERROR: relation "idx_formmain_5041_sort" already exists
问题原因是:CAP4在保存表单时会判断当前库、表是否存在索引,如果不存在就会创建。当前程序判断出索引不存在,就去创建,但是创建时数据库由告知存在,所以异常了。
问题根源是:程序通过JDBC42标准,通过meatdata获取表索引时,需要传入默认的schema模式名,从海量数据库获取的schema是public,但是OA数据存储在schema名为dbo中,所以找不到索引。
解决方法是:数据库厂商修改,将dbo设置为首位,OA程序就能获取到了。
# 问题五:转海量数据库后启动报错:ERROR relation "org_unit" does not exist on node1
此问题是海量数据库问题,但是海量检查了很久都没找到原因。后来我们使用了另一个环境的数据(通过海量工具)转库就正常,最后海量针对客户环境重新转库终于解决问题。怀疑是此前转库时遇到了未知异常,未打印出来,所以忽略了错误。