Home > Database > Mysql Tutorial > body text

Oracle中用exp/imp命令快速导入导出数据

WBOY
Release: 2016-06-07 15:44:59
Original
1256 people have browsed it

Oracle 中用exp/imp 命令快速导入导出数据 【用 exp 数 据 导 出】: 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中 exp system/manager@TEST file=d:\daochu.dmp full=y 2 将数据库中system用户与sys用户的表导出 exp system/man

Oracle中用exp/imp命令快速导入导出数据



【用 exp 数 据 导 出】:


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 filed1like '00%'\”

上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。不过在上面命令后面 加上 compress=y   就可以了。

【用 imp 数 据 导 入】:


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)



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

功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份。
大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失)。

Oracle有个好处,虽然你的电脑不是服务器,但是你装了oracle客户端,并建立了连接
(通过net8 assistant中本地–>服务命名添加正确的服务命名
其实你可以想成是客户端与服务器端修了条路,然后数据就可以被拉过来了)
这样你可以把数据导出到本地,虽然可能服务器离你很远。
你同样可以把dmp文件从本地导入到远处的数据库服务器中。
利用这个功能你可以构建俩个相同的数据库,一个用来测试,一个用来正式使用。

执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,
DOS中可以执行时由于 在oracle 8i 中  安装目录\ora81\BIN被设置为全局路径,
该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。
oracle用java编写,我想SQLPLUS.EXE、EXP.EXE、IMP.EXE这俩个文件是被包装后的类文件。
SQLPLUS.EXE调用EXP.EXE、IMP.EXE他们所包裹的类,完成导入导出功能。

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

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

详细参考如下:

一. 导出工具 exp

1. 它是操作系统下一个可执行的文件存放目录/ORACLE_HOME/bin

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

2. 导出工具exp交互式命令行方式的使用的例子

$exp test/test123@appdb
Enter arrayfetch 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   要导出的表名
. . exportingtable                        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\' andsal\
说明:在exp里面加上导出emp的查询条件job='salesman' and sal     
     (但我个人很少这样用,还是把满足条件的记录生成临时表后,再exp会方便一些)

$expparfile=username.par file=/directory1/username_1.dmp,/directory1/username_2.dmpfilesize=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=ygrants=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以上的大表时, (e  x p  )记得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地址的对应关系 


EXP可以导出成多个DUMP文件

很多DBA还没有意识到Export可以使用多个数据文件来存储被导出的数据。如果单个磁盘卷没有足够的空间,或者数据库超出了操作系统中单个文件的大小限制,它很容易将导出数据分割成多个文件。

  早在Oracle 8i开始,FILE参数就可以容纳用逗号分开的多个文件路径。FILESIZE参数让你指定在转移到下一个文件之前,多少数据可以写到单个文件中。如果Export用光了FILE列表中的名字,它会提示额外的文件名。

  比如,让我们假设全部的数据库导出需要6G的空间,并且操作系统中单个文件大小的限制是2G。你要将导出文件放在/exp文件系统下的prod目录中。这个参数文件应该包含下面的内容:

  FILE=/exp/prod/exp01.dmp,/exp/prod/exp02.dmp,/exp/prod/exp03.dmp
  FILESIZE=2G

  在Oracle 10g中,新的Data Pump export(expdp)使用方式类似但是略有改变。输出文件路径不再像早期版本中那样写死,相反,使用Directory对象指到操作系统中的目录。 FILE参数被DUMPFILE参数取代,并且为了方便使用,你可以指定通配符来自动产生文件名而不是全部列出来。

  在Oracle 10g中,如果你要创建一个叫做EXPDIR的Directory指向/exp/prod目录,上面的例子中的参数会变成这样:

  DUMPFILE=expdir:exp%U.dmp
  FILESIZE=2G

  在Export过程中文件名exp01.dmp、exp02.dmp和exp03.dmp会自动产生。

分类: 数据库(ORACLE,SQLSERVER)

 

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template