oracle的EXP/IMP

对与EXP/IMP首先得保证NLS_LANG与oracle的字符集一致。对于windows系统查看字符集的方法为:
                            C:\>chcp
                            活动代码页: 936(zhs16gbk)
                            也可以在cmd窗口上右击->属性->选项  当前代码页
在linux系统上:[oracle@rhel5 ~]$ locale
                            LANG=zh_CN.UTF-8
                            或
                            [oracle@rhel5 ~]$ echo $LANG
                            zh_CN.UTF-8
在oracle上:通过查看nls_database_parametersprops$v$nls_parameters视图能够知道字符集信息,NLS_CHARACTERSET表示字符集

EXP/IMP用法:[oracle@rhel5 ~]$ exp -help
Export: Release 11.2.0.1.0 - Production on Sun Sep 8 20:48:36 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

you can control how Export runs by entering the EXP command followed
by various arguments. To specify parameters, you use keywords:
     Format:  EXP KEYWORD=value or KEYWORD=(value1,value2,...,valueN)
     Example: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
              or TABLES=(T1:P1,T1:P2), if T1 is partitioned table

USERID must be the first parameter on the command line.
Keyword    Description (Default)      Keyword      Description (Default)
--------------------------------------------------------------------------
USERID     username/password          FULL         export entire file (N)
BUFFER     size of data buffer        OWNER        list of owner usernames
FILE       output files (EXPDAT.DMP)  TABLES       list of table names
COMPRESS   import into one extent (Y) RECORDLENGTH length of IO record
GRANTS     export grants (Y)          INCTYPE      incremental export type
INDEXES    export indexes (Y)         RECORD       track incr. export (Y)
DIRECT     direct path (N)            TRIGGERS     export triggers (Y)
LOG        log file of screen output  STATISTICS   analyze objects (ESTIMATE)
ROWS       export data rows (Y)       PARFILE      parameter filename
CONSISTENT cross-table consistency(N) CONSTRAINTS  export constraints (Y)
部分说明:
USERID:用户名/口令
FULL:导出整个数据库,
只有拥有exp_full_database角色的用户或者特权用户如sys,system等才能进行全库导出 
示例如下 
         exp "'/ as sysdba'" full=y 
BUFFER:制定数据缓冲区大小,主要用于提高exp/imp速度,该单位为字节,不能写成buffer=1m的形式,应写成字节为单位的参数,如buffer=1048576
         exp hr/hr file=t_b.dmp buffer= 
1048576 tables=T 
OWNER:需要导出的用户,示例如下
         exp "'/ as sysdba'" wner=\(hr,scott\) file=hr_scott.dmp 
        上例中由于是在linux平台进行测试的,需要对
 
owner=\(hr,scott\)使用\进行转义 
FILE:输出文件
TABLES:需要导出的表
COMPRESS:导入到一个区 (Y) 。主要目的是为了消除存储碎片,以保证某张表的所有记录都存储在连续的空间里。
 
但是负面效应很明显, 如果该参数值为y,则会将高水位线以下的所有extent导入到一个区中, 因此在导入时很            有可能出现,明明表中数据很少,但是却花了很多时间在建立的extent上。 且自oracle9i开始,使用了本地管理的表空间,存储碎片的问题应该比低版本好多了,笔者个人建议将compress设为n。
GRANTS:导出权限 (Y)
INCTYPE:增量导出类型,已废除
INDEXES:导出索引 (Y) 
RECORD:跟踪增量导出 (Y)
 
,已废除 
TRIGGERS:导出触发器 (Y) 
LOG:屏幕输出的日志文件
STATISTICS:在导出文件中保留对象的统计信息,默认值ESTIMATE,还可以为compute或者none。如果导出时出现
          EXP-00091: Exporting questionable statistics 
         可以考虑将
 
