oracle exp/imp

来源:互联网 发布:生产者消费者模式 php 编辑:程序博客网 时间:2024/04/27 12:53

oracle exp/imp

导入/导出是ORACLE幸存的最古老的两个命令行工具,其实我从来不认为Exp/Imp是一种好的备份方式,正确的说法是Exp/Imp只能是一个好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的抽取,检测逻辑和物理冲突等中有不小的功劳。当然,我们也可以把它作为小型数据库的物理备份后的一个逻辑辅助备份,也是不错的建议。对于越来越大的数据库,特别是TB级数据库和越来越多数据仓库的出现,EXP/IMP越来越力不从心了,这个时候,数据库的备份都转向了RMAN和第三方工具。下面说明一下EXP/IMP的使用。

 

数据库逻辑备份方法

    ORACLE数据库的逻辑备份分为三种模式:表备份、用户备份和完全备份。

    表模式

    备份某个用户模式下指定的对象(表)。业务数据库通常采用这种备份方式。

    若备份到本地文件,使用如下命令:

    exp icdmain/icd rows=y indexes=n compress=n buffer=65536

    feedback=100000 volsize=0

    file=exp_icdmain_csd_yyyymmdd.dmp

    log=exp_icdmain_csd_yyyymmdd.log 

    tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo

    若直接备份到磁带设备,使用如下命令:

    exp icdmain/icd rows=y indexes=n compress=n buffer=65536

    feedback=100000 volsize=0

    file=/dev/rmt0

    log=exp_icdmain_csd_yyyymmdd.log tables=icdmain.commoninformation,icdmain.serviceinfo,icdmain.dealinfo

    注:在磁盘空间允许的情况下,应先备份到本地服务器,然后再拷贝到磁带。出于速度方面的考虑,尽量不要直接备份到磁带设备。

    用户模式

    备份某个用户模式下的所有对象。业务数据库通常采用这种备份方式。

    若备份到本地文件,使用如下命令:

    exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536

    feedback=100000 volsize=0

    file=exp_icdmain_yyyymmdd.dmp log=exp_icdmain_yyyymmdd.log

    若直接备份到磁带设备,使用如下命令:

    exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536

    feedback=100000 volsize=0

    file=/dev/rmt0

    log=exp_icdmain_yyyymmdd.log

    注:如果磁盘有空间,建议备份到磁盘,然后再拷贝到磁带。如果数据库数据量较小,可采用这种办法备份。

    完全模式

    备份完整的数据库。业务数据库不采用这种备份方式。备份命令为:

    exp icdmain/icd rows=y indexes=n compress=n buffer=65536

    feedback=100000 volsize=0 full=y

    file=exp_fulldb_yyyymmdd.dmp(磁带设备则为/dev/rmt0)

    log=exp_fulldb_yyyymmdd.log

    对于数据库备份,建议采用增量备份,即只备份上一次备份以来更改的数据。增量备份命令:

    exp icdmain/icd rows=y indexes=n compress=n buffer=65536

    feedback=100000 volsize=0 full=y inctype=incremental

    file=exp_fulldb_yyyymmdd.dmp(磁带设备则为/dev/rmt0)

    log=exp_fulldb_yyyymmdd.log

    注:关于增量备份必须满足下列条件:

    1.只对完整数据库备份有效,且第一次需要full=y参数,以后需要inctype=increment al参数。

    2. 用户必须有EXP_FULL_DATABASE的系统角色。

    3. 话务量较小时方可采用数据库备份。

    4. 如果磁盘有空间,建议备份到磁盘,然后再备份到磁带。

 

恢复方案

    数据库的逻辑恢复分为表恢复、用户恢复、完全恢复三种模式。

    表模式

    此方式将根据按照表模式备份的数据进行恢复。

    A. 恢复备份数据的全部内容若从本地文件恢复,使用如下命令:

    imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n

    commit=y buffer=65536 feedback=100000 ignore=n volsize=0

    file=exp_icdmain_csd_yyyymmdd.dmp

    log=imp_icdmain_csd_yyyymmdd.log

    若从磁带设备恢复,使用如下命令:

    imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n

    commit=y buffer=65536 feedback=100000 ignore=n volsize=0

    file=/dev/rmt0

    log=imp_icdmain_csd_yyyymmdd.log

    B. 恢复备份数据中的指定表若从本地文件恢复,使用如下命令:

    imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n

    commit=y buffer=65536 feedback=100000 ignore=n volsize=0

    file=exp_icdmain_csd_yyyymmdd.dmp

    log=imp_icdmain_csd_yyyymmdd.log

    tables=commoninformation,serviceinfo

    若从磁带设备恢复,使用如下命令:

    imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n

    commit=y buffer=65536 feedback=100000 ignore=n volsize=0

    file=/dev/rmt0

    log=imp_icdmain_csd_yyyymmdd.log

    tables=commoninformation,serviceinfo

    用户模式

    此方式将根据按照用户模式备份的数据进行恢复。

    A. 恢复备份数据的全部内容若从本地文件恢复,使用如下命令:

    imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n

    commit=y buffer=65536 feedback=100000 ignore=n volsize=0

    file=exp_icdmain_yyyymmdd.dmp

    log=imp_icdmain_yyyymmdd.log

    若从磁带设备恢复,使用如下命令:

    imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n

    commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=/dev/rmt0

    log=imp_icdmain_yyyymmdd.log

    B. 恢复备份数据中的指定表若从本地文件恢复,使用如下命令:

    imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n

    commit=y buffer=65536 feedback=100000 ignore=n volsize=0

    file=exp_icdmain_yyyymmdd.dmp

    log=imp_icdmain_yyyymmdd.log

    tables=commoninformation,serviceinfo

    若从磁带设备恢复,使用如下命令:

    imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n

    commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=/dev/rmt0

    log=imp_icdmain_yyyymmdd.log tables=commoninformation,serviceinfo

    完全模式

    如果备份方式为完全模式,采用下列恢复方法:

    若从本地文件恢复,使用如下命令:

    imp system/manager rows=y indexes=n commit=y buffer=65536

    feedback=100000 ignore=y volsize=0 full=y

    file=exp_icdmain_yyyymmdd.dmp

    log=imp_icdmain_yyyymmdd.log

    若从磁带设备恢复,使用如下命令:

    imp system/manager rows=y indexes=n commit=y buffer=65536

    feedback=100000 ignore=y volsize=0 full=y

    file=/dev/rmt0

    log=imp_icdmain_yyyymmdd.log

 

