zoukankan      html  css  js  c++  java
  • Oracle exp/imp数据导入导出工具基本用法

    一、获取帮助

    exp/imp help=y

    二、数据导出

    1.将数据库完全导出,设置full选项
    exp system/manager@orcl file=d:db.dmp full=y

    2、导出数据库结构,不导出数据,设置rows选项
    exp system/manager@orcl file=d:db.dmp rows=n full=y

    3、当导出数据量较大时,可以分成多个文件导出,设置filesize选项
    exp system/manager@orcl file=d:db1.dmp,d:db2.dmp filesize=50M full=y

    4.将数据库中system用户与sys用户的表导出,设置owner选项
    exp system/manager@orcl file=d:Test_bak.dmp owner=(system,sys)

    5.将数据库中的表t_result,t_khtime导出,设置tables选项
    exp system/manager@orcl file= d:Test_bak.dmp tables=(t_result,t_khtime)

    6、将数据库中的表T_SCORE_RESULT中updatedate日期字段大于某个值的数据导出,设置query选项
    exp kpuser/kpuser@orcl file=d:Test_bak.dmp tables=(T_SCORE_RESULT) query=" where updatedate>to_date('2016-9-1 18:32:00','yyyy-mm-dd hh24:mi:ss')"

    三、数据导入

    1、导入dmp文件,如果表已经存在,会报错且不导入已经存在的表,设置ignore选项
    imp system/manager@orcl file=d:Test_bak.dmp ignore=y

    2、导入dmp文件中部分指定的表,设置tables选项
    imp kpuser/kpuser@orclfile=d:kpuser.dmp tables=(T_SCORE_RESULT)

    3、导入一个或一组指定用户所属的全部表、索引和其他对象,设置fromuser选项
    imp system/manager@orcl file=d:kpuser.dmp fromuser=kpuser //kpuser必须存在
    imp system/manager@orcl file=d:users.dmp fromuser=(kpuser,kpuser1,test) //kpuser,kpuser1,test用户必须存在

    4、将数据导入指定的一个或多个用户,设置fromuser和touser选项
    imp system/manager file=d:kpuser.dmp fromuser=kpuser touser=kpuser1 //kpuser1必须存在
    imp system/manager file=d:users.dmp fromuser=(kpuser,kpuser1) touser=(kpuser2, kpuser3) //kpuser2、kpuser3必须存在

    四、exp/imp优化

    当需要导入/导出的数据量比较大时,这个过程需要的时间是比较长的,我们可以用一些方法来优化exp/imp的操作。
    1、exp
    1)使用直接路径 direct=y,oracle会避开sql语句处理引擎,直接从数据库文件中读取数据,然后写入导出文件
    2)如果没有使用直接路径,必须保证buffer参数的值足够大.

    2、imp
    1)避免磁盘排序
    将sort_area_size设置为一个较大的值,比如100M
    2)避免日志切换等待
    增加重做日志组的数量,增大日志文件大小.
    3)优化日志缓冲区
    比如将log_buffer容量扩大10倍(最大不要超过5M)
    4)使用阵列插入与提交
    commit = y
    注意:阵列方式不能处理包含LOB和LONG类型的表,对于这样的table,如果使用commit = y,每插入一行,就会执行一次提交.
    5)使用NOLOGGING方式减小重做日志大小
    在导入时指定选项indexes=n,只导入数据而忽略index,在导完数据后在通过脚本创建index,指定 NOLOGGING选项

    五、注意

    1、源用户(fromuser)是dmp文件中表所属的用户,不是指当前数据库中的用户;目标用户(touser)是指数据要导入的用户,在当前数据库中必须不存在,如果不存在,需要先创建该用户;如果只指定了fromuser,未指定touser,则默认导入数据库中和fromuser同名的用户下,即fromuser指定的用户必须在数据库中存在。

    2、如果导入整个dmp文件,即full=y,则最好把数据库中dmp中对应的表都删除再导入

    3、ignore选项
    Oracle在恢复数据的过程中,当恢复某个表时,该表已经存在,就要根据ignore选项的设置来决定如何操作。
    1)若ignore=y,Oracle不执行CREATE TABLE语句,直接将数据插入到表中,如果插入的记录违背了约束条件,比如主键约束,则出错的记录不会插入,但合法的记录会添加到表中。
    2)若ignore=n,Oracle不执行CREATE TABLE语句,同时也不会将数据插入到表中,而是忽略该表的错误,继续恢复下一个表。

    4、indexes选项
    在恢复数据的过程中,若indexes=n,则表上的索引不会被恢复,但是主键对应的唯一索引将无条件恢复,这是为了保证数据的完整性。

    5、导出/导入与字符集
    进行数据的导入导出时,要注意关于字符集的问题。对于单字节字符集(例如US7ASCII),恢复时,数据库自动转换为该会话的字符集(NLS_LANG参数); 对于多字节字符集(例如ZHS16CGB231280),恢复时,应尽量使字符集相同(避免转换),如果要转换,目标数据库的字符集应是输出数据库字符集的超集。
    在EXP/IMP过程中需要注意四个字符集的参数:导出端的客户端字符集、导出端数据库字符集、导入端的客户端字符集、导入端数据库字符集。通常在导出时最好把客户端字符集设置得和数据库端相同。当进行数据导入时,主要有以下两种情况:
    1)源数据库和目标数据库具有相同的字符集设置
    这时,只需设置导出和导入端的客户端NLS_LANG等于数据库字符集即可。
    2)源数据库和目标数据库字符集不同
    先将导出端客户端的NLS_LANG设置成和导出端的数据库字符集一致,导出数据,然后将导入端客户端的NLS_LANG设置成和导出端一致,导入数据,这样转换只发生在数据库端,而且只发生一次。
    如果imp和exp字符集不同, 导入会失败, 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息,导入完成后再改回来.

    6、数据库对象有主外键约束
    不符合主外键约束时, 数据会导入失败, 解决办法:
    1)先导入主表(父表), 再导入从表(子表)
    2)disable目标导入对象的主外键约束, 导入数据后, 再enable它们

    7、可以跨版本的使用EXP/IMP,但必须正确地使用EXP和IMP的版本
    1)总是使用IMP的版本匹配数据库的版本,如:要导入到817中,使用817的IMP工具。
    2)总是使用EXP的版本匹配两个数据库中最低的版本,如:从9201往817中导入,则使用817版本的EXP工具。

    8、导出和导入权限
    需要有EXP_FULL_DATABASE 和 IMP_FULL_DATABASE角色权限。

    9、导入大表( 大于80M ) 时, 存储分配失败
    默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上.
    导入时, 如果不存在连续一个大数据块, 则会导入失败. 导出80M以上的大表时, 记得compress= N, 则不会引起这种错误。

  • 相关阅读:
    几个新角色:数据科学家、数据分析师、数据(算法)工程师
    人类投资经理再也无法击败电脑的时代终将到来了...
    Action Results in Web API 2
    Multiple actions were found that match the request in Web Api
    Routing in ASP.NET Web API
    how to create an asp.net web api project in visual studio 2017
    网站漏洞扫描工具
    How does asp.net web api work?
    asp.net web api history and how does it work?
    What is the difference between a web API and a web service?
  • 原文地址:https://www.cnblogs.com/pandachen/p/5935078.html
Copyright © 2011-2022 走看看