# 瀚高数据库项目化部署手册
北京致远互联软件股份有限公司
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
随后安装部署可参考瀚高部署手册进行操作,大部分都可以选择默认。
勾选“初始化数据库”,使用默认用户名highgo,自定义密码,兼容性选择默认的PostgreSQL,当前用户权限不足就不要注册数据库服务,监听地址由localhost改成*
表示允许外部访问,如生产环境则最大连接数尽量调大到500以上:
启动瀚高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
创建账号和新库:
通过默认的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后的初始化操作
如果是老客户,则提供客户原产品的数据库,交给瀚高技术进行转库操作,我们只需要获得转库后的连接、账号密码即可。
# 升级转瀚高数据库提醒
如果是致远老客户,涉及升级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
到信创中间件管理控制台,新建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下),并且要重启一次中间件。
Tomcat中间件配置数据源方法:
如果客户是Tomcat中间件,采用信创部署工具会部署OA标准适配的Tomcat,此时通过SeeyonConfig可视化是无法选择到瀚高数据库的,我们需要按下图方案来做即可连通:
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,但登录总是提示“当前已登录了一个用户”
问题原因: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。
# 部署分保插件案例
OA的分保插件也是一个可视化工具,工具只支持标准数据库,无法选择到瀚高:
要解决此问题,需要发起技术服务支持申请单,由研发提供可手动配置数据源的fenbao安装包,然后手动录入瀚高数据库信息就能使用,具体示例如下:
- 数据库:选择POSTGRESQL(因为瀚高是适配PG,所以选这个就会使用PG的SQL脚本)
- JDBCDriver:驱动类名填写瀚高原始的驱动类
com.highgo.jdbc.Driver
- JDBC URL:填写瀚高标准的连接URL,如果瀚高与工具在同一个服务器,则IP就是127.0.0.1
安装成功后,必须重启一次OA,否则三员帐号无法登录:
# 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
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;
