Heim  >  Artikel  >  Datenbank  >  Oralce数据库导入导出(利用外部命令:imp/exp命令 )

Oralce数据库导入导出(利用外部命令:imp/exp命令 )

WBOY
WBOYOriginal
2016-06-07 14:59:561528Durchsuche

1--数据库导出(exp) 首先进入命令行 导出数据库 在命令行中输入如下命令:exp c2j/c2j@c2j file=c:/table.dmp tables=jbitaku,jbitakum grants=y然后按回车键 说明: c2j/c2j@c2j 分别表示用户名,密码和服务名 file:输出文件的位置和文件名 tables:输出的表

1--数据库导出(exp)

  首先进入命令行

Oralce数据库导入导出(利用外部命令:imp/exp命令 ) 

导出数据库

在命令行中输入如下命令:exp   c2j/c2j@c2j   file=c:/table.dmp   tables=jbitaku,jbitakum  grants=y然后按回车键

说明: 

c2j/c2j@c2j  分别表示用户名,密码和服务名

file:输出文件的位置和文件名

tables:输出的表名列表,多个表中间用逗号隔开

 Oralce数据库导入导出(利用外部命令:imp/exp命令 )

2--数据库导入(imp)

首先进入命令行

Oralce数据库导入导出(利用外部命令:imp/exp命令 ) 

数据库导入(imp)

在命令行中输入如下命令:

imp   c2j/c2j@c2j   file=c:/table.dmp   fromuser=c2j   ignore=y   commit=y   grants=y

然后按回车键

说明: c2j/c2j@c2j  分别表示用户名,密码和服务名

file:要导入的文件的全路迳

fromuser:指明来源用户方

ignore:是否忽略对象创建错误

commit:上载数据缓冲区中的记录,上载后是否执行提交

Oralce数据库导入导出(利用外部命令:imp/exp命令 )

出现 正常终了表示导入成功

打开数据库,看是否导入成功

注:Oralce数据库导入导出时要确保Oralce服务启动

/////

Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中。 利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用。
 
执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,
 DOS中可以执行时由于 在oracle 8i 中  安装目录ora81BIN被设置为全局路径,
 该目录下有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 将数据库中的表inner_notify、notify_staff_relat导出
    exp aichannel/aichannel@TESTDB2 file= d:datanewsmgnt.dmp tables=(inner_notify,notify_staff_relat)

 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
   imp aichannel/aichannel@HUST full=y  file=d:datanewsmgnt.dmp ignore=y
   上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
   在后面加上 ignore=y 就可以了。
 2 将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行被导入
准备启用约束条件...
成功终止导入,但出现警告。

 
附录二:
 Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.
  先建立import9.par,
  然后,使用时命令如下:imp parfile=/filepath/import9.par
  例 import9.par 内容如下:
        FROMUSER=TGPMS      
        TOUSER=TGPMS2     (注:把表的拥有者由FROMUSER改为TOUSER,FROMUSER和TOUSER的用户可以不同)         
        ROWS=Y
        INDEXES=Y
        GRANTS=Y
        CONSTRAINTS=Y
        BUFFER=409600
        file==/backup/ctgpc_20030623.dmp
        log==/backup/import_20030623.log


1.在导入导出命令中加上feedback=1000可以让过程显示一个不断增多的“...”,以改变以往的闪烁的光标

以下参考自:http://www.matrix.org.cn/thread.shtml?forumId=36&topicId=23332

一. 导出工具 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/
说明:在exp里面加上导出emp的查询条件job='salesman' and sal    
    (但我个人很少这样用,还是把满足条件的记录生成临时表后,再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

 

用分割DMP的方法导入和导出大型ORACLE数据库

exp dlyx/dlyx buffer=10000000 file=(full1.dmp,full2.dmp,full3.dmp,full4.dmp,full5.dmp) filesize=1000M owner=(dlyx) log=full.log

 

imp dlyx/dlyx buffer=10000000 file=(full1.dmp,full2.dmp,full3.dmp,full4.dmp,full5.dmp) from user=(dlyx) trouser=dlyx log=full.log

 

DOS:  CLS

 

简说Oracle数据库导出(exp)/导入(imp) - -

                                      

exp
将数据库内的各对象以二进制方式下载成damp文件,方便数据迁移。
buffer:下载数据缓冲区,以字节为单位,缺省依赖操作系统
consistent:下载期间所涉及的数据保持read only,缺省为n
direct:使用直通方式        ,缺省为n
feedback:显示处理记录条数,缺省为0,即不显示
file:输出文件,缺省为expdat.dmp
filesize:输出文件大小,缺省为操作系统最大值
indexes:是否下载索引,缺省为n,这是指索引的定义而非数据,exp不下载索引数据
log:log文件,缺省为无,在标准输出显示
owner:指明下载的用户名
query:选择记录的一个子集
rows:是否下载表记录
tables:输出的表名列表
导出整个实例
exp dbuser/oracle file=oradb.dmp log=oradb.log full=y consistent=y direct=y
user应具有dba权限
导出某个用户所有对象
exp dbuser/oracle file=dbuser.dmp log=dbuser.log owner=dbuser buffer=4096000 feedback=10000
导出一张或几张表
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1,table2 buffer=4096000 feedback=10000
导出某张表的部分数据
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1 buffer=4096000 feedback=10000 query=/”where col1=/’…/’ and col2 /不可用于嵌套表
以多个固定大小文件方式导出某张表
exp dbuser/oracle file=1.dmp,2.dmp,3.dmp,… filesize=1000m tables=emp buffer=4096000 feedback=10000
这种做法通常用在:表数据量较大,单个dump文件可能会超出文件系统的限制
直通路径方式
direct=y,取代buffer选项,query选项不可用
有利于提高下载速度
consistent选项
自export启动后,consistent=y冻结来自其它会话的对export操作的数据对象的更新,这样可以保证dump结果的一致性。
但这个过程不能太长,以免回滚段和联机日志消耗完
imp
exp下载的dmp文件上载到数据库内。
buffer:上载数据缓冲区,以字节为单位,缺省依赖操作系统
commit:上载数据缓冲区中的记录上载后是否执行提交
feeback:显示处理记录条数,缺省为0,即不显示
file:输入文件,缺省为expdat.dmp
filesize:输入文件大小,缺省为操作系统最大值
fromuser:指明来源用户方
ignore:是否忽略对象创建错误,缺省为n,在上载前对象已被建立往往是一个正常现象,所以此选项建议设为y
indexes:是否上载索引,缺省为n,这是指索引的定义而非数据,如果上载时索引已建立,此选项即使为n也无效,imp自动更新索引数据
log:log文件,缺省为无,在标准输出显示
rows:是否上载表记录
tables:输入的表名列表
touser:指明目的用户方
导入整个实例
imp dbuser/oracle file=oradb.dmp log=oradb.log full=y buffer=4096000 commit=y ignore=y feedback=10000
导入某个用户所有对象
imp dbuser/oracle file=dbuser.dmp log=dbuser.log fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
导入一张或几张表
imp dbuser2/oracle file=user.dmp log=user.log tables=table1,table2 fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
以多个固定大小文件方式导入某张表
imp dbuser/oracle file=/(1.dmp,2.dmp,3.dmp,…/) filesize=1000m tables=emp fromuser=dbuser touser=dbuser2 buffer=4096000 commit=y ignore=y feedback=10000

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:关于数据库Nächster Artikel:数据库架构的演变