Oracle 的 Export 命令用于导出数据库信息,既可以导出表结构,也可以导出数据,表空间,或者按用户导出等等。按照通常的说法,该命令主要是用于数据库的迁移或者备份的。下面就介绍一下该命令的部分参数。

1. exp命令介绍 
export操作需要执行的命令是exp。exp导出数据的一个优点就是快,但导出的结果文件均为二进制文件,而且要求不能手动修改。 
exp在设定执行参数的值的时候,支持的格式为 EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN), 
例如: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)

2. 参数说明 
USERID: 用户名/密码@连接的数据库。该参数必须为 exp 命令的第一个参数。 (如果是本地数据库的话,此处只需指定“用户名/密码”)

BUFFER: 数据缓冲区大小。该参数指定查询数据库记录时的缓冲区大小,单位为 byte,如果该参数设为0,那么获取数据库记录时每次读取一行。该参数需要配合参数direct=N 来使用。

FILE: 输出文件。导出的目标文件名,如果不设定该参数的话,命令会采用默认文件名——EXPDAT.DMP

TABLES: 表名列表。需要导出的表名,可以是一个,也可以是多个。单个表名格式为:tables=test_tab, 多个表名格式:tables=(test_tab_1,test_tab_2) 。提示:在linux 、unix 环境下多个表名时用到的括号需要转义,如下tables=\(test_tab_1,test_tab_2\) 。

COMPRESS:  导入到一个区。这个参数是最容易让人误解的了,很容易理解简单压缩的意思。接下来我需要引用一段别人文章中的描述来解释了。 事实上,COMPRESS 是改变STORAGE 参数INITIAL 的值。比如:CREATE TABLE .... STORAGE( INITIAL 10K NEXT 10K..) 现在数据已经扩展到100 个EXTENT, 如果采用COMPRESS=Y 来EXPORT 数据,则产生的语句时 STORAGE( INITIAL 1000K NEXT 10K) ; 我们可以看到NEXT 值并没有改变,而INITIAL 是所有EXTENT 的总和。所以会出现如下情况,表A 有4 个100M 的EXTENT, 执行DELETE FROM A ,然后再用COMPRESS=Y 导出数据,产生的CREATE TABLE 语句将有400M 的INITIAL EXTENT 。即使这是TABLE 中已经没有数据!!这是的DUMP 文件即使很小,但是在IMPORT 时就会产生一个巨大的TABLE. 另外,也可能会超过DATAFILE 的大小。比如,有4 个50M 的数据文件,其中表A 有15 个10M 的EXTENT, 如果采用COMPRESS=Y 的方式导出数据,将会有INITIAL=150M 那么在重新导入时,不能分配一个150M 的EXTENT ,因为单个EXTENT 不能跨多个文件。

RECORDLENGTH: IO记录的长度。和DIRECT=Y配合使用的是RECORDLENGTH参数,它定义了Export I/O缓冲的大小,作用类似于常规路径导出使用的BUFFER 参数。建议设置RECORDLENGTH 参数为最大I/O 缓冲,即65535(64kb) 。

INDEXES: 导出索引。导入过程中建立用户定义的索引,特别是表上有多个索引或者数据表特别庞大时,需要耗费大量时间。某些情况下,需要以最快的时间导入数据,而索引允许后建,我们就可以使用 INDEXES=N 只导入数据不创建索引,从而加快导入速度。

DIRECT: 直接路径。该参数设定为Y时,oracle 将采用直接读取数据库存储文件的方式获取数据,而不再通过查询数据库的方式,省去了执行 sql 的时间,提高了导出速度。

LOG: 屏幕输出的日志文件。

ROWS: 导出数据行。默认为Y,导出表中数据。设定N,则只会导出表结构。

CONSISTENT: 交叉表的一致性。这个参数是指定在数据导出过程中,是否维持数据库表一致性。默认为N ,如果设定为Y 的话,在导出过程中外部系统同样可以查询数据库相关表,并且获取到一致性的数据,在导出之前更新或者修改的数据不会被外部系统感知。这样也就需要占用数据库的回滚段。如果主机资源紧张,可以将参数设定为N ,这样既可以少占用回滚段资源,更主要的是这样导出速度也会提升。

FILESIZE: 每个转储文件的最大大小。单位为bytes, 设定了该参数后,当导出的数据文件超过最大值时,会重新写入到新文件中,以此类推。但是每次写入新文件的时候,命令会转为交互状态,需要用户数据新的文件名。

QUERY: 用户导出表的子集的select 子句。在只希望导出某表的一部分符合条件的数据时,这个参数就能派上用场了。整个参数需要用 ” ” 括起来。这个参数通过输入where 条件可以只导出预期的数据。如果是导出针对的是多个表,那么在输入where 条件时需要保证该子句对导出的任何一张表都是有效的。 提示:此处需注意query关键字在windows和linux平台下的处理不一样,下面例子中会提到。

CONSTRAINTS:  导出约束条件。是否导出表中已有的constraint。

GRANTS: 是否导出授权信息。

STATISTICS: 分析对象 。指定导出过程中是否统计导出信息。选项包括: NONE ,

COMPUTE,ESTIMATE。习惯上把它设定为 NONE, 这样可以提高导出速度。

3. 举例 
1) 准备用于测试的表emp_exp_imp_1,emp_exp_imp_2

SQL> create table emp_exp_imp_1 as select * from emp;

Table created.

SQL> create table emp_exp_imp_2 as select * from emp;

Table created.

2) exp测试

