Oracle
数据库有三种标准的备份方法,它们分别是导出/导入(
EXP/IMP
)、热备份和冷备份。导出备件是一种逻辑备份,冷备份和热备份是物理备份。
Expdp impdp
参数说明:
Cmd
下键入
exp help=y
:
exp:
1
、
FULL
,这个用于导出整个数据库,在
ROWS=N
(
=Y
的时候会把数据导出)一起使用时,可以导出整个数据库的结构。
例如:
exp system/password file=./db_str.dmp log=./db_str.log full=y rows=n compress=y direct=y
2
、
BUFFER
和
FEEDBACK
,在导出比较多的数据时,我会考虑设置这两个参数。例如:
exp system/liuyi2002 file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT
3
、
FILE
和
LOG
,这两个参数分别指定备份的
DMP
名称和
LOG
名称,包括文件名和目录。
需要说明的是,
EXP
可以直接备份到磁带中,即使用
FILE=/dev/rmt0(
磁带设备名
)
,但是一般我们都不这么做,原因有二:
一、这样做的速度会慢很多,
二、现在一般都是使用磁带库的,不建议直接对磁带进行操作。至于
没有使用磁带库的朋友可以考虑和
UNIX
的
TAR
结合使用。
4
、
COMPRESS
参数将在导出的同时合并碎块,尽量把数据压缩到
initial
的
EXTENT
里,默认是
N
,一般建议使用。
DIRECT
参数将告诉
EXP
直接读取数据,而不像传统的
EXP
那样,使用
SELECT
来读取表中的数据,这样就减少了
SQL
语句处理过程。一般也建议使用。不过有些情况下
DIRECT
参数是无法使用的。
5
、
QUERY
参数后面跟的是
where
条件,值得注意的是,整个
where
子句需要使用
""
括起来,
where
子句的写法和
SELECT
中相同
exp system/liuyi2002 file=1.dmp log=1.log tables=test query="where c1=20 and c2=gototop"
6
、
OBJECT_CONSISTENT -
用于设置
EXP
对象为只读以保持对象的一致性。默认是
N
。
7
、
FLASHBACK_SCN
和
FLASHBACK_TIME -
用于支持
FLASHBACK
功能而新增。
8
、
RESUMABLE
、
RESUMABLE_NAME
和
RESUMABLE_TIMEOUT -
用于支持
RESUMABLE
空间分配而新增。
9
、
TTS_FULL_CHECK -
用于在传输表空间时使用依赖性检查。
10
、
TEMPLATE -
用于支持
iAS
。
11
、
TABLESPACES -
设置表空间导出模式。个人觉得对于一般用户而言,这个才是新增参数中最实用的一个,可以让用户在原来的
FULL
、
OWNER
、
TABLES
的基础上多了一种选择,使得
EXP
更加灵活。
imp:
1
、
FROMUSER
和
TOUSER
,使用它们实现将数据从一个
SCHEMA
中导入到另外一个
SCHEMA
中。
2
、
IGNORE
、
GRANTS
和
INDEXES
,其中
IGNORE
参数将忽略表的存在,继续导入,这个对于需要调整表的存储参数时很有用,我们可以先根据实际情况用合理的存储参数建好表,然后直接导入数据。而
GRANTS
和
INDEXES
则表示是否导入授权和索引,如果想使用新的存储参数重建索引,或者为了加快到入速度,我们可以考虑将
INDEXES
设为
N
,而
GRANTS
一般都是
Y
。
另外一个
EXP/IMP
都有的参数是
PARFILE
,它是用来定义
EXP/IMP
的参数文件,也就是说,上面的参数都可以写在一个参数文件中,但我们一般很少使用。
详细说明
一、
导出/导入(
Export
/
Import
)利用
Export
可将数据从数据库中提取出来,利用
Import
则可将提取出来的数据送回到
Oracle
数据库中去。
1、简单导出数据(
Export
)和导入数据(
Import
)
Oracle
支持三种方式类型的输出:
(1)、表方式(
T
方式),将指定表的数据导出。
表模式备份某个用户模式下指定的对象(表)。业务数据库通常采用这种备份方式。
若备份到本地文件,使用如下命令:
exp icdmain/icd rows=y indexes=n compress=n buffer=65536
feedback=100000 volsize=0
file=d:/exp.dmp
log=d:/exp.log
tables=test1,test2
若直接备份到磁带设备,使用如下命令
(UNIX)
:
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
注:在磁盘空间允许的情况下,应先备份到本地服务器,然后再拷贝到磁带。出于速度方面的考虑,尽量不要直接备份到磁带设备。
(2)、用户方式(
U
方式),将指定用户的所有对象及数据导出。
用户模式
备份某个用户模式下的所有对象。业务数据库通常采用这种备份方式。
若备份到本地文件,使用如下命令:
exp system/password owner=test 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
注:如果磁盘有空间,建议备份到磁盘,然后再拷贝到磁带。如果数据库数据量较小,可采用这种办法备份。
(3)、全库方式(
Full
方式),将数据库中的所有对象导出。
完全模式
备份完整的数据库。业务数据库不采用这种备份方式。备份命令为:
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
数据导入(
Import
)的过程是数据导出(
Export
)的逆过程,分别将数据文件导入数据库和将数据库数据导出到数据文件。
2、
增量导出/导入
增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为
SYSTEM
来导出。
在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为
export.dmp
,如果不希望自己的输出文件定名
为
export.dmp
,必须在命令行中指出要用的文件名。
增量导出包括三种类型:
(1)、“完全”增量导出(
Complete
)
即备份三个数据库,比如:
[table=400][tr][td][pre]exp
system/manager inctype=complete file=040731.dmp[/pre][/td][/tr][/table]
(2)、“增量型”增量导出备份上一次备份后改变的数据,比如:
[table=400][tr][td][pre]exp
system/manager inctype=incremental file=040731.dmp[/pre][/td][/tr][/table]
(3)、“累积型”增量导出累计型导出方式是导出自上次“完全”导出之后数据库中变化了的信息。比如:
exp system/manager inctype=cumulative file=040731.dmp
--
备注
1.
必须在
open
模式下
2.
坏块的处理:
可以
ALTER SYSTEM SET EVENTS='10231 trace name context forever,level 10' ;
再执行
exp
完成后关闭
10231
alter system set events='10231 trace name context off';
3
.一般来说,从低版本导入到高版本问题不大,麻烦的是将高版本的数据导入到低版本中,在
Oracle9i
之前,不同版本
Oracle
之间的
EXP/IMP
可以通过下面的方法来解决:
1
、在高版本数据库上运行底版本的
catexp.sql
;
2
、使用低版本的
EXP
来导出高版本的数据;
3
、使用低版本的
IMP
将数据库导入到底版本数据库中;
4
、在高版本数据库上重新运行高版本的
catexp.sql
脚本。