IT薇薇の博客

泛微E9 创建测试系统清除数据

2026/01/14
10
0

一、工作流程模块

1. 执行备份 SQL

在数据库管理工具(如 Navicat, DBeaver, 或命令行)中执行以下语句:

SQL

-- 1. 备份 节点操作人表
CREATE TABLE workflow_currentoperator_bak20260114 AS SELECT * FROM workflow_currentoperator;

-- 2. 备份 流程实例表
CREATE TABLE workflow_requestbase_bak20260114 AS SELECT * FROM workflow_requestbase;

-- 3. 备份 签字意见表
CREATE TABLE workflow_requestlog_bak20260114 AS SELECT * FROM workflow_requestlog;

-- 4. 备份 当前节点表
CREATE TABLE workflow_nownode_bak20260114 AS SELECT * FROM workflow_nownode;

-- 5. 备份 操作记录表
CREATE TABLE workflow_requestoperatelog_bak20260114 AS SELECT * FROM workflow_requestoperatelog;

-- 6. 备份 流转信息表
CREATE TABLE workflow_requestflowinfo_bak20260114 AS SELECT * FROM workflow_requestflowinfo;

-- 7. 备份 表单数据表
CREATE TABLE formtable_main_*_bak20260114 AS SELECT * FROM formtable_main_*(动态表);
如果只是为了前端不显示,7可以不操作

(注:这种备份方式只备份数据,不会备份原表的索引和自增属性,但用来恢复数据足够了。)

2. 确认备份成功

执行 SELECT count(1) FROM workflow_requestbase_bak20260114; 确保里面有数据。

3. 执行清空操作

确认备份无误后,执行下方的“清空命令”。

请直接复制以下 SQL 块执行:

SQL

-- 开启“忽略外键约束”模式,防止因表关联导致无法清空
SET FOREIGN_KEY_CHECKS = 0;

-- 开始清空表
TRUNCATE TABLE workflow_currentoperator;
TRUNCATE TABLE workflow_requestbase;
TRUNCATE TABLE workflow_requestlog;
TRUNCATE TABLE workflow_nownode;
TRUNCATE TABLE workflow_requestoperatelog;
TRUNCATE TABLE workflow_requestflowinfo
TRUNCATE TABLE formtable_main_*(动态表)如果只是为了前端不显示,可以不操作

-- 恢复外键约束检查
SET FOREIGN_KEY_CHECKS = 1;

注意事项

- workflow_requestoperatelog_dtl存储操作明细,清理会导致强制收回功能异常

- 流程回收站数据需单独清理(*_dellog系列表)

- 建议按时间范围分批删除(如delete from workflow_requestbase where createdate < '2024-01-01'

二、知识文档模块

-- 1. 备份文档主表
CREATE TABLE docdetail_bak20260114 AS SELECT * FROM docdetail;

-- 2. 备份附件关联表
CREATE TABLE docimagefile_bak20260114 AS SELECT * FROM docimagefile;

-- 3. 备份物理文件表 (请确认磁盘空间充足!)
CREATE TABLE imagefile_bak20260114 AS SELECT * FROM ImageFile;

-- 4. 备份文档权限表
CREATE TABLE docshare_bak20260114 AS SELECT * FROM docshare;

-- 5. 备份内部共享缓存表
CREATE TABLE shareinnerdoc_bak20260114 AS SELECT * FROM shareinnerdoc;

-- 6. 备份文档操作日志表
CREATE TABLE docdetaillog_bak20260114 AS SELECT * FROM docdetaillog;

-- 7. 备份下载日志表
CREATE TABLE downloadlog_bak20260114 AS SELECT * FROM downloadlog;

验证备份是否成功

执行完上述语句后,建议随机抽查两张表,看看数据是否还在:

SELECT count(1) as qty_main FROM docdetail_bak20260114;
SELECT count(1) as qty_img  FROM imagefile_bak20260114;

确认备份表中有数据后,你就可以放心地执行之前的 TRUNCATE 清空命令了。

-- 1. 临时关闭外键检查(防止因表关联导致无法清空)
SET FOREIGN_KEY_CHECKS = 0;

-- ==========================================
-- A. 文档核心数据
-- ==========================================
-- 清空文档主表
TRUNCATE TABLE docdetail;
-- 清空文档与附件的关联关系
TRUNCATE TABLE docimagefile;
-- 清空附件物理文件表 (注意:如果文件存在磁盘上,这里存的是指针;如果存在DB里,这里存的是二进制)
TRUNCATE TABLE ImageFile;

-- ==========================================
-- B. 文档权限数据 (既然文档都没了,权限数据也就没有保留的意义了)
-- ==========================================
-- 清空文档共享/权限表
TRUNCATE TABLE docshare;
-- 清空内部共享缓存表 (通常用于加速权限计算,清空后系统会自动重建必要的)
TRUNCATE TABLE shareinnerdoc;

-- ==========================================
-- C. 文档日志数据
-- ==========================================
-- 清空文档操作日志(如修改、删除记录)
TRUNCATE TABLE docdetaillog;
-- 清空文档下载/查看日志
TRUNCATE TABLE downloadlog;

-- 2. 恢复外键检查
SET FOREIGN_KEY_CHECKS = 1;

注意事项

- shareinnerdocdocshare为权限核心表,不可随意清理

- 需同步删除服务器物理文件ecology/filesystem路径)

