# 虚谷数据库项目化部署手册

北京致远互联软件股份有限公司 2024年11月

文档来源:政务事业群,公司内部关联资料:《V9.0适配虚谷交付物》

成功项目:JSFW-2024-00590、JSFW-2024-01327

# 基础信息

虚谷数据库标准产品未支持,目前可项目化集成(有项目成功上线案例)。

适配版本:9.0SP1版本,参照本手册集成配置,V9.0SP1版本涉及一定的定制开发代码,见本手册开发。

项目化支持,意味着可能存在项目化适配成本,并且项目化过程中产生的BUG、以及后续OA版本升级需要额外项目化成本解决

已知问题:虚谷不适配 TO_CLOB 语法以及索引删除语法,需单独适配修改

  • 项目化适配版本:V9.0SP1及更高版本
  • 中间件:宝蓝德955
  • 虚谷数据库版本:XuguDB V11 集中式部署产品
  • 项目化人天:开发5人天,测试2人天,实施部署成本另算

虚谷数据库基础信息:

数据库url=jdbc:xugu://127.0.0.1:5138/V90?char_set=UTF8&compatibleoracle=true&KEYWORD_FILTER=POLICY
JDBC驱动名driverClassName=com.xugu.cloudjdbc.Driver
JDBC连接获取数据库名DatabaseMetaData.getDatabaseProductName()=Oracle
驱动jar:xugu-jdbc-12.3.0.jar

由于数据库URL和JDBC驱动非标准,需要定制开发代码,适配点参考【适配第三方数据库方案 (opens new window)】。

通过select version;查询数据库信息:

1729487877580.png

# 转库参考映射

从其它数据转虚谷数据库可参考如下映射字段关系:

MYSQL ORACLE SQLSERVER POSTGRESQL HBM文件 POJO类型 场景
BIGINT INTEGER BIGINT INT8 long java.lang.Long 主键
DATE DATE DATETIME TIMESTAMP(0) timestamp java.util.Date 日期
DATETIME DATE DATETIME TIMESTAMP(0) timestamp java.util.Date 日期时间
DECIMAL NUMBER NUMERIC NUMERIC double java.lang.Double 小数
INT INTEGER INT INT4
(Oracle转INT8)
integer java.lang.Integer 整数
LONGBLOB BLOB IMAGE BYTEA string java.lang.String 二进制对象
LONGTEXT CLOB NTEXT TEXT string java.lang.String 大文本
SMALLINT NUMBER(4) SMALLINT INT2 integer java.lang.Integer 数字枚举
TINYINT(OA早期版本使用) NUMBER(4) SMALLINT INT2 integer java.lang.Integer 数字枚举
VARCHAR VARCHAR2 NVARCHAR VARCHAR string java.lang.String 文本

# 验证范围

未做性能验证,仅做功能层面项目化冒烟测试,协同验证主业务场景:

  • 协同:自由流程、cap3、cap4 (督查督办)
  • 公文:加签、套红、领导批示、代录批示、转公告、转事务、转协同、归档、转督办、续办、公文查询、公文统计
  • 会议(基础会议、高级会议、无纸化会议),能新建开启结束会议、记录纪要
  • 文化建设:公告、新闻、讨论
  • 文档中心:归档、新建文件
  • 首页门户等

# 虚谷数据库维护

数据库安装部署由数据库厂商执行,OA需要提供相关的初始化数据库脚本(新客户),或客户的原生产数据脚本(老客户转库)由数据库厂商转库。

以下是个人部署示例,本例是Windows虚谷数据库绿色免安装版本。

# 数据库部署配置

1、虚谷数据库服务维护和启动

设置内存等参数:Windows版本Xugu目录/SETUP/xugu.ini

# 降低口令强度(个人使用,生产上线慎重)
pass_mode = 2;  口令模式 1:不重复字符或数字,2:字母+数字,3:字母+数字+符号
# 字符集由GBK改成UTF8,OA都用UTF8(生产上线以虚谷厂商为准,建议尽量UTF8,不然后面忘记设编码就会乱码)
def_charset = "UTF8";

# 系统缓冲区设置(个人使用,根据本身电脑配置调大一些)
data_buff_mem = 1024;  数据缓冲区内存(单位:M)
swap_buff_mem = 256;  交换缓冲区内存(单位:M)
system_sga_mem = 512;  系统全局区内存(单位:M)

