Skip to content

Oracle 数据备份-还原

背景

公司有三方系统使用了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  &

    注意:

    1. compression 压缩(控制大小)
    2. full 全库,如果你知道那个schema 也可以通过schemas=xxx
    3. filesize 文件大小,请根据你的需求来,这里备份500G的库,大概限制到20G 一个文件
    4. parallel 并行处理,这个一定要用,效率
    5. 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)。

发表评论

电子邮件地址不会被公开。 必填项已用*标注