EXP的所有参数(括号中为参数的默认值):

USERID        用户名/口令      如: USERID=duanl/duanl      

FULL          导出整个数据库 (N)

BUFFER        数据缓冲区的大小         

OWNER        所有者用户名列表,你希望导出哪个用户的对象,就用owner=username

FILE           输出文件 (EXPDAT.DMP)    

TABLES        表名列表 ,指定导出的table名称,如:TABLES=table1,table2

COMPRESS     导入一个extent (Y)   

RECORDLENGTH   IO 记录的长度

GRANTS        导出权限 (Y)            

INCTYPE        增量导出类型

INDEXES        导出索引 (Y)           

RECORD        跟踪增量导出 (Y)

ROWS           导出数据行 (Y)        

PARFILE        参数文件名,如果你exp的参数很多,可以存成参数文件.

CONSTRAINTS   导出约束 (Y)    

CONSISTENT    交叉表一致性

LOG            屏幕输出的日志文件    

STATISTICS     分析对象 (ESTIMATE)

DIRECT         直接路径 (N)              

TRIGGERS      导出触发器 (Y)

FEEDBACK      显示每 x 行 (0) 的进度

FILESIZE        各转储文件的最大尺寸

QUERY          选定导出表子集的子句

下列关键字仅用于可传输的表空间

TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)

TABLESPACES 将传输的表空间列表

 

IMP的所有参数(括号中为参数的默认值):

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)

ANALYZE   执行转储文件中的 ANALYZE 语句 (Y)

FEEDBACK 显示每 x 行 (0) 的进度

TOID_NOVALIDATE   跳过指定类型 id 的校验

FILESIZE 各转储文件的最大尺寸

RECALCULATE_STATISTICS 重新计算统计值 (N)

下列关键字仅用于可传输的表空间

TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)

TABLESPACES 将要传输到数据库的表空间

DATAFILES 将要传输到数据库的数据文件

TTS_OWNERS 拥有可传输表空间集中数据的用户

 

表空间传输

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

关于传输表空间有一些规则,即:

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

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

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

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

·SYS的对象不能迁移

·必须传输自包含的对象集

·有一些对象,如物化视图,基于函数的索引等不能被传输

可以用以下的方法来检测一个表空间或一套表空间是否符合传输标准:

exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true);

select * from sys.transport_set_violation;

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

以下为简要使用步骤,如果想参考详细使用方法,也可以参考ORACLE联机帮助。

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

alter tablespace app_data read only;

alter tablespace app_index read only;

2.发出EXP命令

SQL>host exp userid=”””sys/password as sysdba”””

transport_tablespace=y tablespace=(app_data, app_index)

以上需要注意的是

·为了在SQL中执行EXP,USERID必须用三个引号,在UNIX中也必须注意避免“/”的使用

·在816和以后,必须使用sysdba才能操作

·这个命令在SQL中必须放置在一行(这里是因为显示问题放在了两行)

3.拷贝数据文件到另一个地点,即目标数据库

   可以是cp(unix)或copy(windows)或通过ftp传输文件(一定要在bin方式)

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

5.在目标数据库附加该数据文件

imp file=expdat.dmp userid=”””sys/password as sysdba””” transport_tablespace=y “datafile=(c:/temp/app_data,c:/temp/app_index)”

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

alter tablespace app_data read write;

alter tablespace app_index read write;



实例: 

导出test的a对象的数据,再导入到test2的c对象(先要在test2中新建用户c)

exp a/1@test owner=a rows=y indexes=y compress=n buffer=65536 feedback=100000  file=d:\exp_icdmain_yyyymmdd.dmp log=d:\exp_icdmain_yyyymmdd.log


 imp c/2@test2 fromuser=a touser=c rows=y indexes=y commit=y buffer=65536 feedback=100000 ignore=n file=d:\exp_icdmain_yyyymmdd.dmp log=d:\imp_icdmain_yyyymmdd.log



原创粉丝点击