# 瀚高数据库项目化部署手册

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

2024年11月修订

# 前言

瀚高数据库标准产品未支持,目前可项目化支持适配,适配方案不保证所有功能绝对可用,并且OA版本后续升级的成本比其他标准支持的数据库要高。

项目化支持,意味着可能存在项目化适配成本,可能存在缺陷,并且后续产生的BUG可能需要额外项目化成本解决

适配版本:8.2SP1及更高版本, V9.0版本开始涉及代码客开适配!

瀚高数据库基础信息:

数据库url格式=jdbc:highgo://127.0.9.1:5866/test_oa?currentSchema=seeyonoa
JDBC驱动名driverClassName=com.highgo.jdbc.Driver
JDBC连接获取数据库名DatabaseMetaData.getDatabaseProductName()=PostgreSQL
驱动jar:使用瀚高数据库安装程序下的JDBC驱动jar

瀚高数据库兼容特性选择PostgreSQL

# 瀚高数据库V9安装示例

将瀚高的安装程序hgdb-xxx.bin以及授权文件license.dat上传到Linux系统数据目录,并且给程序可执行权限chmod +x hgdb-xxxx.bin

Linux系统下需要创建一个名为db的用户,并且以db用户登录安装瀚高,瀚高不予许root下进行安装!

# 添加db用户名、设置密码
useradd -m db
passwd db
# 给所有用户开启图形化使用权限(如db采用图形化安装,则需要授权)
xhost +
# 切换到db用户下
su - db

# 找到瀚高程序,通过./hgdb-xxx.bin命令执行安装,默认以图形化形式安装:
./hgdb-xxx.bin

1732455611971.png

随后安装部署可参考瀚高部署手册进行操作,大部分都可以选择默认。

勾选“初始化数据库”,使用默认用户名highgo,自定义密码,兼容性选择默认的PostgreSQL,当前用户权限不足就不要注册数据库服务,监听地址由localhost改成*表示允许外部访问,如生产环境则最大连接数尽量调大到500以上:

1732456102926.png

启动瀚高V9数据库:

# db账号登录
su db
cd /home/db/hgdb
./start_database

停止瀚高V9数据库:

# db账号登录
su db
cd /home/db/hgdb
./stop_database

启动数据库管理工具:

# db账号登录
su db
cd /home/db/hgdb-enterprise-9.0.1/tools/manager
./Manager

1732456529413.png

创建账号和新库:

通过默认的highgo管理员,可以创建一个给OA使用的账号和空库:

-- 创建名为seeyon的用户
create user seeyon with password 'Seeyon1q2w3e';
-- 创建名为v90sp1的数据库
CREATE DATABASE v90sp1 OWNER seeyon;

以上完成后,可以尝试通过seeyon用户名登录,检查v90sp1数据库是否存在。

通过客户端Navicat选择PostgreSQL也能连接到数据,如果是新客户,可以通过数据库可视化工具导入对应OA版本的PG初始化数据脚本,以A8-N集团版客户为例,我们需要提前下载致远商务公布的安装程序XinChuang.zip安装包,解压取安装包目录下的SQL即可2.V9.0SP1_XinChuang\deploytools\file\sql\init\A8N-2\PostgreSQL\A8N-2_ALL_IN_ONE_POSTGRESQL.SQL

初始化SQL中预制了账号密码为init-admin/123456的用户,用于启动OA后的初始化操作

1732459234553.png

如果是老客户,则提供客户原产品的数据库,交给瀚高技术进行转库操作,我们只需要获得转库后的连接、账号密码即可。

# 升级转瀚高数据库提醒

如果是致远老客户,涉及升级OA,一般是先用非信创的SeeyonInstall升级到OA目标版本,再做转库。转库的字段映射请让瀚高厂商参考致远的字段对照表去做,避免转库字段错误。

瀚高数据库需要选择兼容PostgreSQL模式!瀚高数据库需要选择兼容PostgreSQL模式!瀚高数据库需要选择兼容PostgreSQL模式!

以下是标准产品不同数据类型、字段的映射关系,可提供给数据库转库厂商:

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 文本

# V9.0以上部署示例

OA版本:A8-N 9.0SP1

中间件:东方通、金蝶、宝兰德

数据库:瀚高数据库V9

关联支持项目:JSFW-2024-02180

# 部署流程

