浙江省人民医院信创实践:从LIS系统迁移到全栈国产化的技术之路
一个"领头雁"的使命:作为浙江省规模最大、实力最强的综合性三甲医院,浙江省人民医院承担着为全省卫健系统信创探路的重任。从LIS系统的单点突破,到富阳院区的全栈信创,浙人医用两年时间走出了一条可复制、可推广的医疗信创之路。
一、破局:为什么从LIS系统开始?
集团化医院的复杂挑战
浙江省人民医院(以下简称"浙人医")的体量之大,在省内首屈一指:朝晖、望江山、越城、富阳四大已运行院区,滨江、萧山两个在建院区,以及全面托管的八家分院,横跨杭州、绍兴两地。这样的规模,意味着信创改造的难度和风险远超普通医院。
医院的核心信息系统长期依赖国外数据库与硬件设备,不仅面临"卡脖子"风险,更难以满足医疗数据隐私保护、业务连续运行的高要求。在政策要求和业务需求的双重推动下,浙人医必须迈出信创这一步。
但问题来了:从哪里开始?
对于多院区集团化医院来说,信创改造面临着三重挑战:
数据互通难度高 各院区、各业务系统之间数据格式不统一,兼容互通是难题。
业务连续性要求高 医院业务7×24小时运转,不能因为系统改造而中断服务。信创改造期间,各院区还需要保持互联互通能力。
容灾能力要求高 跨院区、跨城市的异地协同,要求数据库支持异构同步双写并行、多院区互为灾备、多院区负载均衡等高级能力。
LIS:最佳突破口的三重理由
在反复论证与风险评估后,浙人医选择了LIS系统(Laboratory Information System,实验室信息系统)作为信创建设的首个攻坚目标。这个选择并非随意,而是基于三层深思熟虑的考量:
第一,业务重要性突出
LIS是医疗核心系统之一,是连接检验科室与临床科室的数据桥梁。患者从抽血到拿到检验报告,每一个环节都离不开LIS系统。系统效率的高下,患者体感非常明显。
第二,数据规模适中可控
浙人医LIS系统支撑全院日均2万余个标本的处理需求。这个业务体量适中,应用场景集中,影响范围可控,既能验证技术方案的可行性,又不至于因为规模过大而风险失控。
第三,可复制性强
LIS业务覆盖面广,与院内其他业务系统(HIS、EMR、PACS等)和仪器设备均有对接。LIS系统的迁移经验一旦成功,可以形成先易后难、逐步推广的良性循环,为后续其他系统的信创改造提供可复制的样板。
二、技术方案:基于国产数据库的多活容灾架构
数据库选型与技术考量

在数据库选型阶段,浙人医信息化与人工智能部副主任范玉林介绍,医院将以下几点作为重点考量:
- 产品成熟度:需要经过充分验证,在医疗行业有成功案例
- 与Oracle的兼容性:降低迁移难度和代码修改量
- 易上手、易运维:医院IT团队能够快速掌握
经过评估,浙人医最终选择了KingbaseES作为替代方案。
技术兼容性分析
KingbaseES对Oracle的语法兼容性较好,支持以下Oracle特性:
物化视图支持
-- 创建物化视图
CREATE MATERIALIZED VIEW mv_lab_summary
BUILD IMMEDIATE
REFRESH FAST ON COMMIT
AS
SELECT
test_type,
COUNT(*) as test_count,
AVG(test_value) as avg_value
FROM lab_results
WHERE test_date >= CURRENT_DATE - 30
GROUP BY test_type;
-- 刷新物化视图
REFRESH MATERIALIZED VIEW mv_lab_summary;
PL/SQL存储过程 原有的Oracle PL/SQL代码可以较平滑地迁移:
-- Oracle风格的存储过程在KingbaseES中可直接使用
CREATE OR REPLACE PROCEDURE process_lab_result(
p_sample_id IN VARCHAR2,
p_test_result IN NUMBER,
p_status OUT NUMBER
) AS
BEGIN
-- 业务逻辑处理
UPDATE lab_samples
SET result_value = p_test_result,
status = 'COMPLETED',
complete_time = SYSDATE
WHERE sample_id = p_sample_id;
IF SQL%ROWCOUNT > 0 THEN
p_status := 1;
COMMIT;
ELSE
p_status := 0;
ROLLBACK;
END IF;
EXCEPTION
WHEN OTHERS THEN
p_status := -1;
ROLLBACK;
END;
数据迁移实践
LIS系统的数据迁移分为几个步骤:
- 表结构迁移
-- 检验样本主表
CREATE TABLE lab_samples (
sample_id VARCHAR2(32) PRIMARY KEY,
patient_id VARCHAR2(32) NOT NULL,
test_type VARCHAR2(20),
sample_time TIMESTAMP DEFAULT SYSDATE,
status VARCHAR2(20) DEFAULT 'PENDING',
result_value NUMBER,
complete_time TIMESTAMP,
CONSTRAINT fk_patient FOREIGN KEY (patient_id)
REFERENCES patients(patient_id)
);
-- 创建索引
CREATE INDEX idx_patient ON lab_samples(patient_id);
CREATE INDEX idx_sample_time ON lab_samples(sample_time);
CREATE INDEX idx_status ON lab_samples(status);
2. 数据同步验证
-- 数据一致性校验
SELECT
'Oracle' as source,
COUNT(*) as total_records,
MAX(sample_time) as latest_time
FROM lab_samples@oracle_link
UNION ALL
SELECT
'KingbaseES' as source,
COUNT(*) as total_records,
MAX(sample_time) as latest_time
FROM lab_samples;
在实际迁移过程中,浙人医的应用代码修改量约为8%,主要集中在一些Oracle特有函数的替换,如:
-- Oracle写法
SELECT TO_CHAR(sample_time, 'YYYY-MM-DD HH24:MI:SS') FROM lab_samples;
-- KingbaseES兼容写法(也支持Oracle语法)
SELECT TO_CHAR(sample_time, 'YYYY-MM-DD HH24:MI:SS') FROM lab_samples;
极致容灾:四大技术创新
医院信息系统的灾难恢复能力有严格的等级标准。6级标准要求做到:
- RPO=0:数据零错误丢失
- RTO<10分钟:从故障发生到系统完全恢复的时间小于10分钟
这个标准,传统的灾备架构很难达到。
浙人医在开启LIS系统信创时拥有越城、朝晖、望江山三个院区。此前,LIS系统业务均由越城院区主系统承载,系统压力大;院区间如遇网络中断,需要手动拉起灾备系统,RTO不可控。
在LIS系统的国产数据库迁移过程中,浙人医联合合作伙伴制定了创新的技术方案,实现了四大技术突破:
创新一:异构组网
信创完成后,金仓数据库成为新的业务承载主力,但原非信创数据库(Oracle)依旧保持活跃,双轨同步运行。
这种设计的好处是:既验证了新系统的稳定性,又保留了随时切换回原系统的能力,大大降低了风险。
创新二:多活容灾
引入多活容灾架构,多院区互为灾备,支持多院区间的负载均衡和多活容灾。
传统架构下,一个院区是主系统,其他院区是备用系统。主系统故障时,需要手动切换到备用系统,RTO不可控。
多活架构下,所有院区的数据库都是"活"的,都在实时处理业务。任何一个院区出现故障,其他院区可以无缝接管业务,无需手动干预。
这样的架构,横向拆分了多院区的业务压力,故障发生时无需手动拉起灾备系统,帮助医院实现了RTO≤10分钟、RPO=0的容灾目标。
创新三:多写同步
各数据中心通过KFS工具实现环状数据同步。这是一个数据复制和同步工具,工作原理如下:
同步配置示例
# 配置源端数据库连接
kfs_source:
host: 192.168.1.10
port: 54321
database: lis_db
user: replication_user
# 配置目标端数据库连接
kfs_target:
host: 192.168.2.10
port: 54321
database: lis_db
user: replication_user
# 配置同步表
tables:
- lab_samples
- lab_results
- patient_info
# 同步模式:全量+增量
sync_mode: full_and_incremental
数据一致性校验
-- 创建校验函数
CREATE OR REPLACE FUNCTION check_data_consistency(
p_table_name VARCHAR2,
p_time_column VARCHAR2
) RETURN VARCHAR2 AS
v_local_count NUMBER;
v_local_checksum NUMBER;
v_remote_count NUMBER;
v_remote_checksum NUMBER;
BEGIN
-- 统计本地数据
EXECUTE IMMEDIATE
'SELECT COUNT(*), SUM(ORA_HASH(row_id))
FROM ' || p_table_name || '
WHERE ' || p_time_column || ' >= SYSDATE - 1'
INTO v_local_count, v_local_checksum;
-- 统计远端数据
EXECUTE IMMEDIATE
'SELECT COUNT(*), SUM(ORA_HASH(row_id))
FROM ' || p_table_name || '@remote_db
WHERE ' || p_time_column || ' >= SYSDATE - 1'
INTO v_remote_count, v_remote_checksum;
-- 比对结果
IF v_local_count = v_remote_count
AND v_local_checksum = v_remote_checksum THEN
RETURN 'CONSISTENT';
ELSE
RETURN 'INCONSISTENT: local=' || v_local_count ||
', remote=' || v_remote_count;
END IF;
END;
基于业务存量数据校验技术和增量数据校验技术,确保多个院区的数据完全一致,进一步提升了容灾能力。
创新四:卫星方案
在小型院区的重要工作位置,布置轻量化卫星站。
通过小型化节点保留核心功能,减少对网络的依赖,提升应急能力。即使院区之间的网络中断,卫星站也能保证基本业务的正常运行。
平滑切换:双轨并行,万无一失
技术方案再完美,最终还要落到实施层面。浙人医采用了双轨并行、分阶段推进的方案,保障平滑切换:
第一阶段:双轨运行 迁移至金仓数据库之后,原有非信创系统作为备用数据库保持活跃。遇有突发情况,可随时切换回原系统。
第二阶段:多轮演练 系统上线前,浙人医围绕故障应急进行了多轮演练,模拟了各种故障场景:
- Oracle主库故障切换到国产库
- 国产数据库集群故障自动转移
- 国产数据库单边故障
- Oracle单边故障
- 院区网络中断,国产数据库与Oracle各自独立运行
- 关闭部分服务器,模拟硬件故障
这些演练确保了系统切换的万无一失。
第三阶段:正式上线 2023年10月,浙人医完成LIS系统国产化适配;2024年4月,同步完成双活+应急方案系统改造并完成程序更新,在越城院区国产数据库实际环境测试应用;2024年5月,正式在越城院区上线。
目前,浙人医LIS系统已经在越城、朝晖、望江山、富阳四大院区实现互相双向同步,成为国内首个LIS国产化异构数据多院区多活改造案例。
成果显著:四大核心指标
改造完成后,浙人医LIS系统的关键指标达到了行业领先水平:
✅ 4大院区数据互相双向同步 任何一个院区的数据变更,都会实时同步到其他院区。
✅ 灾容恢复能力达到6级标准 RPO=0(数据零丢失),RTO≤10分钟(快速恢复)。
✅ 业务连续性达到99.99% 全年停机时间不超过52分钟。
✅ 数据调用效率提升60% 与原系统相比,数据调用时间平均缩短了0.8秒。
三、以点带面:全栈信创的浙江样本
富阳院区:全省首个医疗全栈信创样板间
LIS系统在多院区的成功落地,为浙人医信创建设的全面推进奠定了基础。其信创版图持续扩张,最新的成果就是富阳院区。
走进今年新启用的浙人医富阳院区,这个全省首个医疗全栈信创样板间集中展现了国产生态的成熟度:
服务器操作系统 涵盖麒麟、统信、龙蜥、欧拉等国产操作系统。
桌面操作系统 以中科方德、统信为主。
数据库 富阳院区采用KingbaseES作为核心数据库,支撑LIS系统以及HIS、EMR、PACS等多个业务系统的数据管理。
应用系统 HIS、EMR、LIS、PACS等核心业务系统均已实现云化部署。
深度融合:健康云+信创
浙人医的信创实践并非单点作战,而是深度契合浙江省健康云建设规划。
在富阳院区的建设中,浙人医和浙江省健康云有限公司达成深度合作:
- 富阳院区信息机房在本地建设,作为健康云的计算节点和容灾中心之一
- 医院按需从健康云购买服务
- 依托富阳院区的原生云生态,院区业务系统均已实现云化部署
这种模式,既实现了信创目标,又降低了建设和运维成本,是"云+信创"融合发展的典范。
性能卓越:经受住实战检验
富阳院区试运行以来,系统性能表现优异:
高并发处理能力 系统每小时访问量达40多万次,数据库IOPS(每秒读写操作数)达到1万以上。
效率大幅提升 与原系统相比,数据调用时间平均缩短了0.8秒,效率提升了60% 。
极速响应 业务高峰时,系统响应延迟时间≤0.3秒,为患者和医护人员提供了更高效、更快速的服务体验。
从实际运行数据来看,国产数据库在医疗场景中的表现已经达到实用水平,可以支撑大型三甲医院的核心业务需求。
性能优化实践
在实际应用中,浙人医团队还进行了一些性能优化:
-- 1. 使用分区表优化大表查询
CREATE TABLE lab_results (
result_id VARCHAR2(32),
sample_id VARCHAR2(32),
test_date DATE,
result_value NUMBER,
...
) PARTITION BY RANGE (test_date) (
PARTITION p202401 VALUES LESS THAN (TO_DATE('2024-02-01', 'YYYY-MM-DD')),
PARTITION p202402 VALUES LESS THAN (TO_DATE('2024-03-01', 'YYYY-MM-DD')),
PARTITION p202403 VALUES LESS THAN (TO_DATE('2024-04-01', 'YYYY-MM-DD'))
-- 按月分区,提升查询效率
);
-- 2. 创建复合索引优化常用查询
CREATE INDEX idx_sample_date_status
ON lab_samples(sample_time, status)
WHERE status IN ('PENDING', 'PROCESSING');
-- 3. 使用并行查询加速大数据量统计
SELECT /*+ PARALLEL(4) */
department,
COUNT(*) as total_samples,
AVG(EXTRACT(EPOCH FROM (complete_time - sample_time))/60) as avg_minutes
FROM lab_samples
WHERE sample_time >= CURRENT_DATE - 30
GROUP BY department;
数据安全技术实现
医疗数据涉及患者隐私,浙人医在迁移过程中特别关注数据安全。
透明数据加密(TDE) KingbaseES支持透明数据加密功能,数据在存储时自动加密:
-- 启用数据库级加密
ALTER SYSTEM SET encryption = ON;
-- 为敏感表启用加密
CREATE TABLE patient_info (
patient_id VARCHAR2(32) PRIMARY KEY,
id_card VARCHAR2(18),
phone VARCHAR2(11),
medical_record TEXT
) WITH (encryption='AES256');
-- 数据写入时自动加密,读取时自动解密
INSERT INTO patient_info VALUES
('P001', '330102199001011234', '13800138000', '病历信息');
行级访问控制 针对不同科室的数据访问需求,实现了行级安全策略:
-- 创建行级安全策略
CREATE POLICY dept_isolation_policy ON lab_samples
FOR SELECT
USING (department = current_user_dept());
-- 不同科室的医生只能查看本科室的检验数据
-- 检验科用户登录后执行:
SELECT * FROM lab_samples;
-- 只返回本科室的数据
审计日志 所有对敏感数据的操作都会被记录:
-- 启用审计
ALTER SYSTEM SET audit_trail = 'DB';
-- 查看审计日志
SELECT
username,
action_name,
object_name,
timestamp,
sql_text
FROM audit_logs
WHERE object_name = 'PATIENT_INFO'
ORDER BY timestamp DESC;
四、浙江样本的启示:信创之路怎么走?
浙人医的实践,为全国医疗行业的信创建设提供了宝贵的经验。总结起来,有以下几点启示:
启示一:选对突破口是关键
不要试图一步到位,全面铺开。而是要选择一个业务重要性突出、数据规模适中、可复制性强的系统作为突破口。
浙人医选择LIS系统,就是一个非常聪明的决策。既能验证技术方案,又能积累经验,还能为后续推广打下基础。
启示二:技术方案要创新
传统的灾备架构很难满足医疗行业对业务连续性的高要求。浙人医联合金仓提出的"异构多活"方案,通过异构组网、多活容灾、多写同步、卫星方案四大技术创新,达到了6级容灾标准。
这种技术创新,不是为了创新而创新,而是真正解决了实际问题。
启示三:平滑切换是底线
业务连续性是医院的生命线。浙人医采用的双轨并行、分阶段推进方案,以及上线前的多轮故障演练,确保了系统切换的万无一失。
这个经验告诉我们:信创不是冒险,而是要稳扎稳打。
启示四:生态成熟是基础
浙人医能够实现全栈信创,离不开国产生态的日益成熟。从CPU、操作系统、数据库,到中间件、应用软件,整个技术栈都已经有了可靠的国产替代方案。
这也说明,中国的信创生态已经从"能用"进化到"好用",正在向"优秀"迈进。