拓扑园

  • O&M
    • Universal部署
    • PHP+VUE+Laravel相关
  • Oracle性能优化
  • Oracle项目案例
    • Oracle近期项目案例(目录)
    • Oracle实战问题解析(目录)
    • Oracle数据库名变更流程(2种方式)
    • Oracle数据库目录更换流程(使用Oracle的clone工具)
    • Oracle数据库迁移方案(目录)
    • 标准化文档系列
  • Oracle基础知识
    • LLL的Oracle培训(分类)
    • LLL的docker培训(分类)
    • 标准化文档系列--(分类)
    • Oracle核心经典分析(分类)
    • 图灵小队----(分类并包含以下文章)
    • --MySQL8.0/Oracle/Memcached/Redis等安装配置于RHEL/OL6/7/8.X系列-运行环境最优配置
    • --PG安装配置于RHEL/9X系列-运行环境最优配置
    • --自动维护任务详解-开启、关闭信息统计收集(统计信息)
    • --图灵小队—Oracle/PostgreSQL下创建一个用户测试表(自行定义数据行)
    • --图灵小队-Oracle存储过程导出表的明细_UTL_FILE(文章)
    • --图灵小队-Oracle数据库删除/卸载操作指南(文章)
    • --图灵小队-Oracle常用性能查询SQL语句(文章)
    • --图灵小队-Oracle数据库上线前检查(文章)
    • --图灵小队-Oracle常用SQL语句(文章)
    • --图灵小队—Linux/Oracle脚本/MySQL合集(持续更新)
    • --图灵小队-Oracle技巧记录(文章)
    • ADG
    • RAC
    • ASM
    • OGG
    • RMAN
    • EXPDP/IMPDP
    • 工厂数据导入导出系列
  • MySQL
    • MySQL数据库规范
    • MySQL项目案例
    • MySQL安装配置
    • MYSQL集群项目
    • MySQL常见处理
    • MySQL-Sysbench专题
    • MySQL-Percona Toolkit专题
  • Linux
    • Shell编程
    • kubernetes
    • docker
    • Linux
    • PHP
    • Nginx
    • haproxy
    • mail
    • 网站
    • 域名
    • 网址收藏
  • 数据中心
    • 新框架系统集合
    • 工作文档
    • EBS数据文件扩容
    • VMware虚拟化
    • EBS系列
    • 大数据
    • SVN
    • zabbix
    • SAP
    • 备份相关
    • FC交换机
    • SVN
  • K-Studing
    • D8-Python学习
    • Oracle/MySQl等面试题
    • LG-MySQL
    • LG-Docker/K8S
    • LG-PostgreSQL
    • LG-ORACLE_BBED
    • LG-ORACLE
    • LG-Elasticsearch(ES)+ELK
    • Oracle-19C-OCP
    • WERN_ORACLE培训
    • redis数据库
    • Nginx培训学习系列
  • 其他
    • 外研英语4年级下册-听力
    • 影视系列
    • 如何使用iTunes软件通过抓包下载旧版本的ios的app
天高任鸟飞
Oracle/MySQL数据库恢复/数据迁移/生产规范报告技术交流:TEL:18562510581(微信同号);加微信入群
  1. 首页
  2. Oracle
  3. 正文

ORACLE——RMAN——异机恢复(不完全恢复)-OA(目的端为新搭建和源端相同数据库版本,但数据、配置存放目录不同)

2019年10月28日 1428点热度 0人点赞 0条评论

一、环境:

    源端服务器:CentOS release 6.8 (Final)+Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

    目的服务器:CentOS release 6.8 (Final)+Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

    区别:oracle的安装目录略有不同:

源端服务器:

目标服务器:和原服务器放置数据文件、日志文件等路径不一致,所以需要在恢复时进行特别转换--见二-10中的脚本

二、恢复

    1、根据spfile备份文件(strings)编辑pfile文件

    a、导出spfile文件

