Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令 详细的 详细的 谢谢

作者&投稿:白良 (若有异议请与网页底部的电邮联系)
如何使用expdp和impdp命令将一个数据库的表空间导入到另一个数据库中?(oracle 10g)~

expdp 从a数据库导出数据文件,然后在B数据库中创建相同的表空间,用户名、权限,最后用impdp导入A数据库导出的数据。

  Oracle10g以前数据导入导出提供有imp/exp命令,10g以后提供了新的导入导出命令expdp/impdp。虽然exp/imp已经很好用了,但是唯一的确定是速度太慢,如果1张表的数据有个百千万的,常常导入导出就长时间停在这个表这,但是从Oracle 10g开始提供了称为数据泵新的工具expdp/impdp,它为Oracle数据提供高速并行及大数据的迁移。唯一的区别是:imp/exp可以在客户端调用,但是expdp/impdp只能在服务端,并且生成的备份文件只能存在服务器里面。文笔水平有限,不多罗嗦开始写具体的例子,以备以后之用。
  实现目的:把WANGLIPO用户下的所有对象导入到新建用户EXPDPTEST用户。
  步骤:
  1:创建EXPDPTEST用户。因为还不习惯命令操作直接在客户端上进行创建;2:创建逻辑目录,最好以SYSYTEM等管理员创建。由于该命令不会在操作系统上创建真正的目录,所以要直接手动创建一个同名的目录,同时确保该目录可读写操作。命令:create directory dump_test as '/u01/oracle10g';(select * from dba_directories;可以查看已存在的所有目录)3:给EXPDPTEST用户赋予在指定目录的操作权限。最好以SYSTEM等管理员赋予。命令:grant read, write on directory dump_test to expdptest4:按用户导出,命令如下:
  expdp wanglipo/111111@orcl schemas=wanglipo dumpfile=expdp.dmp DIRECTORY=dump_test;导出结束后会生成数据文件和日志文件
  5:开始导入同样按用户导入命令如下:
  impdp expdptest/111111@orcl DIRECTORY=dump_test DUMPFILE=expdp.dmp REMAP_SCHEMA=wanglipo:expdptest;6: 至此导入结束.
  附录一些资料:
  一、创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建。
  create directory dpdata1 as 'd:est\dump';二、查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)select * from dba_directories;
  三、给scott用户赋予在指定目录的操作权限,最好以system等管理员赋予。
  grant read,write on directory dpdata1 to scott;四、导出数据
  1)按用户导
  expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;2)并行进程parallel
  expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott33)按表名导
  expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;4)按查询条件导
  expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';5)按表空间导
  expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;6)导整个数据库
  expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;五、还原数据
  1)导到指定用户下
  impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;2)改变表的owner
  impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;3)导入表空间
  impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;4)导入数据库
  impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;5)追加数据
  impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION=append;----------------------------Expdp/Impdp的相关参数----------------------------EXPDP命令行选项
  1. ATTACH
  该选项用于在客户会话与已存在导出作用之间建立关联.语法如下ATTACH=[schema_name.]job_name
  Schema_name用于指定方案名,job_name用于指定导出作业名.注意,如果使用ATTACH选项,在命令行除了连接字符串和ATTACH选项外,不能指定任何其他选项,示例如下:
  Expdp scott/tiger ATTACH=scott.export_job2. CONTENT
  该选项用于指定要导出的内容.默认值为ALL
  CONTENT={ALL | DATA_ONLY | METADATA_ONLY}
  当设置CONTENT为ALL 时,将导出对象定义及其所有数据.为DATA_ONLY时,只导出对象数据,为METADATA_ONLY时,只导出对象定义Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dumpCONTENT=METADATA_ONLY
  3. DIRECTORY
  指定转储文件和日志文件所在的目录
  DIRECTORY=directory_object
  Directory_object用于指定目录对象名称.需要注意,目录对象是使用CREATE DIRECTORY语句建立的对象,而不是OS 目录Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dump建立目录:
  CREATE DIRECTORY dump as ‘d:dump’;
  查询创建了那些子目录:
  SELECT * FROM dba_directories;
  4. DUMPFILE
  用于指定转储文件的名称,默认名称为expdat.dmpDUMPFILE=[directory_object:]file_name [,….]
  Directory_object用于指定目录对象名,file_name用于指定转储文件名.需要注意,如果不指定directory_object,导出工具会自动使用DIRECTORY选项指定的目录对象Expdp scott/tiger DIRECTORY=dump1 DUMPFILE=dump2:a.dmp5. ESTIMATE
  指定估算被导出表所占用磁盘空间分方法.默认值是BLOCKSEXTIMATE={BLOCKS | STATISTICS}
  设置为BLOCKS时,oracle会按照目标对象所占用的数据块个数乘以数据块尺寸估算对象占用的空间,设置为STATISTICS时,根据最近统计值估算对象占用空间Expdp scott/tiger TABLES=emp ESTIMATE=STATISTICSDIRECTORY=dump DUMPFILE=a.dump
  6. EXTIMATE_ONLY
  指定是否只估算导出作业所占用的磁盘空间,默认值为NEXTIMATE_ONLY={Y | N}
  设置为Y时,导出作用只估算对象所占用的磁盘空间,而不会执行导出作业,为N时,不仅估算对象所占用的磁盘空间,还会执行导出操作.
  Expdp scott/tiger ESTIMATE_ONLY=y NOLOGFILE=y7. EXCLUDE
  该选项用于指定执行操作时释放要排除对象类型或相关对象EXCLUDE=object_type[:name_clause] [,….]
  Object_type用于指定要排除的对象类型,name_clause用于指定要排除的具体对象.EXCLUDE和INCLUDE不能同时使用Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dup EXCLUDE=VIEW8. FILESIZE
  指定导出文件的最大尺寸,默认为0,(表示文件尺寸没有限制)9. FLASHBACK_SCN
  指定导出特定SCN时刻的表数据
  FLASHBACK_SCN=scn_value
  Scn_value用于标识SCN值.FLASHBACK_SCN和FLASHBACK_TIME不能同时使用Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmpFLASHBACK_SCN=358523
  10. FLASHBACK_TIME
  指定导出特定时间点的表数据
  FLASHBACK_TIME=”TO_TIMESTAMP(time_value)”
  Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_TIME=“TO_TIMESTAMP(’25-08-2004 14:35:00’,’DD-MM-YYYY HH24:MI:SS’)”
  11. FULL
  指定数据库模式导出,默认为N
  FULL={Y | N}
  为Y时,标识执行数据库导出.
  12. HELP
  指定是否显示EXPDP命令行选项的帮助信息,默认为N当设置为Y时,会显示导出选项的帮助信息.
  Expdp help=y
  13. INCLUDE
  指定导出时要包含的对象类型及相关对象
  INCLUDE = object_type[:name_clause] [,… ]
  14. JOB_NAME
  指定要导出作用的名称,默认为SYS_XXX
  JOB_NAME=jobname_string
  15. LOGFILE
  指定导出日志文件文件的名称,默认名称为export.logLOGFILE=[directory_object:]file_name
  Directory_object用于指定目录对象名称,file_name用于指定导出日志文件名.如果不指定directory_object.导出作用会自动使用DIRECTORY的相应选项值.
  Expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp logfile=a.log16. NETWORK_LINK
  指定数据库链名,如果要将远程数据库对象导出到本地例程的转储文件中,必须设置该选项.
  17. NOLOGFILE
  该选项用于指定禁止生成导出日志文件,默认值为N.
  18. PARALLEL
  指定执行导出操作的并行进程个数,默认值为1
  19. PARFILE
  指定导出参数文件的名称
  PARFILE=[directory_path] file_name
  20. QUERY
  用于指定过滤导出数据的where条件
  QUERY=[schema.] [table_name:] query_clauseSchema 用于指定方案名,table_name用于指定表名,query_clause用于指定条件限制子句.QUERY选项不能与 CONNECT=METADATA_ONLY,EXTIMATE_ONLY,TRANSPORT_TABLESPACES等选项同时使用.
  Expdp scott/tiger directory=dump dumpfiel=a.dmpTables=emp query=’WHERE deptno=20’
  21. SCHEMAS
  该方案用于指定执行方案模式导出,默认为当前用户方案.
  22. STATUS
  指定显示导出作用进程的详细状态,默认值为0
  23. TABLES
  指定表模式导出
  TABLES=[schema_name.]table_name[:partition_name][,…]
  Schema_name用于指定方案名,table_name用于指定导出的表名,partition_name用于指定要导出的分区名.
  24. TABLESPACES
  指定要导出表空间列表
  25. TRANSPORT_FULL_CHECK
  该选项用于指定被搬移表空间和未搬移表空间关联关系的检查方式,默认为N.
  当设置为Y时,导出作用会检查表空间直接的完整关联关系,如果表空间所在表空间或其索引所在的表空间只有一个表空间被搬移,将显示错误信息.当设置为N时, 导出作用只检查单端依赖,如果搬移索引所在表空间,但未搬移表所在表空间,将显示出错信息,如果搬移表所在表空间,未搬移索引所在表空间,则不会显示错误信息.
  26. TRANSPORT_TABLESPACES
  指定执行表空间模式导出
  27. VERSION
  指定被导出对象的数据库版本,默认值为COMPATIBLE.
  VERSION={COMPATIBLE | LATEST | version_string}
  为COMPATIBLE时,会根据初始化参数COMPATIBLE生成对象元数据;为LATEST时,会根据数据库的实际版本生成对象元数据.version_string用于指定数据库版本字符串.调用EXPDP使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录.因此,使用EXPDP工具时,必须首先建立DIRECTORY对象.并且需要为数据库用户授予使用DIRECTORY对象权限.
  -------------------------------------应用-------------------------------------Data Pump 反映了整个导出/导入过程的完全革新。不使用常见的 SQL 命令,而是应用专用 API(direct path api etc) 来以更快得多的速度加载和卸载数据。
  1.Data Pump 导出 expdp
  例子:
  sql>create directory dpdata1 as '/u02/dpdata1';sql>grant read, write on directory dpdata1 to ananda;$expdp ananda/abc123 tables=CASES directory=DPDATA1 dumpfile=expCASES.dmp job_name=CASES_EXPORT$expdp ananda/abc123 tables=CASES directory=DPDATA1dumpfile=expCASES_%U.dmp parallel=4 job_name=Cases_Exportinclude/exclude 例子:
  include=table:"in('DB','TS')"
  或者include=table:"like '%E%'"
  或者include=function,package,procedure,table:"='EMP'"或者exclude=SEQUENCE,TABLE:"IN ('EMP','DEPT')"2.Data Pump 导入 expdp
  1)从expdp中获取数据源 exp.dmp
  2)复制某个数据库中的一个schema到另一个数据库中。
  3) 在同一个数据库中把一个schema中所有的对象复制到另一个schema中。
  例子:
  1)impdp 的数据源是expdp 导出来的DMP文件
  impdp ananda/abc123 directory=dpdata1 dumpfile=expCASES.dmp job_name=cases_import2)复制某个数据库中的一个schema到另一个数据库中。
  --1.newwork_link为目标数据库建立的database_link,(用户test 需要grant exp_full_database to TEST; )create public database link TOLINK
  connect to TEST identified by oracle
  using '(DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.20.199)(PORT = 1521)))
  (CONNECT_DATA =
  (SERVICE_NAME = orcl)
  )
  )';
  --2.impdp在目标数据库服务器上执行 只能低版本向高版本impimpdp network_link=TOLINK schemas=test remap_schema=test:link23) 在同一个数据库中把一个schema中所有的对象复制到另一个schema中。
  --1.创建连接自己的database link:
  create public database link system_self connect to system identified by "system" using 'orcl';数据库链接已创建。
  --2.复制hr schema到test schema:
  impdp system/system network_link=system_self schemas=hr remap_schema=hr:test

