exp/imp 资料

来源:互联网 发布:社保网络认证的意义 编辑:程序博客网 时间:2024/06/14 00:51

一. 导出工具 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


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=96516

***********************************888888
CSDN 推荐tag:文件 口令 数据 tts exp 用户 tiger 
上一篇: 有点郁闷 | 下一篇: 原来 我还是一样会感动


Oracle imp/exp     
C:\Documents and Settings\administrator>exp help=y

Export: Release 9.2.0.1.0 - Production on 星期三 7月 28 17:04:43 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

通过输入 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)
DIRECT     直接路径 (N)            TRIGGERS     导出触发器 (Y)
LOG        屏幕输出的日志文件 STATISTICS   分析对象 (ESTIMATE)
ROWS    导出数据行 (Y)        PARFILE      参数文件名
CONSISTENT 交叉表的一致性 (N) CONSTRAINTS 导出的约束条件 (Y)

OBJECT_CONSISTENT    只在对象导出期间设置为读的事务处理 (N)
FEEDBACK             每 x 行的显示进度 (0)
FILESIZE             每个转储文件的最大大小
FLASHBACK_SCN        用于将会话快照设置回以前状态的 SCN
FLASHBACK_TIME       用于获取最接近指定时间的 SCN 的时间
QUERY                用于导出表的子集的 select 子句
RESUMABLE            遇到与空格相关的错误时挂起 (N)
RESUMABLE_NAME       用于标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT    RESUMABLE 的等待时间
TTS_FULL_CHECK       对 TTS 执行完整的或部分相关性检查
TABLESPACES          要导出的表空间列表
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TEMPLATE             调用 iAS 模式导出的模板名

在没有警告的情况下成功终止导出。
==================================================

C:\Documents and Settings\administrator>imp help=y

Import: Release 9.2.0.1.0 - Production on 星期三 7月 28 17:06:54 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

可以通过输入 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)
FEEDBACK               每 x 行显示进度 (0)
TOID_NOVALIDATE        跳过指定类型 ID 的验证
FILESIZE               每个转储文件的最大大小
STATISTICS             始终导入预计算的统计信息
RESUMABLE            在遇到有关空间的错误时挂起 (N)
RESUMABLE_NAME         用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT      RESUMABLE 的等待时间
COMPILE                编译过程, 程序包和函数 (Y)
STREAMS_CONFIGURATION 导入 Streams 的一般元数据 (Y)
STREAMS_INSTANITATION 导入 Streams 的实例化元数据 (N)

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

成功终止导入,但出现警告。


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=54573

*****************************************************************
解决Oracle中Exp/Imp大量数据处理问题 
linux宝库 收集整理  作者:linux宝库  时间:2007-09-30  收藏本站 




来自:linux宝库 
联系:linuxmine#gmail.com 
分类:[oracle]