把scott用户下emp_exp_imp_1表,emp_exp_imp_2表中empno>7600的记录导出。
[oracle@toughhou work]$ exp scott/scott file=/home/oracle/work/emp_exp_imp.dmp buffer=100000 tables=\(emp_exp_imp_1,emp_exp_imp_2\) compress=N indexes=N direct=N rows=Y grants=Y consistent=N constraints=Y log=/home/oracle/work/emp_exp_imp.log  query="where EMPNO>7600"

LRM-00112: multiple values not allowed for parameter 'query'

EXP-00019: failed to process parameters, type 'EXP HELP=Y' for help
EXP-00000: Export terminated unsuccessfully

导出错误,原因是:query关键字赋值时,Windows平台和Unix/Linux平台处理有差异。此处http://www.anysql.net/oracle/exp_param_query.html有详细说明。

在Windows下, 如何指定query参数:
exp ... query='where deptno=10'
exp ... query='where deptno=''10'''
exp ... query='where deptno"<"10'

在Solaris(C shell)下, 如何指定query参数:
exp ..... query=\"where col1 \< 1000\"
exp ..... query=\"where col1 \< '1000'\"

注意标红地方:Windows平台和Unix/Linux平台处理情况不一样。
[oracle@toughhou work]$ exp scott/scott file=/home/oracle/work/emp_exp_imp.dmp buffer=100000 tables=\(emp_exp_imp_1,emp_exp_imp_2\) compress=N indexes=N direct=N rows=Y grants=Y consistent=N constraints=Y log=/home/oracle/work/emp_exp_imp.log  query=\"where EMPNO \> 7600\"

Export: Release 10.2.0.1.0 - Production on Wed Oct 9 00:29:57 2013

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
server uses WE8ISO8859P1 character set (possible charset conversion)
Note: indexes on tables will not be exported

About to export specified tables via Conventional Path ...
. . exporting table                  EMP_EXP_IMP_1         10 rows exported
. . exporting table                  EMP_EXP_IMP_2         10 rows exported
Export terminated successfully without warnings.

此时可以看到成功导出。

Oracle的Export用法的更多相关文章

  1. oracle expdp/impdp 用法详解

    http://hi.baidu.com/hzfsai/item/4a4b3fc4b1cf7e51ad00efbd oracle expdp/impdp 用法详解 Data Pump 反映了整个导出/导 ...

  2. ORACLE 中ROWNUM用法总结(转)

    ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...

  3. ORACLE 中ROWNUM用法总结!

    ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...

  4. [转]ORACLE的ProC用法讲解

    pro*c是高级的用法,OCI是oracle的基础用法 如何编译.pc文件: proc code=cpp  parse=none iname=filename.pc oname=filename.cp ...

  5. 【转】关于oracle with as用法

    原文链接:关于oracle with as用法 with as语法–针对一个别名with tmp as (select * from tb_name) –针对多个别名with   tmp as (se ...

  6. Oracle CASE WHEN 用法介绍[Z]

    Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ...

  7. paip.oracle query export to insert sql

    paip.oracle query export to insert sql 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http:/ ...

  8. 转:ORACLE 中ROWNUM用法总结!

    oracle 分页查询语句:select * from (select u.*,rownum r from (select * from userifno) u where rownum<大值) ...

  9. shell变量/环境变量和set/env/export用法_转

    转自:shell环境变量以及set,env,export的区别 一.shell环境变量的分类以及set env export的区别: set:显示(设置)shell变量,包括的私有变量以及用户变量.不 ...

随机推荐

  1. PHP正则提取或替换img标记属性实现文章预览

    今天在想如何实现文章预览时,如果文章里面包含照片,那么就选取第一张照片作为预览图,如果没有照片,则截取文章的头150个字作为预览文字,但是因为保存在数据库的文章都是以富文本的形式,没办法直接提取,在网 ...

  2. linux安装

    1.rpm: • RPM是软件包管理工具,是Redhat Package Manager的缩写,最早由redhat公司引入的,现在已经成为公认的行业标准了.• 什么是package• 简单地说就是归档 ...

  3. 慕课网,我的yii2学习笔记(基础篇)

    一.关于PHP知识点 1.命名空间:存放类文件的空间,可以随便定义,建议与类文件目录一致,方便管理. 注:(1).如果类没有设置命名空间,默认为顶级命名空间,在程序中可以用一下方式实例化. $mode ...

  4. php.ini详解

    [PHP] ; PHP还是一个不断发展的工具,其功能还在不断地删减 ; 而php.ini的设置更改可以反映出相当的变化, ; 在使用新的PHP版本前,研究一下php.ini会有好处的 ;;;;;;;; ...

  5. 省市联动Demo

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta ...

  6. .net求两个数的最大公约数和最小公倍数

    最大公约数:指两个或多个整数共有约束中最大的一个. 最小公倍数:如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个整数来说,指该两数共有倍数中最小的一个. /// <s ...

  7. JAVA鼠标屏幕绘制拖拽删除矩形

    import java.awt.Cursor; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; ...

  8. fuse挂载hdfs目录到linux本地

    1,安装fuse yum -y install hadoop-hdfs-fuse 2.修改环境变量 vi /etc/profile 增加如下配置: JAVA_HOME=/usr/jdk64/jdk1. ...

  9. PHP学习笔记 - 入门篇(3)

    PHP学习笔记 - 入门篇(3) 常量 什么是常量 什么是常量?常量可以理解为值不变的量(如圆周率):或者是常量值被定义后,在脚本的其他任何地方都不可以被改变.PHP中的常量分为自定义常量和系统常量 ...

  10. javascript笔记——jikeytang javascript前端群 389875212 精华总结

    网址: https://github.com/jsfront   //    http://www.kancloud.cn/jsfront/month/82796 内容: 前端js github总结, ...