283 lines
9.2 KiB
SQL
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'; |