varkai
要么孤独,要么庸俗
Oracle 使用数据泵进行数据导出导入
前言
从 Oracle Database 10g 开始提供了新的导出导入工具-数据泵,expdp 和 impdp 分别对应导出和导入命令,我们先看看它的主要特性:
- 支持并行处理导入、导出任务。
- 支持暂停和重启动导入、导出任务。
- 支持通过 Database Link 的方式导出或导入远端数据库中的对象。
- 支持在导入时通过 Remap_schema、Remap_datafile、Remap_tablespace 几个参数实现导入过程中自动修改对象属主、 数据文件或数据所在表空间。
- 导入/导出时提供了非常细粒度的对象控制。通过 Include、Exclude 两个参数,甚至可以详细制定是否包含或不包含某个对象。
下面是 expdp/impdp 和 exp/imp 的区别:
- exp 和 imp 是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
- expdp 和 impdp 是服务端的工具程序,他们只能在 Oracle 服务端使用,不能在客户端使用。
- imp 只适用于 exp 导出的文件,不适用于 expdp 导出文件,impdp 只适用于 expdp 导出的文件,而不适用于 exp 导出文件。
- 对于 Oracle Database 10g 以上的服务器,使用 exp 通常不能导出0行数据的空表,而此时必须使用 expdp 导出。
创建导出导入目录
首先我们需要在数据库服务器上创建一个用来保存导出文件的目录,我这里设置为 oracle
用户目录下的 dmp
目录,绝对路径为 /home/oracle/dmp
,使用 oracle
用户登入服务器并创建该目录:
$ mkdir ~/dmp
然后进入 sqlplus
环境:
$ sqlplus /nolog
使用 SYSDBA
连接到数据库
SQL> CONN /AS SYSDBA
创建数据库逻辑目录:
SQL> CREATE DIRECTORY DATA_DUMP_DIR AS '/home/oracle/dmp';
使用以下语句可以查询所有的逻辑目录:
SQL> SELECT * FROM DBA_DIRECTORIES;
给指定用户赋予在该目录的操作权限,比如我这里授权给 MIAERP
用户:
SQL> GRANT READ, WRITE ON DIRECTORY DATA_DUMP_DIR TO MIAERP;
expdp 导出
使用 oracle
用户执行以下命令,使用 expdp
导出数据,有大概以下几种不同的方式:
- 全量导出:
$ expdp system/passwd@orcl dumpfile=expdp.dmp directory=data_dump_dir full=y logfile=expdp.log;
- 导出指定用户,其中
schemas
指定需要导出的用户:
$ expdp system/passwd@orcl schemas=导出的用户名 dumpfile=expdp.dmp directory=data_dump_dir logfile=expdp.log;
- 导出指定表空间,其中
tablespace
指定需要导出的表空间,多个表空间使用逗号隔开:
$ expdp system/passwd@orcl tablespace=tbs1,tbs2 dumpfile=expdp.dmp directory=data_dump_dir logfile=expdp.log;
- 导出指定表,其中
tables
指定需要导出的表,多个表使用逗号隔开:
$ expdp system/passwd@orcl tables=table1,table2 dumpfile=expdp.dmp directory=data_dump_dir logfile=expdp.log;
impdp 导入
首先参照上面的 创建导出导入目录 章节,在需要导入数据的目标服务器上创建好相应的目录,然后将需要导入的 dmp
文件上传到该目录。
使用 oracle
用户执行以下命令,使用 impdp
导入数据,主要有以下几种方式:
- 全量导入:
$ impdp system/passwd@orcl dumpfile=impdp.dmp directory=data_dump_dir full=y logfile=impdp.log;
- 导入指定用户:
导入到指定用户又分为下面几种情况:
- 导入的用户已经存在,并且导入用户名和导出的用户名不一致:
$ impdp system/passwd@orcl schemas=导出用户名 dumpfile=impdp.dmp directory=data_dump_dir remap_schema=导出用户名:导入用户名 exclude=user logfile=impdp.log;
- 导入的用户不存在:
此时 user2
用户会自动建立,其权限和使用的表空间与 user1
用户相同,但此时 user2
无法登入,必须修改密码。
$ impdp system/passwd@orcl dumpfile=impdp.dmp directory=data_dump_dir remap_schema=导出用户名:导入用户名 logfile=impdp.log;
- 导入的用户已经存在,并且导入用户名和导出的用户名一致:
$ impdp system/passwd@orcl dumpfile=impdp.dmp directory=data_dump_dir schemas=导入用户名 logfile=impdp.log;
- 导入指定表:
$ impdp system/passwd@orcl tables=导出用户名.table1,导出用户名.table2 dumpfile=impdp.dmp directory=data_dump_dir remap_schema=导出用户名:导入用户名 logfile=impdp.log;
- 导入指定表空间:
$ impdp system/passwd@orcl tablespaces=tbs1,tbs2 dumpfile=impdp.dmp directory=data_dump_dir logfile=impdp.log;
捐赠
如果您觉得博客对您有所帮助,不妨赏博主一杯☕。