Oracle数据导入导出imp/exp

Oracle数据导入导出imp/exp

  功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份。

  大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失)。

  Oracle有个好处,虽然你的电脑不是服务器,但是你装了oracle客户端,并建立了连接

  (通过net8 assistant中本地-->服务命名 添加正确的服务命名

  其实你可以想成是客户端与服务器端修了条路,然后数据就可以被拉过来了)

  这样你可以把数据导出到本地,虽然可能服务器离你很远。

  你同样可以把dmp文件从本地导入到远处的数据库服务器中。

  利用这个功能你可以构建俩个相同的数据库,一个用来测试,一个用来正式使用。

  执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,

  DOS中可以执行时由于 在oracle 8i 中 安装目录/ora81/BIN被设置为全局路径,

  该目录下有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 将数据库中的表table1 、table2导出

  exp system/manager@TEST file=d:/daochu.dmp tables=(table1,table2)

  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

  上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。

  在后面加上 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:/Work/Oracle_Data/backup>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

 

一.工具参数说明

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)
  ROWS 导出数据行 (Y)
  PARFILE 参数文件名
  CONSTRAINTS 导出限制 (Y)
  CONSISTENT 交叉表一致性
  LOG 屏幕输出的日志文件
  STATISTICS 分析对象 (ESTIMATE)
  DIRECT 直接路径 (N)
  TRIGGERS 导出触发器 (Y)
  FEEDBACK 显示每 x 行 (0) 的进度
  FILESIZE 各转储文件的最大尺寸
  QUERY 选定导出表子集的子句

  下列关键字仅用于可传输的表空间
  TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
  TABLESPACES 将传输的表空间列表

imp  命令
  或者, 可以通过输入 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)
  ANALYZE 执行转储文件中的 ANALYZE 语句 (Y)
  FEEDBACK 显示每 x 行 (0) 的进度
  TOID_NOVALIDATE 跳过指定类型 id 的校验
  FILESIZE 各转储文件的最大尺寸
  RECALCULATE_STATISTICS 重新计算统计值 (N)  
  下列关键字仅用于可传输的表空间
  TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)
  TABLESPACES 将要传输到数据库的表空间
  DATAFILES 将要传输到数据库的数据文件
  TTS_OWNERS 拥有可传输表空间集中数据的用户

测试脚本

exp svcm/svcm@zjzx owner=svcm rows=y indexes=n compress=n buffer=65536 file=/zjzxfs/exp_svcm_20060323.dmp log=/zjzxfs/exp_svcm_20060323.log

imp sms/smssend@orazw fromuser=svcm touser=sms rows=y commit=y buffer=65536 file=d:/exp_svcm_20060323.dmp log=d:/imp_svcm_20060323.log

实例

ORACLE数据库有两类备份方法。第一类为物理备份,该方法实现数据库的完整恢复,但
数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部
存储设备,例如磁带库;第二类备份方式为逻辑备份,业务数据库采用此种方式,此方
法不需要数据库运行在归挡模式下,不但备份简单,而且可以不需要外部存储设备。
数据库逻辑备份方法
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. 如果磁盘有空间,建议备份到磁盘,然后再备份到磁带。
业务数据库备份方法及周期
用EXP进行备份前,先在SYS用户下运行CATEXP.SQL文件(如果以前已运行该文件,则不
要执行这个脚本)。
没有特殊说明,不允许在客户端执行备份命令。

备份命令参照表模式下的备份命令。
从磁盘文件备份到磁带
如果首先备份到本地磁盘文件,则需要转储到磁带设备上。
1. 若需查看主机上配置的磁带设备,使用如下命令:
lsdev -Cc tape
显示的结果如下例所示:
rmt0 Available 30-58-00-2,0 SCSI 4mm Tape Drive
rmt1 Defined  30-58-00-0,0 SCSI 4mm Tape Drive
标明Available的设备是可用的磁带设备。
2. 若需查看磁带存储的内容,使用如下命令:
tar -tvf /dev/rmt0
显示的结果如下例所示:
-rw-r--r-- 300 400 8089600 Jan 11 14:33:57 2001 exp_icdmain_20010111.dmp
如果显示类似如下内容,则表示该磁带存储的备份数据是从数据库直接备份到磁带上,
而非从本地磁盘转储到磁带的备份文件,因此操作系统无法识别。
tar: 0511-193 An error occurred while reading from the media.
There is an input or output error.

tar: 0511-169 A directory checksum error on media; -267331077 not equal to
2
5626.
3. 对于新磁带或无需保留现存数据的磁带,使用如下命令:
tar -cvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp
注:A. 该命令将无条件覆盖磁带上的现存数据。
  B. 文件名不允许包含路径信息,如:/backup/exp_icdmain_yyyymmdd.dmp。
