Oracle Linux 到 AlmaLinux 10 迁移指南
本指南详细介绍如何从 Oracle Linux 8/9 迁移到 AlmaLinux 10,包括 UEK 内核处理、Oracle 软件兼容性以及企业级迁移流程。
迁移概述
Oracle Linux 特点分析
系统特征:
基础: RHEL 兼容系统
内核选项: RHCK (兼容内核) + UEK (Unbreakable Enterprise Kernel)
包管理: DNF/YUM (与 RHEL 兼容)
企业特色: Oracle 数据库优化、零停机内核更新
迁移复杂度:
- RHCK 环境: 低复杂度 (直接兼容)
- UEK 环境: 中等复杂度 (需要内核调整)
- Oracle 软件: 需要验证兼容性
- Ksplice 依赖: 需要替代方案
预计时间: 2-6小时/系统 (含 Oracle 软件验证)迁移收益评估
| 对比项目 | Oracle Linux | AlmaLinux 10 | 迁移收益 |
|---|---|---|---|
| 许可成本 | 免费 | 免费 | 无变化 |
| 支持成本 | $1,080-$24,000/年 | 社区+第三方 | 成本可控 |
| 内核更新 | UEK + Ksplice | 标准内核 | 统一管理 |
| Oracle 数据库 | 官方支持 | 完全兼容 | 保持功能 |
| 容器支持 | Podman/Docker | 原生支持 | 增强功能 |
| 供应商独立性 | Oracle 生态 | 厂商中立 | 降低风险 |
第一阶段:系统分析和准备
1.1 Oracle Linux 环境检查
检查系统版本和内核
# 检查 Oracle Linux 版本
cat /etc/oracle-release
cat /etc/os-release
# 检查当前内核类型
uname -r
if uname -r | grep -q "uek"; then
echo "当前使用 UEK 内核"
KERNEL_TYPE="UEK"
else
echo "当前使用 RHCK 兼容内核"
KERNEL_TYPE="RHCK"
fi
# 检查可用内核
rpm -qa | grep kernel
grubby --info=ALL
# 检查 Ksplice 状态
systemctl status ksplice 2>/dev/null || echo "Ksplice 未安装"
uptrack-show 2>/dev/null || echo "Uptrack 未配置"Oracle 特有软件检查
# 检查 Oracle 仓库配置
dnf repolist | grep -i oracle
ls /etc/yum.repos.d/oracle-* 2>/dev/null
# 检查 Oracle 数据库安装
ps aux | grep -i [o]ra
ls -la /opt/oracle* 2>/dev/null
cat /etc/oratab 2>/dev/null
# 检查 Oracle 企业级软件
rpm -qa | grep -E "(oracle|mysql-enterprise)"
# 检查 UEK 特有驱动和模块
lsmod | grep -E "(mlx|ib_|rds)"
find /lib/modules/$(uname -r) -name "*.ko" | grep -E "(oracle|uek)"1.2 应用程序兼容性评估
Oracle 数据库兼容性检查
# 检查 Oracle 数据库版本和配置
if [ -f "/etc/oratab" ]; then
echo "=== Oracle 数据库实例分析 ==="
cat /etc/oratab | grep -v "^#" | grep -v "^$"
# 检查每个实例的版本
for ORACLE_SID in $(cat /etc/oratab | grep -v "^#" | cut -d: -f1); do
if [ -n "$ORACLE_SID" ]; then
echo "检查实例: $ORACLE_SID"
export ORACLE_SID
export ORACLE_HOME=$(grep "^$ORACLE_SID:" /etc/oratab | cut -d: -f2)
if [ -x "$ORACLE_HOME/bin/sqlplus" ]; then
echo "exit" | $ORACLE_HOME/bin/sqlplus -V 2>/dev/null | head -1
fi
fi
done
fi企业级网络和存储检查
# InfiniBand 和高性能网络检查
if lsmod | grep -q ib_; then
echo "=== InfiniBand 配置检查 ==="
ibstat 2>/dev/null || echo "InfiniBand 工具未安装"
ls /sys/class/infiniband/ 2>/dev/null
fi
# Oracle 集群文件系统检查
if mount | grep -q ocfs2; then
echo "=== OCFS2 文件系统检查 ==="
mount | grep ocfs2
cat /etc/ocfs2/cluster.conf 2>/dev/null
fi
# Oracle ASM 检查
if systemctl is-active --quiet oracleasm; then
echo "=== Oracle ASM 检查 ==="
oracleasm listdisks 2>/dev/null
cat /etc/sysconfig/oracleasm 2>/dev/null
fi1.3 备份和迁移准备
全面系统备份
# 创建 Oracle Linux 专用备份脚本
cat > /root/oraclelinux_backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/backup/ol_to_alma_$(date +%Y%m%d_%H%M)"
mkdir -p $BACKUP_DIR
echo "开始 Oracle Linux 迁移备份..."
# 备份系统基础配置
tar --exclude='/proc' --exclude='/tmp' --exclude='/mnt' \
--exclude='/dev' --exclude='/sys' --exclude='/run' \
--exclude='/backup' --exclude='/opt/oracle/*/admin/*/adump' \
-czf $BACKUP_DIR/system_config.tar.gz /etc/
# 备份 Oracle 配置 (不包含数据文件)
if [ -d "/opt/oracle" ]; then
tar --exclude='*.dbf' --exclude='*.log' --exclude='*.ctl' \
--exclude='adump' --exclude='*.trc' \
-czf $BACKUP_DIR/oracle_config.tar.gz /opt/oracle/*/network /opt/oracle/*/dbs
fi
# 备份 Oracle ASM 配置
if [ -f "/etc/sysconfig/oracleasm" ]; then
cp /etc/sysconfig/oracleasm $BACKUP_DIR/
oracleasm listdisks > $BACKUP_DIR/asm_disks.txt 2>/dev/null || true
fi
# 备份 Oracle 集群配置
if [ -f "/etc/ocfs2/cluster.conf" ]; then
cp -r /etc/ocfs2 $BACKUP_DIR/
fi
# 备份内核配置
cp /boot/grub2/grub.cfg $BACKUP_DIR/
grubby --info=ALL > $BACKUP_DIR/kernel_info.txt
# 备份网络高级配置
if [ -d "/etc/rdma" ]; then
cp -r /etc/rdma $BACKUP_DIR/
fi
# 记录当前内核模块
lsmod > $BACKUP_DIR/loaded_modules.txt
find /lib/modules/$(uname -r) -name "*.ko" > $BACKUP_DIR/kernel_modules.txt
# 记录 Oracle 仓库配置
cp /etc/yum.repos.d/oracle-* $BACKUP_DIR/ 2>/dev/null || true
echo "备份完成: $BACKUP_DIR"
EOF
chmod +x /root/oraclelinux_backup.sh
/root/oraclelinux_backup.sh第二阶段:迁移前系统调整
2.1 内核环境准备
UEK 到 RHCK 内核切换 (如适用)
# 如果当前使用 UEK,先切换到兼容内核
if uname -r | grep -q "uek"; then
echo "当前使用 UEK 内核,准备切换到兼容内核..."
# 检查可用的兼容内核
rpm -qa | grep "kernel-[0-9]" | grep -v uek
# 安装最新的兼容内核 (如未安装)
dnf install -y kernel kernel-core kernel-modules
# 设置默认启动内核为兼容内核
RHCK_KERNEL=$(rpm -qa | grep "^kernel-[0-9]" | grep -v uek | sort -V | tail -1 | sed 's/kernel-//')
grubby --set-default-index=0
grubby --set-default="/boot/vmlinuz-$RHCK_KERNEL"
echo "需要重启到兼容内核,然后继续迁移..."
echo "重启命令: reboot"
echo "重启后验证: uname -r"
fi清理 Oracle 特有配置
# 禁用 Oracle 特有服务 (迁移后可重新配置)
systemctl disable oracleasm 2>/dev/null || true
systemctl disable oracle-database 2>/dev/null || true
systemctl disable ksplice 2>/dev/null || true
# 备份并清理 UEK 相关配置
if [ -f "/etc/sysctl.d/99-oracle.conf" ]; then
cp /etc/sysctl.d/99-oracle.conf /root/oracle-sysctl.backup
fi
# 禁用 Oracle 第三方仓库 (避免迁移冲突)
dnf config-manager --disable ol8_developer_EPEL ol8_addons ol8_UEKR7 2>/dev/null || true2.2 数据库预迁移处理
Oracle 数据库安全停机
# 创建数据库停机脚本
cat > /usr/local/bin/oracle_pre_migration.sh << 'EOF'
#!/bin/bash
if [ -f "/etc/oratab" ]; then
echo "准备 Oracle 数据库迁移..."
# 检查并停止所有数据库实例
for ORACLE_SID in $(cat /etc/oratab | grep -v "^#" | grep -v "^$" | cut -d: -f1); do
if [ -n "$ORACLE_SID" ]; then
export ORACLE_SID
export ORACLE_HOME=$(grep "^$ORACLE_SID:" /etc/oratab | cut -d: -f2)
echo "处理实例: $ORACLE_SID"
# 执行完整备份 (如果配置了 RMAN)
if [ -x "$ORACLE_HOME/bin/rman" ]; then
echo "建议执行完整的 RMAN 备份"
# rman target / << EOF
# BACKUP DATABASE PLUS ARCHIVELOG;
# EOF
fi
# 正常关闭数据库
echo "SHUTDOWN IMMEDIATE;" | $ORACLE_HOME/bin/sqlplus -S / as sysdba
# 停止监听器
$ORACLE_HOME/bin/lsnrctl stop 2>/dev/null || true
fi
done
# 停止 Oracle ASM (如果运行)
if systemctl is-active --quiet oracleasm; then
systemctl stop oracleasm
fi
echo "Oracle 数据库已准备迁移"
fi
EOF
chmod +x /usr/local/bin/oracle_pre_migration.sh
# 在迁移前执行: /usr/local/bin/oracle_pre_migration.sh第三阶段:AlmaLinux 迁移实施
3.1 就地升级迁移
使用 ELevate 工具
ELevate 通用流程如下(Oracle Linux 9 请将 el8 换为 el9、目标改为 almalinux10):
关于 ELevate
ELevate 是 AlmaLinux 提供的就地大版本迁移/升级工具,底层基于 leapp。下面是各 RHEL 系发行版通用的 ELevate 操作流程,源系统特有的预处理步骤见所在文档对应小节。
# 1. 先把当前系统更新到最新
dnf update -y
# 2. 安装 ELevate 仓库(按源系统大版本选择 elN:EL8 用 el8,EL9 用 el9)
dnf install -y https://repo.almalinux.org/elevate/elevate-release-latest-el8.noarch.rpm
# EL9 源系统改用:
# dnf install -y https://repo.almalinux.org/elevate/elevate-release-latest-el9.noarch.rpm
# 3. 安装 leapp 升级工具与 AlmaLinux 数据
dnf install -y leapp-upgrade leapp-data-almalinux
# 4. 运行预升级检查(目标版本按源系统大版本选择)
leapp preupgrade --target almalinux9 # EL8 源系统:目标 almalinux9
# EL9 源系统改用:
# leapp preupgrade --target almalinux10预检查会在 /var/log/leapp/leapp-report.txt 生成报告。常见处理:
# 第三方仓库冲突:临时禁用
dnf config-manager --disable remi epel-*
# 不兼容的软件包:移除或更新
dnf remove <package-name>
# 对已知的交互式问题,按报告提示在应答文件中确认
# 例如:leapp answer --section <check>.confirm=True确认预检查通过后执行升级(此过程会自动重启进入升级环境,完成后再次重启进入 AlmaLinux):
# 目标版本按源系统大版本选择
leapp upgrade --target almalinux9 # EL8 源系统:目标 almalinux9
# EL9 源系统改用:
# leapp upgrade --target almalinux10升级前务必备份
leapp upgrade 会替换系统底层组件,过程不可中断。执行前请确认已完成完整快照/备份,详见所在文档的「迁移前准备」与「快速回滚」。
Oracle Linux 特有的预处理(在 leapp preupgrade 前完成):
# 移除或禁用 UEK 相关包(保留当前运行内核)
dnf remove -y $(rpm -qa | grep uek | grep -v "$(uname -r)")
# 禁用 Oracle 仓库
dnf config-manager --disable ol*
# 处理可能的冲突包
dnf remove -y oracle-logos 2>/dev/null || true完成上述清理后再执行 leapp preupgrade 与 leapp upgrade。
迁移后验证和配置
# 系统重启后执行验证
cat /etc/almalinux-release
uname -r
# 检查内核模块兼容性
lsmod | grep -E "(oracle|ib_|mlx)"
# 重新配置网络 (如果需要)
systemctl restart NetworkManager
# 检查文件系统状态
df -h
mount | grep -E "(ocfs2|ext4|xfs)"3.2 Oracle 软件迁移适配
Oracle 数据库重新配置
# 创建 Oracle 迁移后配置脚本
cat > /usr/local/bin/oracle_post_migration.sh << 'EOF'
#!/bin/bash
echo "开始 Oracle 数据库迁移后配置..."
# 检查 Oracle 环境
if [ -f "/etc/oratab" ]; then
# 重新链接 Oracle 二进制文件 (重要步骤)
for ORACLE_SID in $(cat /etc/oratab | grep -v "^#" | grep -v "^$" | cut -d: -f1); do
if [ -n "$ORACLE_SID" ]; then
export ORACLE_HOME=$(grep "^$ORACLE_SID:" /etc/oratab | cut -d: -f2)
if [ -d "$ORACLE_HOME" ]; then
echo "重新链接 Oracle 实例: $ORACLE_SID"
cd $ORACLE_HOME
# 重新链接数据库二进制文件
if [ -f "$ORACLE_HOME/bin/relink" ]; then
$ORACLE_HOME/bin/relink all
fi
# 或者使用 make 重新链接
# make -f ins_rdbms.mk ioracle
fi
fi
done
# 重启 Oracle 服务
for ORACLE_SID in $(cat /etc/oratab | grep -v "^#" | grep -v "^$" | cut -d: -f1); do
if [ -n "$ORACLE_SID" ]; then
export ORACLE_SID
export ORACLE_HOME=$(grep "^$ORACLE_SID:" /etc/oratab | cut -d: -f2)
echo "启动实例: $ORACLE_SID"
# 启动监听器
$ORACLE_HOME/bin/lsnrctl start
# 启动数据库
echo "STARTUP;" | $ORACLE_HOME/bin/sqlplus -S / as sysdba
# 验证数据库状态
echo "SELECT status FROM v\$instance;" | $ORACLE_HOME/bin/sqlplus -S / as sysdba
fi
done
fi
echo "Oracle 数据库迁移后配置完成"
EOF
chmod +x /usr/local/bin/oracle_post_migration.shOracle ASM 重新配置
# 重新配置 Oracle ASM
if [ -f "/backup/ol_to_alma_*/oracleasm" ]; then
echo "重新配置 Oracle ASM..."
# 安装 Oracle ASM 库
dnf install -y oracleasm-support oracleasmlib
# 恢复配置
cp /backup/ol_to_alma_*/oracleasm /etc/sysconfig/
# 重新配置 ASM
oracleasm configure -i
oracleasm init
# 扫描 ASM 磁盘
oracleasm scandisks
oracleasm listdisks
fi3.3 高性能网络配置迁移
InfiniBand 网络重新配置
# 重新配置 InfiniBand (如果使用)
if [ -f "/backup/ol_to_alma_*/rdma" ]; then
echo "重新配置 InfiniBand 网络..."
# 安装 InfiniBand 支持
dnf groupinstall -y "InfiniBand Support"
dnf install -y rdma-core libibverbs opensm
# 恢复配置
cp -r /backup/ol_to_alma_*/rdma /etc/
# 启动 InfiniBand 服务
systemctl enable --now rdma
systemctl enable --now opensm 2>/dev/null || true
# 验证 InfiniBand 状态
ibstat
ibv_devinfo
fi第四阶段:性能优化和企业配置
4.1 内核参数优化
Oracle 数据库性能调优
# 创建 AlmaLinux 优化的 Oracle 内核参数
cat > /etc/sysctl.d/99-oracle-almalinux.conf << 'EOF'
# Oracle 数据库优化参数 - AlmaLinux 10
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
# 透明大页配置 (Oracle 建议禁用)
vm.nr_hugepages = 0
EOF
# 应用内核参数
sysctl -p /etc/sysctl.d/99-oracle-almalinux.conf系统资源限制配置
# 配置 Oracle 用户资源限制
cat > /etc/security/limits.d/99-oracle.conf << 'EOF'
# Oracle 数据库资源限制
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle hard memlock 134217728
oracle soft memlock 134217728
# Oracle Grid 用户限制
grid soft nofile 65536
grid hard nofile 65536
grid soft nproc 16384
grid hard nproc 16384
grid soft stack 10240
grid hard stack 32768
EOF4.2 存储和文件系统优化
企业级存储配置
# 配置多路径存储 (如果使用 SAN)
if [ -f "/etc/multipath.conf" ]; then
echo "配置多路径存储..."
# 备份原配置
cp /etc/multipath.conf /etc/multipath.conf.backup
# 重新加载多路径配置
systemctl restart multipathd
multipath -ll
fi
# 配置 LVM 性能优化
if command -v pvs &> /dev/null; then
echo "优化 LVM 配置..."
# 优化 LVM 配置
sed -i 's/use_lvmetad = 1/use_lvmetad = 0/' /etc/lvm/lvm.conf
systemctl restart lvm2-lvmetad 2>/dev/null || true
fi4.3 监控和管理集成
企业级监控配置
# 配置 Oracle 数据库监控
cat > /usr/local/bin/oracle_health_monitor.sh << 'EOF'
#!/bin/bash
LOG_FILE="/var/log/oracle_health.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$DATE] Oracle 健康检查开始" >> $LOG_FILE
if [ -f "/etc/oratab" ]; then
for ORACLE_SID in $(cat /etc/oratab | grep -v "^#" | grep -v "^$" | cut -d: -f1); do
if [ -n "$ORACLE_SID" ]; then
export ORACLE_SID
export ORACLE_HOME=$(grep "^$ORACLE_SID:" /etc/oratab | cut -d: -f2)
# 检查数据库状态
DB_STATUS=$(echo "SELECT status FROM v\$instance;" | $ORACLE_HOME/bin/sqlplus -S / as sysdba 2>/dev/null | grep -E "(OPEN|MOUNTED|STARTED)")
if [ -n "$DB_STATUS" ]; then
echo "[$DATE] $ORACLE_SID: $DB_STATUS" >> $LOG_FILE
else
echo "[$DATE] $ORACLE_SID: ERROR - 无法连接" >> $LOG_FILE
fi
fi
done
fi
echo "[$DATE] Oracle 健康检查完成" >> $LOG_FILE
EOF
chmod +x /usr/local/bin/oracle_health_monitor.sh
# 配置定期健康检查
echo "*/5 * * * * /usr/local/bin/oracle_health_monitor.sh" | crontab -第五阶段:验证和性能测试
5.1 Oracle 数据库功能验证
全面数据库测试
# 创建数据库功能测试脚本
cat > /usr/local/bin/oracle_migration_test.sh << 'EOF'
#!/bin/bash
echo "开始 Oracle 数据库迁移验证..."
if [ -f "/etc/oratab" ]; then
for ORACLE_SID in $(cat /etc/oratab | grep -v "^#" | grep -v "^$" | cut -d: -f1); do
if [ -n "$ORACLE_SID" ]; then
export ORACLE_SID
export ORACLE_HOME=$(grep "^$ORACLE_SID:" /etc/oratab | cut -d: -f2)
echo "测试实例: $ORACLE_SID"
# 基本连接测试
if echo "SELECT sysdate FROM dual;" | $ORACLE_HOME/bin/sqlplus -S / as sysdba > /tmp/oracle_test 2>&1; then
echo "✓ 数据库连接正常"
else
echo "✗ 数据库连接失败"
cat /tmp/oracle_test
fi
# 性能测试
echo "SELECT COUNT(*) FROM user_tables;" | $ORACLE_HOME/bin/sqlplus -S / as sysdba
# 监听器测试
if $ORACLE_HOME/bin/lsnrctl status | grep -q "Services Summary"; then
echo "✓ 监听器运行正常"
else
echo "✗ 监听器异常"
fi
fi
done
fi
echo "Oracle 数据库验证完成"
EOF
chmod +x /usr/local/bin/oracle_migration_test.sh
/usr/local/bin/oracle_migration_test.sh5.2 系统性能基准测试
Oracle 工作负载性能测试
# 安装性能测试工具
dnf install -y sysbench fio
# Oracle I/O 性能测试
echo "Oracle I/O 性能测试..."
if [ -d "/opt/oracle" ]; then
cd /opt/oracle
# 测试数据文件目录 I/O
fio --name=oracle_random_read \
--ioengine=libaio \
--iodepth=32 \
--rw=randread \
--bs=8k \
--direct=1 \
--size=1G \
--numjobs=4 \
--runtime=60 \
--group_reporting
fi
# 内存性能测试
echo "内存带宽测试..."
sysbench memory --memory-total-size=10G --memory-block-size=1M --threads=4 run
# 网络性能测试 (如果有多台机器)
dnf install -y iperf3
echo "网络性能测试工具已安装,使用 iperf3 进行测试"故障排查和支持
常见问题解决
Oracle 数据库启动问题
# Oracle 启动故障排查
cat > /usr/local/bin/oracle_troubleshoot.sh << 'EOF'
#!/bin/bash
echo "Oracle 数据库故障排查..."
if [ -f "/etc/oratab" ]; then
for ORACLE_SID in $(cat /etc/oratab | grep -v "^#" | grep -v "^$" | cut -d: -f1); do
if [ -n "$ORACLE_SID" ]; then
export ORACLE_SID
export ORACLE_HOME=$(grep "^$ORACLE_SID:" /etc/oratab | cut -d: -f2)
echo "检查实例: $ORACLE_SID"
# 检查 Oracle 进程
ps aux | grep -i "$ORACLE_SID" | grep -v grep
# 检查共享内存
ipcs -m | grep oracle
# 检查信号量
ipcs -s | grep oracle
# 检查监听器状态
$ORACLE_HOME/bin/lsnrctl status
# 检查告警日志
ALERT_LOG=$(find $ORACLE_HOME -name "alert_*.log" 2>/dev/null | head -1)
if [ -f "$ALERT_LOG" ]; then
echo "最近的告警日志:"
tail -20 "$ALERT_LOG"
fi
fi
done
fi
EOF
chmod +x /usr/local/bin/oracle_troubleshoot.sh内核模块兼容性问题
# 检查和修复内核模块问题
echo "检查内核模块兼容性..."
# 检查 Oracle 相关模块
lsmod | grep -E "(oracle|ocfs|asm)"
# 重新构建内核模块 (如果需要)
if [ -d "/lib/modules/$(uname -r)/weak-updates" ]; then
echo "重新构建弱更新模块..."
depmod -a
fi
# 检查 DKMS 模块
if command -v dkms &> /dev/null; then
dkms status
fi企业级迁移要点
典型部署场景
对于运行 Oracle 数据库(含 RAC + ASM)、使用 InfiniBand 高性能网络与 SAN 存储的大型环境,建议按阶段推进,并在每个阶段充分验证:
典型环境:
数据库: Oracle RAC + ASM
存储: SAN(多路径)
网络: 万兆以太网 / InfiniBand
建议迁移阶段:
阶段1: 开发环境验证
阶段2: 测试环境迁移
阶段3: 生产环境分批迁移
阶段4: 监控和持续优化
关键技术要点:
- UEK 到 RHCK 平滑切换
- Oracle RAC 滚动迁移,尽量缩短停机
- InfiniBand 网络配置完整迁移
- ASM 存储组完整保持实际成功率、停机时间与成本节省取决于具体环境、数据规模与运维流程,请基于自身基线在测试环境中评估,不应套用他处的统计数字。
迁移验收
迁移完成后,先逐项核对以下与源系统无关的通用项:
# 1. 确认系统标识已切换为 AlmaLinux
cat /etc/almalinux-release
cat /etc/os-release
# 2. 内核与软件包一致性
uname -r
dnf check
# 3. 失败单元与关键服务状态
systemctl list-units --type=service --state=failed
systemctl is-active sshd firewalld
# 4. 监听端口核对(与迁移前导出的记录逐一对比)
ss -tlnp
# 5. SELinux 状态
sestatus通用验收要点:系统标识为 AlmaLinux、dnf check 无错误、无 failed 服务、关键监听端口与服务和迁移前记录一致、SELinux 状态符合预期。
此外,Oracle Linux 迁移还需核对 Oracle 软件栈与存储:
# Oracle 实例与监听器状态(如适用)
/usr/local/bin/oracle_migration_test.sh
# 存储与文件系统(ASM/OCFS2/SAN 挂载完整性)
df -h
mount | grep -E "(ocfs2|xfs|ext4)"验收要点(Oracle 特有):Oracle 实例与监听器可正常连接、ASM/存储挂载完整。
快速回滚
迁移前必做(Oracle 特有):对 Oracle 数据库执行完整 RMAN 备份,并保留内核与仓库配置导出。
迁移前必做:对原系统创建完整快照或整机备份,并导出软件包列表、网络与防火墙配置等关键信息,作为回滚与核对基线。
新系统异常时:保持原系统在线(或可随时启动),将流量 / DNS 切回原主机即可快速恢复业务,再排查 AlmaLinux 侧问题。
仅在新系统稳定运行、数据与功能完成核对后,再下线原系统。
ELevate 升级失败:leapp 升级阶段失败通常保留原系统,可重启回到原环境,查看
/var/log/leapp/后重试。升级成功但 Oracle 异常:优先尝试重新链接二进制(
relink all);若仍无法恢复,从迁移前快照回滚并用 RMAN 恢复数据库。生产 RAC 环境建议逐节点滚动迁移,保留可回退节点,确认整体稳定后再继续。
总结: Oracle Linux 到 AlmaLinux 10 的迁移需要特别注意 Oracle 数据库和企业级功能的兼容性。通过详细的预迁移评估、Oracle 特有组件的正确处理以及迁移后的性能验证,可以实现平滑的系统迁移,同时保持 Oracle 软件栈的完整功能。
相关文档:
