Oracle 逻辑备份参数实例讲解 (exp,expdp)

一 exp 导出案例及参数详解

1.1 案例

(1)优势: 1. 方便 2. 数据迁移, alert 日志 3.imp 速度比 impdp 慢

(2)四种模式: 1. 完全 2. 表空间 3. 用户 4. 表

(3)导出位置: 在哪操作保存到哪里

(4)导出用户下所有数据

[1]服务端: exp lzh/lzh file=lzh.dmp log=lzh.log // 导出数据和日志到当前目录

[2]客户端: exp lzh/[email protected]:1521/prod file=lzh.dmp log=lzh.log

(5)字符集问题

[1]操作系统 [2] 数据库 [3] 客户端

1.2 exp 参数

(1)exp help=y // 查看

buffer:快full=y:整库indexes:索引
compress:压缩 feedback=10 反馈一点 owner:用户
contraints:约束 grants:权限 row y,n:n 只导出结构
table:只导表 trigger:触发器 direct:直接路径
ignore:忽略错误 statistics:统计信息 consistent:一致性

(2)案例(选择部分表)

exp lzh/lzh file=lzh.dmp log=lzh.log feedback=10 compress=y  // 导出某个用户
exp sys/PCWLWLKQ file=lzh.dmp log=lzh.log owner=lzh //A 用户导出 B 用户
exp lzh/lzh file=lzh.dmp log=lzh.log rows=n // 导出结构
exp lzh/lzh file=lzh.dmp log=lzh.log tables=test02 // 导出 test 表
exp lzh/lzh file=lzh01.dmp log=lzh01.log tables=test02,test02_new // 导出多表
exp lzh/lzh file=lzh.dmp log=lzh.log tables=f% // 导出 f 开头的表
exp lzh/lzh file=lzh.dmp log=lzh.log tables=% // 导出所有表

1.3 段延迟特性

(1)特性

show parameter deferred_segment_creation
deferred_segment_creation=true; // 段延时默认为 true, 对于新表, 不导出, 不报错
select * from dba_segments t where t.segment_name='TEST02'; // 查询是否分配段

创建新表, 不插入数据时, 不会分配段

表空间 ->段 ->区 ->块

(2)alter table test03 allocate extent;  // 手工分配段
(3)exp \"/ as sysdba \" file=full.dmp full=y // 导出全库

1.4 exp 导出 consistent 参数的重要性

(1)导出一致性

exp lzh/lzh file=lzh.dmp log=lzh.log consistent=y

(2)通过 scn 来识别

table1 10000 scn
table2 10000 scn

(3)此参数会占用 undo, 数据太大, 会造成 undo 空间不足问题

生产环境根据实际情况指定这个参数

1.5 配置生产环境 exp 备份及定时自动导出策略

(1)exp.sh

 

#!/bin/sh

export ORACLE_HOME=/u01/app/Pluto/product/12.2.0/dbhome_1

export PATH=$PATH:$ORACLE_HOME/bin

export NLS_LANG=American_America.zhs16gbk

export NLS_DATE_FORMAT=‘YYYY-MM-DD HH24:MI:SS‘



EXP_FILE="ortest_test_`date +%Y%m%d%H%M%S`.dmp"

LOG_FILE="${EXP_FILE}.log"

cd /u01/app/expbackup

find . -ctime +7 -exec rm -rf {} \;

if [ -f $EXP_FILE ]; then

      rm -f $EXP_FILE*

fi

exp lzh/[email protected]

:1521/prod file=$EXP_FILE log=$LOG_FILE CONSISTENT=y

gzip -9 /u01/expbackup/$EXP_FILE

(2)0 3 * * */u01/App/exp.sh> /dev/null 2> &1

1.6 oracle 和 txt-Excel 等数据相互导入导出

二 imp 导入案例及参数详解

(1)imp lzh/lzh file=lzh.dmp log=fx.log  //
SELECT * FROM dba_users where username='LZH'; // 查看用户表空间
imp help=y; // 查看参数
(2)imp lzh/lzh row=n file=lzh.dmp log=lzh.log // 只导入表结构
imp lzh/lzh data_only=y file=lzh.dmp log=lzh.log // 只导入数据

(3)导入用户相同, 表空间不同, 会还原到用户默认的表空间

(4)查看 dmp 文件是由哪个用户导出的? 导入后查看报错信息

(5)导入到不同用户

imp sys/sys file=lzh.dmp fromuser=lzh touser=lzh  // 导出 lzh 导入: lzh
imp sys/sys file=lzh.dmp fromuser=lzh touser=fx   // 导出 lzh 导入 fx
(6)buffer
imp lzh/lzh file=lzh.dmp buffer=1000 data_only=y
imp lzh/lzh file=lzh.dmp buffer=1000 data_only=y feedback=5000
//1000 字节, 5000 分段

(7)建议按用户导入

(8)imp 跨版本导入问题

不能由高版本向低版本导入

[1]网络中转

[2]软件修改版本

(9)注意

[1]数据被删除表存在的时候, 需要参数只导入表数据

imp lzh/lzh data_only=y file=fx.dmp full=y

三 expdp 导出参数详解

3.1 expdp 导出参数讲解及 Directory 创建

(1)参数

content: 指定数据库

directory: 用于转储文件和日志文件的目录对象

dumpfile: 转储文件名

logfile: 日志文件名

full=y: 全库导出

schemas: 要导出的表空间的列表