然后,双击XuguDB目录/BIN/xugu_start.bat启动数据库,不用以管理员身份启动

虚谷默认内置如下信息:

服务器地址127.0.0.1
端口5138
实例名SYSTEM
帐号SYSDBA
密码SYSDBA

1729178542584.png

# 新客户:创建OA库并初始化脚本

# 创建OA数据库

使用虚谷自带的XGConsole工具:登录SYSTEM库、新建OA数据库、新建OA用户、授予OA用户管理员权限,最后使用新建OA用户登录,执行脚本初始化。

准备好XGConsole.exe工具,通过cmd命令执行XGConsole.exe nssl 127.0.0.1 5138 SYSTEM SYSDBA SYSDBA登录到虚谷数据库。

1729182589012.png

SYSDBA登录到SYSTEM数据库后,创建一个新的数据库给OA用、创建与库同名的新用户、授权新用户为管理员,注意设置字符集为UTF8:

-- 检查当前登录用户字符集,如果是GBK则改成UTF8
SELECT SYS_CONTEXT('USERENV', 'LANGUAGE') FROM dual;
-- 设置当前用户字符集为UTF8
SET NAMES 'UTF8';
-- 创建数据库
CREATE DATABASE seeyonv5 CHARACTER SET 'UTF8';
-- 切入新数据库下
USE seeyonv5;
-- 创建与数据库同名的用户,必须同名! CREATE USER 用户名 IDENTIFIED BY '密码';
CREATE USER SEEYONV5 IDENTIFIED BY 'SEEYONV5';
-- 设置新用户为管理员
GRANT DBA TO SEEYONV5;

以上完成后,可以开一个新的cmd窗口,执行命令XGConsole.exe nssl 127.0.0.1 5138 新数据库 新用户名 用户密码登录,如果登录成功则说明数据库创建成功!

如果按照本示例执行,数据库和密码都相同,登录OA库的命令就是:XGConsole.exe nssl 127.0.0.1 5138 SEEYONV5 SEEYONV5 SEEYONV5

1729182759610.png

虚谷技术推荐使用DBeaver做数据库可视化工具维护SQL,虚谷安装程序自带的XuguManager不推荐使用。

DBeaver由虚谷技术提供,里面内置了Xugu数据库插件

当以上完成后,用新用户登录同名数据库,登录成功则表示一切正常(也可以随意create一个table,如果create table成功则权限也正常):

1729182814372.png

# 新客户:初始化OA脚本

虚谷高度兼容Oracle,初始化脚本可以选择Oracle,但是需要调整几个点:

稳妥起见,也可以自己安装一套MySQL初始化脚本,使用虚谷的MySQL转虚谷数据库工具直接转换

1、从商务公布的安装程序-下载XinChuang.zip部署包,从包中取init目录相关产品下的Oracle脚本:

1729175017687.png

2、(本步骤有问题)文本编辑器打开,匹配大小写,全局将INTEGER替换为BIGINT(注意带一个左空格)

表edoc_summary_extend中有字段名包含 INTEGER,全局替换会有问题 --记录日期:20250728

1729174485902.png

3、匹配大小写,全局将DATE替换为DATETIME(注意带一个左空格)

1729174768957.png

4、匹配大小写,全局将POLICY替换为"POLICY"(注意两边均带上一个空格),POLICY在虚谷数据库是关键字

1729175200731.png

备注:完成修改后,请对照原ORACLE脚本检查DOC_METADATA、info_summary、edoc_summary_extend、SIGNET_HISTORY、SIGNET_HTM_DOCUMENT、XC_HOTEL_RECORD、XC_TRAVEL_RECORD表的列名是否因为第3、第4步的操作被修改

5、ALL-IN-ONE中,以下两个ALTER SESSION删除,虚谷不需要:

ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SS.FF';

6、使用虚谷的Console工具,通过命令进入数据库:XGConsole.exe nssl 127.0.0.1 5138 SEEYONV5 SEEYONV5 SEEYONV5

7、Console工具下,通过EXECFILE2命令快速把脚本导入数据库,注意设置字符集为UTF8:

-- 设置当前用户字符集为UTF8
SET NAMES 'UTF8';
-- USE命令,确保切换到OA数据库
USE SEEYONV5;
-- 执行转换后的数据库初始化脚本
EXECFILE2 D:\XuguDB\A8N-2_ALL_IN_ONE_Xugu.SQL

