ORACLE expdp/impdp导出实例
expdp hwifi/123456 dumpfile=test.dmp directory=expdp_dir tables = DATES, DIM_CITY_PROVINCE, DIM_DOMAIN_TYPE job_name=my_job
1) skip:跳过,默认操作
2) replace:先drop表,然后创建表,最后插入数据
3) append:在原来数据的基础上增加数据
4) truncate:先truncate,然后再插入数据
1. 创建目录
使用数据泵之前,需要创建一个存放文件的目录。 这个目录要写入Oracle的数据字典中才能识别。
(1)先查看一下已经存在的目录:
SQL> col owner format a5
SQL> col directory_name format a25
SQL> 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 no
system global query rewrite no
system create materialized view no
system create table no
system unlimited tablespace yes
system select any table no
如果是其他用户使用sys创建的目录,也需要进行赋权,如:
SQL> grant read,write on directory backup to SYSTEM;
Grant succeeded.
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 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "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_DATA
Total 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.dmp
Job "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_name
Export: 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 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "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_DATA
Total estimation using BLOCKS method: 18.68 MB
……
……
……
Master table "SYS"."DAVEJOB" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.DAVEJOB is:
/u01/backup/fullexp3.dmp
Job "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(*)
----------
10
3.10 REMAP_TABLESPACE
将源表空间的所有对象导入到目标表空间中,我们将dave表空间下的对象导入到bl表空间下。
$ expdp /'/ as sysdba/' directory=backup dumpfile=tbs.dmp logfile=tbs.log tablespaces=dave;
$ impdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log remap_tablespace=dave:bl table_exists_action=replace;
3.11 REMAP_DATAFILE
该全库导出时有用,用于将源数据文件名转变为目标数据文件名,在不同平台之间搬移表空间时可能需要该选项。比如把db从unix导入到win下,全库导出时里面有create tablespace的语法,这样就有datafile的语法,里面就有路径,导入到win时创建tablespace时的路径就不能是unix下的路径了,此时可以通过该参数remap一下路径:
remap_datafile=/oradata/orcl/dave01.dbf:e:/oradata/orcl/dave01.dbf
全库导出:
$expdp /'/ as sysdba/' directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob;
全库导入:
$impdp /'/ as sysdba/' directory=backup dumpfile=fullexp3.dmp logfile=tbs.log full=y remap_datafile='/u01/app/Oracle/oradata/dave/dave01.dbf':'/u01/app/oracle/oradata/dave/tianlesoftware01.dbf';
如果这里的remap 文件比较多,可以把这部分单独拿出来,放到一个文件里。
$impdp /'/ as sysdba/' directory=backup dumpfile=fullexp3.dmp logfile=tbs.log full=y parfile=payroll.par
payroll.par 内容:
remap_datafile='/oradata/orcl/system01.dbf':'/u01/oradata/orcl/system01.dbf'
remap_datafile='/oradata/orcl/sysaux01.dbf':'/u01/oradata/orcl/sysaux01.dbf'
remap_datafile='/oradata/orcl/undotbs4.dbf':'/u01/oradata/orcl/undotbs4.dbf'
remap_datafile='/oradata/orcl/test02.dbf':'/u01/oradata/orcl/test02.dbf'
如果是windows系统,需要加双引号:
remap_datafile="'d:/orcl/system01.dbf':'e:/orcl/system01.dbf'"
3.12 TRANSPORT_DATAFILES
该选项表示的是表空间的传输。用于指定搬移空间时要被导入到目标数据库的数据文件。
这种方法的操作步骤如下:
(1)将表空间改成read only 状态,然后copy 待传输的表空间的所有数据文件到目标库。 这里可以进行重命名。
SQL> alter tablespace dave read only;
(2)按transport 方式导出表空间。如:
expdp directory=backup dumpfile=tts.dmp transport_tablespaces=dave
注意:这步操作只把metadata,即元数据,只有定义,没有data导入了dump文件。 实际的data 我们在第一步已经copy 过去了。
(3)import 我们的数据。 如:
impdp hr directory=dpump_dir1 dumpfile=tts.dmp transport_datafiles='/user01/data/workers.dat'
(4)将表空间改成read write:
SQL>alter tablespace dave read write ;
SQL>select * from dba_tablespaces ;
SQL>select * from dba_data_files ;
元数据(metadata)从我们的dump文件导入,Data Pump将实际的data从我们指定的workers.dat 导入。 这里必须写绝对路劲。
我们看个实例:
(1)先对表空间Dave 添加一个数据文件:
SQL> alter tablespace dave add datafile '/u01/dave02.dbf' size 20m;
Tablespace altered.
(2)copy 到其他实例的对应位置
在移动之前先将表空间改成read only 状态:
SQL> alter tablespace dave read only;
将表空间下的所有数据文件移动到其他的实例上。可以进行重命令。 我这里是同一个实例。 因为我这里是一个实例。 我将我们刚才添加的数据文件dave02.dbf 移动到/u01/app/oracle/oradata/dave下。 待expdp 完成后,我们将表空间drop掉,在import进来。
$ cp /u01/dave02.dbf /u01/app/oracle/oradata/dave/bl02.dbf
将dave01.dbf 复制成bl03.dbf. 等会删除表空间,不然会被删除掉。
$ cp dave01.dbf bl03.dbf
(3)expdp 导出元数据
$expdp /'/ as sysdba /' directory=backup dumpfile=tts.dmp transport_tablespaces=dave
(4)import 数据
先把表空间drop掉在import:
SQL> drop tablespace dave including contents and datafiles;
Tablespace dropped.
$ impdp /'/ as sysdba /' directory=backup dumpfile=tts.dmp transport_datafiles='/u01/app/oracle/oradata/dave/bl02.dbf', '/u01/app/oracle/oradata/dave/bl03.dbf'
注意一点: 这里transport 的表空间,在另一个实例上是不可以存在的。 不然不能导入。
如果文件很多,也可以写入个配置文件里。 导入时通过PARFILE参数来指定。
(5)将表空间改成read write模式:
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
DAVE READ ONLY
BL ONLINE
7 rows selected.
SQL> alter tablespace dave read write;
Tablespace altered.
SQL> select tablespace_name,status from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
DAVE ONLINE
BL ONLINE
7 rows selected.
transport_datafiles 注意的几点:
(1)表空间所有的数据文件都要copy到目标库。
(2)copy 之间,将表空间改成read only 状态。
(3)copy之后可以对数据文件进行重命名。 所以,transport_datafiles 也可以用来对数据文件进行重命名和移动位置。
(4)transport_datafiles 完成之后,不要忘记将表空间改成读写模式。
截取于http://junmail.javaeye.com/blog/215780
EXPDP和IMPDP的本质在于,通过API调用,把传统的EXP/IMP类交付式模式的操作,转变成数据库内部的job任务,从而实现了任务的可终止与重启动。
c:\expdp test/test@acf directory=dpdata dumpfile=full.dmp full=y job_name=expfull
在执行过程中,可以拿下Ctrl+C组合键,退出当前交互模式,退出之后,导出操作不会停止,这不同于Oracle以前的EXP。以前的EXP,如果退出交互式模式,就会出错终止导出任务。
在Oracle 10中,由于EXPDP是数据库内部定义的任务,已经与客户端无关。退出交互之后,会进入export的命令行模式,此时支持status等查看命令:
Export> status
如果想停止改任务,可以发出stop_job命令
Export> stop_job
接下来可以通过命令行再次连接到这个任务
c:\expdp test/test@acf attach=expfull(此处填写作业名称)
通过start_job命令重新启动导出
Export> start_job
ORACLE expdp/impdp导出实例的更多相关文章
- Oracle expdp/impdp导出导入命令及数据库备份
使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用, ...
- Oracle expdp/impdp导出导入命令及数据库备份(转)
使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用, ...
- oracle expdp/impdp/可传输表空间
oracle expdp/impdp/可传输表空间/及一些参数 Oracle data pump 导出操作能够将表.索引.约束.权限.PLSQL包.同义词等对象从数据库导出,并将它们保存在一种非文本格 ...
- oracle expdp/impdp 用法详解
http://hi.baidu.com/hzfsai/item/4a4b3fc4b1cf7e51ad00efbd oracle expdp/impdp 用法详解 Data Pump 反映了整个导出/导 ...
- linux 下使用exp/imp 或者expdp/impdp导出导入oracle数据表数据
一.环境配置 1.执行环境: exp/imp可以在客户端执行也可以在服务器端执行,在客户端执行需要先安装有oracle的客户端,如果是linux系统,就是以oracle用户登录,在控制台下执行.建议在 ...
- ORACLE expdp/impdp详解
ORCALE10G提供了新的导入导出工具,数据泵.Oracle官方对此的形容是:Oracle DataPump technology enables Very High-Speed movement ...
- ORACLE expdp/impdp详解(转)
ORCALE10G提供了新的导入导出工具,数据泵.Oracle官方对此的形容是:Oracle DataPump technology enables Very High-Speed movement ...
- Oracle expdp/impdp 使用示例
1. 创建目录 使用数据泵之前,需要创建一个存放文件的目录. 这个目录要写入Oracle的数据字典中才能识别. (1)先查看一下已经存在的目录: SQL> col owner format a5 ...
- Oracle使用expdp/impdp导出导入数据
这里假设已存在数据库用户,并是计划通过该用户导入导出该用户表空间上的数据.(我们这里假定用户名称为ls) 1.创建逻辑目录(数据库命令,sqlplus中执行) Oracle不能直接指定系统目录让他去读 ...
随机推荐
- A simple case to use Celery:
Prerequisites: 1: Install RabbitMQ as it would be used as message broker for Celery. In windows, i ...
- [na]win PPTP场景与搭建
这也是在不成熟时期的一种对windows远程访问的好奇. 现在看来没啥用了. 现在一般都用linux的openvpn+gg方案了 远程访问方案: ,端口映射 ,vpn 实现这种远程访问的协议:pptp ...
- schema.path方法
var sampleSchema = new Schema({ name: { type: String, required: true } }); console.log(sampleSchema. ...
- 57. 3Sum【medium】
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...
- CDN技术详解笔记
1.影响网络传输的四个因素(1)“第一公里”:网站服务器接入互联网的链路所能提供的带宽.(2)“最后一公里”:用户接入带宽.(3)对等互联关口:不同网络之间的互联互通带宽.(4)长途骨干传输:首先是长 ...
- Oracle PLSQL Demo - 17.游标查询个别字段(非整表)
declare Type ref_cur_variable IS REF cursor; cur_variable ref_cur_variable; v_empno scott.emp.empno% ...
- js在IE8+兼容String没有trim方法,写一个兼容ie8一下的浏览器的trim()方法
方法一: String.prototype.trim = function(){ return Trim(this);}; function LTrim(str) { var i; fo ...
- sqlserver判断是否为数字的函数
ISNUMERIC 确定表达式是否为一个有效的数字类型. 语法 ISNUMERIC ( expression ) 参数 expression 要计算的表达式. 返回类型 int 测试: select ...
- FreeRTOS 动态内存管理
以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 动态内存管理,动态内存管理是 FreeRTOS 非常重要的一项功能,前面 ...
- ajax的datatype选项的值
jquery ajax方法 1."xml":返回 XML 文档,可用 jQuery 处理. 2."html"::返回纯文本 HTML 信息:包含的 script ...