4. 对于需要保留现存数据的磁带,使用如下命令:
tar -rvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp
注:该命令将文件exp_icdmain_yyyymmdd.dmp追加到磁带的末端,不会覆盖现存的数据

特别强调:如果备份时是从数据库直接备份到磁带上,则不可再向该磁带上追加复制任
何其他文件,否则该备份数据失效。
5. 若需将转储到磁带上的备份文件复制到本地硬盘,使用如下命令:
A. 将磁带上的全部文件复制到本地硬盘的当前目录
tar -xvf /dev/rmt0
B. 将磁带上的指定文件复制到本地硬盘的当前目录
tar -xvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp
备份时间安排
由于备份时对系统I/O有较大影响,所以,建议在晚上11点以后进行备份工作。
业务数据库Oracle版本的恢复
恢复方案需根据备份方案确定。由于业务数据库采用表备份和用户备份相结合的方案,
所以业务数据库的恢复需根据实际情况采用表恢复和用户恢复相结合的方案。
恢复方案
数据库的逻辑恢复分为表恢复、用户恢复、完全恢复三种模式。
表模式
此方式将根据按照表模式备份的数据进行恢复。
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_cs
d_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_cs
d_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_yy
yymmdd.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_yy
yymmdd.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
参数说明
1. ignore参数
Oracle在恢复数据的过程中,当恢复某个表时,该表已经存在,
就要根据ignore参数的设置来决定如何操作。
若ignore=y,Oracle不执行CREATE TABLE语句,直接将数据
插入到表中,如果插入的记录违背了约束条件,比如主键约束,
则出错的记录不会插入,但合法的记录会添加到表中。
若ignore=n,Oracle不执行CREATE TABLE语句,同时也不会
将数据插入到表中,而是忽略该表的错误,继续恢复下一个表。
2. indexes参数
在恢复数据的过程中,若indexes=n,则表上的索引不会被恢复
,但是主键对应的唯一索引将无条件恢复,这是为了保证数据
的完整性。
字符集转换
对于单字节字符集(例如US7ASCII),恢复时,数据库自动转
换为该会话的字符集(NLS_LANG参数);对于多字节字符集
(例如ZHS16CGB231280),恢复时,应尽量使字符集相同
(避免转换),如果要转换,目标数据库的字符集应是输出数
据库字符集的超集。
恢复方法
业务数据库采用表恢复方案。在用IMP进行恢复前,先在SYS
用户下运行CATEXP.SQL文件(如果以前已运行该文件,则
不要执行这个脚本),然后执行下列命令:
IMP ICDMAIN/ICD FILE=文件名 LOG=LOG文件名 ROWS=Y
COMMIT=Y BUFFER=Y IGNORE=Y TABLES=表名
注:要恢复的表名参照备份的表名
  。恢复是在原表基础上累加数据
  。没有特殊说明,不允许在客户端执行恢复命令

将一个数据库的某用户的所有表导到另外数据库的一个用户下面的例子  
exp userid=system/manager owner=username1 file=expfile.dmp
imp userid=system/manager fromuser=username1 touser=username2 ignore=y file=expfile.dmp

不同版本数据库的exp/imp问题[转贴] <script language="javascript" type="text/javascript">document.title="不同版本数据库的exp/imp问题[转贴] - "+document.title</script>

一般来说,从低版本导入到高版本问题不大,麻烦的是将高版本的数据导入到低版本中,在Oracle9i之前,不同版本Oracle之间的EXP/IMP可以通过下面的方法来解决:


1、在高版本数据库上运行底版本的catexp.sql;

2、使用低版本的EXP来导出高版本的数据;

3、使用低版本的IMP将数据库导入到底版本数据库中;

4、在高版本数据库上重新运行高版本的catexp.sql脚本。

但在9i中,上面的方法并不能解决问题。如果直接使用底版本EXP/IMP会出现如下错误:

EXP-00008: ORACLE error %lu encountered

ORA-00904: invalid column name

这已经是一个公布的BUG,需要等到Oracle10.0才能解决,BUG号为2261722,你可以到METALINK上去查看有关此BUG的详细信息。

BUG归BUG,我们的工作还是要做,在没有Oracle的支持之前,我们就自己解决。在Oracle9i中执行下面的SQL重建exu81rls视图即可。

SQL>CREATE OR REPLACE view exu81rls

(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)

AS select u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,

decode(bitand(r.stmt_type,1), 0,'', 'SELECT,')

|| decode(bitand(r.stmt_type,2), 0,'', 'INSERT,')

