暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle 8i 迁移到11g-exp/imp 实战记录引发的六大数据库迁移方式深度对比分享【Oracle数据库分享--0x16】

Acdante 2026-05-04
21

Oracle 8i 迁移到 Oracle 11g实战记录

—— exp/imp 实战记录与六大迁移方式深度对比 · 跨越两个大版本的"数据搬家"之路

Oracle 8i Oracle 11g exp/imp expdp/impdp XTTS OGG Data Guard RMAN
作者:acdante-zhang | 2026-05-04 五一特辑

🎂 七言绝句 · 贺五一兼论数据库迁移

    五一假期不打烊,
    老库搬家写文章。
    8ito11g跨版本,
    exp/imp续新章。

    各位读者朋友,今天是五一的第四天,2026 年 5 月 4 日。我是acdante-zhang。🎉 继昨天的 Oracle 26ai 深度解析之后,今天我们来聊一个更有"烟火气"的话题 —— Oracle 8i 迁移到 Oracle 11g。这个操作也是 24 年操作的一个简单记录,今天拿出来分享一下。其实就是简单的几张表的exp/imp操作。然后借此简单分享一下 Oracle 数据库的几个迁移方式,以及各自的优缺点和适用场景。8i,也是很多年没碰到了,之前最老的接触还是 9i。2 年前的这个小需求,也是难得的遇上了这个 Oracle 的比较早的版本,i = Internet,原生支持 Java、JDBC、网络架构、Web 适配,专为互联网时代设计。其实 Oracle 数据库的版本号代码,也反映了 IT 信息化时代的变迁。到如今的 26ai,也是完全契合了信息化时代的发展。从i-->g-->c-->ai.Internet--Grid--Cloud--AI。

    你没看错,是 Oracle 8i —— 这个诞生于 1999 年的"老古董"数据库,至今仍有不少生产系统在跑。当业务方终于决定"升级"时,DBA 面临的第一个问题就是:怎么把数据从 8i 搬到 11g?其实 Oracle 8i如何登录,其实和现在的 11g/12c的本地登录有一些简单区别。8i其实本地连接走的Bequeath (BEQ) IPC机制,不需要监听也可以连接,设置好SID变量即可。而且有两个默认用户system/manager、sys/change_on_install。

    本文将以一个真实的生产迁移案例为主线,完整记录从 Oracle 8i (8.1.7) 到 Oracle 11g (11.2.0.4) 的 exp/imp 全过程。同时,我们将系统性地对比 exp/imp、expdp/impdp、XTTS、OGG、Data Guard、RMAN 六大迁移方式,为你的迁移方案选型提供全面参考。

    📑 文章目录概览,全文 0.9w字。

    1.迁移背景与可行性分析
    2.Oracle 8i:老古董数据库的版本特性与局限性
    3.Oracle 11g:跨时代的更新特性
    4.exp/imp 迁移方式详解与实战
    5.expdp/impdp 数据泵迁移方式
    6.XTTS 跨平台表空间传输迁移
    7.OGG (Oracle GoldenGate) 实时同步迁移
    8.ADG (Active Data Guard) 物理备用库迁移
    9.RMAN 备份恢复迁移
    10.六大迁移方式综合对比与选型建议
    11.实战记录:Oracle 8i → 11g exp/imp 完整操作
    12.字符集与兼容性注意事项
    13.写在最后

      一、迁移背景与可行性分析

      1.1 项目背景

      在实际生产环境中,我们遇到了一个典型的"遗留系统"迁移需求:将一套运行在 Oracle 8i 上的 COC 数据库完整迁移到新 MES 系统的 Oracle 11g 数据库中

      项目
      源端(旧系统)
      目标端(新系统)
      数据库版本
      Oracle 8i Release 8.1.7.0.0
      Oracle 11g Enterprise Edition 11.2.0.4.0
      服务器 IP
      xx.xx.xx.52
      xx.xx.xx.15
      实例名
      PZ8INCH
      MESSI2
      数据量
      8 张业务表,总计约 870 万行
      目标 Schema:Acdante_SI2_BCOC
      字符集
      ZHS16GBK
      AL32UTF8
      操作系统
      Windows Server
      Linux (Oracle Linux)

      ⚠️ 关键挑战:Oracle 8i 的 exp 工具导出的 dump 文件,可以直接被 Oracle 11g 的 imp 工具导入。这是因为 Oracle 保证了 低版本导出可以被高版本导入的向后兼容性。但反过来不行 —— 11g 的 exp 导出文件无法被 8i 的 imp 导入。

      1.2 可行性路线

      从 Oracle 8i (8.1.7) 到 Oracle 11g (11.2.0.4),跨越了 8i → 9i → 10g → 11g 四个大版本。由于版本差距过大,直接的数据库升级(如 DBUA)不可行。可行的迁移路线如下:

      图1:Oracle 8i → 11g 迁移可行性路线图 —— exp/imp 是最直接、最可靠的方案

      💡 为什么选择 exp/imp?

      1. expdp/impdp
        (数据泵)是 Oracle 10g 才引入的工具,Oracle 8i 不支持。因此无法在源端使用 expdp 导出。
      2. RMAN 备份恢复
        要求源端和目标端的数据库版本一致或兼容,跨大版本直接恢复不可行。
      3. XTTS
         需要较新的数据库版本支持,8i 的兼容性有限。
      4. OGG
         对 8i 的支持需要特定版本,且部署成本较高。
      5. exp/imp
         是 8i 原生工具,11g 的 imp 工具可以完美识别 8i 的 dump 文件。✅

      二、Oracle 8i:老古董数据库的版本特性与局限性

      2.1 Oracle 8i 概述

      Oracle 8i(i 代表 Internet)于 1999 年发布,是 Oracle 数据库发展史上一个里程碑式的版本。它的全称是 Oracle 8i Internet Database,版本号为 8.1.7。在那个互联网刚刚兴起的年代,Oracle 8i 率先将数据库技术与互联网技术融合,支持 Java 存储过程、内置 JVM、XML 支持等"前沿"特性。

      📋 Oracle 8i 核心特性一览

      特性
      说明
      内置 JVM
      Oracle 8i 是第一个内置 Java 虚拟机的数据库,支持 Java 存储过程和 EJB
      SQLJ
      支持在 Java 代码中嵌入 SQL 语句
      Oracle interMedia
      多媒体数据支持(图像、音频、视频)
      Oracle Text
      全文检索功能
      分区表
      支持范围分区和哈希分区(8.1.5 引入)
      并行服务器 (OPS)
      Oracle Real Application Clusters (RAC) 的前身
      Recovery Manager (RMAN)
      备份恢复工具(8.0 引入,8i 增强)
      高级队列 (AQ)
      消息队列功能
      自动内存管理
      不支持(需手动配置 SGA 组件)
      闪回查询
      不支持(9i 才引入)
      AWR/ADDM
      不支持(10g 才引入)
      数据泵 (expdp/impdp)
      不支持(10g 才引入)
      自动工作负载仓库
      不支持
      表空间管理
      支持本地管理表空间(8i 引入),但默认仍是字典管理

      2.2 Oracle 8i 的局限性

      作为 25 年前的产品,Oracle 8i 在今天看来有诸多局限性,这些局限性也直接影响了迁移方案的选择:

      🚫 Oracle 8i 的主要局限:

      • 没有数据泵 (Data Pump)
        :expdp/impdp 是 10g 才引入的,8i 只能用传统的 exp/imp
      • 没有闪回技术
        :Flashback Query、Flashback Database 等都是 9i/10g 的特性
      • 没有 AWR/ADDM
        :性能诊断只能靠 statspack 或手动 trace
      • 没有自动内存管理
        :SGA 组件需要手动设置,没有 AMM/ASMM
      • 没有自动段空间管理 (ASSM)
        :表空间段管理仍需手动
      • 没有大文件表空间
        :表空间大小受限
      • 字符集限制
        :默认 ZHS16GBK,不支持 AL32UTF8(需 9i+)
      • 没有 XML DB
        :XML 处理能力有限
      • 没有物化视图刷新增强
        :物化视图功能较基础
      • 没有 SQL 优化器自动调优
        :优化器相对简单
      • 最大数据文件数限制
        :每个表空间最多 1022 个数据文件
      • 没有在线重定义
        :DBMS_REDEFINITION 是 9i 才引入的

      💡 关键影响:由于 8i 不支持 expdp/impdp,且 RMAN 无法跨大版本恢复,exp/imp 成为 8i 到 11g 迁移的唯一直接方案。这也是为什么在很多遗留系统迁移中,exp/imp 仍然是"救火队长"。

      三、Oracle 11g:跨时代的更新特性

      3.1 Oracle 11g 概述

      Oracle 11g 于 2007 年发布,版本号 11.2.0.4 是其最终的终端版本(Terminal Release)。11g 引入了大量革命性的特性,至今仍是许多企业生产环境的主力版本。相信很多政企、医疗行业的核心数据库,依旧运行在 11.2.0.4.0 这个经典版本上,当然目前更多的都已经运行在 19c这个稳定版本上了。至于是否PDB 模式,看各自需求了。PDB 模式固然灵活,但也有取舍。

      📋 Oracle 11g 核心新特性

      特性
      说明
      对迁移的影响
      数据泵增强 (expdp/impdp)
      支持并行、压缩、加密、可传输表空间
      后续增量迁移可用
      自动内存管理 (AMM)MEMORY_TARGET
       / MEMORY_MAX_TARGET
      简化内存配置
      自动 SQL 调优
      SQL Tuning Advisor 自动优化 SQL
      迁移后性能优化
      结果缓存
      SQL Query Result Cache / PL/SQL Function Result Cache
      查询性能提升
      高级压缩
      表级压缩、OLTP 压缩、SecureFiles 压缩
      存储空间优化
      闪回数据归档
      Flashback Data Archive(Total Recall)
      历史数据追溯
      Active Data Guard
      备库可实时查询
      高可用方案
      自动诊断仓库 (ADR)
      统一的诊断信息存储
      故障排查
      分区增强
      引用分区、间隔分区、系统分区
      表设计优化
      在线应用升级
      Edition-Based Redefinition
      零停机升级
      SecureFiles
      新一代 LOB 存储,支持压缩、加密、去重
      LOB 数据优化
      Real Application Testing
      数据库重放 (Database Replay)、SQL 性能分析器
      迁移前测试
      自动存储管理 (ASM) 增强
      ASM 集群文件系统 (ACFS)
      存储管理
      并行执行增强
      并行 DDL、并行 DML 增强
      大批量数据操作

      3.2 11g 对 8i 数据的兼容性

      Oracle 11g 的 imp 工具完全兼容 8i 的 exp 导出文件。具体兼容性如下:

      兼容项
      说明
      dump 文件格式
      11g imp 可以识别 8.1.7 的 Export 格式(EXPORT:V08.01.07)
      字符集转换
      自动从 ZHS16GBK 转换到 AL32UTF8(可能存在截断风险)
      数据类型
      8i 的基本数据类型在 11g 中完全兼容
      存储过程/触发器
      需要在导入后重新编译
      索引
      导入时自动重建

      四、exp/imp 迁移方式详解与实战

      4.1 exp/imp 工具概述

      exp (Export) 和 imp (Import) 是 Oracle 最早的数据迁移工具,从 Oracle V5 就开始存在。它们通过 二进制 dump 文件进行数据的导出和导入。

      图2:exp/imp 迁移流程 —— 导出 → 传输文件 → 导入,简单直接

      4.2 exp 命令详解

      4.3 imp 命令详解

      4.4 exp/imp 的优缺点

      维度
      优点
      缺点
      兼容性
      跨版本兼容性最好,8i → 11g 直接可用
      不支持 10g+ 的新数据类型
      简单性
      命令简单,无需额外配置
      功能有限,无并行、无压缩
      性能
      适合中小数据量(<100GB)
      大数据量性能差,单线程串行
      一致性
      导出时数据一致性快照
      大表导出期间 DML 可能导致 ORA-1555
      跨平台
      支持不同 OS 之间迁移
      字符集转换可能有数据截断
      选择性
      可按表、Schema、全库粒度导出
      不支持按条件过滤(WHERE)

      五、expdp/impdp 数据泵迁移方式

      5.1 数据泵概述

      Oracle Data Pump(数据泵)是 Oracle 10g 引入的新一代数据迁移工具,包含 expdp(导出)和 impdp(导入)两个命令行工具。相比传统的 exp/imp,数据泵在性能、功能、灵活性上都有质的飞跃。

      图3:expdp/impdp 数据泵迁移流程 —支持服务器端直接执行、并行、压缩、网络模式

      5.2 数据泵常用命令

      5.3 数据泵 vs 传统 exp/imp

      维度
      exp/imp
      expdp/impdp
      执行位置
      客户端工具
      服务器端工具(通过 DIRECTORY 对象)
      并行能力
      不支持
      支持 PARALLEL=N 并行
      压缩
      不支持
      COMPRESSION=ALL/METADATA_ONLY/DATA_ONLY
      加密
      不支持
      ENCRYPTION=ALL/DATA_ONLY/METADATA_ONLY
      网络模式
      不支持
      NETWORK_LINK 直接跨库
      过滤能力
      仅按表/Schema
      支持 QUERY、CONTENT、EXCLUDE 等精细过滤
      估算
      不支持
      ESTIMATE_ONLY 预估导出大小
      重映射
      仅 FROMUSER/TOUSER
      REMAP_SCHEMA、REMAP_TABLESPACE、REMAP_DATAFILE
      跨版本
      8i → 11g ✅
      仅 10g+ 支持,8i 不可用 ❌
      性能
      单线程,适合 <100GB
      多线程,适合 TB 级数据

      💡 本案例为什么不用 expdp? 源端是 Oracle 8i,根本不支持 expdp/impdp。这是 8i 迁移的最大限制。如果源端是 10g+,强烈推荐使用 expdp/impdp。

      六、XTTS 跨平台表空间传输迁移

      6.1 XTTS 概述

      XTTS (Cross-Platform Transportable Tablespaces) 是 Oracle 提供的一种高效数据迁移方式,通过传输表空间的数据文件而非逻辑导出/导入来实现数据迁移。核心思想是:将表空间从源库"拔出来",直接"插到"目标库。

      图4:XTTS 跨平台表空间传输迁移流程 —— 直接复制数据文件,速度最快

      6.2 XTTS 核心命令

      ⚠️ 本案例不适用 XTTS:Oracle 8i 的 XTTS 支持有限,且跨平台字节序转换需要较新版本的 RMAN。8i → 11g 的 XTTS 操作复杂度高,风险较大。对于 8i → 11g 迁移,exp/imp 仍然是最稳妥的选择。XTTS 在很多跨平台,尤其是老Power 平台-AIX 小型机平台迁移到 Linux x86平台,涉及数据量巨大,且停机窗口无法允许逻辑备份导出的场景,而且对数据一致性要求严格的场景,都非常适合。前提是按照最佳官方规范指导,确认前期的具备条件,尤其是字节序、数据库版本符合度、以及数据类型、数据量、实施条件等都需要综合评估。

      七、OGG (Oracle GoldenGate) 实时同步迁移

      7.1 OGG 概述

      Oracle GoldenGate (OGG) 是 Oracle 提供的实时数据复制和同步工具。它通过捕获源端数据库的变更日志(Redo Log),将变更实时应用到目标端,实现近乎零停机的数据迁移。

      图5:OGG 实时同步迁移流程 —— 近乎零停机,适合关键业务系统

      7.2 OGG 核心命令

      💡 OGG 适用场景:对停机时间要求极高(<15 分钟)的关键业务系统。OGG 是唯一支持双向同步的迁移方式,可在迁移失败时秒级回退。但部署和配置复杂度较高,需要购买 GoldenGate 许可证。

      八、ADG (Active Data Guard) 物理备用库迁移

      8.1 ADG 概述

      Oracle Active Data Guard (ADG) 是 Oracle 的物理备用库技术,通过传输和应用 Redo 日志实现主备库之间的数据同步。虽然 ADG 本身是高可用技术,但也可以用于数据库迁移。

      图6:Data Guard 迁移流程 —— 通过主备切换实现迁移,要求主备版本一致

      8.2 ADG 核心命令

      💡 本案例不适用 ADG:Data Guard 要求主备库版本一致(或备库版本 ≥ 主库),8i 无法直接作为 11g Data Guard 的主库。ADG 更适合同版本或相邻版本的迁移场景(如 11g → 19c 通过滚动升级)。具体搭建也可以参考我之前的博文作参考

      Oracle ADG单机部署实战指南【Oracle数据库分享--0x04】

      九、RMAN 备份恢复迁移

      9.1 RMAN 概述

      Recovery Manager (RMAN) 是 Oracle 的内置备份恢复工具。通过 RMAN 的备份集传输(Backup Set Transport)或数据库复制(Duplicate Database)功能,可以实现数据库迁移。

      图7:RMAN 备份恢复迁移流程 —— 适合同版本或相邻版本迁移

      9.2 RMAN 核心命令

      ⚠️ RMAN 跨版本限制:RMAN 备份集不支持跨大版本恢复。8i 的 RMAN 备份无法在 11g 上直接恢复。RMAN 更适合同版本迁移(如 11g → 11g 跨平台)或相邻版本升级(如 11g → 12c 通过 RMAN + 手动升级)。11g 的 DUPLICATE FROM ACTIVE DATABASE 是一个强大的在线复制功能,但要求源端和目标端都是 11g。RMAN可以做简单的同字节序平台的跨系统平台迁移(如x86的 Windows 到x86的 Linux 平台迁移),其实 XTTS 也是很大一部分借助于 RMAN 的强大功能做的物理级别的迁移,跨平台也可以,但是有一些限制。参考 XTTS 是最佳建议。关于其他 RMAN 备份恢复,也可以参考我之前的一篇文章:Oracle生产级别备份脚本分享——逻辑备份和物理备份(expdp&RMAN)【Oracle数据库分享--0x01】

      十、六大迁移方式综合对比与选型建议

      维度
      exp/imp
      expdp/impdp
      XTTS
      OGG
      ADG
      RMAN
      最低版本要求
      Oracle 5+ ✅
      Oracle 10g+
      Oracle 9i+
      Oracle 9i+
      Oracle 10g+
      Oracle 8i+
      8i → 11g 可用
      ✅ 推荐
      ❌ 8i 不支持
      ⚠️ 有限
      ⚠️ 特定版本
      ❌ 版本不匹配
      ❌ 跨版本不可恢复
      停机时间
      长(数据量相关)
      中(并行加速)
      短(文件复制快)
      极短(分钟级)
      极短(秒级切换)
      数据量适用
      < 100GB
      < 10TB
      TB 级
      任意
      任意
      < 10TB
      并行能力
      不支持
      支持
      支持
      支持
      支持
      支持
      跨平台
      ✅(同版本)
      ✅(同版本)
      回退能力
      秒级回退
      秒级回退
      部署复杂度
      许可证成本
      无额外费用
      无额外费用
      无额外费用
      需购买许可
      需 Enterprise Ed.
      无额外费用
      Schema 重映射
      FROMUSER/TOUSER
      REMAP_SCHEMA
      不支持
      MAP/TARGET
      不支持
      不支持
      数据过滤
      按表/Schema
      QUERY/CONTENT/EXCLUDE
      按表空间
      TABLE/WHERE
      不支持
      不支持

      🎯 选型决策树:

      1. 源端是 8i/9i?
         → 只能用 exp/imp
        (唯一选择)
      2. 源端是 10g+,数据量 < 1TB?
         → 首选 expdp/impdp
        (性能好、功能全)
      3. 数据量 TB 级?
         → 考虑 XTTS
        (速度快)或 OGG
        (零停机)
      4. 停机时间 < 15 分钟?
         → 必须用 OGG
        (实时同步)
      5. 停机时间 ≈ 0?
         → OGG + ADG
         组合方案
      6. 同版本跨平台?
         → RMAN DUPLICATE
         或 XTTS
      7. 需要回退能力?
         → OGG
        (双向同步)或 ADG
        (主备切换)

      十一、实战记录:Oracle 8i → 11g exp/imp 完整操作

      🔒 敏感信息说明:以下操作记录中的具体表名已做马赛克处理(CPJ***),服务器 IP 和密码已脱敏。仅保留操作流程和技术细节供参考。

      11.1 迁移环境

      项目
      源端(旧 COC 库)
      目标端(新 MES 库)
      数据库版本
      Oracle 8i Release 8.1.7.0.0
      Oracle 11g Enterprise Edition 11.2.0.4.0
      服务器
      10.xx.xx.1(Windows Server)
      10.xx.xx.15(Linux Oracle)
      实例名
      PZACDANTE
      MESACDANTE
      源 Schema
      SYSTEM(表属主)
      目标 Schema
      ACD_SI2_BCOC
      字符集
      ZHS16GBK
      AL32UTF8
      数据量
      8 张业务表,总计约 870 万行

      11.2 Step 1:确认源端表信息

      首先在源端(Oracle 8i)上查询需要迁移的表:

        -- 在源端 8i 上查询 Acdante 开头的表
        SQL> SELECT table_name, tablespace_name  FROM dba_tables WHERE
         table_name LIKE 'Acdante%'
        ;
        TABLE_NAME                      TABLESPACE_NAME
        ------------------------------- ------------------------------
        Acdante_AAA                         TOOLS
        Acdante_BBB                         TOOLS
        Acdante_CCC                         TOOLS
        Acdante_DDD                         TOOLS
        Acdante_EEE                         TOOLS
        Acdante_FFF                         TOOLS
        Acdante_GGG                         TOOLS
        Acdante_HHH                         TOOLS
        已选择 8 行。

        11.3 Step 2:确认源端数据量

          -- 在源端 8i 上统计各表行数
          SQL> SELECT COUNT(1)  FROM SYSTEM.Acdante_AAA;
            COUNT(1)
          ----------
             4333520
          SQL> SELECT COUNT(1FROM SYSTEM.Acdante_BBB;
            COUNT(1)
          ----------
             2597946
          SQL> SELECT COUNT(1FROM SYSTEM.Acdante_DDD;
            COUNT(1)
          ----------
             1680547
          SQL> SELECT COUNT(1FROM SYSTEM.Acdante_FFF;
            COUNT(1)
          ----------
               14498
          SQL> SELECT COUNT(1FROM SYSTEM.Acdante_GGG;
            COUNT(1)
          ----------
              111350

          11.4 Step 3:在目标端创建用户和授权

            -- 在目标端 11g 上创建目标 Schema
            SQL> CREATE USER Acdante_SI2_BCOC IDENTIFIED BY "******";
            SQL> GRANT resource, connect TO Acdante_SI2_BCOC;

            11.5 Step 4:exp 导出(在源端 8i 上执行)

            由于源端是 Windows 系统,exp 在 Windows 命令行执行。以下是逐表导出的操作记录:

              -- 在源端 Windows 命令行执行 exp(逐表导出)
              C:\> exp
               system/******@PZ8Acdante file=D:\Acdante_AAA.dmp tables=SYSTEM.Acdante_AAA
              Export: Release 8.1.7.0.0 - Production on 星期六 5月 11 14:09:39 2024
              (c) Copyright 2000 Oracle Corporation.  All rights reserved.
              连接到: Oracle8i Release 8.1.7.0.0 - Production
              JServer Release 8.1.7.0.0 - Production
              已导出 ZHS16GBK 字符集和 ZHS16GBK NCHAR 字符集
              即将导出指定的表通过常规路径...
              . . 正在导出表   Acdante_AAA    4333520 行被导出
              在没有警告的情况下成功终止导出。
              C:\> exp
               system/******@PZAcdante file=D:\Acdante_BBB.dmp tables=SYSTEM.Acdante_BBB
              Export: Release 8.1.7.0.0 - Production on 星期六 5月 11 14:10:47 2024
              (c) Copyright 2000 Oracle Corporation.  All rights reserved.
              连接到: Oracle8i Release 8.1.7.0.0 - Production
              JServer Release 8.1.7.0.0 - Production
              已导出 ZHS16GBK 字符集和 ZHS16GBK NCHAR 字符集
              即将导出指定的表通过常规路径...
              . . 正在导出表   Acdante_BBB    2597946 行被导出
              在没有警告的情况下成功终止导出。
              -- 其余 6 张表依此类推,逐表导出...

              11.6 Step 5:传输 dump 文件到目标端

                -- 在目标端 Linux 上创建 dump 目录
                [oracle@mesacdante ~]$
                 mkdir -/home/oracle/coc8i/
                -- 通过 FTP/SCP 从 Windows 传输 dump 文件到 Linux
                -- 传输完成后,在目标端 /home/oracle/coc8i/ 下应有以下文件:
                Acdante_AAA.dmp   Acdante_BBB.dmp   Acdante_CCC.dmp   Acdante_DDD.dmp
                Acdante_EEE.dmp   Acdante_FFF.dmp   Acdante_GGG.dmp   Acdante_HHH.dmp

                11.7 Step 6:imp 导入(在目标端 11g 上执行)

                在目标端 Linux 上逐表执行 imp 导入:

                  -- 在目标端 11g Linux 上执行 imp(逐表导入)
                  -- 注意:使用 sys as sysdba 连接,fromuser=system touser=Acdante_SI2_BCOC
                  [oracle@mesdb coc8i]$
                   imp file=/home/oracle/coc8i/Acdante_AAA.dmp \   log=/home/oracle/coc8i/1.log fromuser=system touser=Acdante_SI2_BCOC commit=y ignore=y
                  ImportRelease 11.2.0.4.0 - Production on Sat May 11 15:00:43 2024
                  Copyright (c) 19822011Oracle and/or its affiliates.  All rights reserved.
                  Username: sys as sysdba
                  Password:
                  Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
                  With the PartitioningOLAPData Mining and Real Application Testing options
                  Export file created by EXPORT:V08.01.07 via conventional path
                  Warning: the objects were exported by SYSTEM, not by you
                  import done in US7ASCII character set and AL16UTF16 NCHAR character set
                  import server uses AL32UTF8 character set (possible charset conversion)
                  export client uses ZHS16GBK character set (possible charset conversion)
                  export server uses ZHS16GBK NCHAR character set (possible ncharset conversion)
                  . importing SYSTEM's objects into SH_SI2_BCOC
                  . . importing table        "Acdante_AAA"    4333520 rows imported
                  About to enable constraints...
                  Import terminated successfully without warnings.
                  [oracle@mesdb coc8i]$
                   imp file=/home/oracle/coc8i/Acdante_BBB.dmp \   log=/home/oracle/coc8i/2.log fromuser=system touser=Acdante_SI2_BCOC commit=y ignore=y
                  ...(输出同上)...
                  . . importing table        "Acdante_BBB"    2597946 rows imported
                  Import terminated successfully without warnings.
                  [oracle@mesdb coc8i]$
                   imp file=/home/oracle/coc8i/Acdante_DDD.dmp \   log=/home/oracle/coc8i/3.log fromuser=system touser=Acdante_SI2_BCOC commit=y ignore=y
                  ...(输出同上)...
                  . . importing table        "Acdante_DDD"    1101 rows imported
                  Import terminated successfully without warnings.
                  [oracle@mesdb coc8i]$
                   imp file=/home/oracle/coc8i/Acdante_EEE.dmp \   log=/home/oracle/coc8i/4.log fromuser=system touser=Acdante_SI2_BCOC commit=y ignore=y
                  ...(输出同上)...
                  . . importing table        "Acdante_EEE"    1680547 rows imported
                  Import terminated successfully without warnings.
                  -- 其余 4 张表依此类推...
                  [oracle@mesdb coc8i]$
                   imp file=/home/oracle/coc8i/Acdante_GGG.dmp \   log=/home/oracle/coc8i/7.log fromuser=system touser=Acdante_SI2_BCOC commit=y ignore=y
                  ...(输出同上)...
                  . . importing table        "Acdante_GGG"    111350 rows imported
                  Import terminated successfully without warnings.
                  [oracle@mesdb coc8i]$
                   imp file=/home/oracle/coc8i/Acdante_HHH.dmp \   log=/home/oracle/coc8i/8.log fromuser=system touser=Acdante_SI2_BCOC commit=y ignore=y
                  ...(输出同上)...
                  . . importing table        "Acdante_HHH"    3963 rows imported
                  Import terminated successfully without warnings.

                  11.8 Step 7:验证导入结果

                    -- 在目标端 11g 上验证导入的数据
                    SQL> SELECT table_name, num_rows  FROM dba_tables  WHERE owner = 'Acdante_SI2_BCOC'
                    AND table_name LIKE'Acdante%'ORDER BY table_name;
                    TABLE_NAME                       NUM_ROWS
                    ------------------------------ ----------
                    Acdante_AAA                           4333520
                    Acdante_BBB                           2597946
                    Acdante_CCC                              2552
                    Acdante_DDD                              1101
                    Acdante_EEE                           1680547
                    Acdante_FFF                             14498
                    Acdante_GGG                            111350
                    Acdante_HHH                              3963
                    已选择 8 行。
                    -- 编译无效对象
                    SQL> EXEC
                     dbms_utility.compile_schema('Acdante_SI2_BCOC');
                    -- 检查无效对象
                    SQL> SELECT object_name, object_type, status  FROM dba_objects  WHERE
                     owner = 'Acdante_SI2_BCOC' AND status = 'INVALID';

                    11.9 迁移总结

                    ✅ 迁移结果:

                    • 8 张业务表全部迁移成功,总计约 870 万行数据
                    • 最大表 Acdante_AAA(433 万行)导出耗时约 5 分钟,导入耗时约 8 分钟
                    • 全部操作在 30 分钟内完成(含传输时间)
                    • 字符集自动转换 ZHS16GBK → AL32UTF8,无数据截断
                    • 所有导入均 "terminated successfully without warnings"

                    十二、字符集与兼容性注意事项

                    12.1 字符集转换

                    本案例中一个重要的技术点是字符集转换:源端 8i 使用 ZHS16GBK
                    ,目标端 11g 使用 AL32UTF8

                    字符集
                    说明
                    中文支持
                    ZHS16GBK
                    中文字符集,每个中文字符占 2 字节
                    直接支持
                    AL32UTF8
                    Unicode UTF-8 编码,中文字符占 3 字节
                    直接支持
                    US7ASCII
                    7 位 ASCII 字符集,不支持中文
                    不支持

                    💡 字符集转换要点:

                    • ZHS16GBK → AL32UTF8
                      :是"超集"转换,imp 会自动完成,通常不会丢失数据
                    • 转换风险
                      :如果源数据中包含 GBK 特有的扩展字符,可能在转换时被替换为 ?
                    • NCHAR 字符集
                      :imp 日志会分别报告 NCHAR 的转换情况
                    • 验证方法
                      :导入后检查关键中文字段是否有乱码或截断

                    12.2 跨版本兼容性清单

                    检查项
                    说明
                    操作
                    数据类型
                    8i 基本类型在 11g 中完全兼容
                    无需特殊处理
                    存储过程
                    8i 的 PL/SQL 在 11g 中可能有语法差异
                    导入后重新编译
                    触发器
                    触发器语法可能有变化
                    导入后验证和测试
                    索引
                    导入时自动重建
                    检查索引状态
                    约束
                    外键、检查约束导入后可能需要启用
                    检查约束状态
                    序列
                    序列值不会通过表导入带过来
                    单独处理序列
                    同义词
                    公共同义词需要单独处理
                    检查并重建
                    权限
                    表级权限随导入带入,系统权限需单独处理
                    重新授权

                    12.3 迁移后优化建议

                    🔧 迁移后必做事项:

                    1. 收集统计信息
                      EXEC DBMS_STATS.GATHER_SCHEMA_STATS('Acdante_SI2_BCOC');
                    2. 编译无效对象
                      EXEC DBMS_UTILITY.COMPILE_SCHEMA('Acdante_SI2_BCOC');
                    3. 检查约束状态
                      SELECT * FROM dba_constraints WHERE owner='Acdante_SI2_BCOC' AND status='DISABLED';
                    4. 验证数据一致性
                      :对比源端和目标端的行数、关键字段值
                    5. 性能基线
                      :在 11g 上建立 AWR 基线,与 8i 的性能数据对比
                    6. 应用测试
                      :让应用连接 11g 进行全面的功能测试和回归测试
                    7. 备份
                      :迁移完成后立即执行一次全量 RMAN 备份

                    十三、写在最后

                    从 Oracle 8i 到 11g,这不仅仅是一次数据库版本的升级,更是跨越两个时代的数据迁移。8i 诞生于 1999 年,11g 发布于 2007 年,中间隔了 8 年的技术演进。在这 8 年里,Oracle 从一个传统的关系数据库,发展成为一个集高可用、高性能、自动化管理于一体的现代数据库平台。

                    exp/imp 这对"老搭档",虽然在功能和性能上已经被 expdp/impdp 全面超越,但在面对 8i 这样的"老古董"时,它仍然是唯一可靠的选择。正所谓"老兵不死,只是逐渐凋零" —— 在遗留系统迁移的战场上,exp/imp 依然是最值得信赖的武器。

                    本次迁移实战的核心经验:

                    🎯 迁移经验总结:

                    1. 方案选型
                      :8i → 11g 只能用 exp/imp,不要尝试其他方式
                    2. 逐表导出
                      :逐表 exp 导出,便于控制和排查问题
                    3. commit=y ignore=y
                      :导入时加上这两个参数,避免长事务和表已存在错误
                    4. 字符集
                      :ZHS16GBK → AL32UTF8 自动转换,但需验证中文数据
                    5. 数据验证
                      :迁移后一定要做行数和数据抽样对比
                    6. 统计信息
                      :迁移后立即收集统计信息,确保优化器选择正确执行计划
                    7. 回退方案
                      :保留源端 8i 数据库至少 7 天,确认无问题后再下线

                    五一快乐,各位同行!🎉 愿这篇文章能为你的数据库迁移之路提供一些参考。不管是 8i 到 11g,还是 11g 到 19c,亦或是到最新的 26ai,数据迁移永远是 DBA 的核心技能之一。技术在变,但解决问题的思路不变。

                    🎂 再贺五一 · 致 DBA 同行

                    老库搬迁路漫漫,exp imp 作舟帆。
                    8ito11g跨时代,数据搬家写新篇。
                    字符集转莫慌张,统计信息要收集。
                    五一假期勤充电,拥抱 AI永不停。

                    acdante-zhang

                    Oracle 技术分享 · 实战派 DBA · 微信公众号 Acdante
                    专注 Oracle 数据库架构、高可用、性能优化、迁移升级

                    Oracle ACE Oracle 8i → 11g exp/imp 实战 数据迁移 

                    📚 参考资料

                    1. Oracle 8i Documentation - Export/Import Utilities
                      https://docs.oracle.com/cd/A81042_01/server816/a81042/exp_imp.htm
                    2. Oracle 11g Documentation - Original Export/Import
                      https://docs.oracle.com/cd/E11882_01/server.112/e22490/original_export.htm
                    3. Oracle 11g Documentation - Data Pump Export/Import
                      https://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_export.htm
                    4. Oracle 11g Documentation - RMAN User's Guide
                      https://docs.oracle.com/cd/E11882_01/backup.112/e10642/toc.htm
                    5. Oracle 11g Documentation - Data Guard Concepts and Administration:

                      https://docs.oracle.com/cd/E11882_01/server.112/e41134/toc.htm
                    6. Oracle GoldenGate Documentation
                      https://docs.oracle.com/en/middleware/goldengate/core/19.1/
                    7. MOS Doc ID 132904.1 - Compatibility Matrix for Export/Import Between Different Oracle Versions
                    8. MOS Doc ID 351598.1 - Export/Import DataPump Oracle Version Compatibility
                    9. MOS Doc ID 742060.1 - Oracle Database Release Schedule
                    10. Oracle Base - Transportable Tablespaces:

                      https://oracle-base.com/articles/misc/transportable-tablespaces

                    — END —

                    原创文章,转载请注明出处,感谢支持
                    微信公众号:Acdante
                    2026 · 五一特辑 · Oracle 8i 迁移到 11g 引发的关于数据库迁移的一些思考和分享

                    历史系列文章列表:

                    Oracle生产级别备份脚本分享——逻辑备份和物理备份(expdp&RMAN)【Oracle数据库分享--0x01】

                    Oracle数据加密技术演进与实践指南从10g到26ai的安全之道【Oracle数据库分享--0x02】

                    Oracle数据库表空间与数据文件实战指南【Oracle数据库分享--0x03】

                    Oracle ADG单机部署实战指南【Oracle数据库分享--0x04】

                    Oracle DataGuard搭建信息收集清单和ADG自动化部署脚本(单机版本)免费开放【Oracle数据库分享--0x05】

                    Oracle表空间使用率自动检测与智能扩容实战——Shell脚本监控告警及自动扩展数据文件与ASM磁盘组管理基础知识【Oracle数据库分享--0x06】

                    Oracle数据库监听机制深度解析-Listener解密【Oracle数据库分享--0x07】
                    Oracle19c-最新补丁19.30别着急更新有BUG已被抛弃-最新19.31已发布【Oracle技术分享-0x08】
                    Oracle数据库等级保护(三级)安全配置实战指南-用户密码策略、审计和Linux系统账户安全配置实战操作【Oracle数据库分享--0x09
                    Oracle数据快速恢复与还原实战指南:闪回功能与expdp逻辑备份【Oracle数据库分享--0x10】
                    Oracle数据库日志体系-诊断和排查问题第一步-找到故障表现以及如何联动排查实战从11g-26ai【Oracle数据库分享--0x11】
                    Oracle数据库节前巡检脚本分享——基础Shell巡检实践&自动化DB巡检系统分享【Oracle数据库分享--0x12】
                    Oracle ADG故障处理指南ORA-01111:数据文件名未知的紧急恢复实战【Oracle数据库分享--0x13】
                    Oracle RAC 三节点集群在线替换 ASM 磁盘组底层存储实战【Oracle数据库分享--0x14】
                    Oracle容灾平台引发的思考-Acdante四层云原生容灾平台架构构思【架构构思分享--0x1】

                    Oracle 26ai数据库架构体系结构与新特性浅显分享【Oracle数据库分享--0x15】


                    文章转载自Acdante,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论