Linux公社介绍过的 Oracle 10g Data Pump Expdp/Impdp 详解http://www.linuxidc.com/Linux/2011-09/43892.htmexp/imp 与 expdp/impdp 对比 及使用中的一些优化事项http://www.linuxidc.com/Linux/2011-09/43893.htm中对数据泵这块的理论知识有一些说明,但是没有实际操作的例子。 所以在这里就对expdp/impdp 的使用做一些测试。 1. 创建目录
使用数据泵之前,需要创建一个存放文件的目录。 这个目录要写入Oracle的数据字典中才能识别。 (1)先查看一下已经存在的目录:SQL> col owner format a5SQL> col directory_name format a25SQL> select * from dba_directories; OWNER DIRECTORY_NAME DIRECTORY_PATH----- ------------------------- ------------------------------------------------SYS BACKUP /u01/backup (2)把我们把backup 这个目录删除掉,在重新创建一下SQL> drop directory backup;Directory dropped.SQL> select * from dba_directories;SQL> create directory backup as "/u01/backup";Directory created.SQL> select * from dba_directories;OWNER DIRECTORY_NAME DIRECTORY_PATH----- ------------------------- ------------------------------------------------SYS BACKUP /u01/backup (3)注意事项: 我这里是使用sys用户来进行操作的。 如果是其他用户,那么就需要对这个用户进行赋权。SQL> grant create any directory to system;Grant succeeded. SQL> select * from dba_sys_privs where grantee="SYSTEM"; grantee privilege adm------------------------------ ---------------------------- ------------system create any directory nosystem global query rewrite nosystem create materialized view nosystem create table nosystem unlimited tablespace yessystem select any table no 如果是其他用户使用sys创建的目录,也需要进行赋权,如:SQL> grant read,write on directory backup to SYSTEM; Grant succeeded. 2. 创建测试数据
我们需要演示expdp/impdp的一些功能,所以需要创建2个用户和对应的表空间,并且创建一些测试的数据。 SQL 代码如下: SQL> create tablespace dave datafile "/u01/app/oracle/oradata/dave/dave01.dbf" size 50m;SQL> create tablespace bl datafile "/u01/app/oracle/oradata/dave/bl01.dbf" size 50m;SQL> create user dave identified by dave default tablespace dave temporary tablespace temp;SQL> create user bl identified by bl default tablespace bl temporary tablespace temp;SQL> grant read,write on directory backup to dave,bl;SQL> grant connect,resource to dave,bl; SQL> conn dave/dave;Connected.SQL> create table dave(id number,name varchar2(10));Table created.SQL> begin 2 for i in 1 .. 10 loop 3 insert into dave values(i,"dave"); 4 end loop; 5 end; 6 /PL/SQL procedure successfully completed.SQL> commit;Commit complete.SQL> select * from dave; ID NAME---------- ---------- 1 dave 2 dave 3 dave 4 dave 5 dave 6 dave 7 dave 8 dave 9 dave 10 dave10 rows selected. SQL> conn bl/bl;Connected.SQL> create table bl(id number,name varchar2(10)); Table created. SQL> begin 2 for i in 10 .. 20 loop 3 insert into bl values(i,"bl"); 4 end loop; 5 commit; 6 end; 7 / PL/SQL procedure successfully completed. SQL> select * from bl; ID NAME---------- ---------- 10 bl 11 bl 12 bl 13 bl 14 bl 15 bl 16 bl 17 bl 18 bl 19 bl 20 bl 11 rows selected. 3. 开始测试3.1 FULL=Y全库导出
(1)不指定Job_name[oracle@qs-dmm-rh2 ~]$ expdp /"/ as sysdba/" directory=backup full=y dumpfile=fullexp.dmp logfile=fullexp.log parallel=2; -- 注意使用sys 的格式,还有full=y 导出的是非sys和system用户的对象。Export: Release 10.2.0.4.0 - Production on Friday, 18 March, 2011 15:05:54 Copyright (c) 2003, 2007, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsStarting "SYS"."SYS_EXPORT_FULL_02": "/******** AS SYSDBA" directory=backup full=y dumpfile=fullexp.dmp logfile=fullexp.log parallel=2 Estimate in progress using BLOCKS method...Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATATotal estimation using BLOCKS method: 18.68 MB…………Master table "SYS"."SYS_EXPORT_FULL_02" successfully loaded/unloaded******************************************************************************Dump file set for SYS.SYS_EXPORT_FULL_02 is: /u01/backup/fullexp.dmpJob "SYS"."SYS_EXPORT_FULL_02" successfully completed at 15:07:27 expdp/impd 是Job形式的,会调用DBMS_DATAPUMP PL/SQL包,这个API提供高速的导出导入功能;还有DBMS_METADATA PL/SQL包,这个包是将metadata(对象定义)存储在XML里。 所有的进程都能load 和unload 这些metadata。 在备份期间,会自动的生成一张与Job_name 相同名称的表, 该表在备份期间保存metadata数据。 当备份技术后,自动删除该表。 我们可以使用SQL: SQL>select * FROM dba_datapump_jobs 查看Job 的信息。 如果意外情况导致备份Job失败,那么对应保存metadata的表,还是会存在。 这个时候,如果查询dba_datapump_jobs,会显示该Job为not running。 这时候,我们只需要drop 掉对应的表,在查询dba_datapump_jobs。 就没有记录了。 这个也是一种处理方法。 在开始我就说了,这里没有指定Job name。 所以系统自动给我们生成了一个:SYS_EXPORT_FULL_02。 默认是从SYS_EXPORT_FULL_01开始,因为我之前有一个没有运行的Job,所以这里从2开始了。 (2)指定Job_name[oracle@qs-dmm-rh2 ~]$ expdp /"/ as sysdba/" directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob;--在这里我指定了Job_nameExport: Release 10.2.0.4.0 - Production on Friday, 18 March, 2011 15:29:56 Copyright (c) 2003, 2007, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsStarting "SYS"."DAVEJOB": "/******** AS SYSDBA" directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob Estimate in progress using BLOCKS method...Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATATotal estimation using BLOCKS method: 18.68 MB………………Master table "SYS"."DAVEJOB" successfully loaded/unloaded******************************************************************************Dump file set for SYS.DAVEJOB is: /u01/backup/fullexp3.dmpJob "SYS"."DAVEJOB" successfully completed at 15:31:06 3.2 全库导入
[oracle@qs-dmm-rh2 archivelog]$ impdp /"/ as sysdba/" directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob table_exists_action=replace; 注意: 导入的过程会生成归档日志,所以,如果是Data Guard 环境,只需要导入主库就可以了。 3.3 导出表
$ expdp /"/ as sysdba/" directory=backup dumpfile=table.dmp logfile=table.log tables=dave.dave,dave.dba;注意: 这里必须是同一个schema下的表 或者:$expdp dave/dave directory=backup dumpfile=table.dmp logfile=table.log tables=dave, dba; 3.4 导入表
$impdp dave/dave directory=backup dumpfile=table.dmp logfile=table.log tables=dave,dba; 3.5 导出用户
$ expdp /"/ as sysdba/" directory=backup dumpfile=user.dmp logfile=user.log schemas=dave,bl; 这里是同时导出多个用户 3.6 导入用户
$ impdp /"/ as sysdba/" directory=backup dumpfile=user.dmp logfile=user.log schemas=dave,bl table_exists_action=replace; 3.7 导出表空间
$ expdp /"/ as sysdba/" directory=backup dumpfile=tbs.dmp logfile=tbs.log tablespaces=dave,bl; --同时导出2个表空间 3.8 导入表空间
$ impdp /"/ as sysdba/" directory=backup dumpfile=user.dmp logfile=user.log tablespaces=dave table_exists_action=replace;--导入一个表空间 $ impdp /"/ as sysdba/" directory=backup dumpfile=user.dmp logfile=user.log tablespaces=dave,bl table_exists_action=replace; --导入2个表空间 3.9 REMAP_SCHEMA
该选项用于将源方案的所有对象装载到目标方案中. 我们导出dave 用户下的表,然后把它导入bl用户下。 $ expdp /"/ as sysdba/" directory=backup dumpfile=user.dmp logfile=user.log schemas=dave; $ impdp /"/ as sysdba/" directory=backup dumpfile=user.dmp logfile=user.log remap_schema=dave:bl; 验证一下:SQL> conn bl/bl;Connected.SQL> select count(*) from dave; COUNT(*)---------- 10Oracle expdp/impdp 从高版本 到 低版本 示例Oracle 10g Data Pump Expdp/Impdp 详解相关资讯 Oracle教程
- Oracle中纯数字的varchar2类型和 (07/29/2015 07:20:43)
- Oracle教程:Oracle中查看DBLink密 (07/29/2015 07:16:55)
- [Oracle] SQL*Loader 详细使用教程 (08/11/2013 21:30:36)
| - Oracle教程:Oracle中kill死锁进程 (07/29/2015 07:18:28)
- Oracle教程:ORA-25153 临时表空间 (07/29/2015 07:13:37)
- Oracle教程之管理安全和资源 (04/08/2013 11:39:32)
|
本文评论 查看全部评论 (0)