用户SEEYON90SP1用户登录SEEYON90SP1数据库后,通过SQL编辑器导入Oracle的初始化脚本,选择执行SQL脚本,执行需要几分钟左右时间,耐心等待:

1729183228244.png

8、导入完成后,可以直接在Console控制台查询数据(控制台下需要切换回GBK才能看到中文,否则乱码)

1729183324932.png

9、也可以通过DBeaVer查看到表结构,检查一切正常则OK。

1729183383335.png

如果你嫌弃本方法太过复杂,也可以参考“老客户:虚谷迁移工具转库”章节,将初始化SQL导入到MySQL,然后用工具自动转储虚谷数据库。

# 老客户:虚谷迁移工具转库

本实例是按步骤迁移数据库至V90,迁移库的方法也非常简单:

比如本地有一套MySQL的OA脚本,使用虚谷迁移工具连接上MySQL,然后配置虚谷的目标库,再做一定的配置即可迁移。

# 协同服务部署

1、打虚谷数据库项目化适配补丁(需要项目组根据OA版本做定制开发,修改)

由于数据库URL和JDBC驱动非标准,需要定制开发代码,适配点参考【适配第三方数据库方案 (opens new window)】。

Tomcat中间件可以将补丁打好后放置到/seeyon/WEB-INF/lib下对应jar里

信创中间件则需要将补丁包放置到协同/seeyon/WEB-INF/lib下,部分放到中间件lib下。

2、虚谷数据库驱动jar放置

Tomcat中间件将驱动jar放置到ApacheJetspeed\lib下

信创中间件(如宝兰德)将驱动jar放置到中间件实例lib下

3、虚谷数据源配置

如果是标准产品默认的Tomcat中间件,直接修改: base/conf/datasourceCtp.properties中数据源信息:

ctpDataSource.url=jdbc:xugu://127.0.0.1:5138/V90?char_set=UTF8&compatibleoracle=true&KEYWORD_FILTER=POLICY
ctpDataSource.driverClassName=com.xugu.cloudjdbc.Driver
ctpDataSource.username=V90
ctpDataSource.password=seeyon@123

宝蓝德中间件数据源配置,参照下图:

名称:必须是jdbc/ctpDataSource
数据库驱动供应商:根据实际情况选择,找不到就选“Other”其它
资源类型:默认java.sql.Driver
数据库驱动类名:com.xugu.cloudjdbc.Driver
数据库驱动路径:放置到中间件lib下后,有的中间件无需配置
主机名、端口、数据库名、用户名、密码根据实际情况填写
数据库URL(IP、端口、数据库名根据实际情况填写,?文号后面的参数建议参考本手册操作):jdbc:xugu://10.1.203.225:5138/SEEYONV5?char_set=UTF8&compatibleoracle=true&KEYWORD_FILTER=POLICY

1729216998358.png

3、以上完成后,启动系统即可。

# 客开代码适配点

ctp-studio参照项目:成都虚谷伟业科技有限公司

修改工程如下:

1731771467344.png

容易遗漏点:

# 常见问题

# 1、启动服务报错

解决:

替换驱动包为xugu-jdbc-12.2.6.jar,

将jdbc url增加参数compatibleoracle=true,走Oracle方言

# 2、创建单位报错

解决:虚谷与Oracle的区别,部分系统表没有,需换成虚谷的系统表

# 3、创建单位报错:角色枚举报错

解决:代码业务问题

# 4、CAP4初始化报错

解决:代码业务问题,CAP4同事改出来的问题,将初始化参数改了,但是未修改读参业务

代码解决或恢复到V9.0 20240329版本,则不存在该问题

# 5、拟文报错

解决:使用了虚谷数据库的关键字

将jdbc url增加参数KEYWORD_FILTER=POLICY,忽略掉该关键字

# 6、发起督办数据后点击"签收"没有反应

解决:代码业务问题,V9.0开发修改导致

# 7、CAP4设置表单第一次保存成功,第二次就失败

原因是每次保存时会校验当前表单是否存在索引,如果不存在就创建。由于程序兼容问题,程序一直判断不存在索引导致重复创建,结果又创建不成功,就异常了。

1731771926774.png

解决方案是:调整判断索引是否存在的代码,兼容虚谷数据库的算法:

1731772490849.png

1731772513639.png

1731772879727.png

编撰人:het、luoyy、wangyxyf、xiey