拓扑园

  • 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——异机恢复(不完全恢复)-NC(目的端为新搭建和源端相同数据库版本,但数据、配置存放目录不同)

2019年10月28日 1337点热度 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的安装目录略有不同:

源端服务器:

image.png

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

image.png

image.png

二、恢复

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

    a、导出spfile文件

[oracle@template RMANBAK]$ strings Spfile_ORCL_1517493832_20191028_622_1_1.bak 
}|{z
sZORCL
TAG20191028T141517
ORCL
orcl.__db_cache_size=922746880
orcl.__java_pool_size=16777216
orcl.__large_pool_size=16777216
orcl.__oracle_base='/home/oracle/app'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=24813502464
orcl.__sga_target=2147483648
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=1107296256
orcl.__streams_pool_size=16777216
*.audit_file_dest='/home/oracle/app/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/home/oracle/app/oradata/orcl/control01.ctl','/home/oracle/app/oradata/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_flashback_retention_target=10080
*.db_name='orcl'
*.db_recovery_file_dest='/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/'
*.db_recovery_file_dest_size=274877906944
*.diagnostic_dest='/home/oracle/app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.open_cursors=2000
*.pga_aggregate_target=24811405312
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=2147483648
*.streams_pool_size=134217728
*.undo_tablespace='UNDOTBS1'
/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/spfileorcl.ora

    b、根据spfile文件编辑pfile;

[root@template ~]# vim /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initnc.ora 
orcl.__db_cache_size=922746880
orcl.__java_pool_size=16777216
orcl.__large_pool_size=16777216
orcl.__oracle_base='/home/oracle/app'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=24813502464
orcl.__sga_target=2147483648
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=1107296256
orcl.__streams_pool_size=16777216
*.audit_file_dest='/home/oracle/app/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/home/oracle/app/oradata/orcl/control01.ctl','/home/oracle/app/oradata/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_flashback_retention_target=10080
*.db_name='orcl'
*.db_recovery_file_dest='/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/'
*.db_recovery_file_dest_size=274877906944
*.diagnostic_dest='/home/oracle/app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.open_cursors=2000
*.pga_aggregate_target=24811405312
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=2147483648
*.streams_pool_size=134217728
*.undo_tablespace='UNDOTBS1'

2、加载数据库

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

image.png

查找原因:

image.png

原因为:备份的spfile.ora文件中记录路径,目标端不存在,路径不一致,需要修改路径,所有的相关路径都需要进行修改

3、修改内容:

原NC的spfile的还原路径

image.png

更改后的路径:通过原spifle文件中的文件名称(如adump,或control01.cto),查找当前新环境的文件名称(如adump,或control01.ctl),更换为新环境的路径即可

image.png

(1)修改initnc.ora路径

orcl.__java_pool_size=16777216
orcl.__large_pool_size=16777216
orcl.__oracle_base='/home/oracle/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=24813502464
orcl.__sga_target=2147483648
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=1107296256
orcl.__streams_pool_size=16777216
*.audit_file_dest='/home/oracle/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/home/oracle/app/oracle/oradata/orcl/control01.ctl','/home/oracle/app/oracle/fast_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_flashback_retention_target=10080
*.db_name='orcl'
*.db_recovery_file_dest='/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/'
*.db_recovery_file_dest_size=274877906944
*.diagnostic_dest='/home/oracle/app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.open_cursors=2000
*.pga_aggregate_target=24811405312
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=2147483648
*.streams_pool_size=134217728
*.undo_tablespace='UNDOTBS1'

4、新问题:进行修改后,在进入rman target /,确无法进入,解决方案,见:https://www.topunix.com/post-1343.html

image.png

5、根据上述连接解决后,继续进行还原操作--重新加载数据库

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

image.png

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

RMAN> restore controlfile from "/home/BACKUP/RMANBAK/c-1517493832-20191028-01.ctl";

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

7、挂载数据库:

RMAN> alter database mount;

image.png

8、检查备份:

RMAN>crosscheck backup;

因没有此路径,所以全部显示过期,需要将备份数据放置此路径中。(所以在还原前,创建备份路径为控制文件中的备份路径)

image.png

当把备份文件全部考入到/home/BACKUP/RMANBAK/中后,重新执行5-6-7步,再进行检查备份,就显示avliable了

image.png

image.png

9、删除过期的备份

RMAN>delete  noprompt expired backup;

再次查看已经删除

RMAN>crosscheck backup;

image.png

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

run{
allocate channel a1 device type disk;
allocate channel a2 device type disk;
##set until sequence=4631 thread=1;
SET NEWNAME FOR DATAFILE    '/home/oracle/app/oradata/orcl/system01.dbf' to '/home/oracle/app/oracle/oradata/orcl/system01.dbf';
SET NEWNAME FOR DATAFILE    '/home/oracle/app/oradata/orcl/undotbs01.dbf' to  '/home/oracle/app/oracle/oradata/orcl/undotbs01.dbf';
SET NEWNAME FOR DATAFILE '/home/oracle/app/oradata/orcl/NNC_DATA01_2.dbf' to '/home/oracle/app/oracle/oradata/orcl/NNC_DATA01_2.dbf';
SET NEWNAME FOR DATAFILE    '/home/oracle/app/oradata/orcl/sysaux01.dbf' to '/home/oracle/app/oracle/oradata/orcl/sysaux01.dbf';
SET NEWNAME FOR DATAFILE    '/home/oracle/app/oradata/orcl/NNC_DATA01_1.dbf' to  '/home/oracle/app/oracle/oradata/orcl/NNC_DATA01_1.dbf';
SET NEWNAME FOR DATAFILE    '/home/oracle/app/oradata/orcl/NNC_INDEX02.dbf' to  '/home/oracle/app/oracle/oradata/orcl/NNC_INDEX02.dbf';
SET NEWNAME FOR DATAFILE    '/home/oracle/app/oradata/orcl/users01.dbf'     to  '/home/oracle/app/oracle/oradata/orcl/users01.dbf';
SET NEWNAME FOR DATAFILE    '/home/oracle/app/oradata/orcl/NNC_DATA02.dbf'  to  '/home/oracle/app/oracle/oradata/orcl/NNC_DATA02.dbf';
SET NEWNAME FOR DATAFILE    '/home/oracle/app/oradata/orcl/NNC_INDEX03.dbf' to  '/home/oracle/app/oracle/oradata/orcl/NNC_INDEX03.dbf';
SET NEWNAME FOR DATAFILE    '/home/oracle/app/oradata/orcl/NNC_DATA03.dbf'   to  '/home/oracle/app/oracle/oradata/orcl/NNC_DATA03.dbf';
SET NEWNAME FOR DATAFILE    '/home/oracle/app/oradata/orcl/NNC_INDEX01.dbf'  to '/home/oracle/app/oracle/oradata/orcl/NNC_INDEX01.dbf';
restore database;
switch datafile all;
release channel a1;
release channel a2;
}

RMAN>restore database;(如果控制文件中,源端的dbf文件路径和目的端dbf文件路径一致,可以直接使用restore database)

如下显示,如果源端dbf文件路径和目的端dbf文件路径不一致,会报如下错误)

