Oracle系列之一:备份还原之:EXP、IMP和EXPDP、IMPDP


title: Oracle系列之一:备份还原之:EXP、IMP和EXPDP、IMPDP
categories: Linux
tags:
- Oracle
timezone: Asia/Shanghai
date: 2019-02-01


环境

[root@rehl7501 oracle]# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.5 (Maipo)

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

简介

1、exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
2、expdp和impdp是服务端的工具程序,他们只能在oracle服务端使用,不能在客户端使用。
3、imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件。
  • EXP\IMP方式在备份的时候如果备份文件已经存在,会直接覆盖
  • EXPDP\IMPDP数据泵方式如果备份文件已经存在,会报错

方法1:EXP\IMP方式备份和还原数据库

1.1.EXP备份:传统路径导出

# 用户模式:备份admin用户的所有表
exp admin/xiaoliu@11.11.11.111/oracledb FILE=/home/oracle/full.dmp LOG=/home/oracle/full.log OWNER=admin

# 表模式(只导出C_CONS, DATASOURCE两个表数据)
exp admin/xiaoliu@11.11.11.111/oracledb FILE=/home/oracle/full.dmp LOG=/home/oracle/full.log TABLES=C_CONS, DATASOURCE

    ROWS=N      # 可以加此参数只导出数据库结构而不导出数据

1.2.EXP备份:直接路径导出

# 用户模式:备份admin用户的所有表
exp admin/xiaoliu@11.11.11.111/oracledb FILE=/home/oracle/full.dmp LOG=/home/oracle/full.log OWNER=admin \
    recordlength=65535 direct=y buffer=104857600

# 表模式(只导出C_CONS, DATASOURCE两个表数据)
exp admin/xiaoliu@11.11.11.111/oracledb FILE=/home/oracle/full.dmp LOG=/home/oracle/full.log TABLES=C_CONS, DATASOURCE \
    recordlength=65535 direct=y buffer=104857600

    ROWS=N      # 可以加此参数只导出数据库结构而不导出数据

1.3.传统路径导出和直接路径导出对比

1.两者的差异

  • a.传统路径模式,使用SQL SELECT语句抽取表数据。数据从磁盘读入到buffer cache缓冲区中,行被转移到评估缓冲区。
    在此之后根据SQL表达式,将记录返回给导出客户端,然后写入到dump文件。

  • b.直接导出模式,数据直接从磁盘中读取到导出session的PGA中,行被直接转移到导出session的私有缓冲区,从而跳过SQL命令处理层。
    避免了不必要的数据转换。最后记录返回给导出客户端,写到dump文件。

2.性能问题

  • a.直接路径导出方式比传统路径方式具有更优的性能,速度更快,因为绕过了SQL命令处理部分。

  • b.直接路径导出方式支持RECORDLENGTH参数(最大为64k),该参数值通常建议设置为系统I/O或者DB_BLOCK_SIZE的整数倍

  • c.影响直接路径导出的具体因素(DB_BLOCK_SIZE,列的类型,I/O性能,即数据文件所在的磁盘驱动器是否单独于dump文件所在的磁盘驱动器)

  • d.无论是直接路径导出还是传统路径导出产生的dump,在使用imp方式导入时,会耗用相同的时间

3、直接路径导出的限制

  • a.直接路径导出不支持交互模式
  • b.不支持表空间传输模式(即TRANSPORT_TABLESPACES=Y不被支持),支持的是FULL,OWNER,TABLES导出方式
  • c.不支持QUERY查询方式,如exp scott/tige TABLES=emp QUERY="WHERE job='SALESMAN' " 不被支持
  • e.直接路径导出使用RECORDLENGTH设置一次可以导出数据的量,取代传统路径使用buffer的设置
  • e.直接路径导出要求NLS_LANG环境参数等于数据库字符集,负责收到EXP-41警告及EXP-0终止错误

2.IMP还原:

# 用户模式:恢复所有表
imp admin/xiaoliu FILE=/home/oracle/full.dmp LOG=/home/oracle/full.log FROMUSER=user_pssc_sm64 TOUSER=admin
imp admin/xiaoliu FILE=/home/oracle/full.dmp LOG=/home/oracle/full.log FULL=y

# 表模式:(只恢复C_CONS, DATASOURCE两个表数据)
imp admin/xiaoliu FILE=/home/oracle/full.dmp FROMUSER=user_pssc_sm64 TOUSER=admin TABLES=C_CONS, DATASOURCE
imp admin/xiaoliu FILE=/home/oracle/full.dmp TABLES=C_CONS, DATASOURCE


    ignore=y    # 表示忽略创建错误,继续后面的操作
                # Oracle不执行CREATE TABLE语句,直接将数据插入到表中
                # 假如插入的记录违反了约束条件,比如主键约束
                # 则出错的记录不会插入,但合法的记录会添加到表中。
    
    ignore=n    # Oracle不执行CREATE TABLE语句
                # 同时也不会将数据插入到表中
                # 而是忽略该表的错误,继续恢复下一个表。

方法2:EXPDP\IMPDP数据泵方式备份和还原数据库

