Oracle 11g 跨平台迁移实战:从 Windows 到 CentOS 的完整记录

一份涵盖数据库迁移、Java 版本兼容性、Tomcat 部署的踩坑全记录

前言

最近接手了一个项目,需要将一个运行在 Windows Server 2012 上的 Oracle 11g 数据库完整迁移到 CentOS 7.9 服务器上,并部署配套的 Tomcat 应用。整个过程涉及数据库导出导入、表空间创建、用户权限处理、Java 版本兼容性排查等多个环节,中间踩了不少坑,特此记录分享。


一、环境概览

项目 源环境 目标环境
操作系统 Windows Server 2012 CentOS 7.9
数据库 Oracle 11g R2 (11.2.0.1.0) Oracle 11g R2 (11.2.0.1.0)
字符集 ZHS16GBK ZHS16GBK
业务用户 JLRCWEB、CCRCPQ、CCRCPQU33 同左
Tomcat Windows 版 Tomcat 8.0.11 Linux 版 Tomcat 8.5.100
JDK 未知 1.8.0_211 → 1.7.0_261

二、数据库迁移全过程

2.1 安装包下载与校验

由于 Oracle 11g 官网下载需通过出口验证,我们选择了社区资源。下载了两个 zip 包后进行了完整性校验:

bash 复制代码
cksum linux.x64_11gR2_database_1of2.zip
# 3152418844 1239269270

cksum linux.x64_11gR2_database_2of2.zip
# 3669256139 1111416131

两个包的 cksum 值与社区参考值完全一致,确认文件完整无损。

2.2 Ubuntu/CentOS 依赖安装

在 CentOS 7.9 上安装 Oracle 11g 所需的依赖包(Ubuntu 用 apt,CentOS 用 yum):

bash 复制代码
yum install -y binutils gcc gcc-c++ glibc glibc-devel libaio libaio-devel \
  libcap-devel libstdc++ libstdc++-devel sysstat smartmontools unzip \
  vim net-tools ksh libXext libXtst libXrender libXrandr libXi \
  xorg-x11-utils xauth

2.3 表空间迁移

查询源库表空间信息:

sql 复制代码
SELECT DISTINCT tablespace_name FROM dba_segments WHERE owner = 'CCRCPQ';

源库业务表空间为 CCRCPQDATA,在目标库中创建同名表空间时遇到了 ORA-03206 错误------MAXSIZE 32G 超出了小文件表空间的单文件上限(约 32GB - 1 block)。修正为:

sql 复制代码
CREATE TABLESPACE CCRCPQDATA
DATAFILE '/home/oracle/app/oracle/oradata/orcl/CCRCPQDATA.dbf'
SIZE 12G
AUTOEXTEND ON NEXT 10M MAXSIZE 32767M;

2.4 跨用户授权

在导入 CCRCPQU33 用户时,因 CCRCPQ 用户尚不存在,部分对象授权失败。正确的导入顺序是:

  1. 先导入 CCRCPQ 用户
  2. 再导入 CCRCPQU33 用户
  3. 补授跨用户权限

补授权限 SQL:

sql 复制代码
GRANT SELECT ON "CCRCPQU33"."LEMIS_LOGIN_USERINFO" TO "CCRCPQ";
GRANT SELECT ON "CCRCPQU33"."UP_LEMIS_MENU" TO "CCRCPQ";
GRANT SELECT ON "CCRCPQU33"."UP_ORG_UNIT_EXT_LEMIS" TO "CCRCPQ";
GRANT SELECT ON "CCRCPQU33"."UP_ORG_USER" TO "CCRCPQ";
GRANT SELECT ON "CCRCPQU33"."UP_ORG_USER_BUSIROLE" TO "CCRCPQ";
GRANT SELECT ON "CCRCPQU33"."UP_ORG_USER_EXT_LEMIS" TO "CCRCPQ";
GRANT SELECT ON "CCRCPQU33"."V_ORG_USER_UNIT" TO "CCRCPQ";
GRANT SELECT ON "CCRCPQU33"."V_USER_MENU_AUTHORITY" TO "CCRCPQ";

2.5 数据泵导入命令

bash 复制代码
impdp system/密码@orcl directory=DATA_PUMP_DIR \
  dumpfile=CCRCPQ20260803_160249.DMP schemas=CCRCPQ