这个百度上一搜一大把,都说的很详细,楼主没搜过,
数据导出:
1 将数据库TEST完全导出,用户名system 密码manager 导出到D:daochu.dmp中
exp system/manager@TEST file=d:daochu.dmp full=y
2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:daochu.dmp owner=(system,sys)
3 将数据库中的表inner_notify、notify_staff_relat导出
exp aichannel/aichannel@TESTDB2 file= d:datanewsmgnt.dmp tables=(inner_notify,notify_staff_relat)

4 将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:daochu.dmp tables=(table1) query=" where filed1 like '00%'"

上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。
也可以在上面命令后面 加上 compress=y 来实现。

数据的导入
1 将D:daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:daochu.dmp
imp aichannel/aichannel@HUST full=y file=d:datanewsmgnt.dmp ignore=y
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上 ignore=y 就可以了。
2 将d:daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:daochu.dmp tables=(table1)

基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。

注意:
操作者要有足够的权限,权限不够它会提示。
数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。

当然,上面的方法在导出数据时可能会导出很大的包,那是因为你的用户可能在授权的时候授予了DBA的权限,所以可以采用下面方法来进行数据库备份:

数据库备份
建议系统过渡后,每周进行一次备份。或者在数据表发生重大改变前,对要改变的数据表进行备份。
执行以下步骤,进行备份。
在命令行里,敲入“cmd”,回车,进入命令行窗口。
在窗口中,输入:
exp mas/123456@mas

