背景
公司有三方系统使用了oracle数据库,种种原因,需要从远程linux服务器中备份还原到本地环境中。
分析
开始以为是单机版本的Oracle,但是经过查看,发现是组了RAC (发现这个问题经过了N次报错)。
原始主机是linux,目标主机是windows。(公司外部专家要求一定是windows的oracle。)。
方案选择
还原方式两种:1. 使用expdp/impdp
,2. 使用RMAN备份还原
RMAN(同平台同版本跨版本 整库)
RMAN备份是ORACLE数据库自带的在线热备工具,使用RMAN不需要安装,可会数据块进行压缩和检测,可备份数据块的变化量,是数据块级别的备份解决方案。
缺点:若数据库中出现坏块,RMAN会自动检测坏块并跳过坏块,造成一定数据的丢。
expdp/impdp迁移 (所有表级、跨平台跨版本,后者为服务端,)
Oracle官方对此的形容是:Oracle DataPump technology enables Very High-Speed movement of data and metadata from one database to another.其中Very High-Speed是亮点。
最终,在各种报错虾,放弃了RMAN.(尝试失败!!!!)
https://blog.csdn.net/dsc1245/article/details/53508571
备份与还原
-
备份
# 创建目录 sql > create directory bak202206 as '/arch1/backup/202207'; # 授权备份目录 sql > Grant read,write on directory bak202207 to xxx; # 备份 [root@localhost ~]# nohup expdp xxx/xx directory=bak202207 dumpfile=expdp202207%U.dmp logfile=expdp202207.log full=y filesize=20G parallel=15 compression=all cluster=n > xxx.log &
注意:
- compression 压缩(控制大小)
- full 全库,如果你知道那个schema 也可以通过schemas=xxx
- filesize 文件大小,请根据你的需求来,这里备份500G的库,大概限制到20G 一个文件
- parallel 并行处理,这个一定要用,效率
- cluster 这个因为是RAC 所以需要添加。
-
还原
sql > create user xxx identified by xxx;
sql > CREATE OR REPLACE DIRECTORY T_DATA_DUMP_DIRS AS 'D:\dbbak';
sql > GRANT READ, WRITE ON DIRECTORY T_DATA_DUMP_DIRS TO xxx ;
# 这里需要创建原始库中的tablespace,具体大小在原始库中执行 `select TABLESPACE_NAME,count(TABLE_NAME) from all_tables group by TABLESPACE_NAME ;`
sql > create tablespace xxxx_xx datafile 'D:\database\xxx01.dbf' size 100M autoextend on next 1000M maxsize unlimited;
sql> grant unlimited tablespace to xxxx;
sql> grant create session to dznc;
sql> grant create table to dznc;
C:\Windows\system32> impdp xxx/xxx directory="T_DATA_DUMP_DIRS" dumpfile=expdp202207%U.dmp logfile=impdp202207.log;
总结
oracle 体系确实非常完善,但是确实比较笨重,整个过程遇到很多小坑,虽然都解决了,但是还是感受到oralce的厉害与对人员的要求。另外,真的不要跨操作系统进行数据库恢复,更不要500G甚至更大的数据库进行还原,文件拷贝都是一种痛苦。(压缩后150+G)。