[oracle@template RMANBAK_OA]$ strings Spfile_ORAECOLO_3891698553_20191104_114_1_1.bak 
}|{z
ORAECOLOV
TAG20191104T050112
ORAECOLOGY
oraecology.__db_cache_size=654311424
oraecology.__java_pool_size=16777216
oraecology.__large_pool_size=16777216
oraecology.__oracle_base='/home/oracle/app'#ORACLE_BASE set from environment
oraecology.__pga_aggregate_target=24813502464
oraecology.__sga_target=2147483648
oraecology.__shared_io_pool_size=0
oraecology.__shared_pool_size=1358954496
oraecology.__streams_pool_size=33554432
*.audit_file_dest='/home/oracle/app/admin/oraecology/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/home/oracle/app/oradata/oraecology/control01.ctl','/home/oracle/app/oradata/oraecology/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='oraecolo'
*.db_recovery_file_dest_size=107374182400
*.db_recovery_file_dest='/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/'
*.db_unique_name='oraecology'
*.diagnostic_dest='/home/oracle/app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=oraecologyXDB)'
*.open_cursors=1000
*.pga_aggregate_target=24811405312
*.processes=500
*.remote_login_passwordfile='EXCLUSIVE'
*.session_cached_cursors=300
*.sga_target=2147483648
*.undo_tablespace='UNDOTBS1'
/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/spfileoraecology.ora

    b、根据spfile文件编辑pfile;

    查看上述strings spfile文件中的adump、control01.ctl、control02.ctl、dbs路径,并进行核对修改(如果目的路径和源路径一致,则不需要修改)

    /adump:/home/oracle/app/oracle/admin/oraecology/adump

    /control01.ctl:/home/oracle/app/oracle/oradata/oraecology/control01.ctl

    /control02.ctl:/home/oracle/app/oracle/fast_recovery_area/oraecology/control02.ctl

    /dbs:/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/

   echo $ORACLE_BASE:/home/oracle/app/oracle/

    diagnostic_dest='/home/oracle/app/oracle/'

[oracle@template dbs]$ vim initoraecology.ora 
oraecology.__db_cache_size=654311424
oraecology.__java_pool_size=16777216
oraecology.__large_pool_size=16777216
oraecology.__oracle_base='/home/oracle/app/oracle/'#ORACLE_BASE set from environment
oraecology.__pga_aggregate_target=24813502464
oraecology.__sga_target=2147483648
oraecology.__shared_io_pool_size=0
oraecology.__shared_pool_size=1358954496
oraecology.__streams_pool_size=33554432
*.audit_file_dest='/home/oracle/app/oracle/admin/oraecology/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/home/oracle/app/oracle/oradata/oraecology/control01.ctl','/home/oracle/app/oracle/fast_recovery_area/oraecology/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='oraecolo'
*.db_recovery_file_dest_size=107374182400
*.db_recovery_file_dest='/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/'
*.db_unique_name='oraecology'
*.diagnostic_dest='/home/oracle/app/oracle/'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=oraecologyXDB)'
*.open_cursors=1000
*.pga_aggregate_target=24811405312
*.processes=500
*.remote_login_passwordfile='EXCLUSIVE'
*.session_cached_cursors=300
*.sga_target=2147483648
*.undo_tablespace='UNDOTBS1'

2、加载数据库

RMAN> startup nomount pfile="/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initoraecology.ora";

image.png

3、加载控制文件(可以加载最新控制文件)

RMAN> restore controlfile from "/home/BACKUP/RMANBAK_OA/control_ORAECOLO_3891698553_20191112_252.bak";

image.png

对两个控制文件都进行了还原/

4、挂载数据库:

RMAN> alter database mount;

5、检查备份

RMAN>crosscheck backup;

image.png

6、删除过期文件

RMAN>delete noprompt expired backup;

再次查看已经删除

RMAN>crosscheck backup;

image.png

7、转储restore前准备

因为不知道之前的还原目录和文件名称是什么,所以需要直接restore进行检验

经测试:

发现原路径为:

(1)/home/oracle/app/oradata/oraecology/undotbs01.dbf

(2)/home/oracle/app/oradata/oraecology/system01.dbf

(3)/home/oracle/app/oradata/oraecology/sysaux01.dbf

(4)/home/oracle/app/oradata/oraecology/users01.dbf

(5)/home/oracle/app/oradata/oraecology/system01.dbf

而本目的路径为:

(1)/home/oracle/app/oracle/oradata/oraecology/undotbs01.dbf

(2)/home/oracle/app/oracle/oradata/oraecology/system01.dbf

(3)/home/oracle/app/oracle/oradata/oraecology/sysaux01.dbf

(4)/home/oracle/app/oracle/oradata/oraecology/users01.dbf

(5)/home/oracle/app/oracle/oradata/oraecology/system01.dbf

下一步进行转换。

image.png

8、转储(还原)数据(restore database)——因为控制文件中,源端的dbf文件路径和目的端dbf文件路径不一致,所以需要用set newname for datafile更改路径到当前真实路径