系统提示:输入数组提取缓冲区大小: 4096 >
可以直接回车;

系统提示:导出文件: EXPDAT.DMP>
此处输入导出文件的位置,其路径必须存在,Oracle在这里不会自动建立路径,但可以建立文件名。备份文件以dmp作为后缀。
输入内容如:e:\work\mas_db_090925v1.dmp 回车

系统提示: (1)E(完整的数据库),(2)U(用户) 或 (3)T(表): (2)U > u
此处可以输入u,也可以直接回车,因为系统此时默认的是U

系统提示:导出权限(yes/no):yes>回车

系统提示:导出表数据(yes/no):yes>回车

系统提示:压缩区(yes/no):yes>回车

系统提示:要导出的用户: (RETURN 以退出) > mas

系统提示:要导出的用户: (RETURN 以退出) > 回车

此时系统会自动进行备份
本文对Oracle数据的导入导出 imp ,exp 两个命令进行了介绍, 并对其相应的参数进行了说明,然后通过一些示例进行演练,加深理解.
文章最后对运用这两个命令可能出现的问题(如权限不够,不同oracle版本)进行了探讨,并提出了相应的解决方案;
本文部分内容摘录自网络,感谢网友的经验总结;

一.说明

oracle 的exp/imp命令用于实现对数据库的导出/导入操作;
exp命令用于把数据从远程数据库服务器导出至本地,生成dmp文件;
imp命令用于把本地的数据库dmp文件从本地导入到远程的Oracle数据库中。

二.语法

可以通过在命令行输入 imp help=y 获取imp的语法信息:
=============================================================================
C:\Documents and Settings\auduser>imp help=y

Import: Release 9.0.1.1.1 - Production on 星期二 5月 20 18:21:57 2008

(c) Copyright 2001 Oracle Corporation. All rights reserved.

可以通过输入 IMP 命令和您的用户名/口令
后接用户名/口令的命令:

例程: IMP SCOTT/TIGER

或者, 可以通过输入 IMP 命令和各种参数来控制“导入”
按照不同参数。要指定参数,您可以使用关键字:

格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)
例程: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表

USERID 必须是命令行中的第一个参数。