version: 要导出对象的版本

table_exists_action:

skip 是如果已存在表, 则跳过并处理下一个对象;

append 是为表增加数据;

truncate 是截断表, 然后为其增加新数据;

replace 是删除已存在表, 重新建表并追加数据;

remap_schema: 导出表空间名: 导入表空间名

remap_tablespace: 导出用户名: 导入用户名

(2)段延时

flashback_segment_creation: 段延时设为 false

alter system set deferred_segment_craetion=false scope=both;

(3)建立目录并授权

create directory mydump as '/u01/app/mydump';
grant read,write on directory mydump to lzh;

相关视图: dba_directories

3.2 expdp 导出案例演示

(1)expdp lzh/lzh directory=mydump dumpfile=lzh.dmp  // 导出某用户
expdp qdcwgl/[email protected]:1521/orcl dumpfile=qdcwgl.dmp
expdp sys/sys directory=mydump dumpfile=lzh01.dmp schemas=lzh // 指定用户

(2)查看 job:select * from dba_datapump_jobs

(3)expdp "/ as sysdba " director=mydump dumpfile=full.dmp full=y // 导出全库

(4)普通用户导出全库

[1]grant datapump_exp_full_database to lzh // 赋权

[2]expdp lzh/lzh directory=mydump dumpfile=full.dmp full=y

(5)权限

datapump_exp_full_database  // 导出全库权限
datapump_imp_full_database // 导入全库权限
(6)expdp lzh/lzh directory=mydump dumpfile=lzh.dmp tables=test03; // 按表导出
expdp lzh/lzh directory=mydump dumpfile=lzh.dmp tables=lzh.test%; //test 开头
(7)expdp lzh/lzh directory=mydump dumpfile=lzh.dmp exclude=table:"in('TEST03')"
    // 排除 test03 表, 注意要大写
(8)expdp lzh/lzh directory=mydump dumpfile=lzh.dmp content=metadata_only;
    // 仅导出表结构
(9)expdp lzh/lzh directory=mydump dumpfile=lzh.dmp version=10.2 // 指定版本导出

3.3 expdp 数据一致性导出

exp 用 consistent=Y 参数

expdp 用 flashback_time=sysdate 参数

expdp lzh/lzh directory=mydump dumpfile=lzh.dmp logfile=lzh.log flashback_time=sysdate

例:

触发器

 

create or replace trigger test.tg_test

      before

insert on test.t1

            referencing

new as new old as old

            for

each row

            begin

            insert

into t2(id,name) values(:new.id,:new.name);

      end

tg_test;

      /

插入数据

 

begin

for I in 1..50000 loop

insert into test01 values(‘test’);

commit;

end loop;

end;

/

3.4 配置自动 expdp 导出备份

(1)expdp.sh

 

#!/bin/sh

export ORACLE_SID=prod

export ORACLE_HOME=/u01/app/Pluto/product/12.2.0/dbhome_1

export PATH=$PATH:$ORACLE_HOME/bin

export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

export NLS_DATE_FORMAT=‘yyyy-mm-dd

hh24:mi:ss‘

EXP_FILE="prod_begin_`date

+%Y%m%d%H%M%S`.dmp"

LOG_FILE="${EXP_FILE}.log"

cd /u01/app/dump

find . -ctime +7 -exec rm -rf {} \;

if [ -f $EXP_FILE ]; then

rm -f $EXP_FILE*

fi

expdp test/test directory=mydump

dumpfile=$EXP_FILE logfile=$LOG_FILE flashback_time=sysdate

gzip -9 /u01/app/dump/$EXP_FILE
(2)crontab
0 3 * * */u01/App/mydump/expdp.sh> /dev/null 2>&1

四 impdp 导入

4.1 impdp 导入案例

(1)impdp lzh/lzh directory=mydump dumpfile=lzh.dmp tables=test01
// 指定导入表
(2)impdp lzh/lzh directory=mydump dumpfile=lzh.dmp content=metadata_only
// 只导入表结构
(3)impdp lzh/lzh directory=mydump dumpfile=lzh.dmp content=data_only
// 只导入数据
(4)impdp lzh/lzh directory=mydump dumpfile=lzh.dmp // 导入 lzh 用户数据
(5)impdp lzh/lzh directory=mydump dumpfile=lzh.dmp remap_schema=lzh:system
//lzh 导出, 导入到 system
(6)impdp QDZYCWXT/QDZYCWXT dumpfile=qdcwgl.dmp remap_tablespace=
qdcwgl:QDZYCWXT remap_schema=qdcwgl:QDZYCWXT // 不同用户, 不同表空间

五 处理数据泵 job 后台进程

(1)ctrl+c 组合键: 在执行过程中, ctrl+c 退出当前模式, 导出操作不会停止

(2)export>status -- 查看当前 job 的状态及相关信息

(3)export>stop_job -- 暂停 job(会退出 export 模式)

(4)重新进入 export 模式

expdp lzh/lzh attach=lzh.SYS_EXPORT_SCHEMA_01

(5)export>start_job -- 打开暂停的 job

(6)export>kill_job -- 取消当前的 job 并释放相关客户会话(将 job 删除同时删除 dmp 文件)

(7)export>exit -- 退出 export 模式

Oracle 逻辑备份参数实例讲解(exp,expdp)

posted on 2022-08-26 17:09  root-123  阅读(4684)  评论(0编辑  收藏  举报