run{
allocate channel a1 device type disk;
allocate channel a2 device type disk;

SET NEWNAME FOR DATAFILE    '/home/oracle/app/oradata/oraecology/undotbs01.dbf' to '/home/oracle/app/oracle/oradata/oraecology/undotbs01.dbf';
SET NEWNAME FOR DATAFILE    '/home/oracle/app/oradata/oraecology/system01.dbf' to '/home/oracle/app/oracle/oradata/oraecology/system01.dbf';
SET NEWNAME FOR DATAFILE    '/home/oracle/app/oradata/oraecology/sysaux01.dbf' to '/home/oracle/app/oracle/oradata/oraecology/sysaux01.dbf';
SET NEWNAME FOR DATAFILE    '/home/oracle/app/oradata/oraecology/users01.dbf' to '/home/oracle/app/oracle/oradata/oraecology/users01.dbf';
restore database;
switch datafile all;
release channel a1;
release channel a2;
}

restore完成:

image.png

image.png

9、恢复文件(recover):不完全恢复:

recover恢复增量备份中的1级增量文件、同时还原archilog备份文件到flash_recovery(根据initnc.ora路径/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/ORCL/archivelog)

RMAN> sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";

RMAN> recover database until time '2019-10-27 04:00:00';

10、不完全恢复,出现报错,解决

不完全恢复会出现这个问题

Starting recover at 13-NOV-19

using channel ORA_DISK_1

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of recover command at 11/13/2019 10:24:27

RMAN-06555: datafile 1 must be restored from backup created before 12-NOV-19

image.png

image.png

(1)退出RMAN

RMAN> exit

(2)进入sql,创建spfile(当前是以pfile文件initoraecology.ora启动,未从spfile启动;下面执行语句需要以sfpile启动),

SQL>  create spfile from pfile='/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initoraecology.ora';

SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile;

image.png

(3)创建spfile后,如果要以spfile文件启动,需要shutdown immediate并再startup mount数据库,再进行更改系统设置(_allow_resetlogs_corruption_true)

SQL> shutdown immediate;

SQL> startup mount;

SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile;

image.png

(4)更改完成后,重新shutdown immediate,并startup mount;

SQL> startup mount;

SQL> shutdown immediate;

image.png

(5)打开数据库,并加resetlogs

SQL> alter database open resetlogs;——至此,已经recover成功,需要单独处理redo01.log,redo02.log,redo03.log

image.png

11、处理redo01.log,redo02.log,redo03.log 问题。

原因:

    a、还原的源端数据库记录的redo01.log在/home/oracle/app/oradata/oraecology/中。

    但是目的端数据库记录在/home/oracle/app/oracle/oradata/oraecology/中,需要对此数据路径更改即可。

查看路径:SQL>select * from v$logfile;

image.png

    b、在sql环境下执行更改语句,在数据库只mount状态下执行

    SQL>alter database rename file '/home/oracle/app/oradata/oraecology/redo01.log' to '/home/oracle/app/oracle/oradata/oraecology/redo01.log';

    SQL>alter database rename file '/home/oracle/app/oradata/oraecology/redo02.log' to '/home/oracle/app/oracle/oradata/oraecology/redo02.log';

    SQL>alter database rename file '/home/oracle/app/oradata/oraecology/redo03.log' to '/home/oracle/app/oracle/oradata/oraecology/redo03.log';

执行后,查看路径:SQL>select * from v$logfile;已经更改完毕

image.png

   12、执行打开数据库:redo02.log出现being cleared问题。

SQL> alter database open resetlogs;

image.png

    -- 查看00392的故障描述信息:

    SQL> ho oerr ora 00392

    ---查看当前日志信息:下面的SQL语句表名3个日志文件都处于clearing_current状态,进行清理

SQL>  select group#,bytes/1024/1024||'M',status from v$log;

image.png

    --执行CLEAR LOGFILE命令

SQL> ALTER DATABASE CLEAR LOGFILE GROUP 1;

SQL> ALTER DATABASE CLEAR LOGFILE GROUP 2;

SQL> ALTER DATABASE CLEAR LOGFILE GROUP 3;

image.png

 --执行完后,再查看,已经恢复正常

SQL>  select group#,bytes/1024/1024||'M',status from v$log;

image.png

13、再次打开数据库(不完全恢复),成功。

image.png

14、注意:关于上述使用隐含参数“_allow_resetlogs_corruption",有如下隐患:

当数据库中某些数据文件损坏,而从备份恢复这个文件所需的某个(或某些)联机日志文件或归档日志文件丢失时,只能把这些文件部分恢复,从而与数据库中其他文件不同步,我们可以通过下面的步骤还原并打开数据库:

