Oracle数据导入导出

本文详细介绍了Oracle数据导入导出的功能及其执行环境,包括如何在SQLPLUS或DOS中执行EXP和IMP命令进行数据备份和还原。同时,文章提供了数据导出和导入的常用实例,并讨论了SQL查询中数据重复的问题及解决方案。此外,文章还讲解了如何通过添加排序字段避免数据重复,确保查询结果的唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:http://www.cnblogs.com/fjfzhkb/archive/2007/09/03/879807.html

Oracle数据导入导出imp/exp 

功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份。
  
 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失)。
  Oracle有个好处,虽然你的电脑不是服务器,但是你装了oracle客户端,并建立了连接
  (通过Net Configuration Assistant添加正确的服务命名,其实你可以想成是客户端与服务器端 修了条路,然后数据就可以被拉过来了)
  这样你可以把数据导出到本地,虽然可能服务器离你很远。
  你同样可以把dmp文件从本地导入到远处的数据库服务器中。
  利用这个功能你可以构建俩个相同的数据库,一个用来测试,一个用来正式使用。
  
 执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,
  DOS中可以执行时由于 在oracle 8i 中  安装目录\$ora10g\BIN被设置为全局路径,
  该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。
  oracle用java编写,我想SQLPLUS.EXE、EXP.EXE、IMP.EXE这俩个文件是被包装后的类文件。
  SQLPLUS.EXE调用EXP.EXE、IMP.EXE他们所包裹的类,完成导入导出功能。
  
 下面介绍的是导入导出的实例,向导入导出看实例基本上就可以完成,因为导入导出很简单。
 数据导出:
  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 将数据库中的表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%'\"
   
     上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。
                      不过在上面命令后面 加上 compress=y  就可以了
 
数据的导入
  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) 
 
  基本上上面的导入导出够用了。不少情况我是将表彻底删除,然后导入。
  
 注意:
  你要有足够的权限,权限不够它会提示你。
  数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。
 
 
 
数据导出:
 exp hkb/hkb@boss_14 full=y file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbfull.log;
 
导出注意事项:导出的是当前用户的的数据,当前用户如果有DBA的权限,则导出所有数据!
 
同名用户之间的数据导入:
 imp hkb/hkb@xe  file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbimp.log full=y
 
不同名之间的数据导入:
 imp system/test@xe fromuser=hkb touser=hkb_new file=c:\orabackup\hkbfull.dmp 


log=c:\orabackup\hkbimp.log;
























------------------------------------------------------------------------------------------------------


oacle分页查询,数据出现重复
Sql代码  
select  
       *   
   from  
       ( select  
           row_.*,  
           rownum rownum_   
       from  
           (   
            select bb.*from(  
           select  
               bw.id,  
               bw.nick_name,  
               bw.is_vip,  
               bw.fans_num,  
               bw.blog_num,  
               bwm.image_urls,  
               bwm.image_type   
           from  
               bw_user bw   
           left join  
               bw_userface_image bwm   
                   on bw.headimgid=bwm.id  ) bb   
           order by bb.fans_num desc   ) row_   
       where  
           rownum <= 10  
       )   
   where  
       rownum_ > 0  
  这样查询的时候出现了重复数据
原因:fans_num 这个字段是不固定的,也就是说是动态的,随时都可能在改变,导致数据出现重复,如果这个字段是固定的,就不会出现重复数据
  解决办法:如果不能确定排序字段是唯一的,必须添加另外一个排序字段,该字段最好是唯一索引键
Sql代码  
select  
       *   
   from  
       ( select  
           row_.*,  
           rownum rownum_   
       from  
           (   
            select bb.*from(  
           select  
               bw.id,  
               bw.nick_name,  
               bw.is_vip,  
               bw.fans_num,  
               bw.blog_num,  
               bwm.image_urls,  
               bwm.image_type   
           from  
               bw_user bw   
           left join  
               bw_userface_image bwm   
                   on bw.headimgid=bwm.id  ) bb   
             order by bb.fans_num desc ,bb.id desc  
           ) row_   
       where  
           rownum <= 10  
       )   
   where  
       rownum_ > 0  
  在里面添加了id排序,id是主键,是唯一的,就不会重现重复数据了
  注:如果排序的第一个字段(fans_num)改变的比较快,还是可能出现重复数据的,只是概率比较小





























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值