1.1  基本命令

1.  获取帮助

$ exp help=y

$ imp help=y

    2.  三种工作方式

(1)交互式方式

$ exp        //  然后按提示输入所需要的参数

(2)命令行方式

$ exp user/pwd@dbname file=/oracle/test.dmp full=y    //  命令行中输入所需的参数

(3)参数文件方式

$ exp parfile=username.par    //  在参数文件中输入所需的参数

参数文件 username.par 内容 userid=username/userpassword buffer=8192000

compress=n grants=y

file=/oracle/test.dmp full=y

    3.  三种模式

(1)表方式,将指定表的数据导出/导入。

导出:导出一张或几张表:$ exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1,table2

导出某张表的部分数据

$ exp user/pwd file=/dir/xxx.dmp log=xxx.log tables=table1 query=\“where col1=\‘…\’and col2 \<…\”

导入:导入一张或几张表

$  imp  user/pwd  file=/dir/xxx.dmp  log=xxx.log  tables=table1,

table2  fromuser=dbuser touser=dbuser2 commit=y ignore=y

(2)用户方式,将指定用户的所有对象及数据导出/导入。

导出:$ exp user/pwd file=/dir/xxx.dmp log=xxx.log owner=(xx, yy)

只导出数据对象,不导出数据  (rows=n )

$ exp user/pwd file=/dir/xxx.dmp log=xxx.log owner=user rows=n

导入:$  imp  user/pwd  file=/dir/xxx.dmp  log=xxx.log  fromuser=dbuser  touser=dbuser2

commit=y ignore=y

(3)全库方式,将数据库中的所有对象导出/导入导出:

导出:$ exp user/pwd file=/dir/xxx.dmp log=xxx.log full=ycommit=y ignore=y

导入:$ imp user/pwd file=/dir/xxx.dmp log=xxx.log fromuser=dbuser touser=dbuser2

1.2  高级选项

    1.  分割成多个文件

以多个固定大小文件方式导出:这种做法通常用在表数据量较大,单个 dump文件可能会超出文件系统的限制的情况

$ exp user/pwd file=1.dmp,2.dmp,3.dmp,…filesize=1000m    log=xxx.log full=y

以多个固定大小文件方式导入

$  imp  user/pwd file=1.dmp,2.dmp,3.dmp,…  filesize=1000m

tables=xxx  fromuser=dbuser touser=dbuser2    commit=y ignore=y

    2.  增量导出/导入

// oracle 9i  以后 exp  不再支持  inctype

必须为  SYS  或  SYSTEM  才可执行增量导出导入

增量导出:   包括三个类型:

(1)“完全”增量导出(Complete)  //  备份整个数据库

$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=complete

(2)“增量型”增量导出      导出上一次备份后改变的数据。

$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=incremental

(3)  “累计型”增量导出(Cumulative)只导出自上次“完全”导出之后数据库中变化 了的信息。

$ exp user/pwd file=/dir/xxx.dmp log=xxx.log inctype=cumulative

增量导入:$ imp usr/pwd FULL=y inctype=system/restore/inct ype

其中:

SYSTEM:    导入系统对象

RESTORE:  导入所有用户对象

    3.  以SYSDBA进行导出/导入

1.  用于 Oracle 技术支持

2.  用于表空间传输

例:$    imp    \'usr/pwd@instance    as    sysdba\'    tablespaces=xx    transport_tablespace=y file=xxx.dmp datafiles=xxx.dbf $  imp  file=expdat.dmp  userid=“”“sys/password  as  sysdba”“”  transport_tablespace=y“datafile=(c:tempapp_data,c:tempapp_index)”

    4.  表空间传输  (速度快)

表空间传输是8i 新增加的一种快速在数据库间移动数据的一种办法,是把一个数据库上的格式数据文件附加到另外一个数据库中,而不是把数据导出成 dmp 文件,这 在有些时候是非常管用的,因为传输表空间移动数据就象复制文件一样快。

1.关于传输表空间有一些规则  (10g前):

源数据库和目标数据库必须运行在相同的硬件平台上。

源数据库与目标数据库必须使用相同的字符集。

源数据库与目标数据库一定要有相同大小的数据块

目标数据库不能有与迁移表空间同名的表空间

SYS 的对象不能迁移

必须传输自包含的对象集

有一些对象,如物化视图,基于函数的索引等不能被传输(同字节序文件的跨平台可以用更换数据文件的文件头的方法)