1、中间件(东方通、金蝶、宝兰德)提前准备,瀚高数据库提前准备(如果是新客户就准备一个空库,如果是老客户就做好转库)

2、参考信创环境部署手册,准备对应的XinChuang.zip信创部署包,使用信创部署工具将OA相关基础配置写入中间件中,数据库选择“不初始化数据库”

再次提醒:标准支持的中间件用信创部署工具去部署,减少部署复杂度,降低部署失败概率!!!

3、如果是新客户,由瀚高厂商安装好数据库并新建一个空库后,执行数据库初始化操作,继续使用上一步的XinChuang.zip部署包。

在XinChuang文件夹下的deploytools\file\sql\init目录中找到对应版本的PostgreSQL(A8N-1是企业版,A8N-2是集团版),如企业版命名为:A8N-1_ALL_IN_ONE_POSTGRESQL.SQL。

将SQL拷贝到瀚高数据库对应空库下,执行脚本初始化即可。

4、下一步是打客开补丁包,参考“客开适配点”章节准备补丁包并按要求放置到对应位置

客开补丁seeyon-ctp-panda.jar覆盖到OA应用程序目录下的:ApacheJetspeed\webapps\seeyon\WEB-INF\lib\

客开补丁seeyon-ctp-jdbcproxydriver.jar覆盖到中间件目录下的lib里,宝兰德覆盖到具体实例的lib,金蝶覆盖到aas/lib目录,Tomcat则覆盖到ApacheJetspeed/lib里。

特别提醒:务必先客开打补丁后再进行后续操作! 未打补丁造成的后果就是:【信创】非标准支持数据库使用JMProxyDriver时中间件报错 No suitable driver found (opens new window)

5、配置数据库JDBC相关信息:

到信创中间件的JVM配置中增加自定义参数:-Djdbcproxydriver.driverclass=com.highgo.jdbc.Driver

  • 金蝶V10到管理控制台-配置管理-server-config-JVM配置-JVM选项中添加或修改此参数
  • 东方通到管理控制台界面-启动参数配置-服务器参数中添加或修改此参数,如果在服务器端改jvm,路径是/TongWeb7.0/bin/external.vmoptions

1732426556685.png

1732686878771.png

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

  • 新建JNDI名称必须是jdbc/ctpDataSource
  • 数据库驱动类名com.seeyon.ctp.monitor.perf.jdbcmonitor.proxyobj.JMProxyDriver
  • 数据库连接URL地址以瀚高厂商提供为准,一般格式为jdbc:highgo://127.0.xx.xx(瀚高数据库ip):5866(端口)/test_oa(数据库名)?currentSchema=模式名
  • 驱动要将其放置到中间件的lib下,不要手动选择驱动jar位置

关于数据库URL中的currentSchema=模式名重要参数说明:瀚高数据库支持多Schema,这里务必指向OA的Schema名称,否则会出现表单创建索引异常等问题。

驱动jar联系瀚高技术提供,告诉瀚高我们使用com.highgo.jdbc.Driver做驱动类,驱动jar放置到中间件lib里(宝兰德放到具体实例的lib,金蝶放到aas/lib目录,Tomcat放到ApacheJetspeed/lib里,东方通放到TongWeb7.0/lib下),并且要重启一次中间件。

1732687090518.png

1732426955926.png

Tomcat中间件配置数据源方法:

如果客户是Tomcat中间件,采用信创部署工具会部署OA标准适配的Tomcat,此时通过SeeyonConfig可视化是无法选择到瀚高数据库的,我们需要按下图方案来做即可连通:

1735549558842.png

6、最后是参考信创环境部署手册,去部署应用/ROOT、/static、/seeyon、/sportal,部署完成后正常启动测试即可

# 客开适配点

ctp-panda/src/main/java/com/seeyon/ctp/giant/panda/database/url/ValidateContext.java

