# 海量数据库项目化部署手册

北京致远互联软件股份有限公司

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,这三个关键字在致远产品中使用着。

1733311958807.png

海量数据库一个帐号支持多模式,必须将OA表数据所在的模式设置在最前面(如下图所示假设dbo是OA相关的表数据,必须设置search_path在第一个):

1733312116144.png

因为OA程序会将海量当作Postgresql运行,部署时请选择PG标准。

1732875742137.png

如果是致远老客户,涉及升级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内核:

1733221541081.png

关联支持项目: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配置

1733396451991.png

到信创中间件管理控制台,新建JDBC配置:

  • 新建JNDI名称必须是jdbc/ctpDataSource
  • 数据库驱动类名com.seeyon.ctp.monitor.perf.jdbcmonitor.proxyobj.JMProxyDriver
  • 数据库连接URL地址以瀚高厂商提供为准,一般格式为jdbc:postgresql://127.0.xx.xx(数据库ip):5432(端口)/test_oa(数据库名)

1733396400583.png

海量驱动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

1716774634395.png

1716774645095.png

解决方案:数据库方把image关键字做屏蔽处理

# 问题三:数据库默认配置大小写敏感

据数据库厂商反馈新版本增加了大小写敏感相关设置,当大小写敏感时,OA启动可能报错,找不到表

  • 大小写敏感设置: 1727168913670.jpg

  • 报错截图:

1727169026961.png

# 问题四:保存表单提示saveTableIndex Error: ERROR: relation "idx_formmain_5041_sort" already exists

1733312244816.png

问题原因是:CAP4在保存表单时会判断当前库、表是否存在索引,如果不存在就会创建。当前程序判断出索引不存在,就去创建,但是创建时数据库由告知存在,所以异常了。

问题根源是:程序通过JDBC42标准,通过meatdata获取表索引时,需要传入默认的schema模式名,从海量数据库获取的schema是public,但是OA数据存储在schema名为dbo中,所以找不到索引。

解决方法是:数据库厂商修改,将dbo设置为首位,OA程序就能获取到了。

1733312116144.png

1733313554263.png

# 问题五:转海量数据库后启动报错:ERROR relation "org_unit" does not exist on node1

1733312544683.png

此问题是海量数据库问题,但是海量检查了很久都没找到原因。后来我们使用了另一个环境的数据(通过海量工具)转库就正常,最后海量针对客户环境重新转库终于解决问题。怀疑是此前转库时遇到了未知异常,未打印出来,所以忽略了错误。

创建人:zhengkejie
修改人:het、wangyxyf、shenlq