(10g  支持跨平台的表空间传输,只要操作系统字节顺序相同,就可以进行表空间 传输。需要使用 RMAN转换文件格式,略)

2.  检测一个表空间是否符合传输标准的方法:

SQL > exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true); SQL > select * from sys.transport_set_violations;

如果没有行选择,表示该表空间只包含表数据,并且是自包含的。对于有些非自包含的表空间,如数据表空间和索引表空间,可以一起传输。

3. 简要使用步骤:

如果想参考详细使用方法,也可以参考 ORACLE联机帮助。

1.设置表空间为只读(假定表空间名字为 APP_Data  和 APP_Index)

SQL > alter tablespace app_data read only; SQL > alter tablespace app_index read only;

2.发出 EXP命令

SQL> host exp userid=“”“sys/password as sysdba”“” transport_tablespace=y tablespaces=(app_data, app_index)

以上需要注意的是。为了在 SQL 中执行 EXP,USERID 必须用三个引号,在 UNIX中也必须注意 避免“/”的使用。在 816和以后,必须使用 sysdba才能操作。这个命令在 SQL中必须放置在一行(这里是因为显示问题放在了两行)

3.拷贝。dbf数据文件(以及。dmp文件)到另一个地点,即目标数据库可以是 cp(unix)或 cop y(windows)或通过 ftp传输文件(一定要在 bin方式)

4.把本地的表空间设置为读写

$ alter tablespace app_data read write;

$ alter tablespace app_index read write;

5.在目标数据库附加该数据文件  (直接指定数据文件名)

(表空间不能存在,必须建立相应用户名或者用 fromuser/touser)

$ imp file=expdat.dmp userid=“”“sys/password as sysdba”“” transport_tablespace=y    datafiles=(“c:\app_data.dbf,c:\app_index.dbf”) tablespaces=app_data,app_index tts_owners=hr,oe

6.设置目标数据库表空间为读写

$ alter tablespace app_data read write;

$ alter tablespace app_index read write;

1.3  优化

1.  加快exp速度

加大large_pool_size,可以提高 exp的速度 采用直接路径的方式(direct=y),数据不需要经过内存进行整合和检查。 设置较大的 buffer,如果导出大对象,小buffer会失败。

export文件不在ORACLE使用的驱动器上,不要export到NFS文件系统。

UNIX环境:用管道模式直接导入导出来提高 imp/exp的性能

2.  加快imp速度

建立一个indexfile,在数据 import完成后在建立索引将import文件放在不同的驱动器上增加 DB_BLOCK_BUFFERS增加 LOG_BUFFER

用非归档方式运行 ORACLE:ALTER DATABASE NOARCHIVELOG; 建立大的表空间和回滚段,OFFLINE其他回滚段,回滚段的大小为最大表的 1/2 使用  COMMIT=N

使用 ANALYZE=N

单用户模式导入

UNIX环境:用管道模式直接导入导出来提高 imp/exp的性能

3.  通过unix/Linux PIPE管道加快exp/imp速度

通过管道导出数据:

1.通过 mknod -p 建立管道

$ mknod /home/exppipe p    //  在目录/home下建立一个管道 exppipe注意参数 p

2.通过 exp和 gzip导出数据到建立的管道并压缩

$ exp test/test file=/home/exppipe & gzip < /home/exppipe > exp.dmp.gz

$ exp test/test tables=bitmap file=/home/newsys/test.pipe & gzip < /home/newsys/test.pipe > bitmap.dmp.gz

3.导出成功完成之后删除建立的管道

$ rm    -rf    /home/exppipe

导出脚本:

###UNIX下 ORACLE数据库通过 PIPE管道进行备份

###### using "export" and "tar" command to bakup oracle datebase #######

trap "" 1 #nohup

LOGFILE=/opt/bakup/log/bakup_ora.log

export LOGFILE

DUMPDIR=/archlog_node1

export DUMPDIR

exec >$LOGFILE 2>&1

echo

echo ' Begin at ' `date`

echo

#               clear old result file

cd $DUMPDIR

if [ -f exp.dmp.Z ]

then echo "clear old result file"

rm exp.dmp.Z

fi

#               make pipe

mkfifo exp.pipe

chmod a+rw exp.pipe

#               gain the dmp.Z file

compress < exp.pipe > exp.dmp.Z &