STATISTICS设置为NONE 
ROWS:确定表中的数据行是否导出,默认为Y,导出
DIRECT:直接路径 (N)。
传统模式导出和直接路径导出的原理 
传 统模式导出相当于使用select语句从表中取出数据,数据从磁盘上先读到buffer cache中,记录被转移到一个评估检测的缓冲区中,数据经过语法检测后没有问题,将数据传给PGA,最后写入导出的文件中。如果使用Direct Path模式导出,数据直接从磁盘上读取到导出的PGA中:记录直接被转换导出会话的私有buffer中。这也就是意味着SQL语句处理层被忽略掉了,因 为数据已经是符合导出的格式了,不需要其他的转换处理了。数据直接被传送给导出的客户端,最后写入导出文件。
传统模式导出和直接路径导出的差异 
Direct Path导出模式速度上明显快于Conventional Path导出模式,因为Direct Path导出模式忽略了SQL语句处理这一层。
当使用Direct Path导出模式的时候,可以增大参数RECORDLENGTH的值来提高导出的性能。导出的性能主要取决以下的因素:DB_BLOCK_SIZE、导出 表上列的类型、导出文件的I/O层(
主要是指导出文件尽量要和数据库的数据文件在不同的磁盘上,避免I/O上的竞争)。一般来说,参数 RECORDLENGTH设置为操作系统I/O的block size或者是DB_BLOCK_SIZE的整数倍,例如65535。
使用哪种模式导出数据都不会影响导入数据,也就是说导入数据的时间是一样的。

imp的参数和exp的大致相同
ignore:Oracle在恢复数据的过程中,当导入某个表时,该表已经存在,就要根据ignore参数的设置来决定如何操作。若 ignore=y,Oracle不执行CREATE TABLE语句,直接将数据插入到表中,如果插入的记录违背了约束条件,比如主键约束,唯一索引等,则出错的记录不会插入,但合法的记录会添加到表中。若 ignore=n,Oracle不执行CREATE TABLE语句,同时也不会将数据插入到表中,而是忽略该表的错误,继续导入下一个表。 -
注意:如果表中的字段并没有唯一性约束,那么在使用ignore=y的情况下很有可能插入重复数据。 
indexes:在恢复数据的过程中,若indexes=n,则表上的索引不会被恢复,但是对 LOB 索引, OID索引和 主键索引等系统自动生成的索引将无条件恢复。
indexfile:不进行导入操作而是将创建对象的文本保存到文件中,可以通过编辑使用该文本文件创建数据库对象。
fromuser,touser:这两个参数可以组合使用,也可以分开使用。他们可以实现将源用户的对象数据,导入到目标用户schema底下的功能。这里要注意,导入时的用户需要有imp_full_database角色,示例如下

导入一个或一组指定用户所属的全部对象
$imp system/manager file=full_all.dmp log=seapark  fromuser=hr
$imp system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)

将一个或一组指定用户所属的全部对象导入到另一个用户下
$imp hr/hr fromuser=hr touser=czm file=hr_all.dmp
$imp system/manager file=tank log=tank fromuser=(seapark,amy) touser=(seapark1, amy1)
commit:默认值为 COMMIT=N,及在没插入玩一个对象后提交。 当COMMIT=Y时候是根据你BUFFER的大小决定每次提交的数量。对于包含了LONG、RAW、 DATE等类型的表,不论BUFFER设置多大,都是每插入一行进行提交。设置commit=y可以防止减少回滚段的压力,但由于频繁提交,会带来性能 上的影响,推荐使用COMMIT=N。





以下为详细的导入导出实例:

  一、数据导出:

 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 wner=(system,sys)

 3、 将数据库中的表table1 、table2导出

  exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)

 4、 将数据库中的表table1中的字段filed1以"00"打头的数据导出

  exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"

  二、数据的导入

  1、将D:\daochu.dmp 中的数据导入 TEST数据库中。

  imp system/manager@TEST  file=d:\daochu.dmp

  上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。

  在后面加上 ignore=y 就可以了。

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

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

  防止错误可以将表全部删除再导入











来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29014732/viewspace-772363/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29014732/viewspace-772363/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值