- 清理后需更新微搜索引

- 建议清理后访/commcache/cacheMonitor.jsp刷新缓存

三、人力资源模块(可选)

第一步:数据备份 (SQL)

执行以下语句备份这 6 张核心表:

-- 1. 备份分部表
CREATE TABLE hrmsubcompany_bak20260114 AS SELECT * FROM hrmsubcompany;

-- 2. 备份部门表
CREATE TABLE hrmdepartment_bak20260114 AS SELECT * FROM hrmdepartment;

-- 3. 备份人员表 (最重要)
CREATE TABLE hrmresource_bak20260114 AS SELECT * FROM hrmresource;

-- 4. 备份岗位表
CREATE TABLE hrmjobtitles_bak20260114 AS SELECT * FROM hrmjobtitles;

-- 5. 备份职务表
CREATE TABLE hrmjobactivities_bak20260114 AS SELECT * FROM hrmjobactivities;

-- 6. 备份职务类别表
CREATE TABLE hrmjobgroups_bak20260114 AS SELECT * FROM hrmjobgroups;

第二步:清空数据 (保护 sysadmin)

这里我采用了混合策略:对人员表使用 DELETE(保留管理员),对其他表使用 TRUNCATE(重置 ID)。

-- 开启“忽略外键约束”
SET FOREIGN_KEY_CHECKS = 0;

-- ===============================================
-- 1. 清理人员表 (特殊处理:保留 sysadmin)
-- ===============================================
-- 注意:这里假设 id=1 或 loginid='sysadmin' 是管理员
-- 我们只删除非管理员账户,避免系统锁死
DELETE FROM hrmresource WHERE loginid <> 'sysadmin' AND id <> 1;

-- 如果你想重置自增ID (可选,但风险高,建议跳过此步仅用DELETE)
-- ALTER TABLE hrmresource AUTO_INCREMENT = 2;


-- ===============================================
-- 2. 清理组织架构表 (直接清空)
-- ===============================================
TRUNCATE TABLE hrmjobtitles;     -- 岗位
TRUNCATE TABLE hrmdepartment;    -- 部门
TRUNCATE TABLE hrmsubcompany;    -- 分部

-- ===============================================
-- 3. 清理职务相关表
-- ===============================================
TRUNCATE TABLE hrmjobactivities; -- 职务
TRUNCATE TABLE hrmjobgroups;     -- 职务类别


-- 恢复外键约束
SET FOREIGN_KEY_CHECKS = 1;

第三步:后续关键操作 (必须执行)

清理完数据库后,内存中的缓存数据仍然是旧的,必须进行以下操作:

  1. 重启服务:必须重启 OA 服务(Resin/Tomcat),强制系统重新加载数据库中的组织架构。

  2. License 检查:如果你的 License 是绑定人数的,大幅减少人数通常没问题,但要确保管理员账号状态正常。

重新初始化

  • 进入后台,你需要重新建立根分部

  • 由于 sysadmin 对应的部门 ID (departmentid) 和分部 ID (subcompanyid1) 指向的数据已经被清空,登录后可能会看到管理员属于“空部门”。建议尽快新建分部和部门,并更新管理员的归属信息:

-- 示例:新建分部和部门后,手动修正管理员归属 (假设新部门ID为1)
-- UPDATE hrmresource SET subcompanyid1 = 1, departmentid = 1 WHERE loginid = 'sysadmin';

注意事项

- 清理后需调整人员序列表(更SequenceIndexcurrentid

- 数据库清理无法触发微搜索引更新,需手动重建索引

- 建议清理后访/commcache/cacheMonitor.jsp刷新缓存