imp导入/exp导出,以及自己的实践

 

参考一

exp导出/imp导入

EXPIMP命令详解

E:/> exp   help=y

通过输入   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) 
ROWS 导出数据行   (Y) 
PARFILE 参数文件名 
CONSTRAINTS 导出限制   (Y) 
CONSISTENT 交叉表一致性 
LOG 屏幕输出的日志文件 
STATISTICS 分析对象   (ESTIMATE) 
DIRECT 直接路径   (N) 
TRIGGERS 导出触发器   (Y) 
FEEDBACK 显示每   x   行   (0)   的进度 
FILESIZE 各转储文件的最大尺寸 
QUERY 选定导出表子集的子句 

下列关键字仅用于可传输的表空间 
TRANSPORT_TABLESPACE 导出可传输的表空间元数据   (N) 
TABLESPACES 将传输的表空间列表 

 E:/> imp   help=y 

可以通过输入   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) 
ANALYZE 执行转储文件中的   ANALYZE   语句   (Y) 
FEEDBACK 显示每   x   行   (0)   的进度 
TOID_NOVALIDATE 跳过指定类型   id   的校验 
FILESIZE 各转储文件的最大尺寸 
RECALCULATE_STATISTICS 重新计算统计值   (N) 

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

Exp/imp 导出导入工具的使用

一、导出工具exp

1.   它是操作系统下一个可执行的文件   存放目录/ORACLE_HOME/bin 
      exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移 
            它有三种模式: 
              a.     用户模式: 导出用户所有对象以及对象中的数据; 
              b.     表模式: 导出用户所有表或者指定的表; 
              c.     整个数据库: 导出数据库中所有对象。 

2.   导出工具exp交互式命令行方式的使用的例子 
$exp   test/test123@appdb 
Enter   array   fetch   buffer   size:   4096   >   回车 
Export   file:   expdat.dmp   >   m.dmp     生成导出的文件名   
(1)E(ntire   database),   (2)U(sers),   or   (3)T(ables):   (2)U   >   3 
Export   table   data   (yes/no):   yes   >   回车 
Compress   extents   (yes/no):   yes   >   回车 
Export   done   in   ZHS16GBK   character   set   and   ZHS16GBK   NCHAR   character   set 
About   to   export   specified   tables   via   Conventional   Path   ... 
Table(T)  or  Partition(T:P)   to   be   exported:   (RETURN   to   quit)   >cmamenu 要导出的表名
.   .   exporting   table                  CMAMENU               4336   rows   exported 
Table(T)   or   Partition(T:P)   to   be   exported:   (RETURN   to   quit)   > 要导出的表名n 
Table(T)   or   Partition(T:P)   to   be   exported:   (RETURN   to   quit)   >   回车 
Export   terminated   successfully   without   warnings.   

3.   导出工具exp非交互式命令行方式的例子 
$exp   scott/tiger   tables=(emp,dept)   file=/directory/scott.dmp   grants=y   
说明:把scott用户里两个表emp,dept导出到文件/directory/scott.dmp 
$exp   scott/tiger   tables=emp   query=/ "where   job=/ 'salesman/ '   and   sal/ <1600/ "    file=/directory/scott2.dmp   
说明:在exp里面加上导出emp的查询条件job= 'salesman '   and   sal <1600         
        (但我个人很少这样用,还是把满足条件的记录生成临时表后,再exp会方便一些) 

$exp   parfile=username.par   file=/directory1/username_1.dmp,/directory1/username_2.dmp    filesize=2000M   log=/directory2/username_exp.log 

参数文件username.par内容 
userid=username/userpassword 
buffer=8192000 
compress=n 
grants=y 
说明:username.par为导出工具exp用的参数文件,里面具体参数可以根据需要去修改 
          filesize指定生成的二进制备份文件的最大字节数           
          (可用来解决某些OS下2G物理文件的限制及加快压缩速度和方便刻历史数据光盘等) 

二、导入工具imp 

1.   它是操作系统下一个可执行的文件   存放目录/ORACLE_HOME/bin 
imp导入工具将EXP形成的二进制系统文件导入到数据库中. 
      它有三种模式: 
              a.     用户模式: 导出用户所有对象以及对象中的数据; 
              b.     表模式: 导出用户所有表或者指定的表; 
              c.     整个数据库: 导出数据库中所有对象。               
      只有拥有IMP_FULL_DATABASE和DBA权限的用户才能做整个数据库导入 
      
      imp步骤: 
      (1)   create   table     (2)   insert   data     (3)   create   index   (4)   create   triggers,constraints 

