找回密码
 立即注册
首页 业界区 业界 未知来源的DMP文件导入到你创建的HIS用户及对应表空间( ...

未知来源的DMP文件导入到你创建的HIS用户及对应表空间(且不新增表空间)

寿爹座 2025-11-20 20:25:03
要将未知来源的DMP文件导入到你创建的HIS用户及对应表空间(且不新增表空间),核心是通过Oracle的impdp(数据泵导入)工具,并强制将DMP中的表空间、用户映射到你的HIS表空间和用户。以下是分步操作指南:
一、前提准备


  • 确认环境

    • 确保Oracle服务正常运行,且你有SYSDBA权限(如sys用户)。
    • 记录你的表空间路径:

      • 正式表空间:HIS(数据文件E:\ORACLE_APP\oradata\orcl\HIS_DATA.DBF)
      • 临时表空间:HIS_TEMP


  • 上传DMP文件
    将DMP文件放到Oracle服务器可访问的目录(建议创建专用目录),例如:
    1. -- 1. 创建目录对象(sys用户执行)
    2. CREATE DIRECTORY DMP_DIR AS 'E:\ORACLE_DMP';
    3. -- 2. 授权HIS用户读写该目录
    4. GRANT READ, WRITE ON DIRECTORY DMP_DIR TO HIS;
    复制代码
    然后将DMP文件复制到E:\ORACLE_DMP目录下。
二、关键:数据泵导入(impdp)命令

使用impdp的核心参数强制映射:

  • REMAP_SCHEMA:将DMP中的源用户映射到你的HIS用户(无论源用户是什么)。
  • REMAP_TABLESPACE:将DMP中的所有表空间映射到你的HIS表空间(避免创建新表空间)。
  • TABLE_EXISTS_ACTION:处理已存在表的情况(建议REPLACE覆盖,或APPEND追加)。
命令格式(Windows系统,cmd窗口执行):
  1. impdp sys/你的sys密码@orcl as sysdba
  2. DIRECTORY=DMP_DIR
  3. DUMPFILE=你的DMP文件名.dmp  -- 替换为实际DMP文件名,如his_data.dmp
  4. LOGFILE=his_imp.log         -- 导入日志文件(可选,建议保留)
  5. REMAP_SCHEMA=源用户:HIS     -- 源用户填%(通配符),强制所有用户映射到HIS
  6. REMAP_TABLESPACE=源表空间:HIS  -- 源表空间填%,强制所有表空间映射到HIS
  7. TABLE_EXISTS_ACTION=REPLACE  -- 存在则替换,按需改为APPEND/KEEP
  8. EXCLUDE=USER                 -- 排除用户创建(避免重复创建HIS用户)
  9. NOLOGFILE=N                  -- 若不需要日志可设Y,建议保留日志
复制代码
简化版(适配“未知源用户/表空间”):

如果完全不知道DMP中的源用户和表空间,直接用通配符强制映射:
  1. impdp sys/123456@orcl as sysdba
  2. DIRECTORY=DMP_DIR
  3. DUMPFILE=his_backup.dmp
  4. LOGFILE=his_imp_2025.log
  5. REMAP_SCHEMA=%:HIS  -- 所有源用户映射到HIS
  6. REMAP_TABLESPACE=%:HIS  -- 所有源表空间映射到HIS
  7. TABLE_EXISTS_ACTION=REPLACE
  8. EXCLUDE=USER,PROFILE,TABLESPACE  -- 排除用户/配置文件/表空间创建
复制代码
三、分步操作详解

步骤1:以sys用户登录SQLPlus,创建目录(若未创建)
  1. sqlplus sys/你的sys密码@orcl as sysdba
  2. -- 创建目录对象
  3. CREATE DIRECTORY DMP_DIR AS 'E:\ORACLE_DMP';
  4. -- 授权HIS用户访问目录
  5. GRANT READ, WRITE ON DIRECTORY DMP_DIR TO HIS;
  6. -- 验证目录是否存在
  7. SELECT * FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME='DMP_DIR';
  8. exit;
复制代码
步骤2:执行impdp导入命令(cmd窗口)

替换以下参数后执行:

  • sys/123456:你的sys用户密码
  • orcl:数据库实例名(若为本地默认实例,可省略@orcl)
  • his_backup.dmp:你的DMP文件名
  1. impdp sys/123456@orcl as sysdba
  2. DIRECTORY=DMP_DIR
  3. DUMPFILE=his_backup.dmp
  4. LOGFILE=his_imp.log
  5. REMAP_SCHEMA=%:HIS
  6. REMAP_TABLESPACE=%:HIS
  7. TABLE_EXISTS_ACTION=REPLACE
  8. EXCLUDE=USER
复制代码
四、常见问题及解决方案

问题1:导入时报“表空间不存在”


  • 原因:DMP中包含未映射的表空间,或通配符映射未生效。
  • 解决:显式指定所有源表空间映射(先查询DMP中的表空间):
    1. -- 先查询DMP中的表空间(需先执行导入预览)
    2. impdp sys/密码@orcl as sysdba DIRECTORY=DMP_DIR DUMPFILE=xxx.dmp SQLFILE=preview.sql
    3. -- 查看preview.sql中的表空间名称,然后显式映射
    4. impdp ... REMAP_TABLESPACE=源表空间1:HIS,源表空间2:HIS ...
    复制代码
问题2:权限不足


  • 原因:HIS用户缺少导入权限,或sys用户权限不足。
  • 解决:给HIS用户赋予导入导出权限:
    1. GRANT IMP_FULL_DATABASE, EXP_FULL_DATABASE TO HIS;
    复制代码
问题3:临时表空间不足


  • 原因:导入大量数据时临时表空间不够。
  • 解决:扩展你的HIS_TEMP临时表空间(已设置自动扩展,若仍不够,手动扩容):
    1. ALTER TABLESPACE HIS_TEMP ADD TEMPFILE 'E:\ORACLE_APP\oradata\orcl\HIS_TEMP_DATA2.DBF' SIZE 100M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;
    复制代码
问题4:DMP文件是旧版imp导出的(而非impdp)


  • 原因:DMP由imp(传统导入)生成,需用imp命令导入。
  • 解决:改用imp命令(适配旧版DMP):
    1. imp sys/密码@orcl as sysdba
    2. FILE=E:\ORACLE_DMP\his_backup.dmp
    3. FROMUSER=%
    4. TOUSER=HIS
    5. TABLESPACES=HIS
    6. IGNORE=Y
    复制代码
五、验证导入结果

导入完成后,登录HIS用户验证数据:
  1. sqlplus HIS/HIS@orcl
  2. -- 查看导入的表
  3. SELECT TABLE_NAME FROM USER_TABLES;
  4. -- 查看表空间使用情况
  5. SELECT TABLESPACE_NAME, BYTES/1024/1024 MB FROM USER_SEGMENTS;
复制代码
核心注意事项


  • 避免新增表空间:必须通过REMAP_TABLESPACE强制将所有源表空间映射到HIS,禁止导入语句中创建新表空间。
  • 权限控制:导入完成后,若不需要DBA权限,可回收(仅保留业务所需权限):
    1. REVOKE DBA FROM HIS;
    2. GRANT CONNECT, RESOURCE TO HIS; -- 基础权限
    复制代码
  • 日志检查:导入完成后查看his_imp.log,确认无报错(重点关注“表空间”“用户”相关警告)。
按以上步骤操作,即可将未知来源的DMP文件完整导入到你创建的HIS用户和HIS表空间,且不会新增表空间。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册