关键字 说明(默认) 关键字 说明(默认)
--------------------------------------------------------------------------
USERID 用户名/口令 FULL 导入整个文件 (N)
BUFFER 数据缓冲区大小 FROMUSER 所有人用户名列表
FILE 输入文件 (EXPDAT.DMP) TOUSER 用户名列表
SHOW 只列出文件内容 (N) TABLES 表名列表
IGNORE 忽略创建错误 (N) RECORDLENGTH IO 记录的长度
GRANTS 导入权限 (Y) INCTYPE 增量导入类型
INDEXES 导入索引 (Y) COMMIT 提交数组插入 (N)
ROWS 导入数据行 (Y) PARFILE 参数文件名
LOG 屏幕输出的日志文件 CONSTRAINTS 导入限制 (Y)
DESTROY 覆盖表空间数据文件 (N)
INDEXFILE 将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES 跳过不可用索引的维护 (N)
FEEDBACK 每 x 行显示进度 (0)
TOID_NOVALIDATE 跳过指定类型 ID 的验证
FILESIZE 每个转储文件的最大大小
STATISTICS 始终导入预计算的统计信息
RESUMABLE 遇到与空格有关的错误时挂起 (N)
RESUMABLE_NAME 用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
COMPILE 编译过程, 程序包和函数 (Y)

下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)
TABLESPACES 将要传输到数据库的表空间
DATAFILES 将要传输到数据库的数据文件
TTS_OWNERS 拥有可传输表空间集中数据的用户

==============================================
同样可以通过输入 exp help=y 获取exp的语法信息

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\auduser>exp help=y

Export: Release 9.0.1.1.1 - Production on 星期二 5月 20 18:26:34 2008

(c) Copyright 2001 Oracle Corporation. All rights reserved.

通过输入 EXP 命令和用户名/口令,您可以
后接用户名/口令的命令:

例程: EXP SCOTT/TIGER

或者,您也可以通过输入跟有各种参数的 EXP 命令来控制“导出”
按照不同参数。要指定参数,您可以使用关键字:

格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表

USERID 必须是命令行中的第一个参数。

关键字 说明(默认) 关键字 说明(默认)
--------------------------------------------------------------------------
USERID 用户名/口令 FULL 导出整个文件 (N)
BUFFER 数据缓冲区大小 OWNER 所有者用户名列表
FILE 输出文件 (EXPDAT.DMP) TABLES 表名称列表
COMPRESS 导入到一个区 (Y) RECORDLENGTH IO 记录的长度
GRANTS 导出权限 (Y) INCTYPE 增量导出类型
INDEXES 导出索引 (Y) RECORD 跟踪增量导出 (Y)
DIRECT 直接路径 (N) TRIGGERS 导出触发器 (Y)
LOG 屏幕输出的日志文件 STATISTICS 分析对象 (ESTIMATE)
ROWS 导出数据行 (Y) PARFILE 参数文件名
CONSISTENT 交叉表一致性 CONSTRAINTS 导出约束条件 (Y)

FEEDBACK 每 x 行显示进度 (0)
FILESIZE 每个转储文件的最大大小
FLASHBACK_SCN 用于回调会话快照的 SCN
FLASHBACK_TIME 用来获得最接近于指定时间的 SCN 的时间
QUERY 用来导出表的子集的选择子句
RESUMABLE 遇到与空格有关的错误时挂起 (N)
RESUMABLE_NAME 用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
TTS_FULL_CHECK 对 TTS 执行完全或部分相关性检查
TABLESPACES 要导出的表空间列表
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TEMPLATE 调用 iAS 模式导出的模板名称

三.使用示例

3.1 数据导出:

1 将数据库SampleDB完全导出,用户名system 密码manager 导出到E:\SampleDB.dmp中

exp system/manager@TestDB file=E:\sampleDB.dmp full=y

2 将数据库中system用户与sys用户的表导出

exp system/manager@TestDB file=E:\sampleDB.dmp owner=(system,sys)

3 将数据库中的表 TableA,TableB 导出

exp system/manager@TestDB file=E:\sampleDB.dmp tables=(TableA,TableB)

4 将数据库中的表tableA中的字段filed1 值为 "王五" 的数据导出

exp system/manager@TestDB file=E:\sampleDB.dmp tables=(tableA) query=' where filed1='王五'

如果想对dmp文件进行压缩,可以在上面命令后面 加上 compress=y 来实现。

3.2 数据的导入

1 将备份数据库文件中的数据导入指定的数据库SampleDB 中,如果 SampleDB 已存在该表,则不再导入;

imp system/manager@TEST file=E:\sampleDB.dmp full=y ignore=y

2 将d:\daochu.dmp中的表table1 导入

imp system/manager@TEST file=E:\sampleDB.dmp tables=(table1)

3. 导入一个完整数据库

imp system/manager file=bible_db log=dible_db full=y ignore=y

4. 导入一个或一组指定用户所属的全部表、索引和其他对象

imp system/manager file=seapark log=seapark fromuser=seapark imp
system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)

5. 将一个用户所属的数据导入另一个用户

imp system/manager file=tank log=tank fromuser=seapark touser=seapark_copy
imp system/manager file=tank log=tank fromuser=(seapark,amy)
touser=(seapark1, amy1)

6. 导入一个表

imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)

7. 从多个文件导入

imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4)
log=paycheck, filesize=1G full=y

8. 使用参数文件