image.png

也可以通过如下解决(增加路径):

根据错误提示,因为没有此目录,所以无法还原,所以需要创建目录(或者直接通过)

[root@template app]# mkdir /home/oracle/app/oradata

[root@template app]# mkdir /home/oracle/app/oradata/orcl

[root@template app]# chown oracle:oinstall /home/oracle/app/oradata/orcl/

再导入,报错:ORA-27072:File I/O error,经查询,是目录存储空间不足,进行扩容后,重新restor database;

 image.png

restore完成:

1572330830972787.png

1572330936891629.png

12、恢复文件(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:30:00'; ---找不到大量的archive log文件

RMAN> recover database until time '2019-10-27 04:20:00'; ---找不到少量的archive log文件.

RMAN> recover database until time '2019-10-27 04:00:00'; ---不缺少archive log文件,数据文件有问题,重新导入试试

此处需要加时间:

下图的错误是因为rman的0级备份+1级备份的时间点是截止到2019-10-27 04:00:00,如果还原到4:30,需要有更新的archivelog才可以

分析::datafile 1 must be restored from backup 原因为完全恢复导致,解决方法,见:https://www.topunix.com/post-1410.html中,二-10

image.pngimage.png

13、 RMAN>recover database until time '2019-10-28 04:00:00';

(1)执行完成

image.png

14、 RMAN>alter database open resetlogs(通常情况下,当我们基于不完全恢复的时候,日志文件需要被清空,而此时是正在被清空。)

    进行打开数据库:alter database open resetlogs 进行不完全恢复,出现报错:

原因:

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

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

image.png

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

image.png

    b、一定在sql执行,在数据库只mount状态下执行

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

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

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

执行后,查看路径:SQL>select * from v$logfile;

image.png

    c、执行上述文件后再执行打开数据库:redo02.log出现being cleared问题,

image.png

-- 查看故障描述信息:

SQL> ho oerr ora 00392

image.png

---查看当前日志信息:下面的SQL语句表名3个日志文件都处于clearing状态

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

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

image.png

16、创建spfile文件

    (1)直接create spfile from pfile 报错;

        SQL> create spfile from pfile;

     (2)因为我们startup nomount的pfile文件是initnc.ora,所以需要指定pfile路径

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

image.png

17、查看当前spfile,没有值,所以从pfile启动。

show parameter spfile;

image.png

18、关闭数据库,重启数据库,再查看

image.png

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

(1)根据登录前台服务会发现,提示缺少temp01.dbf文件

image.png

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

image.png

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

image.png

(4)登录sql 查看,发现数据库中并不能查出符合条件的临时表空间(因当前环境中没有/home/oracle/app/oradata/orcl目录),原因是控制文件中记录的的临时表空间的数据位置是在/home/oracle/app/oradata/orcl,而不是在/home/oracle/app/oracle/oradata/orcl中;所以删除temp表空间并重新创建

SQL> select tablespace_name, file_name from dba_temp_files;

image.png

(5)手动创建临时表空间:(这种rman恢复的环境,无法通过删除旧temp文件,并重启数据库解决)可以手动创建临时表空间——但同样报错

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

image.png

(6)查看当前表空间信息,temp表空间是online状态

    SQL> select tablespace_name,status,contents from dba_tablespaces;

 image.png

(7)查看临时表空间数据文件

image.png

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

    SQL>drop tablespace temp including contents and datafiles;

image.png

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

    a.创建其他表空间:

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

image.png

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

    SQL>alter database default temporary tablespace nc_temp;

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

    SQL>drop tablespace temp including contents and datafiles;

image.png

    d.重新测试完成了

image.png


    d.alter database default temporary tablespace temp1;



RMAN>  crosscheck archivelog all;+————检查归档日志

RMAN> delete noprompt archivelog until time "sysdate-1";——删除前一天之前归档日志

总结:

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

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

image.png

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

admin

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

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

文章评论

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

COPYRIGHT © 2022 拓扑园. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021020523号

鲁ICP备2021020523号