A、EXPDP要点
1、以 ORACLE 操作系统账号,登录到数据库服务器上执行。
2、EXPDP 命令中,这些参数很重要:DIRECTORY,
DUMPFILE, LOGFILE, CLUSTER, EXCLUDE, SCHEMAS,VERSION。
2.1、DIRECTORY 参数,说明输出文件(两参数 dumpfile 和 logfile)的存放路径,此参数值必须先在数据库里创建,如: create or replace
directory expdp_dir as ‘/backup/expdp’; 此命令告诉数据库,在操作系统下有一目录:
/backup/expdp,当我们在导出命令里设置此参数值,directory=expdp_dir 时,导出命令将把两类文件(dumpfile和 logfile的值),保存在 /backup/expdp 目录下。
在创建了目录值:expdp_dir 后,记得授权给,用于导出操作的某个数据库用户。一般情况下,为了省事,我们会把该目录的所有权限,授予给所有用户: grant all on
directory expdp_dir to public;
2.2、DUMPFILE 参数,用于说明,保存数据的 DMP 文件的名称。
2.3、LOGFILE 参数,用于说明,导出操作的整个过程的输出日志名称。这个文件对后续导入DMP文件的操作,很有指导意义。因此,切记把DMP文件和LOG文件,一起交给使用者。
2.4、SCHEMAS 参数,用于说明,要导出的用户名;多个用户之间,用逗号分开,如:SCHEMAS=USER1,USER2,,
2.5、EXCLUDE 参数,用于说明,导出时,要排除掉哪些对象,或者哪类对象,比如:可以排除掉视图:所有视图都不导出。或者指定的表名,也就是不导出某个表,某些表等。或者某类特征的表,比如:TMP开头的表。如:
exclude=table:“like \‘TMP%\’ ”,statistics,就是说,不导出统计信息,也不导出以TMP 开头的表。
2.6、CLUSTER,该参数只用于 RAC 环境,意思是,导出/导入操作,是否在多实例上执行?默认是Y,建议改成N,表示只在当前实例执行: 因为 CLUSTER=Y 时,很容易出错,且效率未必比单实例上执行的高。
2.7、VERSION,该参数说明,要导入的目标库的版本,比如:导出的数据库是19C,要导入的目标库是11G,由于 11G 版本,比19C版本老,19C版本上的一些新特性,11G版本没有,此时,导入操作将失败,因此,在导出时,就告诉导出操作,目标数据库的版本是多少?这样,导出操作将只选择11G版本能接受的特性导出,避免在11G版本上,导入失败。
一句话总结:低版本数据库的DMP文件,可以导入到高版本数据库中,比如:11G版本导出的DMP文件,可以正常导入到19C;但高版本的DMP文件,无法导入到低版本数据库,此时,导出时,需要参数 VERSION 说明目标数据库的版本。
补充:
2.8、COMPRESSION,说明,要对哪些导出对象进行压缩,包括:ALL(全压缩),DATA_ONLY(只压缩导出数据),
METADATA_ONLY(只压缩元数据),NONE(不压缩)。建议选择:ALL (全压缩),节省空间,加快数据传输。
2.9、PARALLEL,说明,导出操作的并行度,目的是加快操作。如:PARALLEL=4。
2.10、FILESIZE,说明导出文件的最大尺寸,超过了,就生成新的文件。如:FILESIZE=4g,要求生成的文件尺寸,不能超过4G。使用此参数时,通常会对 DUMPFILE 参数指定的文件名,后缀新增: _%U,以确保产生多个DMP文件时,文件名唯一。
B、EXPDP脚本案例(Linux)
export=var_bak_date=`date +%Y%m%d%H%M`
expdp "'/ as sysdba'"
directory=expdp_dir dumpfile=expdp_${var_bak_date}_%U.dmplogfile=expdp_${var_bak_date}.log schemas=HYSHR,GSLTD,HYMCexclude=table:\"
like \'TMP%\'\", statistics compression=all cluster=n parallel=2 filesize=4g
version=11.2.0.4
1、以 ORACLE 操作系统账号,登录到数据库服务器上执行,
2、dmp 文件名,是以 expdp 开头, 中间用当时的时间(年月日时分),以_1、_2 等结尾;log文件名没此结尾,
3、导出文件:*.dmp,*.log,保存在 expdp_dir 目录参数所指定的位置,
4、按用户导出,有3个用户:HYSHR、GSLTD、HYMC,
5、不导出对象的统计信息,不导出以TMP 开头的表,
6、导出时,对所有数据进行了压缩,
7、脚本带了 cluster=n,不走集群模式导出,不过因为是单节点数据库,此参数在此无意义,
8、每个文件dmp最大尺寸为4G,
9、并行度为2,意味着会同时创建2个dmp文件,
10、目标数据库的版本是11204,
11、此脚本在19.5的单节点数据库上成功执行,
12、导出结束后,记得检查下导出日志,看看是否存在什么错误?得先确保导出正常结束,导入才可能正常执行。
C、IMPDP要点
1、目标数据库最好和源数据库同一个数据库版本(若源库打了补丁,目标库也尽量打上),或者比源版本高。
2、以 ORACLE 操作系统账号,登录到数据库服务器上执行。
3、在执行导入前,先在目标数据库里创建好目标用户使用的表空间,最好和源表空间同名,且尺寸足够(可以先到源库上查询源账号占用的磁盘尺寸),且创建好和源账号匹配的目标用户,授予足够权限(参照源账号被授予的角色、权限)。
4、这些参数很重要:DIRECTORY,DUMPFILE,LOGFILE,CLUSTER,EXCLUDE,SCHEMAS,REMAP_SCHEMA,TRANSFORM,
4.1、DIRECTORY,DUMPFILE,LOGFILE,CLUSTER的意义,和EXPDP的一样。
4.2、SCHEMAS 参数,用于说明,要导入的用户名;多个用户之间,用逗号分开,如:SCHEMAS=USER1,USER2,, ,
4.3、REMAP_SCHEMA 参数,用于说明源用户和目标用户名不匹配时的对应关系:导出是USER1,要导入到USER2中时,就得用着参数说明: USER1:USER2,多个用户时,得一一说明;显然,若源和目标同名时,则不需要说明。
4.4 、REMAP_TABLESPACE参数,用于说明源用户所分配的表空间名,和目标用户所分配的表空间名,不匹配时的对应关系:TS1:TS2,TS3:TS4(源TS1,目标TS2;源TS3 ,目标TS4);显然,若源和目标同户名时,则不需要说明。
4.5、TRANSFORM 参数,用于说明,对象到新库时的命名规则或一些转换关系。比如:一些LOB字段,创建时对应的段名,及其索引名,ORACLE会使用了内部的一些SEQ值来确保唯一;当这些值导入库时,若用回原始名,则可能会和目标库中的一些对象,因同名冲突而导入失败;此时,必须使用transform=oid: n,知会ORACLE,使用新库中的SEQ来避免冲突,并确保唯一;又如当目标用户使用的表空间,和源用户的表空间名并不一致,但又不知道源表空间的名称时,则可以配置:transform=segment_attributes: n,知会ORACLE,对于源用户的任意表空间,都用目标用户的默认表空间来匹配。
D、IMPDP脚本案例(Linux)
impdp "'/ as sysdba'"
directory=expdp_dir dumpfile=expdp_202207251715_%U.dmp logfile=imp_expdp_202207251715.log
schemas=HYSHR,GSLTD remap_schema=HYSHR:
HYSHR1,GSLTD:GSLTD1 exclude=table:\" like
\'TMP%\'\"
cluster=n parallel=2 transform=oid:n, segment_attributes:n
1、以ORACLE 操作系统账号,登录到数据库服务器上执行,
2、在 expdp_dir 目录参数所指定的位置,读取:*.dmp数据源;同时,也是在该目录下,保存导入过程的日志文件,
3、两个dmp 文件名,以_1、_2结尾,为了不把两文件都罗列出来,还是照样用_%U 来说明,
4、只导入两用户:HYSHR、GSLTD,在目标库中,分别对应 HYSHR1、GSLTD1来匹配,
5、不导入以 TMP 开头的表(导出时,没导出统计信息,此时,若此参数带统计信息,则会报错),
6、cluster=n,这是照抄,
7、transform=old:n,照抄,
8、transform=segment_attributes:n,若前后表空间名不匹配,则使用目标用户的默认表空间来保存数据,建索引等,
9、此脚本在11204的单节点数据库上成功执行,
10、导入结束后,记得检查下导入日志,看看是否存在什么错误?有些错误可以忽略,有些错误必须修复才能使用,问题严重时,得删掉,重头再来。