public class ValidateContext {
	忽略若干其它代码......
	// 第一个修改点:增加瀚高关键字常量
    public static final String HIGHGO = "highgo";
	public static JdbcValidateResult connectValidate(String url, Properties info) {
		忽略若干其它代码......
        else if (urlTypeMatches(sourcesUrl, GBASE)) {
            jdbcUrlParamsValidate = new JdbcUrlCommaParamsValidate(GBASE);
		// 第二个修改点:判断数据库连接URL中带highgo关键字则走HIGHGO通路 start
        } else if (urlTypeMatches(sourcesUrl, HIGHGO)) {
            jdbcUrlParamsValidate = new DefaultJdbcUrlParamsValidate(HIGHGO);
		// 第二个修改点:判断数据库连接URL中带highgo关键字则走HIGHGO通路 end
        } else {
            throw new RuntimeException("不支持的数据库类型,Url:" + sourcesUrl);
        }
		忽略若干其它代码.......

ctp-panda/src/main/java/com/seeyon/ctp/giant/panda/database/url/jdbcParamsBlackWhiteList.properties

opengauss.white=
opengauss.black=

# 文件最后追加两行与highgo相关的固定信息
highgo.white=
highgo.black=

ctp-panda/src/main/java/com/seeyon/ctp/giant/panda/database/url/vendorDriverUrlWhiteList.properties

kingbase8=
oscar=

# 文件最后追加一行与highgo相关的固定信息
highgo=

ctp-jdbcproxydriver/src/main/java/com/seeyon/ctp/monitor/perf/jdbcmonitor/proxyobj/ProxyDriverList.properties

com.huawei.opengauss.jdbc.Driver=jdbc:opengauss://127.0.0.1:30100/mydatabase

# 文件最后追加下面一行与highgo相关的固定信息
com.highgo.jdbc.Driver=jdbc:highgo://127.0.0.1:5866/test_oa

以上完成后编译代码,生成补丁文件并将补丁放置到准确位置:

  • 将ctp-panda程序补丁打到ApacheJetspeed\webapps\seeyon\WEB-INF\lib\seeyon-ctp-panda.jar里
  • 将ctp-jdbcproxydriver程序补丁打到ApacheJetspeed\lib\seeyon-ctp-jdbcproxydriver.jar里(如果是信创中间件,则将其打到信创中间件OA实例所在lib的jar里)

# V9.0部署常见问题

# 初次安装能启动OA,但登录总是提示“当前已登录了一个用户”

1732687215295.png

1732687253039.png

问题原因:JDBC配置的驱动类名错了,不要用com.highgo.jdbc.Driver,必须用com.seeyon.ctp.monitor.perf.jdbcmonitor.proxyobj.JMProxyDriver,参考9.0部署章节的操作重新检查调整一下!

# CAP4表单修改保存时提示saveTableIndex Error

通常saveTableIndex Error:ERROR:relation "index_formmain_xxx_sort" already exists这种错误信息是表示:程序在判断当前数据库schema下是否存索引时返回了false,但数据又真实创建了索引导致了冲突。解决方案是在JDBC数据库URL加上currentSchema=模式名参数来指明具体的Schema。

1740393545295.png

1740393772713.png

# 部署分保插件案例

OA的分保插件也是一个可视化工具,工具只支持标准数据库,无法选择到瀚高:

1735547913393.png

要解决此问题,需要发起技术服务支持申请单,由研发提供可手动配置数据源的fenbao安装包,然后手动录入瀚高数据库信息就能使用,具体示例如下:

  • 数据库:选择POSTGRESQL(因为瀚高是适配PG,所以选这个就会使用PG的SQL脚本)
  • JDBCDriver:驱动类名填写瀚高原始的驱动类com.highgo.jdbc.Driver
  • JDBC URL:填写瀚高标准的连接URL,如果瀚高与工具在同一个服务器,则IP就是127.0.0.1

1735547402863.png

安装成功后,必须重启一次OA,否则三员帐号无法登录:

1735549880703.png

# V8.2SP1部署示例

OA版本:A8-N v8.2sp1

东方通版本:7.0.4.9

瀚高数据库版本:4.5.8

关联支持项目:PMP-JFZC-2024-5329、PMP-KKZY-2024-6025

# 部署流程

1、参考《致远协同管理软件信创环境部署手册》搭建东方通中间件,唯一不同处为:部署时数据库类型选择"其他":

2、联系瀚高数据库厂商安装瀚高数据库,并准备好一个空库,用于标准产品SQL导入

3、执行数据库初始化操作,从商务公布的安装程序下载地址下载信创致远安装包2.V8.2_XinChuang(这个包文件名跟随自己部署的版本走)

在XinChuang文件夹下的deploytools\file\sql\init目录中找到对应版本的PostgreSQL(A8N-1是企业版,A8N-2是集团版),如企业版命名为:A8N-1_ALL_IN_ONE_POSTGRESQL.SQL。

将SQL拷贝到瀚高数据库对应空库下,执行脚本(如果条件允许,也可以联系瀚高数据库厂商协助执行脚本):

4、**必须操作:**依据本文最后章节“常见问题和解决方案”,执行所有涉及数据库脚本的转换,注意一定要使用sysdba权限执行!

5、登录东方通中间件后台,填写瀚高相关的驱动和连接:WEB容器配置 - JDBC配置:

数据库驱动类名填入:com.seeyon.ctp.monitor.perf.jdbcmonitor.proxyobj.JMProxyDriver 同时jvm参数中配置 -Djdbcproxydriver.driverclass=com.highgo.jdbc.Driver

如果驱动类名使用 com.highgo.jdbc.Driver,则需要在数据库中添加类型转换函数

连接URL格式为(具体地址以瀚高厂商初始化的库地址为准): jdbc:highgo://127.0.xx.xx(瀚高数据库ip):5866(端口)/test_oa(数据库名)

选择瀚高数据库驱动文件*/hgdb-see-4.5.8/etc/drivers/JDBC/hgjdbc-6.1.0.jar

6、应用管理中部署应用(此步操作参考信创部署手册即可):

7、配置完成后启动OA验证。

# 常见问题和解决方案

# 问题1:当前数据库类型不支持初始化动作

解决:找到中间件external.vmoptions文件里的这个参数,手动改成目标数据库的驱动名即可

# 问题2:启动后初始密码无法登录oa

Login.log报错:

Error日志报错:

解决方法:

用sysdba连接对应库 执行:

create or replace function boolean_to_smallint(boolean) returns smallint
as $$

select (case when \$1=true then 1 else 0 end)::smallint;

$$ language sql strict;

create cast (boolean as smallint) with function
boolean_to_smallint(boolean) as IMPLICIT;

# 问题3:操作符不存在: smallint ~~ integer

1712930221254.png

ctp.log日志错误:

Caused by: com.highgo.jdbc.util.PSQLException: 错误: 操作符不存在: smallint ~~ integer
  建议:没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.

解决方法:

用sysdba连接对应库 执行:

-- smallint like int
create function smallintlike(smallint,int) returns boolean as $$     select $1::text like $2::text $$language sql;
create operator ~~(    procedure = smallintlike,    leftarg = smallint,    rightarg = int,    negator = !~~,    restrict = likesel,    join = likejoinsel);
comment on operator ~~(smallint,int) is 'smallint like expression';

# 问题4: 操作符不存在: smallint = character varying

错误日志:

Caused by: com.highgo.jdbc.util.PSQLException: 错误: 操作符不存在: smallint = character varying
  建议:没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.

解决方法:

用sysdba连接对应库 执行:

create cast(character varying as smallint) with inout as implicit;

# 问题5:bigint ~~ character varying

错误日志:

Caused by: com.highgo.jdbc.util.PSQLException: 错误: 操作符不存在: bigint ~~ character varying
  建议:没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.

解决方法:

用sysdba连接对应库 执行:

create or replace function bigint_and_varchar(bigint,character varying) returns Boolean as 
$$ 
    select $1::varchar ~~ $2::varchar
$$
language sql;

create operator ~~(
procedure = bigint_and_varchar,
leftarg = bigint,
rightarg = character varying);

# 问题6:类型为 integer, 但表达式的类型为 boolean

错误日志:

Caused by: com.highgo.jdbc.util.PSQLException: 错误: 字段 "readonly" 的类型为 integer, 但表达式的类型为 boolean
  建议:你需要重写或转换表达式

解决方法:

用sysdba连接对应库 执行:

create or replace function boolean_to_int(boolean) returns integer as $$  
  select (case when $1=true then 1 else 0 end)::integer;
$$ language sql strict;
 
create cast (boolean as integer) with function boolean_to_int(boolean) as IMPLICIT;

# 问题7:操作符不存在: bigint = character varying

错误日志:

com.highgo.jdbc.util.PSQLException: 错误: 操作符不存在: bigint = character varying
  建议:没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.

解决方法:

用sysdba连接对应库 执行:

create cast(character varying  as timestamp without time zone) with inout as implicit;
编撰人:zhengkejie、het、wangyxyf、admin