导入过程中出现部分编译警告(ORA-39082),属于正常现象,后续重新编译即可:

sql 复制代码
@?/rdbms/admin/utlrp.sql

三、Tomcat 部署与 Java 版本兼容性

3.1 JDK 安装与切换

CentOS 7 自带的 OpenJDK 8 无法满足应用需求,需要安装 Java 7:

bash 复制代码
yum install -y java-1.7.0-openjdk-devel

配置 Tomcat 使用特定 JDK(在 setenv.sh 中设置):

bash 复制代码
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64
export JAVA_OPTS="$JAVA_OPTS -server -Xms1024m -Xmx2048m -XX:MaxNewSize=256m -XX:MaxPermSize=512m"

3.2 关键报错:CharToByteConverter

启动 Tomcat 后日志中反复出现:

复制代码
java.lang.NoClassDefFoundError: sun/io/CharToByteConverter

原因分析sun.io.CharToByteConverter 是 Sun JDK 1.4 时代的内部 API,在 Java 8 中已被移除,应用原本在 Java 7 或更早版本下运行。

解决方案:将 Tomcat 的 JAVA_HOME 切换到 Java 7,彻底解决该问题。

3.3 Tomcat 启动验证

使用 setenv.sh 独立管理 JVM 参数是更规范的做法,Tomcat 启动时会自动加载该文件。

bash 复制代码
cd ~/apache/bin
./startup.sh
tail -f ~/apache/logs/catalina.out

四、迁移过程中的经验教训

4.1 注意事项清单

阶段 注意点
文件传输 dmp 文件必须用二进制模式传输,否则文件损坏
字符集一致性 源库和目标库字符集务必一致(ZHS16GBK)
导入顺序 存在跨用户授权时,注意用户导入顺序
表空间上限 小文件表空间单个数据文件上限约 32GB
Java 版本 老旧应用可能需要 Java 7,Java 8 移除了部分 API
跨用户授权 导入后如有 ORA-01917,需补授权限

4.2 常用命令速查

bash 复制代码
# 查看表空间
SELECT tablespace_name, file_name, bytes/1024/1024/1024 AS size_gb
FROM dba_data_files;

# 查看用户权限
SELECT * FROM dba_tab_privs WHERE grantee = 'CCRCPQ';

# 重新编译无效对象
@?/rdbms/admin/utlrp.sql

# 查看 Java 版本
java -version

五、总结

这次迁移的主要挑战集中在三个方面:

  1. Oracle 环境搭建:在 CentOS 上安装 Oracle 11g 需要准备大量依赖包,且表空间大小设置需注意小文件表空间的限制。

  2. 数据迁移:expdp/impdp 是可靠的迁移工具,但跨用户授权、字符集一致性和导入顺序需要特别注意。

  3. 应用兼容性 :老旧应用对 Java 版本有严格要求,sun.io.CharToByteConverter 是典型的 Java 8 不兼容案例,降级到 Java 7 是快速解决方案。

迁移完成后,Tomcat 应用正常运行,数据库查询、中文显示均无问题。整个过程中最大的教训是:不要想当然地认为 Java 8 向下兼容 Java 7,某些内部 API 的移除会导致应用无法启动。


记录时间:2026年8月

相关推荐
柒@宝儿姐2 小时前
若依 B 端从浏览器访问升级为 Windows 安装包交付流程
前端·javascript·vue.js·windows
肖恭伟2 小时前
MinerU 新手完整配置教程:Windows 下将 PDF 转为带图片的 Markdown
windows·pdf
心灵Haven14 小时前
Centos7 + Mysql8.0
mysql·centos
PieroPc1 天前
Windows 驱动备份与恢复工具 CMD .bat
windows
波罗丁牌1 天前
逆变与协变详解
windows·microsoft
三言老师1 天前
free查看内存与缓存状态实操
运维·服务器·网络·centos
映翰通朱工1 天前
Windows 上位机 + EC3320:USB 转 CAN 通信实测(从接线到 SSH 收包)
windows·stm32·ssh
我是Superman丶1 天前
【2026亲测】Wireshark安装教程 Windows系统|下载安装、Npcap配置及首次抓包
windows·测试工具·wireshark
贾天佑忆月 迷失的昵1 天前
Direct3D Draw函数 异步调用原理解析
服务器·windows·性能优化