Files
hzdyjs/docs/设计文档/database/学工管理-学生信息管理/execute-data-migration.sql
T
2025-07-19 10:18:27 +08:00

283 lines
9.2 KiB
SQL

-- 学生信息管理系统数据迁移执行脚本
-- 说明:完整的数据迁移流程,包括数据库结构调整、数据迁移和权限配置
-- 执行时间:2025-01-13
-- 执行顺序:严格按照脚本顺序执行
-- ===========================================
-- 执行前准备工作
-- ===========================================
-- 设置事务隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- 开始事务
START TRANSACTION;
-- 记录执行开始时间
SELECT '🚀 开始执行数据迁移' as 'Migration Start', NOW() as 'Start Time';
-- ===========================================
-- 第一步:执行数据库结构调整
-- ===========================================
SELECT '📋 第一步:执行数据库结构调整' as 'Step 1';
-- 执行第一阶段数据库调整脚本
SOURCE execute-phase1.sql;
-- 验证表结构
SELECT '✅ 验证表结构创建' as 'Verification';
SELECT
TABLE_NAME as '表名',
TABLE_COMMENT as '表注释',
CREATE_TIME as '创建时间'
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME IN ('xg_collection_batch', 'xg_batch_student_relation', 'xg_batch_operation_log', 'xg_batch_permission', 'xg_business_period')
ORDER BY TABLE_NAME;
-- ===========================================
-- 第二步:执行数据迁移
-- ===========================================
SELECT '📋 第二步:执行数据迁移' as 'Step 2';
-- 执行数据迁移脚本
SOURCE 06-data-migration-phase1.sql;
-- 验证数据迁移结果
SELECT '✅ 验证数据迁移结果' as 'Data Migration Verification';
-- 检查学生信息表数据
SELECT
'学生信息表' as '表名',
COUNT(*) as '总记录数',
COUNT(CASE WHEN batch_id IS NOT NULL THEN 1 END) as '已关联批次数',
COUNT(CASE WHEN submission_status = 'APPROVED' THEN 1 END) as '已审核数'
FROM xg_stu_msg
WHERE deleted = 0;
-- 检查批次学生关联表数据
SELECT
'批次学生关联表' as '表名',
COUNT(*) as '总记录数',
COUNT(CASE WHEN approval_status = 'APPROVED' THEN 1 END) as '已审核数'
FROM xg_batch_student_relation
WHERE deleted = 0;
-- ===========================================
-- 第三步:执行权限配置
-- ===========================================
SELECT '📋 第三步:执行权限配置' as 'Step 3';
-- 执行权限数据迁移脚本
SOURCE 07-permission-data-migration.sql;
-- 验证权限配置结果
SELECT '✅ 验证权限配置结果' as 'Permission Configuration Verification';
-- 检查菜单权限
SELECT
'菜单权限' as '配置项',
COUNT(*) as '总数量',
COUNT(CASE WHEN status = '0' THEN 1 END) as '启用数量'
FROM sys_menu
WHERE menu_id BETWEEN 2001 AND 2024;
-- 检查角色权限
SELECT
'角色权限' as '配置项',
COUNT(*) as '总数量',
COUNT(DISTINCT role_id) as '角色数量'
FROM sys_role_menu
WHERE menu_id BETWEEN 2001 AND 2024;
-- ===========================================
-- 第四步:数据完整性验证
-- ===========================================
SELECT '📋 第四步:数据完整性验证' as 'Step 4';
-- 检查数据一致性
SELECT '🔍 数据一致性检查' as 'Consistency Check';
-- 检查是否有学生信息未关联到批次
SELECT
'未关联批次的学生信息' as '检查项',
COUNT(*) as '记录数',
CASE
WHEN COUNT(*) = 0 THEN '✅ 通过'
ELSE '❌ 失败'
END as '检查结果'
FROM xg_stu_msg
WHERE deleted = 0 AND batch_id IS NULL;
-- 检查是否有批次学生关联记录缺失对应的学生信息
SELECT
'孤立的批次学生关联记录' as '检查项',
COUNT(*) as '记录数',
CASE
WHEN COUNT(*) = 0 THEN '✅ 通过'
ELSE '❌ 失败'
END as '检查结果'
FROM xg_batch_student_relation r
WHERE r.deleted = 0
AND NOT EXISTS (
SELECT 1 FROM xg_stu_msg s
WHERE s.id = r.student_id AND s.deleted = 0
);
-- 检查学号是否一致
SELECT
'学号不一致的记录' as '检查项',
COUNT(*) as '记录数',
CASE
WHEN COUNT(*) = 0 THEN '✅ 通过'
ELSE '❌ 失败'
END as '检查结果'
FROM xg_batch_student_relation r
JOIN xg_stu_msg s ON r.student_id = s.id
WHERE r.deleted = 0
AND s.deleted = 0
AND r.student_number != s.student_number;
-- 检查必要的权限配置是否存在
SELECT
'必要权限配置' as '检查项',
COUNT(*) as '记录数',
CASE
WHEN COUNT(*) >= 5 THEN '✅ 通过'
ELSE '❌ 失败'
END as '检查结果'
FROM xg_batch_permission
WHERE deleted = 0 AND batch_id = 1;
-- ===========================================
-- 第五步:性能优化
-- ===========================================
SELECT '📋 第五步:性能优化' as 'Step 5';
-- 更新表统计信息
ANALYZE TABLE xg_stu_msg;
ANALYZE TABLE xg_collection_batch;
ANALYZE TABLE xg_batch_student_relation;
ANALYZE TABLE xg_batch_permission;
ANALYZE TABLE xg_batch_operation_log;
ANALYZE TABLE xg_business_period;
-- 优化表结构
OPTIMIZE TABLE xg_stu_msg;
OPTIMIZE TABLE xg_collection_batch;
OPTIMIZE TABLE xg_batch_student_relation;
OPTIMIZE TABLE xg_batch_permission;
OPTIMIZE TABLE xg_batch_operation_log;
OPTIMIZE TABLE xg_business_period;
SELECT '✅ 性能优化完成' as 'Performance Optimization';
-- ===========================================
-- 第六步:生成迁移报告
-- ===========================================
SELECT '📋 第六步:生成迁移报告' as 'Step 6';
-- 生成完整的迁移报告
SELECT '📊 数据迁移完成报告' as 'Final Migration Report';
-- 数据统计
SELECT
'数据统计' as '报告类型',
(SELECT COUNT(*) FROM xg_stu_msg WHERE deleted = 0) as '学生信息总数',
(SELECT COUNT(*) FROM xg_collection_batch WHERE deleted = 0) as '批次总数',
(SELECT COUNT(*) FROM xg_batch_student_relation WHERE deleted = 0) as '批次关联总数',
(SELECT COUNT(*) FROM xg_batch_permission WHERE deleted = 0) as '批次权限总数',
(SELECT COUNT(*) FROM xg_batch_operation_log WHERE deleted = 0) as '操作日志总数',
(SELECT COUNT(*) FROM xg_business_period WHERE deleted = 0) as '业务期间总数';
-- 权限统计
SELECT
'权限统计' as '报告类型',
(SELECT COUNT(*) FROM sys_menu WHERE menu_id BETWEEN 2001 AND 2024) as '菜单权限总数',
(SELECT COUNT(*) FROM sys_role_menu WHERE menu_id BETWEEN 2001 AND 2024) as '角色权限总数',
(SELECT COUNT(*) FROM sys_dict_data WHERE dict_code BETWEEN 1001 AND 1019) as '字典数据总数';
-- 状态统计
SELECT
'状态统计' as '报告类型',
(SELECT COUNT(*) FROM xg_stu_msg WHERE deleted = 0 AND submission_status = 'APPROVED') as '已审核学生信息数',
(SELECT COUNT(*) FROM xg_collection_batch WHERE deleted = 0 AND batch_status = 'ACTIVE') as '活跃批次数',
(SELECT COUNT(*) FROM xg_batch_permission WHERE deleted = 0 AND is_active = 1) as '活跃权限配置数';
-- 记录迁移完成日志
INSERT INTO xg_batch_operation_log (
log_id,
batch_id,
operation_type,
operation_description,
operator_id,
operator_name,
operation_time,
operation_result,
operation_details,
create_by,
create_time,
tenant_id,
deleted
) VALUES (
4,
1,
'FULL_MIGRATION_COMPLETE',
'完整数据迁移流程执行完成',
1,
'System',
NOW(),
'SUCCESS',
CONCAT('完整数据迁移成功完成,包括数据库结构调整、数据迁移、权限配置和性能优化。迁移学生信息:',
(SELECT COUNT(*) FROM xg_stu_msg WHERE deleted = 0), '条'),
1,
NOW(),
'000000',
0
);
-- ===========================================
-- 提交事务
-- ===========================================
-- 提交事务
COMMIT;
-- 记录执行结束时间
SELECT '🎉 数据迁移执行完成!' as 'Migration Complete', NOW() as 'End Time';
-- ===========================================
-- 后续操作建议
-- ===========================================
SELECT '📋 后续操作建议' as 'Post Migration Recommendations';
-- 建议在30天后执行的清理操作
SELECT '⚠️ 建议在确认迁移成功后执行以下清理操作:' as 'Cleanup Recommendations';
SELECT '1. 删除备份表:DROP TABLE IF EXISTS xg_stu_msg_backup_20250113;' as 'Recommendation 1';
SELECT '2. 重新启动应用服务,确保缓存刷新' as 'Recommendation 2';
SELECT '3. 验证前端页面功能是否正常' as 'Recommendation 3';
SELECT '4. 进行完整的功能测试' as 'Recommendation 4';
SELECT '5. 更新相关文档' as 'Recommendation 5';
-- 监控建议
SELECT '📊 建议监控以下指标:' as 'Monitoring Recommendations';
SELECT '1. 数据库性能指标' as 'Monitor 1';
SELECT '2. 应用响应时间' as 'Monitor 2';
SELECT '3. 用户操作日志' as 'Monitor 3';
SELECT '4. 系统错误日志' as 'Monitor 4';
-- 回滚准备
SELECT '🔄 如需回滚,请执行以下步骤:' as 'Rollback Instructions';
SELECT '1. 停止应用服务' as 'Rollback 1';
SELECT '2. 恢复数据库备份' as 'Rollback 2';
SELECT '3. 删除新增的表和数据' as 'Rollback 3';
SELECT '4. 重新启动应用服务' as 'Rollback 4';
SELECT '✅ 数据迁移脚本执行完成!请检查上述报告确认迁移结果。' as 'Final Status';