oracle数据库导入小结.doc
oracle数据库导入小结oracle数据库导入小结最近进行了大量的数据表导入工作,趁此对此做一下总结,也希望给没做过的朋友作个参考,这里主要借用excel作为导入工具使用,这里以人员表为例,进行说明1、被导入的表的结构CURRENTTYPENAMEIDCARDCURRENTPOSITIONUSERIDNATIVEPLACEPEOPLE2、导入的表的结构VARCHAR2(30)VARCHAR2(100)VARCHAR2(18)VARCHAR2(100)VARCHAR2(50)VARCHAR2(100)VARCHAR2(20)当前类型,1在职人员、2录用、3聘用、4调入、5过渡姓名身份证号码现任职务登录ID籍贯民族,汉、蒙、回、苗、黎、其它USER_IDLOGIN_NAMEPASS_WORDIS_ACTIVENOUSER_NAMEOLD_NAMESEXBIRTH_DAYPROVINCECITYPOLITICAL_LAND_SPACENATIONNUMBERVARCHAR2(50)VARCHAR2(100)VARCHAR2(1)NUMBERVARCHAR2(50)VARCHAR2(50)VARCHAR2(2)DATEVARCHAR2(20)VARCHAR2(20)VARCHAR2(20)VARCHAR2(20)主键登录名密码账号状态排序姓名曾用名性别生日籍贯省籍贯市政治面貌民族3、弄清楚两个表之间字段的对应关系文件导出表字段IDuserid单位内顺序号姓名性别出生年月日政治面貌导入表字段USER_IDLOGIN_NAMEPASS_WORDIS_ACTIVENOUSER_NAMEOLD_NAMESEXBIRTH_DAYPROVINCECITYPOLITICAL_LAND_SPACE字段备注主键登录名密码账号状态排序姓名曾用名性别生日籍贯省籍贯市政治面貌民族NATION民族3、写出被导入表要导入的字段的select语句,在plsql中把查询结果导成excel文件4、在生成的excel文件中手动加入一列,如ID序列作为主键5、打开对应关系文件,使用plsql的导入功能导入excel中的数据":"c":"ix":0,"iy":0,"iw":805,"ih":521,"p":"h":521,"opacity":1,"rotate":0,"w":622.05,"x":135,"x0":135,"x1":135,"x2":757.05,"x3":757.05,"y":117.149,"y0":519.824,"y1":117.149,"y2":117.149,"y3":519.824,"z":0,"ps":null,"s":"pic_file":"/home/iknow/conv/data/bdef/43213016/43213016_3_0.png","t":"pic","c":"ix":0,"iy":526,"iw":804,"ih":556,"p":"h":556,"opacity":1,"rotate":0,"w":622.275,"x":135,"x0":135,"x1":135,"x2":757.275,"x3":757.275,"y":536.25,"y0":966.599,"y1":536.25,"y2":536.25,"y3":966.599,"z":1,"ps":null,"s":"pic_file":"/home/iknow/conv/data/bdef/43213016/43213016_3_1.png","t":"pic","page":"ph":1262.879,"pw":892.979,"iw":805,"ih":1082,"v":6,"t":"1","pptlike":false,"cx":135,"cy":117.149,"cw":622.275,"ch":849.45)":"c":"ix":0,"iy":0,"iw":816,"ih":540,"p":"h":540,"opacity":1,"rotate":0,"w":622.425,"x":135,"x0":135,"x1":135,"x2":757.425,"x3":757.425,"y":112.649,"y0":524.55,"y1":112.649,"y2":112.649,"y3":524.55,"z":0,"ps":null,"s":"pic_file":"/home/iknow/conv/data/bdef/43213016/43213016_4_0.png","t":"pic","c":"ix":0,"iy":545,"iw":808,"ih":518,"p":"h":518,"opacity":1,"rotate":0,"w":622.65,"x":135,"x0":135,"x1":135,"x2":757.65,"x3":757.65,"y":540.149,"y0":939.449,"y1":540.149,"y2":540.149,"y3":939.449,"z":1,"ps":null,"s":"pic_file":"/home/iknow/conv/data/bdef/43213016/43213016_4_1.png","t":"pic","page":"ph":1262.879,"pw":892.979,"iw":816,"ih":1063,"v":6,"t":"1","pptlike":false,"cx":135,"cy":112.649,"cw":622.65,"ch":826.799)":"c":"ix":0,"iy":0,"iw":830,"ih":541,"p":"h":541,"opacity":1,"rotate":0,"w":622.8,"x":135,"x0":135,"x1":135,"x2":757.8,"x3":757.8,"y":115.574,"y0":521.474,"y1":115.574,"y2":115.574,"y3":521.474,"z":0,"ps":null,"s":"pic_file":"/home/iknow/conv/data/bdef/43213016/43213016_5_0.png","t":"pic","c":"ix":0,"iy":546,"iw":817,"ih":529,"p":"h":529,"opacity":1,"rotate":0,"w":622.275,"x":135,"x0":135,"x1":135,"x2":757.275,"x3":757.275,"y":538.349,"y0":941.249,"y1":538.349,"y2":538.349,"y3":941.249,"z":1,"ps":null,"s":"pic_file":"/home/iknow/conv/data/bdef/43213016/43213016_5_1.png","t":"pic","page":"ph":1262.879,"pw":892.979,"iw":830,"ih":1075,"v":6,"t":"1","pptlike":false,"cx":135,"cy":115.574,"cw":622.8,"ch":825.675)可以编写转换函数处理6、不能用excel导入或者需要转换的列只能通过程序修改了,可以使用纯jdbc或者hibernatehql语句或者本地sql进行转换一般的字段数据转换先把数据从源表中读取出来,然后通过程序转换成需要的数据,保存到目标表中对大字段数据的处理:oracle中的clob对应java.lang.String,blob对应byteOracle读取大字段的时候,是比较慢的,会爆内存溢出错误我的解决办法是:设大myeclipse的内存xml800M表中如果有较多的数据,用hibernatehql操作起来是很慢的,每次只能提交100条数据左右手动每次导入若干条,这样会比较费时间最好使用jdbc操作会快些用java导入数据的时候不能一次读取所有的记录,否则会抛堆栈溢出的异常,可以根据id每次选择一定量的数据进行导入扩展阅读:Oracle数据库导入导出命令总结执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,DOS中可以执行时由于在oracle中,安装目录ora9iBIN被设置为全局路径,该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。oracle用java编写,SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件是被包装后的类文件。SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类,完成导入导出功能。下面介绍的是导入导出的实例。数据导出:1将数据库zxcc完全导出,用户名kf密码zx导出到D:zxcc.dmp中expkf/zxzxccfile=d:zxcc.dmpfull=yfull=y表示全库导出。full总共有2个可选项yes(y)/no(n),缺省情况下full=no,这时只会将该用户下的对象导出。2将数据库zxcc中kf用户与cc用户的表导出expkf/zxzxccfile=d:zxcc_ur.dmpowner=(kf,cc)full方式可以备份所有用户的数据库对象,包括表空间、用户信息等,owner=XX只能备份指定用户的对象,其他用户下的就不备份了,EXP中full=y和owner=XX是不能同时使用的。3将数据库zxcc中的表kf_operator、kf_role导出expkf/zxzxccfile=d:zxcc_tb.dmptables=(kf_operator,kf_role)tables=xx表示备份相关表,不能同时和owner、full使用。4将数据库中的表kf_operator中的字段oper_id以"00"打头的数据导出expkf/zxzxccfile=d:zxcc_t.dmptables=(kf_operator)query="whereoper_idlike"00%""query主要是导出合适条件的数据。使用该参数时,需要注意对所有操作系统保留字符都要使用转义符号。若有括号()也需要转义:query="wheredt=to_date("202*-09-22","yyyy-mm-dd")"。如果遇到条件比较繁琐的语句,频繁的转义操作不仅费时,还很容易出错。我们可以使用exp或expdp的PARFILE参数避免query内容的繁琐转义问题。例:oracleDBALNP01>cat>zxcc.partables=kf_operatorfile=zxcc.dmpquery="wheredt_time=to_date("202*-06-25","yyyy-mm-dd")"这时就可以尽情的再双引号中写条件语句了。上面是常用的导出,对于压缩,可用winzip把dmp文件可以很好的压缩。也可以在上面命令后面加上compress=y来实现。数据的导入1将D:zxcc.dmp中的数据导入zxcc数据库中。impkf/zxzxccfile=d:zxcc.dmp导数据得时候,有可能报错。为什么?有以下主要的原因:A.导入的对象(表,视图,方法等)原本不属于当前连接的用户的B.导入的对象在该数据库的指定用户下已经存在C.导入的对象的原本用户不再这个数据库里对于这三个问题的处理方法如下:a/c、所有对象全部导入到指定的账户下:impkf_new/zxzxcc_newfile=d:zxcc.dmpfromuser=kftouser=kf_new其中fromuser=kf为.dmp文件里的对象的原先的owner,touser=kf_new为作为导入的对象的新的Owner.b、忽略/插入数据:Impsystem/123456ATSTestDBfile=c:export.dmpignore=y其中ignore=y告诉imp.exe把数据直接插入到相应对象(并且如果导入的对象里面有其他的对象,如约束,索引等,会在数据插入后被创建)。2将d:zxcc_tb.dmp中的表tb_operator导入impkf/zxzxccfile=d:zxcc_tb.dmptables=(tb_operator)忽略加载约束有时候导数据进来的时候,我们不需要把它的约束,比如一些外键约束等都导进来,可以加上参数constraints=N不加载索引(比如唯一性的索引),可以加上参数indexs=N只加载结构,不加载数据,如果只要表的结构等定义(约束,触发器),那么不要里面的数据,可以加上参数rows=N对于上述操作登陆操作的对象system是管理员,如果不是管理员,而是普通用户,那么这个用户必须有创建删除对象的权利,对象可能包括表,视图,方法,存储过程等等常见的对象。为什么“可能”包括?因为这个视导入导出的时候是否涉及相关类型的对象而定。Impkf/zxzxcc_newfile=d:zxcc.dmpfromuser=kftouser=kf_newignore=y基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。注意:操作者要有足够的权限,权限不够它会提示。数据库链接正常,可以用tnspingzxcc来获得数据库zxcc能否连上。导入/导出数据库时注意字符集。可能会出现导出/导入时数据库字符集不一致而报错。oracle数据库其他常用命令:1、给用户增加导入数据权限的操作第一,启动sql*puls第二,以管理员(DBA)用户登陆第三,createuser用户名IDENTIFIEDBY密码(如果已经创建过用户,这步可以省略)第四,GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,DBA,CONNECT,RESOURCE,CREATESESSIONTO用户名字第五,运行-cmd-进入dmp文件所在的目录,impuserid=管理员用户名/密码full=yfile=*.dmp或者impuserid=管理员用户名/密码full=yfile=filename.dmp2、Oracle不允许直接改变表的拥有者,利用Export/Import可以达到这一目的.先建立.par文件,然后,使用时命令如下:impparfile=/filepath/import9.par例import9.par内容如下:FROMUSER=userTOUSER=user_new(注:把表的拥有者由FROMUSER改为TOUSER,FROMUSER和TOUSER的用户可以不同)ROWS=YINDEXES=YGRANTS=YCONSTRAINTS=YBUFFER=409600file=/filepath/xxxx.dmplog=/filepath/import_log.log学会使用oracle相关命令方法会给我们的工作带来便利,遇到问题可以迅速的解决,而不用再baidu出来的海量信息中区找解决方法。希望本文能够对大家有所帮助。第 8 页 共 8 页