因工作需要,需要前期作技术准备,目前将学习过的三种数据迁移,简单总结一下,以便后阅。
1、数据库冷备份。
此种方法最简单,简单来说,就是将数据库 shutdown immediate; 然后将数据库的数据目录全部备份走,一般是sid名字+Data的那个目录。
缺点:需要停机,而且有个硬性要求:数据库版本必须一致,至于平台,没有测试,估计庆该不影响,只要版本一致就行。
优点:傻瓜化,简单。
2、利用业务时间学了快一周的rman。
这个工具是recovery manager 的缩写,个人认为它用业做数据备份比较合适。
网上有一种备份方法:
周日做0级备份(和全量备份一样,不过可以在它基础上再做一级、二级备份)。
周一做2级备份,
周二做2级备份。
周三做1级备份,
周四做2级备份,
周五做2级备份,
周六做2级备份。
这样的话可以减少全量文件生成的大小,而且备份的时候,比如,周二需要恢复的话,只需要用到周日做的备份文件和周一的2级备份文件,如果周五需要恢复的话,只需要用到周日的备份文件,周三的备份文件和周四的备份文件即可。具体的使用方法请看自己在百度云内备份的视频。
当然,它的功能相当强大,只要有全备,可以把oradata目录里的文件全部删除,也可以恢复回来。具体恢复方法,网上很多,只要记住可以就行了,具体实施的时候,搜一下,按实施的方法进行即可。
缺点:复杂,需要学习的东西很多。必须在archivelog模式下运行,noarchivelog模式下貌似也可以用,但是生产环境的话,最好开启archivelog。
优点:功能强大,很强大。可以配合定时任务来做数据备份。
3、用数据泵expdp/impdp来进行导入导出。
可以跨平台,跨版本来进行数据的导入导出。这次的IDS迁移准备用数据泵来处理。因为跨平台,跨版本,用这个来进行数据迁移。
这里有一篇文章写的非常详细:
https://www.cnblogs.com/promise-x/p/7477360.html
我们只用来导出指定表空间,加上spacenames=IDS_DATA ,导入的时候也加上这个参数即可。
缺点:暂时不知道。
优点:相对rman简单点。
ids导入导出脚本:
1,创建数据库目录
两端选择足够大的目录:
$ sqlplus / as sysdba
create directory dump_dir as '/xxx/xxx/dump';
select * from dba_directories; ----检查是否创建成功
2,导出
编辑导出参数文件
$ vi exp.par
userid='/as sysdba'
DIRECTORY=dump_dir
DUMPFILE=dump_%U.dmp
logfile=dump_expdp.log
SCHEMAS=IDSDBA,user2,user3----需要导出的用户名,多个用户用英文逗号隔开
COMPRESSION=ALL
exclude=statistics
parallel=4
后台执行导数
$ nohup expdp parfile=exp.par &
3,导入,导入前在目标端创建好对应的表空间
编辑导入参数文件
vi impdp.par
userid='/as sysdba'
directory=dump_dir
dumpfile=dump_%U.dmp
logfile=dump_imp.log
SCHEMAS=IDSDBA,user2,user3
parallel=4
置后台跑
nohup impdp parfile=impdp.par &
---2018.8.31添加---
impdp 导入的时候,仅导入索引、主键等约束:
REMAP_TABLESPACE=源表空间:新表空间。这样就可以处理,索引在的老空间,直接导到新空间里,实现索引的导入。
impdp yxitywp/1qaz2wsx schemas=yxitywp directory=data_dir dumpfile=expdp.dmp logfile=impdp.log
REMAP_TABLESPACE=YXDATA:YXORCL_INDEX table_exists_action=skip include=index,constraint,comment