Oracle 11g DMP文件导入19c PDB01,需要关注字符集、是否包含BIGFILE,源端和目标的兼容度,需要在expdp时候附加参数。
首选方案:PDB 字符集 = AL32UTF8 + 国家字符集 = AL16UTF16
优势:完美兼容 CDB、支持多语言扩展、符合国家标准,长期维护成本低。
次选方案:仅当确定无多语言需求时,PDB 可选 ZHS16GBK(国家字符集仍为 AL16UTF16)。
技术先进性推荐AL32UTF8,而现实部署中ZHS16GBK是很多历史遗留、成本与风险权衡的结果。
实操填坑:
- 勿直接修改 PDB 字符集(ALTER DATABASE CHARACTER SET可能导致数据损坏),最好通过重建迁移。
- 客户端 NLS_LANG 需与 PDB 字符集一致(如 AL32UTF8 的 PDB 对应 NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
一、环境检查与准备工作
- 版本兼容性验证
- 检查DMP文件导出方式:
- 若为exp导出,需使用imp导入(不推荐,可能报版本错误)。
- 若为expdp导出,需用impdp导入(推荐)。
- 关键脚本:
-- 查看DMP文件头信息(需在服务器执行),提取前 1MB 数据(避免读取大文件)
dd if=etl_mgr_11g.DMP of=header.dmp bs=1M count=
strings header.dmp | grep -E "Version|EXPORT|Character set"
--查询直接查询兼容性参数
SELECT name, value AS compatible_version
FROM v$parameter
WHERE name = 'compatible';
--CDB-PDB
NAME
--------------------------------------------------------------------------------
COMPATIBLE_VERSION
--------------------------------------------------------------------------------
compatible
19.0.0
--确认核心组件(如Catalog)的版本与compatible参数一致,避免功能冲突
SELECT comp_name, version, status
FROM dba_registry
WHERE comp_id = 'CATALOG';
字符集与表空间检查
--确认字符集一致(避免乱码):
SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';
--- 检查表空间是否充足:(建议预留1.5倍DMP文件大小空间)
SELECT tablespace_name, sum(bytes)/1024/1024 AS "Size_MB"
FROM dba_data_files GROUP BY tablespace_name;
二、文件传输与目录设置
- 将DMP文件上传至19c服务器目录(如/u01/app/oracle/admin/testcdb/dpdump)。
- 权限修正:
chown oracle:oinstall /u01/app/oracle/admin/testcdb/dpdump/etl_mgr_11g.DMP
chmod 660 /u01/app/oracle/admin/testcdb/dpdump/etl_mgr_11g.DMP
--或者
chmod -x /u01/app/oracle/admin/testcdb/dpdump/etl_mgr_11g.DMP
su -oracle
[oracle@OL10:/u01/app/oracle/admin/testcdb/dpdump]$ ll
总计 27396
drwxr-x--- 2 oracle oinstall 6 6月28日 13:30 389C0CA85DCB2115E0630B14170AF1E6
drwxr-x--- 2 oracle oinstall 6 6月28日 13:38 389C33B592EF2924E0630B14170AAE49
-rw-r----- 1 oracle oinstall 160 6月28日 13:30 dp.log
-rw-r--r-- 1 root root 28049408 6月28日 16:21 etl_mgr_11g.DMP
创建Directory对象
CREATE OR REPLACE DIRECTORY dp_pdb01_dir AS '/u01/app/oracle/admin/testcdb/dpdump/';
GRANT READ, WRITE ON DIRECTORY dp_pdb01_dir TO system; -- 授权给操作用户
--
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
3 PDB01 READ WRITE NO
SQL> CREATE OR REPLACE DIRECTORY dp_pdb01_dir AS '/u01/app/oracle/admin/testcdb/dpdump/';
GRANT READ, WRITE ON DIRECTORY dp_pdb01_dir TO system;
Directory created.
SQL>
Grant succeeded.
三、用户与表空间配置
创建目标用户
CREATE USER etl_mgr IDENTIFIED BY "Oracle_4U"
DEFAULT TABLESPACE users QUOTA UNLIMITED ON users;
GRANT CONNECT, RESOURCE TO etl_mgr;
--
SQL> CREATE OR REPLACE DIRECTORY dp_pdb01_dir AS '/u01/app/oracle/admin/testcdb/dpdump/';
GRANT READ, WRITE ON DIRECTORY dp_pdb01_dir TO system;
Directory created.
SQL>
Grant succeeded.
SQL> CREATE USER etl_mgr IDENTIFIED BY "Oracle_4U"
DEFAULT TABLESPACE users QUOTA UNLIMITED ON users;
GRANT CONNECT, RESOURCE TO etl_mgr;
User created.
SQL>
Grant succeeded.
四、执行数据泵导入
基础导入命令
impdp system/oracle@localhost:1521/PDB01 \
DIRECTORY=dp_pdb01_dir \
DUMPFILE=etl_mgr_11g.DMP \
SCHEMAS=etl_mgr \
REMAP_SCHEMA=etl_mgr:etl_mgr \
----
--
Import: Release 19.0.0.0.0 - Production on Sat Jun 28 16:33:12 2025
Version 19.26.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Master table "SYSTEM"."SYS_IMPORT_SCHEMA_01" successfully loaded/unloaded
import done in AL32UTF8 character set and AL16UTF16 NCHAR character set
export done in ZHS16GBK character set and AL16UTF16 NCHAR character set
Warning: possible data loss in character set conversions
Starting "SYSTEM"."SYS_IMPORT_SCHEMA_01": system/********@localhost:1521/PDB01 DIRECTORY=dp_pdb01_dir DUMPFILE=etl_mgr_11g.DMP SCHEMAS=etl_mgr REMAP_SCHEMA=etl_mgr:etl_mgr
Processing object type SCHEMA_EXPORT/USER
ORA-31684: Object type USER:"ETL_MGR" already exists
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC
Processing object type SCHEMA_EXPORT/TYPE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
参数说明
|
参数 |
作用 |
|
TABLE_EXISTS_ACTION=REPLACE |
覆盖已存在的表(慎用) |
|
VERSION=11.2 |
兼容低版本导出文件 |
|
EXCLUDE=STATISTICS |
跳过统计信息(加速导入) |
五、常见错误与解决方案
- ORA-39142:版本不兼容方案:导出时添加version=11.2.0.1.0
- ORA-02374:表空间不足方案:扩展表空间或启用AUTOEXTEND
- ORA-00959:表空间不存在方案:按DMP文件中的表空间名重建(参考导出日志)
- 字符集冲突方案:强制转换字符集(谨慎)
附-重建PDB字符集的选择:
--
CREATE PLUGGABLE DATABASE pdb_name
ADMIN USER pdbadmin IDENTIFIED BY password
DEFAULT TABLESPACE users DATAFILE '/path/to/users01.dbf' SIZE 1G
-- 主字符集(二选一)
CHARACTER SET = AL32UTF8 -- 推荐多语言场景
-- CHARACTER SET = ZHS16GBK -- 仅纯中文场景
-- 国家字符集(固定选择)
NATIONAL CHARACTER SET AL16UTF16;
--验证字符集
-- 在 PDB 中执行
SELECT parameter, value
FROM nls_database_parameters
WHERE parameter IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
--
SELECT parameter, value
FROM nls_database_parameters
WHERE parameter IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16
NLS_CHARACTERSET
AL32UTF8
AL16UTF16 不是 PDB 的主字符集选项,而是国家字符集,专用于 NCHAR 等数据类型,与主字符集独立共存。
ZHS16GBK 与 AL32UTF8 不兼容:存储越南语“ế”等字符时,ZHS16GBK 会丢失数据(替换为 ?),而 AL32UTF8 可完整存储。
690

被折叠的 条评论
为什么被折叠?