imp system/manager parfile=bible_tables.par
bible_tables.par参数文件:
#Import the sample tables used for the Oracle8i Database Administrator's
Bible. fromuser=seapark touser=seapark_copy file=seapark log=seapark_import
参数文件示例见附录

9. 增量导入

imp system./manager inctype= RECTORE FULL=Y FILE=A

不少情况下要先将表彻底删除,然后导入。

四.参数说明

4.1、8i EXP常用选项
1、FULL,这个用于导出整个数据库,在ROWS=N一起使用时,可以导出整个数据库的结构。例如:
exp sys file=./db_str.dmp log=./db_str.log full=y rows=n compress=y direct=y
2、BUFFER和FEEDBACK,在导出比较多的数据时,我会考虑设置这两个参数。例如:
exp new file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT
3、FILL和LOG,这两个参数分别指定备份的DMP名称和LOG名称,包括文件名和目录,例子见上面。
需要说明的是,EXP可以直接备份到磁带中,即使用FILE=/dev/rmt0(磁带设备名),但是一般我们都不这么做,原因有二:一、这样做的速度会慢很多,二、现在一般都是使用磁带库的,不建议直接对磁带进行操作。至于没有使用磁带库的朋友可以考虑和UNIX的TAR结合使用。
如果你真想使用EXP直接到磁带,你可以参考Metalink文章“EXPORTING TO TAPE ON UNIX SYSTEMS”(文档号:30428.1),该文中有详细解释。
4、COMPRESS参数将在导出的同时合并碎块,尽量把数据压缩到initial的EXTENT里,默认是N,一般建议使用。DIRECT参数将告诉EXP直接读取数据,而不像传统的EXP那样,使用SELECT来读取表中的数据,这样就减少了SQL语句处理过程。一般也建议使用。不过有些情况下DIRECT参数是无法使用的。
5、如何使用SYSDBA执行EXP/IMP?
这是一个很现实的问题,有时候我们需要使用SYSDBA来执行EXP/IMP,如进行传输表空间的EXP/IMP,以及在9i下用SYS用户来执行EXP/IMP时,都需要使用SYSDBA才可。我们可以使用下面方式连入EXP/IMP:
exp "'sys/sys as sysdba'" file=1.dmp tables=gototop.t rows=n
6、QUERY参数后面跟的是where条件,值得注意的是,整个where子句需要使用""括起来,where子句的写法和SELECT中相同,如果是UNIX平台所有"和'都需要使用\u26469屏蔽它们的特殊含义:
exp gototop/gototop file=1.dmp log=1.log tables=cyx.t query="where c1=20 and c2=gototop"
如果是windows平台,则使用下面的格式:
exp c/c@ncn file=c.dmp log=c.log tables=t query="""where id=1 and name='gototop'"""
4.2、8i IMP常用选项
1、FROMUSER和TOUSER,使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中。
2、IGNORE、GRANTS和INDEXES,其中IGNORE参数将忽略表的存在,继续导入,这个对于需要调整表的存储参数时很有用,我们可以先根据实际情况用合理的存储参数建好表,然后直接导入数据。而GRANTS和INDEXES则表示是否导入授权和索引,如果想使用新的存储参数重建索引,或者为了加快到入速度,我们可以考虑将INDEXES设为N,而GRANTS一般都是Y。
另外一个EXP/IMP都有的参数是PARFILE,它是用来定义EXP/IMP的参数文件,也就是说,上面的参数都可以写在一个参数文件中,但我们一般很少使用。
4.4、Oracle9i EXP功能描述
Oracle9i EXP在原有的基础上新增了部分新的参数,按功能主要分为以下几个部分:
1、OBJECT_CONSISTENT - 用于设置EXP对象为只读以保持对象的一致性。默认是N。
2、FLASHBACK_SCN和FLASHBACK_TIME - 用于支持FLASHBACK功能而新增。
3、RESUMABLE、RESUMABLE_NAME和RESUMABLE_TIMEOUT - 用于支持RESUMABLE空间分配而新增。
4、TTS_FULL_CHECK - 用于在传输表空间时使用依赖性检查。
5、TEMPLATE - 用于支持iAS。
6、TABLESPACES - 设置表空间导出模式。个人觉得对于一般用户而言,这个才是新增参数中最实用的一个,可以让用户在原来的FULL、OWNER、TABLES的基础上多了一种选择,使得EXP更加灵活。

五、不同版本的EXP/IMP问题?
一般来说,从低版本导入到高版本问题不大,麻烦的是将高版本的数据导入到低版本中,在Oracle9i之前,不同版本Oracle之间的EXP/IMP可以通过下面的方法来解决:
1、在高版本数据库上运行底版本的catexp.sql;
2、使用低版本的EXP来导出高版本的数据;
3、使用低版本的IMP将数据库导入到底版本数据库中;
4、在高版本数据库上重新运行高版本的catexp.sql脚本。
但在9i中,上面的方法并不能解决问题。如果直接使用底版本EXP/IMP会出现如下错误:
EXP-00008: ORACLE error %lu encountered
ORA-00904: invalid column name
这已经是一个公布的BUG,需要等到Oracle10.0才能解决,BUG号为2261,你可以到METALINK上去查看有关此BUG的详细信息。
BUG归BUG,我们的工作还是要做,在没有Oracle的支持之前,我们就自己解决。在Oracle9i中执行下面的SQL重建exu81rls视图即可。
CREATE OR REPLACE view exu81rls
(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)
AS select u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,
decode(bitand(r.stmt_type,1), 0,'', 'SELECT,')
|| decode(bitand(r.stmt_type,2), 0,'', 'INSERT,')
|| decode(bitand(r.stmt_type,4), 0,'', 'UPDATE,')
|| decode(bitand(r.stmt_type,8), 0,'', 'DELETE,'),
r.check_opt, r.enable_flag,
DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)
from user$ u, obj$ o, rls$ r
where u.user# = o.owner#
and r.obj# = o.obj#
and (uid = 0 or
uid = o.owner# or
exists ( select * from session_roles where role='SELECT_CATALOG_ROLE')
)
/
grant select on sys.exu81rls to public;
/