baidu

  Oracle的exp/imp是许多用户经常使用的两个工具. 它们常被用来做数据库的逻辑备份,数据库重组和数据转移等工作. 先由exp把数据卸出到文件系统, 产生一个.dmp文件, 然后必要时再由imp将数据装入数据库. 对于一般中小型数据库来说, 全数据库的exp所产生的dmp文件可能小于2GB, 但对稍大型的数据库, exp产生的数据动辄数十至上百个GB. 而现时多数操作系统为32位, 其文件系统允许的最大文件为2GB. 这样显然不能由文件系统存放exp产生的数据. 这是问题之一. 另一个问题是随着数据库的不断增大, exp所需时间越来越长以致实际上很难实施. 本文针对以上两个问题讨论相应对策.

  我们以UNIX为例首先看看如何超越2GB限制. 这需利用UNIX的通用技术, 如管道(named pipe), 数据拷贝工具dd以及数据压缩(compress). 下面分别讨论这几种技术.

  ?管道 是一种伪文件. 它存在于内存中, 用于快速I/O操作. 管道的缓冲区采用先进先出机制, 即写管道进程写到缓冲区头部而读管道进程读取管道尾部. 建立管道的命令为”mknod filename p".

  ?dd 允许我们从一个设备拷贝数据到另一个设备.

  ?compress 为UNIX数据压缩工具.

  实施exp之前, 我们可先检查所产生dmp文件的大小. 以下步骤既可实现,

  1. 生成管道:

  $ mknod /tmp/mypipe p

  2. exp结果输出到该管道

  $ exp file=/tmp/mypipe <...其它exp选项> &

  3. 读取管道并把结果输出到管道, 只为查看数据量:

  $ dd if=/tmp/mypipe of=/dev/null

  结果返回exp (.dmp)文件大小, 单位为块(512 bytes).

  现在我们可以着手讨论具体方法,

  1. 文件压缩

  2. 直接exp到磁带

  3. 综合方法

  首先看文件压缩方法. 利用文件压缩我们可尽量避免dmp文件大小超过2GB限制. 我们利用UNIX的管道技术, 具体步骤如下,

  1. 启动compress进程, 使之从管道读取数据并输出到磁盘文件.

  $ mknod /tmp/exp_pipe p

  $ compress < /tmp/exp_pipe > export.dmp.Z &

  2. exp到管道.

  $ exp file=/tmp/exp_pipe ... &

  imp时情况类似.

  再看看直接exp到磁带上的方法.

  $ exp file=/dev/rmt/0m volsize=4G

  $ imp file=/dev/rmt/0m volsize=4G

  最后看看exp到裸设备上的方法,

  $ exp file=/dev/rdsk/c0t3d0s0 volsize=4G

  imp类似.以上方法都可使我们避免2GB限制.

  下面讨论如何缩短exp索需时间的问题. 目前多数用户会采用exp到磁带的方法只因没有足够的剩余硬盘空间. 而整个exp过程所花时间的大部分都在写磁带上. 通过我们上面对UNIX工具的讨论, 我们可以做到先exp到管道, 再将管道数据压缩后输出到磁带上. 这样写磁带的数据量可大大减少, 从而在相当程度上缩短写磁带时间. 另外从Oracle内部角度讲, 从7.3版开始, Oracle允许用户做direct path export, 即跳过Oracle

  $ make -f $ORACLE_HOME/rdbms/lib/oracle.mk expst

  $ make -f $ORACLE_HOME/rdbms/lib/oracle.mk impst

  以上步骤产生的可执行文件expst (exp single task)和impst与exp/imp用法完全相同. 使用它们比使用exp/imp可节省多至30%的时间. 但在使用它们时千万要注意一点, 即一定要保证在使用expst/impst时不能有任何其他用户在使用Oracle数据库, 否则数据库会产生不可预知的后果甚至毁坏.

  (t114)

exp
将数据库内的各对象以二进制方式下载成dmp文件,方便数据迁移。
buffer:下载数据缓冲区,以字节为单位,缺省依赖操作系统
consistent:下载期间所涉及的数据保持read only,缺省为n
direct:使用直通方式         ,缺省为n
feeback:显示处理记录条数,缺省为0,即不显示
file:输出文件,缺省为expdat.dmp
filesize:输出文件大小,缺省为操作系统最大值
indexes:是否下载索引,缺省为n,这是指索引的定义而非数据,exp不下载索引数据
log:log文件,缺省为无,在标准输出显示
owner:指明下载的用户名
query:选择记录的一个子集
rows:是否下载表记录
tables:输出的表名列表
导出整个实例
exp dbuser/password@服务名 file=oradb.dmp log=oradb.log full=y consistent=y direct=y
user应具有dba权限
导出某个用户所有对象
exp dbuser/password@服务名 file=oradb.dmp log=dbuser.log owner=dbuser buffer=4096000 feedback=10000
导出一张或几张表
exp dbuser/password@服务名 file=oradb.dmp log=dbuser.log tables=table1,table2 buffer=4096000 feedback=10000
导出某张表的部分数据
exp dbuser/password@服务名 file=oradb.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/password@服务名 file=oradb.dmp log=oradb.log full=y buffer=4096000 commit=y ignore=y feedback=10000
导入某个用户所有对象
imp dbuser/password@服务名 file=oradb.dmp log=dbuser.log fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
导入一张或几张表
imp dbuser/password@服务名 file=oradb.dmp log=user.log tables=table1,table2 fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
以多个固定大小文件方式导入某张表
imp dbuser/password@服务名 file=\(1.dmp,2.dmp,3.dmp,…\) filesize=1000m tables=emp fromuser=dbuser touser=dbuser2 buffer=4096000 commit=y ignore=y feedback=10000

原创粉丝点击