准备工作

su - oracle
mkdir -p /home/oracle/bak/
sqlplus / as sysdba
select * from dba_directories;
CREATE OR REPLACE DIRECTORY bak AS '/home/oracle/bak/';
GRANT READ, WRITE ON DIRECTORY test_dir TO scott;

1.用户模式:备份和恢复admin的所有表

# 普通方式导入导出
expdp admin/xiaoliu SCHEMAS=admin DIRECTORY=bak DUMPFILE=full.dmp LOGFILE=full.log COMPRESSION=all
impdp admin/xiaoliu SCHEMAS=admin DIRECTORY=bak DUMPFILE=full.dmp LOGFILE=full.log

# 开启并行模式
expdp admin/xiaoliu SCHEMAS=admin DIRECTORY=bak DUMPFILE=full_%U.dmp LOGFILE=full.log COMPRESSION=all PARALLEL=2
impdp admin/xiaoliu SCHEMAS=admin DIRECTORY=bak DUMPFILE=full_%U.dmp LOGFILE=full.log PARALLEL=2

    COMPRESSION={ALL | DATA_ONLY | METADATA_ONLY | NONE}
        ALL:压缩元数据和数据。
        DATA_ONLY:仅压缩数据。
        METADATA_ONLY:仅压缩元数据。这是默认设置。
        NONE:什么都没有被压缩。
        
    PARALLEL=4      # 并行导入和导出,这里的4一般设置为CPU的个数,可提高效率
    CLUSTER=NO      # 对于小作业,最好指定CLUSTER = NO来约束作业在启动它的实例上运行。
                    # 使用CLUSTER参数可能会影响性能
                    # 因为跨Oracle RAC实例分发导出作业会产生一些额外的开销。

2.表模式:只备份和恢复C_CONS, DATASOURCE表

expdp admin/xiaoliu TABLES=C_CONS, DATASOURCE DIRECTORY=bak DUMPFILE=full.dmp LOGFILE=full.log COMPRESSION=all
impdp admin/xiaoliu TABLES=C_CONS, DATASOURCE DIRECTORY=bak DUMPFILE=full.dmp LOGFILE=full.log

    COMPRESSION={ALL | DATA_ONLY | METADATA_ONLY | NONE}
        ALL:压缩元数据和数据。
        DATA_ONLY:仅压缩数据。
        METADATA_ONLY:仅压缩元数据。这是默认设置。
        NONE:什么都没有被压缩。
        
    PARALLEL=4      # 并行导入和导出,这里的4一般设置为CPU的核数,可提高效率
    CLUSTER=NO      # 对于小作业,最好指定CLUSTER = NO来约束作业在启动它的实例上运行。
                    # 使用CLUSTER参数可能会影响性能
                    # 因为跨Oracle RAC实例分发导出作业会产生一些额外的开销。

3.按查询条件

expdp admin/xiaoliu DIRECTORY=bak DUMPFILE=full.dmp LOGFILE=full.log COMPRESSION=all TABLES=C_CONS QUERY=WHERE ROWNUM < 1000
impdp admin/xiaoliu DIRECTORY=bak DUMPFILE=full.dmp LOGFILE=full.log

    COMPRESSION={ALL | DATA_ONLY | METADATA_ONLY | NONE}
            ALL:压缩元数据和数据。
            DATA_ONLY:仅压缩数据。
            METADATA_ONLY:仅压缩元数据。这是默认设置。
            NONE:什么都没有被压缩。
            
    PARALLEL=4      # 并行导入和导出,这里的4一般设置为CPU的个数,可提高效率
    CLUSTER=NO      # 对于小作业,最好指定CLUSTER = NO来约束作业在启动它的实例上运行。
                    # 使用CLUSTER参数可能会影响性能
                    # 因为跨Oracle RAC实例分发导出作业会产生一些额外的开销。

附录:EXPDP\IMPDP数据泵方式在RAC环境中使用的说明

在Oracle RAC环境中导出期间使用PARALLEL

在Oracle Real Application Clusters(Oracle RAC)环境中,如果导出操作的PARALLEL = 1,则所有Data Pump进程都驻留在启动作业的实例上。 因此,目录对象可以指向该实例的本地存储。

如果导出操作将PARALLEL设置为大于1的值,则数据泵进程可以驻留在作业启动的实例之外的实例上。 因此,目录对象必须指向可由Oracle RAC的所有实例访问的共享存储。

限制

此参数仅在Oracle Database 11g企业版中有效。

英文:

Using PARALLEL During An Export In An Oracle RAC Environment

In an Oracle Real Application Clusters (Oracle RAC) environment, if an export operation has PARALLEL=1, then all Data Pump processes reside on the instance where the job is started. Therefore, the directory object can point to local storage for that instance.

If the export operation has PARALLEL set to a value greater than 1, then Data Pump processes can reside on instances other than the one where the job was started. Therefore, the directory object must point to shared storage that is accessible by all instances of the Oracle RAC.

Restrictions

This parameter is valid only in the Enterprise Edition of Oracle Database 11g.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容