六、其他问题

本文只讨论了Oracle8i和9i中的EXP/IMP的一些情况,对于之前的版本,在8.0.X中,除了QUERY参数不能用外,其它差别不大。针对没有QUERY的情况,我们可以先在数据库中使用查询条件建立临时中间表,然后使用EXP导出这个中间表即可。至于Oracle7因为目前使用的人较少,gototop不打算在此做详细解释了,如果读者朋友有需求,你可以参考Metalink文档:“Overview of Export and Import in Oracle7”(文档号:61949.1)。关于EXP/IMP的详细参数信息你可以通过EXP/IMP HELP=Y来获得。
另外关于传输表空间的更多信息可以参考下面的Metelink文档,本文不再详述。
[NOTE:77523.1] Transportable Tablespaces -- An Example to setup and use.
[NOTE:100698.1] Perform tablespace point-in-time recovery using Transportable Tablespace.
在进行并行EXP/IMP的时候,如果IMP过程建索引的话不建议同时运行5个以上的IMP,如果你想加快速度,可以在IMP的时候不建索引,这样只要内存允许,可以多跑几个,然后是SQL脚本创建需要的索引。

注意:
操作者要有足够的权限,权限不够它会提示。
数据库是否可以连上, 可以用tnsping TestDB 来获得数据库 TestDB 能否连上。

附录一:
给用户增加导入数据权限的操作
第一, 启动sql*puls
第二,以system/manager登陆
第三,create user 用户名 IDENTIFIED BY 密码(如果已经创建过用户,这步可以省略)
第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
DBA,CONNECT,RESOURCE,CREATE SESSION TO 用户名字
第五, 运行-cmd-进入dmp文件所在的目录,
imp userid=system/manager full=y file=*.dmp
或者 imp userid=system/manager full=y file=filename.dmp

附录二:
Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.
先建立import9.par,
然后,使用时命令如下:imp parfile=/filepath/import9.par
例 import9.par 内容如下:
FROMUSER=TGPMS
TOUSER=TGPMS2 (注:把表的拥有者由FROMUSER改为TOUSER,FROMUSER和TOUSER的用户可以不同)
ROWS=Y
INDEXES=Y
GRANTS=Y
CONSTRAINTS=Y
BUFFER=409600
file==/backup/ctgpc_20030623.dmp
log==/backup/import_20030623.log

其实这些网上有很多,你搜下就有了,我这里有存档的,你参照下:
exp 命令的参数:
将数据库内的各对象以二进制方式下载成dmp文件,方便数据迁移。
buffer:下载数据缓冲区,以字节为单位,缺省依赖操作系统
consistent:下载期间所涉及的数据保持read only,缺省为n
direct:使用直通方式 ,缺省为n
feeback:显示处理记录条数,缺省为0,即不显示
file:输出文件,缺省为expdat.dmp
filesize:输出文件大小,缺省为操作系统最大值
indexes:是否下载索引,缺省为n,这是指索引的定义而非数据,exp不下载索引数据
log:log文件,缺省为无,在标准输出显示
owner:指明下载的用户名
query:选择记录的一个子集
rows:是否下载表记录
tables:输出的表名列表
导出整个实例
exp dbuser/oracle file=oradb.dmp log=oradb.log full=y consistent=y direct=y
user应具有dba权限
导出某个用户所有对象
exp dbuser/oracle file=dbuser.dmp log=dbuser.log owner=dbuser buffer=4096000 feedback=10000
导出一张或几张表
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1,table2 buffer=4096000 feedback=10000
导出某张表的部分数据
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1 buffer=4096000 feedback=10000 query=\”where col1=\’…\’ and col2 \<…\”
不可用于嵌套表
以多个固定大小文件方式导出某张表
exp dbuser/oracle file=1.dmp,2.dmp,3.dmp,… filesize=1000m tables=emp buffer=4096000 feedback=10000
这种做法通常用在:表数据量较大,单个dump文件可能会超出文件系统的限制
直通路径方式
direct=y,取代buffer选项,query选项不可用
有利于提高下载速度
consistent选项
自export启动后,consistent=y冻结来自其它会话的对export操作的数据对象的更新,这样可以保证dump结果的一致性。但这个过程不能太长,以免回滚段和联机日志消耗完
imp
将exp下载的dmp文件上载到数据库内。
buffer:上载数据缓冲区,以字节为单位,缺省依赖操作系统
commit:上载数据缓冲区中的记录上载后是否执行提交
feeback:显示处理记录条数,缺省为0,即不显示
file:输入文件,缺省为expdat.dmp
filesize:输入文件大小,缺省为操作系统最大值
fromuser:指明来源用户方
ignore:是否忽略对象创建错误,缺省为n,在上载前对象已被建立往往是一个正常现象,所以此选项建议设为y
indexes:是否上载索引,缺省为n,这是指索引的定义而非数据,如果上载时索引已建立,此选项即使为n也无效,imp自动更新索引数据
log:log文件,缺省为无,在标准输出显示
rows:是否上载表记录
tables:输入的表名列表
touser:指明目的用户方
导入整个实例
imp dbuser/oracle file=oradb.dmp log=oradb.log full=y buffer=4096000 commit=y ignore=y feedback=10000
导入某个用户所有对象
imp dbuser/oracle file=dbuser.dmp log=dbuser.log fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
导入一张或几张表
imp dbuser2/oracle file=user.dmp log=user.log tables=table1,table2 fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
以多个固定大小文件方式导入某张表
imp dbuser/oracle file=\(1.dmp,2.dmp,3.dmp,…\) filesize=1000m tables=emp fromuser=dbuser touser=dbuser2 buffer=4096000 commit=y ignore=y feedback=10000

