数字档案馆系统升级中或升级后快速排错与数据救回实操指南
一、前置必做:立即触发紧急状态保护
无论错误出在升级中还是升级后,第一步必须断开所有业务终端连接+停止数据库写入+全量锁定备份介质,这是避免二次灾难的核心,严格按顺序操作:
- 断开业务终端:登录防火墙管理后台(常见是深信服AS/华为USG,IP为设备默认管理IP或企业自定义的内网段,账号密码存放在运维应急手册的《硬件设备基础信息表》),添加临时规则:禁止所有非核心运维IP访问系统应用端口(通常为80/443(Web端)、1521(Oracle)、3306(MySQL)、5432(PostgreSQL)、8080(中间件))
- 停止数据库写入:根据数据库类型执行对应只读锁定命令,操作前需用超级管理员账号(sys/Oracle、root/MySQL、postgres/PostgreSQL)登录
Oracle只读锁定代码(SQLPlus或PL/SQL Developer执行):
```sql -- 锁定所有普通用户表空间只读(临时表空间除外) BEGIN FOR rec IN (SELECT tablespace_name FROM dba_tablespaces WHERE tablespace_name NOT IN ('SYSTEM','SYSAUX','UNDOTBS1','TEMP')) LOOP EXECUTE IMMEDIATE 'ALTER TABLESPACE '||rec.tablespace_name||' READ ONLY'; END LOOP; END; / -- 检查是否锁定成功 SELECT tablespace_name, status FROM dba_tablespaces WHERE status = 'READ ONLY'; ```MySQL只读锁定代码(终端或Navicat Premium执行):
```sql -- 全局设置只读(root账号) SET GLOBAL read_only = ON; SET GLOBAL super_read_only = ON; -- 检查是否锁定成功 SHOW VARIABLES LIKE '%read_only%'; ```PostgreSQL只读锁定代码(终端或pgAdmin执行):
```sql -- 锁定所有普通用户数据库只读 UPDATE pg_database SET datallowconn = FALSE WHERE datname NOT IN ('postgres','template0','template1'); ALTER DATABASE 你的业务数据库名 SET default_transaction_read_only = ON; -- 检查是否锁定成功 SELECT datname, datallowconn FROM pg_database; ```- 锁定备份介质:拔出外接备份硬盘的USB/网线接口,云端备份则开启OSS/S3的“版本保护”和“访问控制白名单仅本机可读取”(阿里云OSS操作路径:控制台→Bucket→数据安全→版本管理→开启;访问控制→权限策略→新建白名单策略仅允许本机公网IP访问)
二、升级中出错:精准回滚的3步操作
升级中出错(停留在进度条、弹窗报错、进程崩溃),优先使用系统自带的回滚快照,无快照则按“备份介质→中间件→应用→配置”的顺序还原:
2.1 使用系统自带快照回滚
主流数字档案馆系统(如超星、万方、浙大恩特)均支持升级前自动生成快照,操作路径通用:
- 登录系统所在服务器的本地控制台(不能远程!),输入运维应急账号密码(存放在《数字档案馆运维手册》第3部分)
- 进入【系统管理】→【升级管理】→【历史快照】,选择最近一次升级前1分钟内的快照(标记为“系统自动生成”)
- 点击“强制回滚”按钮,等待30-60分钟(时间取决于数据量),回滚期间不要断电或重启服务器
2.2 无快照时的手动还原
如果系统未生成快照,严格按以下顺序还原:
2.2.1 还原数据库
Oracle还原(RMAN备份)代码(终端执行):
```bash 进入RMAN rman target sys/你的密码@你的数据库SID 启动数据库到mount状态 STARTUP MOUNT; 还原最近的全量备份 RESTORE DATABASE; 恢复到升级前的时间点(需提前查RMAN备份日志,替换时间戳) RECOVER DATABASE UNTIL TIME '202X-XX-XX XX:XX:XX'; 打开数据库并重置日志 ALTER DATABASE OPEN RESETLOGS; ```MySQL还原(mysqldump备份)代码(终端执行):
```bash 先解锁临时表空间的写入限制?不,先停止MySQL服务 systemctl stop mysqld 清空业务数据库(提前确认!) mysql -u root -p -e "DROP DATABASE IF EXISTS 你的业务数据库名; CREATE DATABASE 你的业务数据库名;" 还原最近的全量备份 mysql -u root -p 你的业务数据库名 < /你的备份路径/你的备份文件名.sql 重启MySQL服务 systemctl start mysqld ```
PostgreSQL还原(pg_dump备份)代码(终端执行):
```bash 先停止PostgreSQL服务 systemctl stop postgresql 清空业务数据库 sudo -u postgres psql -c "DROP DATABASE IF EXISTS 你的业务数据库名; CREATE DATABASE 你的业务数据库名;" 还原最近的全量备份 sudo -u postgres pg_restore -d 你的业务数据库名 /你的备份路径/你的备份文件名.dump 重启PostgreSQL服务 systemctl start postgresql ```2.2.2 还原中间件与应用
先停止中间件服务(如Tomcat:systemctl stop tomcat;WebLogic:执行/你的WebLogic路径/user_projects/domains/你的域名/bin/stopWebLogic.sh),然后删除中间件下的整个webapps目录,最后将备份的webapps目录(升级前必须单独备份)复制到原路径。
2.2.3 还原配置文件
将备份的配置文件(如Tomcat的server.xml、web.xml;数据库的tnsnames.ora、my.cnf、postgresql.conf)覆盖原路径的配置文件。
三、升级后出错:5种高频问题的快速修复
升级后能登录但功能异常,优先查系统错误日志,路径通用为:/你的应用路径/logs/error.log(Web端)、/你的数据库路径/admin/你的SID/bdump/alert_你的SID.log(Oracle)、/var/log/mysqld.log(MySQL)、/var/log/postgresql/你的版本号-main.log(PostgreSQL),以下是5种高频问题的修复:
3.1 档案全文检索失效
90%是因为索引未重建,操作路径通用:
- 登录系统Web端的【系统管理员】账号
- 进入【全文检索管理】→【索引管理】
- 先点击“清空所有索引”,等待清空完成
- 再点击“全量重建索引”,期间禁止解锁数据库
3.2 旧档案无法打开或预览
检查路径映射是否丢失,以Tomcat为例,编辑server.xml,在
3.3 用户权限丢失
如果系统支持权限导出导入,先导入升级前的权限备份(存放在/你的应用路径/backups/permission/你的备份文件名.xml),否则:
- 用系统管理员账号登录
- 进入【用户管理】→【权限批量恢复】,选择“恢复到升级前默认权限组”
3.4 数据库连接超时
检查连接池配置,以Tomcat的context.xml为例,修改Resource标签内的参数(替换为你的数据库信息):
```xml3.5 系统界面乱码
统一字符编码为UTF-8,修改3个地方:
- 数据库:已在还原时设置为UTF-8,无需修改
- 中间件:Tomcat修改server.xml的Connector标签,添加URIEncoding="UTF-8";WebLogic修改config.xml的
标签,添加 UTF-8 - 应用:已在还原时覆盖原配置,无需修改
四、恢复验证与收尾
所有修复完成后,必须按顺序验证:
- 解锁数据库:反向执行前置必做的只读锁定命令
- 单用户测试:用普通档案管理员账号测试登录、检索、打开、上传、删除、权限管理功能
- 小批量终端测试:开放2-3台业务终端IP,测试正常业务流程
- 全量恢复业务:删除防火墙临时规则,开放所有业务终端
- 重新生成完整备份:备份数据库、中间件、应用、配置文件,标记为“升级救回后全量备份”