su -u oracle -c "exp userid=ll/ll file=$DUMPDIR/exp.pipe full=y buffer=20000000"

echo

echo '    exp end at '`date`

echo

#               rm pipe

rm exp.pipe

#               tar the dmp.Z file to tape

mt -f /dev/rmt/0 rew

tar cvf /dev/rmt/0 exp.dmp.Z

echo

echo '    tar end at '`date`

echo

通过管道导入生成的文件:

1.通过 mknod -p 建立管道

$ mknod /home/exppipe p

2.导入生成的压缩文件

$ imp test/test file=/home/exppipe fromuser=test touser=macro & gunzip < exp.dmp.gz > /home/exppipe

3.删除管道

$ rm –fr /home/exppipe

4.  全库导入的一般步骤

注意:在导出时,需要通过toad或其他工具提取源数据库创建主键和索引的脚本

1.  先全库加 rows=n 把结构导进去

$ imp system/manager file=exp.dmp log=imp.log full=y rows=n indexes=n

2.  使业务用户的触发器失效/删除主键和唯一索引

spool drop_pk_u.sql

select 'alter table '||table_name||' drop constraint '||constraint_name||';'

from user_constraints

where constraint_type in ('P','U');

/

spool off

spool disable_trigger.sql

select 'alter trigger '||trigger_name||' disable;'

from user_triggers;

/

spool off

@drop_pk_u.sql

@disable_trigger.sql

3.  以 ignore=y全库导入$ imp system/manager file=exp.dmp log=imp.log full=y ignore=y

4.  通过 toad或其他工具提取源数据库创建主键和索引的脚本,在目标数据库中创建主键和索引。使触发器生效。

1.4  常见问题

1.  字符集问题

ORACLE多国语言设置是为了支持世界范围的语言与字符集,一般对语言提示, 货币形式,排序方式和  CHAR,VARCHAR2,C LOB,LONG  字段的数据的显示等有效。ORACLE  的多国语言设置最主要的两个特性就是国家语言设置与字符集设置,国家语 言设置决定了界面或提示使用的语言种类,字符集决定了数据库保存与字符集有关数据(如文本)时候的编码规则。

ORACLE字符集设定,分为数据库字符集和客户端字符集环境设置。在数据库端,

字符集在创建数据库的时候设定,并保存在数据库props$表中。

在客户端的字符集环境比较简单,主要就是环境变量或注册表项 NLS_ LANG,注意 NLS_LANG的优先级别为:参数文件<注册表<环境变量<alter  session.如果客户端 字符集和服务器端字符集不一样,而且字符集的转换也不兼容,那么客户端的数据显示与导出/导入的与字符集有关的数据将都是乱码。

使用一点点技巧,就可以使导出/导入在不同的字符集的数据库上转换数据。这里需要一个2进制文件编辑工具即可,如 uedit32.用编辑方式打开导出的dmp文件,获取 2 、3 字节 的内容 , 如  00  01 , 先把它转换 为 10 进制数,为1 ,使用函数

NLS_CHARSET_NAME 即可获得该字符集:

SQL> select nls_charset_name(1) from dual; NLS_CHARSET_NAME(1)

------------------- US7ASCII

可以知道该dmp文件的字符集为 US7ASCII,如果需要把该 dmp文件的字符集换成ZHS16GBK,则需要用 NLS_CHARSET_ID 获取该字符集的编号: SQL> select nls_charset_id('zhs16gbk') from dual; NLS_CHARSET_ID('ZHS16GBK')

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

把852换成16进制数,为354,把 2、3字节的 00  01 换成03  54,即完成了把该 dmp文件字符集从us7ascii 到 zhs16gbk 的转化,这样,再把该dmp文件导入到 zhs16gbk 字符集的数据库就可以了。

2.  版本问题

Exp/Imp很多时候,可以跨版本使用,如在版本7与版本8之间导出导入数据,但这样做必须选择正确的版本,规则为:总是使用IMP的版本匹配数据库的版本,如果要导入到 816,则使用816的导入工具。总是使用 EXP 的版本匹配两个数据库中低的那个版本,如在815与816之间互导,则使用815的EXP 工具。

imp和exp版本不能往上兼容: imp 可以导入低版本 exp生成的文件, 不能导入高版本 exp生成的文件。