2.导入工具imp交互式命令行方式的例子 
$   imp 
Import:   Release   8.1.6.0.0   -   Production   on   星期五   12月   7   17:01:08   2001 
(c)   Copyright   1999   Oracle   Corporation.     All   rights   reserved. 
用户名:     test 
口令:**** 
连接到:   Oracle8i   Enterprise   Edition   Release   8.1.6.0.0   -   64bit   Production 
With   the   Partitioning   option 
JServer   Release   8.1.6.0.0   -   Production 
导入文件:   expdat.dmp>   /tmp/m.dmp 
输入插入缓冲区大小(最小为   8192   )   30720> 回车
经由常规路径导出由EXPORT:V08.01.06创建的文件 
警告:   此对象由   TEST   导出,   而不是当前用户 
已经完成ZHS16GBK字符集和ZHS16GBK   NCHAR   字符集中的导入 
只列出导入文件的内容(yes/no)no> 回车
由于对象已存在,   忽略创建错误(yes/no)no>   yes 
导入权限(yes/no)yes> 回车
导入表数据(yes/no)yes> 回车
导入整个导出文件(yes/no)no>   yes 
.   正在将TEST的对象导入到   SCOTT 
.   .   正在导入表              "CMAMENU "          4336行被导入
成功终止导入,但出现警告。 

【这一段对我有用!@我做的没有出现警告】


3.导入工具imp非交互式命令行方式的例子 
$   imp   system/manager   fromuser=jones   tables=(accts)   
$   imp   system/manager   fromuser=scott   tables=(emp,dept)   
$   imp   system/manager   fromuser=scott   touser=joe   tables=emp   
$   imp   scott/tiger   file   =   expdat.dmp   full=y   
$   imp   scott/tiger   file   =   /mnt1/t1.dmp   show=n   buffer=2048000   ignore=n   commit=y   grants=y   full=y   log=/oracle_backup/log/imp_scott.log 
$   imp   system/manager   parfile=params.dat   
params.dat   内容   
file=dba.dmp   show=n   ignore=n   grants=y   fromuser=scott   tables=(dept,emp)   
4.导入工具imp可能出现的问题 
(1)   数据库对象已经存在 
一般情况,   导入数据前应该彻底删除目标数据下的表,   序列,   函数/过程,触发器等;     
数据库对象已经存在,   按缺省的imp参数,   则会导入失败 
如果用了参数ignore=y,   会把exp文件内的数据内容导入 
如果表有唯一关键字的约束条件,   不合条件将不被导入 
如果表没有唯一关键字的约束条件,   将引起记录重复 

(2)   数据库对象有主外键约束 
            不符合主外键约束时,   数据会导入失败
             解决办法:   先导入主表,   再导入依存表 
disable目标导入对象的主外键约束,   导入数据后,   再enable它们 
(3)     权限不够 
如果要把A用户的数据导入B用户下,   A用户需要有imp_full_database权限 

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

(5)   imp和exp使用的字符集不同 
            如果字符集不同,   导入会失败,   可以改变unix环境变量或者NT注册表里NLS_LANG相关信息. 
            导入完成后再改回来. 

(6)   imp和exp版本不能往上兼容 
imp可以成功导入低版本exp生成的文件,   不能导入高版本exp生成的文件 
根据情况我们可以用 
$   imp   username/password@connect_string 
  说明:   connect_string   是在/ORACLE_HOME/network/admin/tnsnames.ora 
      定义的本地或者远端数据库的名称 
注意事项: 
UNIX:   /etc/hosts                     要定义本地或者远端数据库服务器的主机名 
win98:         windows/hosts                           和IP地址的对应关系    
win2000:     winnt/system32/drivers/etc/hosts  

参考二:下面介绍的是导入导出的实例。

数据导出:
将数据库TEST完全导出,用户名system 密码manager 导出到D:daochu.dmp
   exp system/manager@TEST file=d:/daochu.dmp full=y
将数据库中system用户与sys用户的表导出
   exp system/manager@TEST file=d:/daochu.dmp wner=(system,sys)
将数据库中的表inner_notifynotify_staff_relat导出
    exp aichannel/aichannel@TESTDB2 file= d:/datanewsmgnt.dmp tables=(inner_notify,notify_staff_relat)
将数据库中的表table1中的字段filed1"00"打头的数据导出
   exp system/manager@TEST file=d:/daochu.dmp tables=(table1) query=" where filed1 like '00%'"
  上面是常用的导出,对于压缩,既用winzipdmp文件可以很好的压缩。
  也可以在上面命令后面 加上 compress=y 来实现。 

数据的导入

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 就可以了。
d:daochu.dmp中的表table1 导入
imp system/manager@TEST  file=d:/daochu.dmp  tables=(table1)

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

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

附录具体步骤:
给用户增加导入数据权限的操作
第一,启动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

执行示例:
F:/WorkOracle_Databackup > imp userid=test/test full=y file=inner_notify.dmp

屏幕显示
Import: Release 8.1.7.0.0 - Production on 星期四 2月 16 16:50:05 2006
(c) Copyright 2000 Oracle Corporation.  All rights reserved.

连接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production

经由常规路径导出由EXPORT:V08.01.07创建的文件
已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入
导出服务器使用UTF8 NCHAR 字符集 (可能的ncharset转换)
正在将AICHANNEL的对象导入到 AICHANNEL
. . 正在导入表       "INNER_NOTIFY"          4行被导入
准备启用约束条件...
成功终止导入,但出现警告。

我自己的实践:

【我导出了一个表,前提,貌似我做了授权工作】

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 scott

我的问题结构:

同样scott用户下两个数据库:

Orcl   mydemo ,现在将orcl中的loguser表移动到mydemo中。

imp导入loguser表

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值