{

1、用之前的备份恢复损坏的数据文件。

2、尽量还原损坏的文件。

3、把数据库启动到nomount。

4、用SQL命令重建控制文件(要求之前用“alter database backup controlfile to trace”做过控制文件的文本备份)

5、设置隐含参数:alter system set “_allow_resetlogs_corruption”=true scope=spfile;

6、然后关闭数据库,用下面命令重启:alter database open resetlogs

}

 

这时,数据库可以打开。但是数据库中的数据可能不一致,某些查询如果涉及这些不一致的数据,会遇到ora-600错误(最常见的是2662错误)。

打开数据库后,我们可以从部分恢复的数据文件及其他正常数据文件中导出尽可能多的数据,然后重建数据库,导入之前导出的数据,从而让损失降低到最小。

设置这个隐含参数后,要使用resetlogs选项打开数据库,隐含参数才会生效,否则Oracle在打开数据库时会忽略此参数。

Oracle告诉我们,强制resetlogs跳过了一致性检查,可能导致数据库损坏,数据库应当重建。通常使用此方法Open数据库之后,应该立即通过导出、导入重建数据库。

检验上述问题:

恢复后能打开数据库的原始是加入了隐含参数“_allow_resetlogs_corruption”,因此数据库打开时,会忽略数据一致性检查,所以我们需要重新把隐含参数去掉:

 (1)查看当前sfpile文件:可以看到_allow_resetlogs_corruption=TRUE

    image.png

 (2)关闭数据库:shutdown immeidate

 (3)删除当前spfile文件:

image.png

(4)进入sql,用pfile启动,并创建spfile,打开数据库并未报错。

SQL> startup nomount pfile="/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initoraecology.ora";

image.png

查看最新sfpile,_allow_resetlogs_corruption参数已经不存在了

image.png

(5)重新关闭数据库,再正常打开,此时加载的方式,加载的是spfile,默认有了数据一致性校验,所以我们至此恢复的数据时一致的。

image.png

image.png

查看SCN,三者一致,则ok。

select file#,to_char(checkpoint_change#,'99999999999999') from v$datafile;

select file#,online_status,to_char(change#,'99999999999999') from v$recover_file;

select file#,to_char(checkpoint_change#,'99999999999999') from v$datafile_header;

image.png

15、注意:temp01(临时表空间)文件在RMAN中不会自动恢复的,看下图:

(1)查看临时表空间:

SQL> select tablespace_name, file_name from dba_temp_files;

image.png

(2)目标数据库:temp01.dbf,时间仍然是早期的文件,并未被恢复到Nov 13这一天的。

image.png

(3)下图是还原时的文件,可以看出,并不包含temp01.dbf 文件。

image.png

(4)登录sql 查看,发现数据库中并不能查出符合条件的临时表空间(因当前环境中没有/home/oracle/app/oradata/oraecology目录)

原因是控制文件中记录的的临时表空间的数据位置是在/home/oracle/app/oradata/oraecology,而不是在/home/oracle/app/oracle/oradata/oraecology中;所以可以通过创建新的临时表空间linshi_temp,并将linshi_temp设置为默认表空间,并删除原temp表空间。

    a、--删除整个临时表空间及数据文件(无法直接删除)

    SQL>drop tablespace temp including contents and datafiles;

image.png

    无法直接删除,重新创建其他临时表空间nc_temp

    b.删除原temp01.dbf文件

image.png

   c、并创建新temp01.dbf:

SQL>create temporary tablespace linshi_temp tempfile '/home/oracle/app/oracle/oradata/oraecology/temp01.dbf' size 50m  autoextend on next 50m maxsize 2480m extent management local;

image.png

    b.将临时表空间进行更改:

    SQL>alter database default temporary tablespace linshi_temp;

image.png

    c、查看当前表空间文件

    select tablespace_name,status,contents from dba_tablespaces;

image.png

    c.再删除原报错表空间:

    SQL>drop tablespace temp including contents and datafiles;

image.png

image.png

   d.再查看临时表空间

   SQL> select tablespace_name, file_name from dba_temp_files;

image.png

总结:

从上面的测试发现,当数据库中temp表空间中的数据文件损坏或丢失情况下,使用rman是无法进行恢复的。

可以通过,直接重启数据库,或者新建临时表空或者新增tempfile方法进行修复。

image.png

 

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2021年4月2日

admin

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2022 拓扑园. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021020523号

鲁ICP备2021020523号