Oracle 数据泵导出与还原操作指南

1. 导出前检查(生产库)

1.1 查询目录对象及权限

复制代码
-- 查看所有目录对象
SELECT * FROM dba_directories;

-- 查询 DUMP_DIR 目录对 MESPRD 用户的授权情况
SELECT * FROM dba_tab_privs 
WHERE grantee = 'MESPRD' 
  AND table_name = 'DUMP_DIR';

1.2 确认备份目录磁盘空间

复制代码
df -h /u01/app/oracle/admin/cimdb/dpdump

1.3 确认 Data Pump 命令可用

复制代码
# 切换到 oracle 用户
su - oracle

# 查找 expdp 可执行文件
find $ORACLE_HOME -name expdp -type f 2>/dev/null
复制代码
# 如找到,说明支持数据泵

2. 导出数据(生产库)

跳过大表数据,只导出表结构(DDL)

复制代码
expdp MESPRD/MESPRD@cimdb \
  DIRECTORY=DUMP_DIR \
  DUMPFILE=cimdb_MESPRO_20260327.dmp \
  LOGFILE=cimdb_MESPRO_20260327.log \
  SCHEMAS=MESPRD \
  EXCLUDE=TABLE_DATA:\"IN \(\'SL_COM_IF_LOG\'\)\"

说明

  • TABLE_DATA:只导出表定义,不导出数据

  • 若想完全跳过表(包括结构),可使用 EXCLUDE=TABLE


3. 传输 DMP 文件到测试服务器

复制代码
scp /u01/app/oracle/admin/cimdb/dpdump/cimdb_MESPRD_20260327.dmp root@测试服务器IP:/home/oracle/app/oracle/admin/cimdbsync/dpdump/

请将 测试服务器IP 替换为目标地址。


4. 还原前准备(测试库)

4.1 断开已有连接(如用户已存在)

复制代码
-- 查询 MES260327 用户的会话
SELECT SID, SERIAL#, USERNAME FROM V$SESSION WHERE USERNAME = 'MES260327';

-- 强制断开(示例:SID=5052, SERIAL#=55357)
ALTER SYSTEM KILL SESSION '5052,55357' IMMEDIATE;

4.2 删除用户(如需重建)

复制代码
DROP USER MES260327 CASCADE;

4.3 创建新的表空间

复制代码
CREATE TABLESPACE TS_MES_TXT_NEW 
DATAFILE '/home/oradata/cimdbsync/TS_MES_TXT_NEW.DBF' 
SIZE 100M 
AUTOEXTEND ON NEXT 100M;

TS_MES_TXT_NEW是目前不存在的表空间

4.4 创建用户并授权

复制代码
CREATE USER MES260327 IDENTIFIED BY MES260327
DEFAULT TABLESPACE TS_MES_TXT_NEW
TEMPORARY TABLESPACE TEMP
QUOTA 500M ON TS_MES_TXT_NEW
ACCOUNT UNLOCK;
用户的表空间设权
-- 基础权限
GRANT CONNECT, RESOURCE TO MES260327;
GRANT CREATE SESSION TO MES260327;

-- 创建对象权限
GRANT CREATE PROCEDURE, CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE TRIGGER, CREATE TYPE, CREATE SYNONYM TO MES260327;

-- 目录权限
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO MES260327;

-- 查询权限(按需)
GRANT SELECT ANY TABLE, ALTER ANY SEQUENCE, SELECT ANY SEQUENCE TO MES260327;

4.5 验证用户及权限

复制代码
-- 查看用户信息
SELECT username, account_status, created, profile 
FROM dba_users 
WHERE username = 'MES260327';

-- 查看系统权限
SELECT * FROM dba_sys_privs WHERE grantee = 'MES260327';

4.6 查看表空间使用情况

复制代码
SELECT
    FILE_NAME,
    ROUND(BYTES/1024/1024/1024, 2) AS FILE_SIZE_GB,
    ROUND((BYTES - NVL(FREE_BYTES,0))/1024/1024/1024, 2) AS USED_GB,
    ROUND(NVL(FREE_BYTES,0)/1024/1024/1024, 2) AS FREE_GB,
    ROUND(100 * (BYTES - NVL(FREE_BYTES,0)) / BYTES, 2) AS USED_PCT,
    AUTOEXTENSIBLE,
    ROUND(MAXBYTES/1024/1024/1024, 2) AS MAX_GB
FROM (
    SELECT
        df.FILE_NAME,
        df.FILE_ID,
        df.BYTES,
        df.AUTOEXTENSIBLE,
        df.MAXBYTES,
        NVL(fs.FREE_BYTES,0) FREE_BYTES
    FROM DBA_DATA_FILES df
    LEFT JOIN (
        SELECT FILE_ID, SUM(BYTES) FREE_BYTES
        FROM DBA_FREE_SPACE
        GROUP BY FILE_ID
    ) fs ON df.FILE_ID = fs.FILE_ID
    WHERE df.TABLESPACE_NAME = 'users'
)
ORDER BY FILE_NAME;

因为这个users表空间是导出的时候默认的,如果还原不指定修改表空间,就需要查询测试库这个表空间的大小一定要大于还原的dmp文件的大小

我创建的表空间文件有两个,默认上限32G,导入的时候两个文件都会写入


5. 还原数据(测试库)

5.1 导入到新表空间

复制代码
impdp MES260327/MES260327@10.200.0.47:1521/zhmesstg \
  directory=DATA_PUMP_DIR \
  dumpfile=cimdb_MESPRO_20260327.dmp \
  remap_schema=MESPRD:MES260327 \
  remap_tablespace=USERS:TS_MES_TXT_NEW \
  table_exists_action=replace

说明

  • remap_tablespace 将源表空间 USERS 映射到新表空间 TS_MES_TXT_NEW。

  • 如果不指定此参数,则使用导出时的原表空间(若目标库中不存在则会报错)。


6. 验证还原结果

复制代码
-- 查看导入的表数量
SELECT COUNT(*) FROM user_tables;

-- 查看某张表的数据行数
SELECT COUNT(*) FROM 某表名;
相关推荐
白帽攻防录3 小时前
SRC 挖洞:Roundcube 预认证 SQL 注入深度复盘,CVE-2026-48842 preg_replace 转义绕过怎么打穿邮件系统
网络·数据库·sql·网络安全·sql注入
꯭自꯭闭꯭4 小时前
达梦SQL优化相关
linux·运维·数据库·sql
对空六课4 小时前
支持注意力分析的热力图工具有哪些?
前端·数据库·数据分析
南京码讯光电技术有限公司4 小时前
How to Design an Antenna System for an Industrial WiFi Module
数据库·人工智能
lusklusklusk6 小时前
Oracle数据库基础之2_体系结构
数据库·oracle
可乐ea6 小时前
从第一性原理构建 AI Agent:提示词、工具、技能与记忆全解剖
数据库·人工智能·工具调用·ai智能体·提示词工程·agent开发·智能体记忆
东方护航数据恢复(深圳)6 小时前
医疗案例:HIS/PACS 数据库页损坏修复,医院不停诊完成恢复【东方护航数据恢复深圳店】
数据库·数据恢复·医疗·二次开盘
lusklusklusk7 小时前
Oracle数据库基础之11_Duplicate和Dataguard和RAC
数据库·oracle
PHP实战开发录8 小时前
MySQL字段加索引为什么没变快
数据库·mysql·php·开发
红红谈说10 小时前
标签化推送与已读统计怎么做?一次通知链路的工程复盘
数据库·消息推送·数字乡村·集合运算·已读回执·标签体系·写入放大