exp/imp已经很好用了,但是唯一的确定是速度太慢,如果1张表的数据有个百千万的,常常导入导出就长时间停在这个表这,但是从Oracle 10g开始提供了称为数据泵新的工具expdp/impdp,它为Oracle数据提供高速并行及大数据的迁移。

imp/exp可以在客户端调用,但是expdp/impdp只能在服务端,因为在使用expdp/impdp以前需要在数据库中创建一个Directory

create directory dump_test as '/u01/oracle10g';

grant read, write on directory dump_test to piner

然后就可以开始导入导出

expdp piner/piner directory=dump_test dumpfile=user.dmp 导出用户的数据

expdp piner/piner directory=dump_test dumpfile=table.dmp tables=test1,test2 导出表数据

impdp piner/piner directory=dump_test dumpfile=user.dmp 导入该用户数据

impdp piner/piner directory=dump_test dumpfile=table.dmp 导出表数据

my test:

SQL> create directory dump_test as '/home/oracle/oracle10g';

Directory created.

SQL> drop directory dump_test;

Directory dropped.
SQL> create directory dump_test as '/u01/oracledmp';

Directory created.

--接下来记得创建directory在系统上,并赋好权限
[oracle@localhost ~]$ expdp anlen/anlen123 directory=dumpdir dumpfile=anlen.dmp