|| decode(bitand(r.stmt_type,4), 0,'', 'UPDATE,')

|| decode(bitand(r.stmt_type,8), 0,'', 'DELETE,'),

r.check_opt, r.enable_flag,

DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)

from user$ u, obj$ o, rls$ r

where u.user# = o.owner#

and r.obj# = o.obj#

and (uid = 0 or

uid = o.owner# or

exists ( select * from session_roles where role='SELECT_CATALOG_ROLE')

) ;
 
SQL>grant select on sys.exu81rls to public;



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

<script src="http://writeblog.csdn.net/PromoteIcon.aspx?Id=458698" type="text/javascript"></script>[ 点击此处收藏本文]   发表于 2005年08月19日 11:20:00

href="http://blog.csdn.net/cn_chenfeng/Services/Pingback.aspx" rel="pingback" /> <script type="text/javascript">function hide(){showComment();}</script>
<script type="text/javascript">document.write("");</script>

 

 
lunar 发表于2005-09-22 9:31 AM  IP: 211.100.21.*
1,使用低版本的exp
2,使用目标版本的imp
3,注意字符集

BTW:
不用“在高版本数据库上运行底版本的catexp.sql;”,只需要在低版本数据库或者客户端执行 exp user/user@high_db 。。。。。。就够了,其实就是第一句话“使用低版本的exp
利用RMAN转移数据和EXP/IMP转移数据的实测比较 <script language="javascript" type="text/javascript">document.title="利用RMAN转移数据和EXP/IMP转移数据的实测比较 - "+document.title</script>

由于工程需要经常将客户的现场数据导出到公司的开发环境中,随着客户现场数据量的不断增大,原先

使用的导出导入的方法需要花费越来越长的时间,所以测试一下RMAN的效率,验证是否能用恢复RMAN备

份的方法来代替以往的EXP/IMP方法。原本想过用传输表空间的方法,但是由于我们通常在创建数据库的

时候就给业务所用的表空间创建了很大的数据文件,这样在传输表空间的copy数据文件的步骤上会花费

很长的时间,所以还是决定测试一下RMAN了。

测试目的:
实现对于JHJKREC用户的数据转移。

在10.101.48.71机器上测试。
测试环境:
P42.8G单CPU,1G内存,80G单硬盘,Windows 2000 Server,Oracle817

跟JHJK用户相关的数据文件的总共大小为:21.4G
其中JHJKREC用户的对象总共大小为:2.1G

1。RMAN作full备份,用时20分钟,生成文件大小5.47G
EXP作JHJKREC用户数据导出,用时2分20秒,生成文件大小546M

2。RMAN作数据恢复,用时23分钟(包括restore数据文件,recover数据库)
IMP作JHJKREC用户数据导入,用时55分钟

3。RMAN备份在非归档模式下需要关闭数据库然后启动数据库到mount状态
EXP在非归档模式下不需要关闭数据库,但是数据表本身是不一致的

结论:
利用RMAN备份的时间明显长于EXP的时间,备份出的文件也远大于EXP出的文件
但是恢复的时间却要少于IMP所需要的时间。

利用RMAN恢复,还需要备份控制文件,而且由于是非归档模式,还需要检查当前能够恢复到的最大SCN,然后在SQLPLUS中recover database until change scn,然后再alter database open resetlogs,整个操作比EXP/IMP繁琐,对于现场业务人员来说可能较为困难,所以使用RMAN还是使用导出导入作数据转移,还是见仁见智吧。

以下为测试中RMAN和导出导入使用的命令,基本上没有作任何优化。

RMAN的备份脚本:
@@connect.rcv
# Backup up database at full level
#
shutdown immediate;
startup mount;
run{
 allocate channel d1 type disk;
 set limit channel d1 kbytes 2097150;
 backup full database
  format 'E:/rman_bak/dbfull_%d_%s_%p_%t'
  tag='dbfull';
 release channel d1;
}
alter database open;
exit;

RMAN的恢复脚本:
@@connect.rcv
shutdown immediate;
startup mount;
run {
     sql "alter session set nls_date_language=AMERICAN";
     sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";
     set until time '2004-9-7 15:30:00';
     allocate channel ch1 type disk;
     restore database;
     release channel ch1;
}
exit;

EXP的脚本:
userid=jhjkrec/jhjkrec
file=e:/rman_bak/jhjkrec.dmp
owner=jhjkrec
direct=n
compress=n
feedback=1000

IMP的脚本:
userid=jhjkrec/jhjkrec
file=e:/rman_bak/jhjkrec.dmp
ignore=y
fromuser=jhjkrec
touser=jhjkrec
feedback=1000

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值