Oracle 【IT实验室】数据库备份与恢复之一:exp/imp(导出与导入&装库与卸库)的更多相关文章

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

    from: http://blog.csdn.net/wangchunyu11155/article/details/53635602 [用 exp 数 据 导 出]: 1 将数据库TEST完全导出, ...

  2. Oracle基础 (系统工具(export,import)) exp/imp和 (数据泵 (data pump))expdp/impdp的区别:

    一.exp/imp和expdp/impdp在功能上的区别: 1.把用户usera的对象导入到userb emp/imp用法: formuser=usera touser=userb; empdp/im ...

  3. Oracle基础 exp/imp 数据泵导入/导出 命令

    一.导出方式: 使用exp/imp方式导出数据分为四种方式: 1.表方式导出:一个或多个指定的表,包括表的定义.表数据.表的所有者授权.表索引.表约束,以及创建在该表上的触发器.也可以只导出结构,不导 ...

  4. EXP/IMP 导出生产库表的指定数据到测试库一例

    一般来讲,EXP/IMP是上一代导出导入程序,EXPDP/IMPDP是新一代的导出导入程序.对于大数据量的导出导入首选EXPDP/IMPDP,可以用到并行度,对表空间等操作上也更加的灵活.对于小数据量 ...

  5. mysql数据库在linux下的导出和导入及每天的备份

    mysql数据库的导出,导入 1. 导出数据库为sql文件 mysqldump 数据库名 -uroot -p > xxx.sql 导出数据表结构和数据 eg.   mysqldump cloud ...

  6. Oracle使用exp和imp导出、导入数据

    ===========导出============ exp 用户名/密码@服务器(localhost) file=文件路径.dmp owner=(用户名) ===========导入========= ...

  7. Oracle exp/imp 导出/导入

    set NLS_LANG=AMERICAN_AMERICA.AL32UTF8 exp jjhd_test/11111111@a_syj file="d:\jjhd_test.dmp" ...

  8. Oracle密码中含有特殊字符时exp,imp的使用

    今天通过exp迁移Oracle 数据,由于密码含有很有很多特殊字符,弄了好久,都没成功,后发在网上找到方法. 1 exp用法Linux 下(密码用一对双引号, 整体userid用对单引号括住)exp ...

  9. Oracle备份恢复之Oracle11G R2用exp无法导出空表解决方法

    在11G R2中有个新特性,当表无数据时,不分配segment,以节省空间Oracle当然在执行export导出时,空表则无法导出,但是还是有解决办法的: 解决方法: 一.insert一行,再roll ...

随机推荐

  1. Intellij IDEA使用总结

    查询快捷键CTRL+N   查找类CTRL+SHIFT+N  查找文件CTRL+SHIFT+ALT+N 查 找类中的方法或变量CIRL+B   找变量的来源CTRL+ALT+B  找所有的子类CTRL ...

  2. neutron 网络配置flat模式

    使用flat模式,直接使用物理网络的子网,配置如下:

  3. SQL Server OBJECT_ID() 函数

    OBJECT_ID 返回架构范围内对象的数据库对象标识号. 重要提示 使用 OBJECT_ID 不能查询非架构范围内的对象(如 DDL 触发器).对于在 sys.objects 目录视图中找不到的对象 ...

  4. 【leetcode】Anagrams

    Anagrams Given an array of strings, return all groups of strings that are anagrams. Note: All inputs ...

  5. php调用c/c++的一种方式

    php调用c/c++有很多方式,最常用的是通过tcp或者http去调用,通过发送请求去调用c/c++编写的cgi/fastcgi来实现,另外php还有一种直接执行外部应用程序的方式,这种方式会影响到系 ...

  6. monitor disk

    #!/bin/bash # #top #Big_USERS - find big disk space users in various directories ################### ...

  7. 经典排序算法 - 冒泡排序Bubble sort

    原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子 ...

  8. 【编程题目】在 O(1)时间内删除链表结点

    60.在 O(1)时间内删除链表结点(链表.算法).题目:给定链表的头指针和一个结点指针,在 O(1)时间删除该结点.链表结点的定义如下:struct ListNode{int m_nKey;List ...

  9. October 4th 2016 Week 41st Tuesday

    Patience! The windmill never strays in search of the wind. 耐心等待!风车从不跑去找风. Sometimes we need to be pa ...

  10. Linux iostat字段解析

    iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息.用户可以通过指定统计的次数和时间来获得 ...