Export: Release 10.2.0.4.0 - Production on Saturday, 12 June, 2010 14:43:20

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 "ANLEN"."SYS_EXPORT_SCHEMA_01": anlen/******** directory=dumpdir dumpfile=anlen.dmp
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 1.125 MB
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
. . exported "ANLEN"."DBA_01" 571.2 KB 20000 rows
. . exported "ANLEN"."DBA_02" 278.4 KB 20000 rows
Master table "ANLEN"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for ANLEN.SYS_EXPORT_SCHEMA_01 is:
/u01/dmpdir/anlen.dmp
Job "ANLEN"."SYS_EXPORT_SCHEMA_01" successfully completed at 14:43:41


如何向oracle中导入excel表格数据oracle怎么导入excel数据表_百度知...
5.点击data to oracle,选择将要导入数据的表,并在fields中将文本中的字段与表中的字段进行关联 6.点击import按钮进行导入 7.查看导入的数据 OK,至此数据导入成功。

如何在Oracle数据表里导入数据?
1。表结构相同的表,且在同一数据库(如,table1,table2)Sql:insertintotable1select*fromtable2(完全复制)insertintotable1selectdistinct*fromtable2(不复制重复纪录)insertintotable1selecttop5*fromtable2(前五条纪录)2。不在同一数据库中(如,db1table1,db2table2)sql:insertintodb1..table1se...

Oracle导出导入表及数据
因此只能用Oracle自带的exp imp来导出导入,打开cmd exp scott\/tiger@orcl file=C:\\Users\\Administrator\\Desktop\\1.dmp tables=(cms_category) \/\/在orcl这个数据库下的scott账户密码为tiger的数据库导出名为cms_category的表 imp scott\/tiger@orcl file=C:\\Users\\Administrator\\Desktop\\1.dmp tables=(c...

Oracle怎么导入数据
exp命令用于把数据从远程数据库服务器导出至本地,生成dmp文件;imp命令用于把本地的数据库dmp文件从本地导入到远程的Oracle数据库中。二.语法可以通过在命令行输入 imp help=y 获取imp的语法信息:===C:Documents and Settingsauduser>imp help=yImport: Release 9.0.1.1.1 - Production on 星期二...

[转]Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙...
本文主要介绍如何结合Sql脚本和PL\/SQL Developer工具来实现创建表空间、创建数据库、备份数据库、数据导出等操作,然后实现Oracle对象创建、导入数据等操作,方便我们快速了解、创建所需要的部署Sql脚本和数据库操作。1、 准备数据库创建脚本?create tablespace whc_tbs datafile ‘E:\\oracle\\oradata\\whcdb\\...

oracle 数据怎么导入?
accp@orcl file= d:\\daochu.dmp tables=(emp,dept)\\x0d\\x0a\\x0d\\x0a4、将数据库orcl中的表空间testSpace导出\\x0d\\x0aexp system\/accp@orcl file=d:\\daochu.dmp tablespaces=(testSpace)\\x0d\\x0a\\x0d\\x0a二、数据导入(imp.exe)\\x0d\\x0a1、将d:\\daochu.dmp 中的数据导入 orcl数据库...

Oracle数据泵导出导入与传统导出导入的区别
Oracle Database 10g引入了最新的数据泵(Data Dump)技术,使DBA或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中。数据泵导出导入(EXPDP和IMPDP)的作用1、实现逻辑备份和逻辑恢复。2、在数据库用户之间移动对象。3、在数据库之间移动对象4、实现表空间搬移。 数据泵导出...

sqlloader能把excel导入oracle数据库吗
一、使用工具:Oracle、SQL*Loader、PLSQL Developer、Sql Server 2000。二、导入方法:有三种导入方法,分别是:1、方法一:使用SQL*Loader:这个是用的较多的方法,前提必须oracle数据中目的表已经存在。大体步骤如下:a、将excel文件另存为一个新文件比如文件名为 text.txt ,文件类型选文本文件(制表...

Oracle导入导出数据库的语法
导读:oracle中除了在Oracle编辑器中用图形化的方式导入导出文理文件的数据方式外,还可以采用命令行的方式导入导出数据库,其语法实示例如下:imp [username[\/password[@service]]]步骤:1、首先在进入 dos, 然后切换到 oracle 数据库物理文件所在的目录即(dmp文件所在的目录)。接下来输入下述语句!imp ...

oracle中怎样把表、表空间导入或导出?
Oracle数据导入导出imp\/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中。 利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用。执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行...

邻水县18482221049: 如何向oracle数据库导入imp文件 -
塔德清音: 如何向oracle数据库导入imp文件 Oracle 提供两个工具imp.exe 和exp.exe分别用于导入和导出数据.这两个工具位于Oracle_home/bin目录下. 导出数据exp1 将数据库ATSTestDB完全导出,用户名system 密码123456 导出到c:/export....

邻水县18482221049: oracle 怎样用imp.exe导入导出数据 -
塔德清音: Oracle 提供两个工具imp.exe 和exp.exe分别用于导入和导出数据.这两个工具位于Oracle_home/bin目录下. 导出数据exp1 将数据库ATSTestDB完全导出,用户名system 密码123456 导出到c:/export.dmp中 exp system/123456@ATSTestDB file...

邻水县18482221049: Oracle数据导入导出imp/exp命令 -
塔德清音: Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中. 利用这个功能可以构建两个相同的数据库,一个用来...

邻水县18482221049: Oracle导入导出数据库的语法是怎样的?
塔德清音: oracle中除了在Oracle编辑器中用图形化的方式导入导出文理文件的数据方式外,还可以采用命令行的方式导入导出数据库,其语法实示例如下: imp [username[/password...

邻水县18482221049: Oracle 中的导入命令imp -
塔德清音: 是aa的帐号密码,"提示该对象不属于当前用户时怎么回事"的原因是你从bb用户导出的,而导入的是aa用户而不是bb用户,但应该只是警告,还是可以导入的,你要不放心,可以加一句ignore=y在整个语句的最后.

邻水县18482221049: Oracle的导入导出命令是什么? -
塔德清音: 数据库恢复——>数据导入1.在服务器端Windows NT网络操作系统中找到Oracle的安装目录:如D:\oracle\ 再进入Bin\子目录,鼠标左键双击 imp.exe 文件或在开始->运行中写imp,执行.2.出现提示输入管理员用户名界面import:Release 8.1...

邻水县18482221049: oracle怎么把数据导入导出啊 -
塔德清音: 直接用命令导出导入,把一个用户的所有试图、存储过程、表、序列都导出了 导出: cmd>> >>exp username/password@数据库名称 file=F:\sss.sql 导入:导入之前需创建一个空库(名称不同也可以),一个一样的用户,也是命令导入 >>imp username/password@数据库名称 file=F:\sss.sql full=Y 不懂可以Q我

邻水县18482221049: Oracle该怎么导入?Oracle该怎么导入/导出数据库的语法
塔德清音: 步骤: 1、首先在进入 dos, 然后切换到 oracle 数据库物理文件所在的目录即(dmp文件所在的目录).接下来输入下述语句! imp username/password@service file=...

邻水县18482221049: oracle数据库导入和导出命令
塔德清音: 数据库导入 imp 用户名/密码@实例名 file=文件路径 fromuser=导出用户名 touser=导入用户名 数据库导出 exp 用户名/密码@实例名 file=文件路径

邻水县18482221049: Oracle数据库的导入/导出???
塔德清音: 导出的肯定不止用户的表数据,还有用户的索引、视图、序列等,使用数据库管理员建立的用户的SQL语句肯定没有的啦,因为在数据库中并不会保留这些建表语句撒;导入时,不会自动建立对应的用户和对应的授权,因为导入的时候,需要写要导入的用户的用户名和密码,这样导出的表呀什么的都会导入到这个用户中,而不是建立相应的用户撒;至于具体的导入导出原理,楼主可以去百度搜搜撒,我刚搜了下,有好多的.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网