datapump简介(一) (r6笔记第2天)

datapump是在10g之后推出的新特性,无论从功能还是性能上,都有一定的改进,可以说在功能上丰富了很多,在性能上也提升了很多。可以说exp/imp中能实现的功能,肯定在datapump里面都能实现,而且大多数情况下效果还要好一些。 当然datapump相比exp/imp推出的时间还是要短一些,所以在使用的过程中还是或多或少碰到一些问题,还是在不断改进,而exp/imp绝对算是一款成熟的工具,从早期版本到现在都在支持,而datapump相比于exp/imp的最大差别就在于datapump是属于服务端的程序,生成的dump只能位于服务端,而不能把它导出到客户端。所以说对于数据的逻辑备份来说还是有很多的选择。可以灵活使用exp/imp,也可以在一定规模的数据情况下使用datapump。 datapump和exp/imp类似,也有四种使用模式:数据库模式,表模式,用户模式,可传输表空间模式,在此基础上使用比较多的还有基于query选项的数据选择性抽取和数据结构导出。 当然在使用下我们还是需要一些准备,就是创建目录,因为datapump是一个服务端的程序,所以需要指定本地的一个目录结构,它会解析这个目录然后把dump生成在这个目录下面。 创建目录的语法如下: create directory test_dir as '/home/ora11g/expdp_test'; 在此基础上我们可以根据需要把读写的权限赋予指定的用户,这样就可以灵活去读写这个目录了。 比如我们把目录test_dir的读写权限赋予用户test,就可以使用下面的形式。 grant read,write on directory test_dir to test;

数据库模式

数据库模式主要是作为全库备份使用的,可以导出除sys之外的数据库里的所有对象,在数据量较小的情况下是一个不错的选择。

expdp system/oracle dumpfile=db_backup.dmp full=y directory=test_dir

表模式

表模式可以导出某个用户下指定的表,比如我们需要导出的表名为:test1,test2

expdp n1/n1 dumpfile=table_mode.dmp tables=test1,test2 directory=test_dir

用户模式

用户模式可以导出指定用户下所有的对象,比如导出用户user1下所有的对象

expdp n1/n1 file=user_mode.dmp schemas=user1 directory=test_dir

传输表空间模式 常作为数据迁移时的一种方法,在数据迁移篇中会有详细的描述 海量数据迁移之传输表空间(一) http://blog.itpub.net/23718752/viewspace-1703358/

在impdp中也会存在同样的四种模式,使用方法都是类似的。

除了常用的4种模式之外,使用query选项选择性导出数据也是一种很使用的方法。比如存在一个表test,我们希望根据字段object_id=1的条件来选择性导出数据,可以使用query选项完成。

使用Query选项做选择性数据导出

expdp n1/n1 dumpfile=query_bak.dmp query=\' where object_id=1 \' tables=test directory=test_dir 在这个方面,expdp的query功能更为强大。 比如我们需要导出两个表test1,test2,对于test1需要根据条件"where object_id=1"来导出,test2没有其它过滤条件 我们可以这样使用expdp的query选项,使用一个parfile来更高效完成。 parfile的内容如下: tables=(t,test_tab01) query=t:"where object_id=1" 然后使用expdp命令导出即可。 expdp n1/n1 dumpfile=query_bak.dmp parfile=dp.par directory=test_dir 当然了,expdp的一些实用特性还是蛮多的。可以举几个例子。 第一个就是表空间不匹配的问题 比如表中存在lob字段或者与目标环境的表空间不一致,使用Imp导入dump的时候就会抛出下面的错误。 IMP-00003: ORACLE error 959 encountered ORA-00959: tablespace 'DATAS01' does not exist 对于这类问题使用exp/imp的时候还是比较棘手的,可能需要解析dump文件,或者使用dbms_metadata来从源库中得到ddl语句。 在expdp中解决起来就很容易。我们可以使用remap_tablespace的选项,比如我们在导出的环境中存在表空间TEST_OLD,在目标环境没有这个表空间,我们需要把表创建在TEST_NEW表空间下,我们可以使用remap_tablespaces选项。 impdp n1/n1 dumpfile=table_mode.dmp tables=test1,test2 directory=test_dirremap_tablespace=TEST_OLD:TEST_NEW 第二个就是导出procedure,function等对象的信息 在exp中,如果你使用用户模式和全库模式,会默认导出存储过程,序列这些对象的信息,但是这些不是由我们手工去控制的。在导入的时候如果使用full=y的时候才会把这些对象给隐式导入。 在datapump中解决起来也很容易。 比如我们只需要导出用户test下的存储过程,函数和序列信息。就可以直接使用下面的语句来做。 expdp test/test dumpfile=query_bak.dmp directory=test_dir schemas=test include=procedcure,function,sequence 甚至我们可以更加挑剔,直接去筛选哪些需要导出,哪些不需要。 比如我们到处sequence的时候只导出序列名为:_seq结尾的序列 我们还是使用parfile来简单配置。 parfile的内容为: include=procedure include=function include=sequence:"like '%_SEQ%'" schemas=test 然后我们使用命令导出: expdp test/test dumpfile=query_bak.dmp directory=test_dir parfile=dp.par 第三个就是使用排除选项exclude exp/imp的时候我们还不能使用排除选项,比如用户test下有100张表,我们不希望导出某张表test1 我们可以使用datapump轻松实现。 我们使用parfile来配置。 exclude=table:"='TEST1'" 使用如下的命令即可。 expdp test/test dumpfile=query_bak.dmp directory=test_dir parfile=dp.par

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2015-07-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏维C果糖

详述 MySQL 导出数据遇到 secure-file-priv 的问题

ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv opti...

3586
来自专栏一个爱吃西瓜的程序员

学习SQL【1】-搭建SQL的学习环境

最近我在学习SQL,现在就开始记录我的学习过程吧,加油!如果你也想学SQL,希望我的学习记录能对你有所帮助。 PostgreSQL是对象关系型数据库管理系统...

3496
来自专栏码农二狗

使用shell搜索匹配文件

1243
来自专栏我是攻城师

Elasticsearch如何动态维护一个不可变的倒排索引

4129
来自专栏架构师之路

MySQL双主一致性架构优化 | 架构师之路

一、双主保证高可用 MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能,保证读库的高可用,但此时写库仍然是单点。 在一个MySQL...

6095
来自专栏Eternally运维

个人认为比较重要的MySQL—innodb参数详解

innodb_io_capacity:脏页的刷新的数量,可以动态调整,默认是200,该参数的设置取决于硬盘的IOPS的大小,IOPS就是每秒的读写次数。

2226
来自专栏数据和云

如何在多租户环境下使用数据库的闪回功能

编辑手记:对于数据库的闪回功能,可能大家都不陌生,那么如何在多租户环境下使用该功能,如果关闭了表空间的闪回功能,会给数据库带来哪些影响?我们一起来学习。 本文来...

3445
来自专栏社区的朋友们

MySQL 性能测试经验

资源调度管理平台的重构:其中的 Resource/Property 数据库设计,在没有更加优化的方案前,打算沿用当前平台的数据库结构;这就需要对当前平台的数据库...

3.9K2
来自专栏我是攻城师

如何为logstash+elasticsearch配置索引模板?

5585
来自专栏Web 开发

服务迁移导致数据差异

通常我在dnspod里面,设置的解析缓存时间很短,基本上我修改DNS,是马上生效的。但毕竟用户的DNS不在我们的控制范围,总会有用户解析到旧的服务器上面,杯具就...

1080

扫码关注云+社区

领取腾讯云代金券