数据库一般有两种常见故障

介质损坏

人为失误

防止介质损坏一般使用Data Guard等技术

防止人为失误,可以使用Oracle闪回功能.

但是人为失误一旦不能通过闪回恢复,就需要使用Rman恢复了。

使用Rman恢复,想想那个恢复速度和自己窘迫的样子还有里三层外三层的老板,领导,同事..

为了避免这个情况,可以使用另外一台服务器,做一个Oracle的还原库.

主库每隔一段时间,将归档日志推送至还原库的指定目录(scp,rsync,我们使用的是小花狸监控软件)

还原库每隔一段时间,应用归档日志.

也就是说,还原库的数据总是落后于生产数据库.类似于一个延迟的DataGuard。

我们配置的还原库落后于生产数据库6-9个小时.

从还原库恢复人为错误,一般可以控制在30分钟之内.

而从Rman异机恢复,估计需要4-5个小时.

制作还原库一般有下面几个步骤

1.卸载还原库已经存在的数据库(如果还原库存在数据库实例)

shutdown abort;

startup mount exclusive restrict;

alter system enable restricted session;

drop database;

2.使用Rman备份生产数据库

CONFIGURE DEVICE TYPE DISK PARALLELISM 5 BACKUP TYPE TO BACKUPSET;

sql 'alter system archive log current';

BACKUP AS COMPRESSED BACKUPSET DATABASE ;

3.在$ORACLE_HOME/dbs目录下,新建一个文件(init$SID.ora)

文件内仅仅有一行SID的配置

db_name=mvbox

4.恢复spfile

先从Rman备份中,恢复spfile

[oracle@localhost/data/IP/2015_09_25]$rman target /

Recovery Manager: Release 10.2.0.4.0 - Production on Fri Sep 25 17:26:40 2015

Copyright (c) 1982, 2007, Oracle. All rights reserved.

connected to target database (not started)

RMAN> startup nomount;

Oracle instance started

Total System Global Area 171966464 bytes

Fixed Size 2082496 bytes

Variable Size 113248576 bytes

Database Buffers 50331648 bytes

Redo Buffers 6303744 bytes

RMAN> restore spfile to '/home/oracle/app/oracle/product/10.2.0/db_1/dbs/spfilemvbox.ora' from '/data/IP/2015_09_25/o1_mf_nnsnf_TAG20150925T134231_c09s9rq2_.bkp';

Starting restore at 25-SEP-15

using channel ORA_DISK_1

channel ORA_DISK_1: autobackup found: /data/IP/2015_09_25/o1_mf_nnsnf_TAG20150925T134231_c09s9rq2_.bkp

channel ORA_DISK_1: SPFILE restore from autobackup complete

Finished restore at 25-SEP-15

将spfile转换为pfile,然后修改相关的目录

create pfile='/tmp/pfile.ora' from spfile;

vim /tmp/pfile.ora  主要是修改相关路径

然后使用pfile启动数据库至nomount状态,由修改过的pfile再生成spfile

5.恢复控制文件

RMAN> restore controlfile from '/data/IP/2015_09_25/o1_mf_ncnnf_TAG20150925T134231_c09s9pms_.bkp';

Starting restore at 25-SEP-15

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=1640 devtype=DISK

channel ORA_DISK_1: restoring control file

channel ORA_DISK_1: restore complete, elapsed time: 00:00:02

output filename=/data/oracledata/flash_recovery_area/control01.ctl

Finished restore at 25-SEP-15

RMAN> shutdown

Oracle instance shut down

RMAN> startup mount;

connected to target database (not started)

Oracle instance started

database mounted

Total System Global Area 53687091200 bytes

Fixed Size 2184048 bytes

Variable Size 4546628752 bytes

Database Buffers 49123688448 bytes

Redo Buffers 14589952 bytes

RMAN>

6.还原数据文件,并恢复

将生产数据库的归档日志也拷贝到指定的目录

RMAN> catalog start with '/data/IP';

生产数据库的文件都放在/dbdata/oracledata/mvbox/挂载点

而还原库的数据文件在/data/oracledata/oradata/mvbox/挂载点

在生产数据库运行查询

select

'set newname for datafile ' || file_id ||

' to ''' ||

replace(file_name,'/dbdata/oracledata/mvbox','/data/oracledata/oradata/mvbox')||''';'

from  dba_data_files;

然后根据这个查询的结果,拼出还原库执行的命令

先还原数据文件

run{

CONFIGURE DEVICE TYPE DISK PARALLELISM 5 BACKUP TYPE TO BACKUPSET;

set newname for datafile 4 to '/data/oracledata/oradata/mvbox/users01.dbf';

set newname for datafile 3 to '/data/oracledata/oradata/mvbox/sysaux01.dbf';

set newname for datafile 1 to '/data/oracledata/oradata/mvbox/system01.dbf';

set newname for datafile 5 to '/data/oracledata/oradata/mvbox/system02.dbf';

set newname for datafile 6 to '/data/oracledata/oradata/mvbox/sysaux02.dbf';

set newname for datafile 7 to '/data/oracledata/oradata/mvbox/users02.dbf';

set newname for datafile 8 to '/data/oracledata/oradata/mvbox/users03.dbf';

set newname for datafile 9 to '/data/oracledata/oradata/mvbox/users04.dbf';

set newname for datafile 10 to '/data/oracledata/oradata/mvbox/users05.dbf';

set newname for datafile 12 to '/data/oracledata/oradata/mvbox/users06.dbf';

set newname for datafile 13 to '/data/oracledata/oradata/mvbox/system03.dbf';

set newname for datafile 14 to '/data/oracledata/oradata/mvbox/sysaux03.dbf';

set newname for datafile 27 to '/data/oracledata/oradata/mvbox/users19.dbf';

set newname for datafile 15 to '/data/oracledata/oradata/mvbox/users07.dbf';

set newname for datafile 16 to '/data/oracledata/oradata/mvbox/users08.dbf';

set newname for datafile 17 to '/data/oracledata/oradata/mvbox/users09.dbf';

set newname for datafile 18 to '/data/oracledata/oradata/mvbox/users10.dbf';

set newname for datafile 19 to '/data/oracledata/oradata/mvbox/users11.dbf';

set newname for datafile 20 to '/data/oracledata/oradata/mvbox/users12.dbf';

set newname for datafile 21 to '/data/oracledata/oradata/mvbox/users13.dbf';

set newname for datafile 22 to '/data/oracledata/oradata/mvbox/users14.dbf';

set newname for datafile 23 to '/data/oracledata/oradata/mvbox/users15.dbf';

set newname for datafile 24 to '/data/oracledata/oradata/mvbox/users16.dbf';

set newname for datafile 25 to '/data/oracledata/oradata/mvbox/users17.dbf';

set newname for datafile 26 to '/data/oracledata/oradata/mvbox/users18.dbf';

set newname for datafile 28 to '/data/oracledata/oradata/mvbox/users20.dbf';

set newname for datafile 33 to '/data/oracledata/oradata/mvbox/users21.dbf';

set newname for datafile 34 to '/data/oracledata/oradata/mvbox/users22.dbf';

set newname for datafile 35 to '/data/oracledata/oradata/mvbox/undotbs.dbf';

restore database;

switch datafile all;

}

找到生产数据库传输过来的归档日志文件,找到最后一个文件

恢复到最后一个归档日志文件序列.

run{

CONFIGURE DEVICE TYPE DISK PARALLELISM 5 BACKUP TYPE TO BACKUPSET;

set until sequence 7939;

recover database;

}

然后open数据库

生产库有block change tracking

还原库可以关闭

另外,查看恢复的时间点

alter database disable block change tracking;

alter database open read only;

select to_char(scn_to_timestamp(CURRENT_SCN),'yyyy-mm-dd HH24:mi:ss') ts from v$database;

这时候,还原库已经搭建完成.

生产库有一个程序,每隔30分钟,会将归档日志传送过来.

还原库这边,只需要定期恢复即可(恢复到6小时之前)

0 */3 * * * /root/testoracle.sh

#!/bin/bash

source ~/.bashrc

rman target / <

shutdown

startup mount

catalog start with '/data/IP' noprompt;

recover database until time "sysdate - interval '6' hour";

sql 'alter database open read only';

EOF

7.把还原库拉起到读写模式.

如果到了第七步,就有麻烦了.

这意味着,生产数据库挂了,DataGuard的备机也挂了.

只能把还原库拉起来暂时作为生产库使用.

尝试将停留在下午4点的还原库,恢复至下午6点,并拉起为读写模式。

恢复之前

执行RMAN命令

rman:

shutdown;

startup mount;

catalog start with '/data/IP' noprompt;

recover database until time "to_date('20150925 18:00:00','yyyymmdd hh24:mi:ss')";

RMAN执行

RMAN> shutdown;

using target database control file instead of recovery catalog

database closed

database dismounted

Oracle instance shut down

RMAN> startup mount;

connected to target database (not started)

Oracle instance started

database mounted

Total System Global Area 53687091200 bytes

Fixed Size 2184048 bytes

Variable Size 4546628752 bytes

Database Buffers 49123688448 bytes

Redo Buffers 14589952 bytes

RMAN> catalog start with '/data/IP' noprompt;

searching for all files that match the pattern /data/IP

List of Files Unknown to the Database

=====================================

File Name: /data/IP/archivelog/2015_09_25/o1_mf_1_7945_c0bh8dgv_.arc

File Name: /data/IP/archivelog/2015_09_25/o1_mf_1_7942_c0bc4hv5_.arc

File Name: /data/IP/archivelog/2015_09_25/o1_mf_1_7944_c0bfx7l2_.arc

File Name: /data/IP/archivelog/2015_09_25/o1_mf_1_7940_c0b7ntyf_.arc

File Name: /data/IP/archivelog/2015_09_25/o1_mf_1_7941_c0b9kdlw_.arc

File Name: /data/IP/archivelog/2015_09_25/o1_mf_1_7943_c0bdkzyp_.arc

cataloging files...

cataloging done

List of Cataloged Files

=======================

File Name: /data/IP/archivelog/2015_09_25/o1_mf_1_7945_c0bh8dgv_.arc

File Name: /data/IP/archivelog/2015_09_25/o1_mf_1_7942_c0bc4hv5_.arc

File Name: /data/IP/archivelog/2015_09_25/o1_mf_1_7944_c0bfx7l2_.arc

File Name: /data/IP/archivelog/2015_09_25/o1_mf_1_7940_c0b7ntyf_.arc

File Name: /data/IP/archivelog/2015_09_25/o1_mf_1_7941_c0b9kdlw_.arc

File Name: /data/IP/archivelog/2015_09_25/o1_mf_1_7943_c0bdkzyp_.arc

RMAN> recover database until time "to_date('20150925 18:00:00','yyyymmdd hh24:mi:ss')";

Starting recover at 25-SEP-15

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=1641 devtype=DISK

allocated channel: ORA_DISK_2

channel ORA_DISK_2: sid=1639 devtype=DISK

allocated channel: ORA_DISK_3

channel ORA_DISK_3: sid=1638 devtype=DISK

allocated channel: ORA_DISK_4

channel ORA_DISK_4: sid=1637 devtype=DISK

allocated channel: ORA_DISK_5

channel ORA_DISK_5: sid=1636 devtype=DISK

starting media recovery

archive log thread 1 sequence 7939 is already on disk as file /data/IP/archivelog/2015_09_25/o1_mf_1_7939_c0b5fr87_.arc

archive log thread 1 sequence 7940 is already on disk as file /data/IP/archivelog/2015_09_25/o1_mf_1_7940_c0b7ntyf_.arc

archive log filename=/data/IP/archivelog/2015_09_25/o1_mf_1_7939_c0b5fr87_.arc thread=1 sequence=7939

archive log filename=/data/IP/archivelog/2015_09_25/o1_mf_1_7940_c0b7ntyf_.arc thread=1 sequence=7940

media recovery complete, elapsed time: 00:04:07

Finished recover at 25-SEP-15

进入sqlplus,修改联机重做日志的位置.因为这个位置还是生产库的,还原库上不一定有这个路径.

SQL> select 'alter database rename file ''' ||member|| ''' to ''/data/oracledata/oradata/mvbox/redo' || rownum ||'.log'';' sql from v$logfile;

SQL

alter database rename file '/data/oracledata/oradata/mvbox/redo04.log1' to '/data/oracledata/oradata/mvbox/redo1.log';

alter database rename file '/data/dblog/redo04.log2' to '/data/oracledata/oradata/mvbox/redo2.log';

alter database rename file '/data/oracledata/oradata/mvbox/redo05.log3' to '/data/oracledata/oradata/mvbox/redo3.log';

alter database rename file '/data/dblog/redo05.log4' to '/data/oracledata/oradata/mvbox/redo4.log';

alter database rename file '/data/oracledata/oradata/mvbox/redo06.log5' to '/data/oracledata/oradata/mvbox/redo5.log';

alter database rename file '/data/dblog/redo06.log6' to '/data/oracledata/oradata/mvbox/redo6.log';

alter database rename file '/data/oracledata/oradata/mvbox/redo07.log7' to '/data/oracledata/oradata/mvbox/redo7.log';

alter database rename file '/data/dblog/redo07.log8' to '/data/oracledata/oradata/mvbox/redo8.log';

alter database rename file '/data/oracledata/oradata/mvbox/redo08.log9' to '/data/oracledata/oradata/mvbox/redo9.log';

alter database rename file '/data/dblog/redo08.log10' to '/data/oracledata/oradata/mvbox/redo10.log';

10 rows selected.

alter database rename file '/data/oracledata/oradata/mvbox/redo04.log1' to '/data/oracledata/oradata/mvbox/redo1.log';

Database altered.

alter database rename file '/data/dblog/redo04.log2' to '/data/oracledata/oradata/mvbox/redo2.log';

Database altered.

alter database rename file '/data/oracledata/oradata/mvbox/redo05.log3' to '/data/oracledata/oradata/mvbox/redo3.log';

Database altered.

alter database rename file '/data/dblog/redo05.log4' to '/data/oracledata/oradata/mvbox/redo4.log';

Database altered.

alter database rename file '/data/oracledata/oradata/mvbox/redo06.log5' to '/data/oracledata/oradata/mvbox/redo5.log';

Database altered.

alter database rename file '/data/dblog/redo06.log6' to '/data/oracledata/oradata/mvbox/redo6.log';

Database altered.

alter database rename file '/data/oracledata/oradata/mvbox/redo07.log7' to '/data/oracledata/oradata/mvbox/redo7.log';

Database altered.

alter database rename file '/data/dblog/redo07.log8' to '/data/oracledata/oradata/mvbox/redo8.log';

Database altered.

alter database rename file '/data/oracledata/oradata/mvbox/redo08.log9' to '/data/oracledata/oradata/mvbox/redo9.log';

Database altered.

SQL> alter database rename file '/data/dblog/redo08.log10' to '/data/oracledata/oradata/mvbox/redo10.log';

Database altered.

SQL> alter database open resetlogs;

Database altered.

SQL>

现在数据库虽然已经拉起来了,但是注意还有临时表空间。

给默认临时表空间增加一个数据文件.

然后删除其他数据文件,重新添加

(备份不包括临时表空间,所以拉起之后,临时表空间需要另外处理一下)

ALTER TABLESPACE TEMP

ADD TEMPFILE '/data/oracledata/oradata/mvbox/temp03.dbf'

SIZE 4G

AUTOEXTEND ON

NEXT 128M

MAXSIZE 30G;

ALTER TABLESPACE TEMP DROP TEMPFILE '/dbdata/oracledata/mvbox/temp01.dbf';

ALTER TABLESPACE TEMP DROP TEMPFILE '/dbdata/oracledata/mvbox/temp02.dbf';

还原库搭建完成.

凡事豫则立,不豫则废

我一定要牢记一点,

不要相信自己的技术,

尽量完善各种预案,一旦遇到技术难题,不能解决.

最后一定要切的过来,不丢数据.

永远不因为数据丢失的问题道歉.

oracle如果还原库,Oracle 还原库相关推荐

  1. oracle配置并发备份,oracle数据库还原以及备份 包括快速备份(并发压缩)

    expdp jhpt/XXXX directory=databackup dumpfile=dpfile_201512091300_%U.dmp filesize=5G parallel=8 comp ...

  2. oracle级联备库创建,ORACLE 11G 备库传备库级联传递(cascade dg) 的配置方法

    01: 与做备库一样,配置好 监听文件 密码文件 网络文件 并且动好监听. 注意必要的目录结构.然后从主库,备库1 都能用SYS用户登陆到备库2 表示通道是联通有效的. 02: 从主库生成个最新的IN ...

  3. oracle之 oracle database vault(数据库保险库)

    在12c建库中 Database  Vault 与 Label Security 选项,之前没有留意过,特意记录一下 12.1 中: 12.2 中: 转载:http://www.linuxidc.co ...

  4. t oracle删除吗,Oracle 11g 手工建库与删库

    Oracle 11g 手工建库与删库 在前一篇文章中提到阅读Oracle 11gR2 Administrator's Guide(文档编号E25494-01)时,简单描述了DDL_LOCK_TIMEO ...

  5. oracle如何在本地建库,oracle在本地建库

    oracle数据库本地建库,需要使用oracle安装路径下面的-配置和移植工具-Database Configuration Assistant 通过一次点击下一步进行建库. 在库建好后,使用系统账号 ...

  6. oracle 11g job创建,Oracle 11g 手动创建库完整实施过程

    Oracle数据库除了使用DBCA创建数据库的方式外,还可以使用命令手动创建数据库.本文为Oracle 11g手动创建数据库的完整过程,供大家参考使用. 1.修改oracle用户环境变量 $ vim ...

  7. oracle 11gr2 rac价格,调整Oracle 11gR2 RAC为单实例库

    1      应用场景 适用于Oracle RAC与应用程序不兼容的情况,需拆除为单实例: 应用案例:主机:alex1.alex2 共享存储:DATADG1(包含Disk1.Disk2....Disk ...

  8. oracle 认证考试题目,Oracle OCP 19c 认证1Z0-082考试题库(第1题)

    Oracle OCP 19c 认证1Z0-082考试题库(第1题)-CUUG内部学员版082题库解析 1. You execute this command: CREATE BIGFILE TABLE ...

  9. oracle分区备份,oracle分区表备份,只还原1个分区

    oracle分区表备份,只还原1个分区 2016-06-06 oracle分区表备份,只还原1个分区,使用statistics=none,也就是不导出统计信息. alter table ANONYMO ...

最新文章

  1. 小程序客服自动回复图片,云开发的实现
  2. datetimepicker控件怎么改变hover颜色_VBA入门课程,ActiveX控件系列知识,复合框的属性与常见VBA代码...
  3. 如何屏蔽TCP 报头中的内容-位置字段中显示的 IP 地址
  4. 软件开发生命周期中的设计阶段_测试基础——软件开发生命周期
  5. lambda 匿名内部类_Lambda运行时内部:窥视无服务器巢穴
  6. function——函数声明头的提升和预解析
  7. 批量生成10个虚拟主机配置
  8. LeetCode60:Permutation Sequence
  9. DFS CCPC2017 南宁I题
  10. MAC将latex等大软件安装到移动硬盘
  11. YOLOX-PAI: An Improved YOLOX, Stronger and Faster than YOLOv6
  12. 微信小程序:uu传书
  13. EgretInspector谷歌浏览器扩展
  14. PB云存储系统问世 解决数据中心能耗问题
  15. 【IOS自动化解放双手系列一】unity3D导出xcode 工程并配置各种权限
  16. 漫画:位运算技巧助你俘获offer
  17. 基本数据类型之整数类型变量
  18. JAVA设置代理的两种方式(HTTP和HTTPS)
  19. 【汇编语言】快速理解什么是寻址,什么是寻址方式
  20. 江湖2 java_热血江湖2手游一键端源码搭建教程+APP端+WEB端+GM工具

热门文章

  1. idea集成maven
  2. 自动驾驶入门(八):YoloV3
  3. 合宙NB-IOT模块Air302连接Tlink云平台,APP和微信控制灯开关
  4. Flutter Text 自动换行
  5. 云计算---OpenStack Neutron详解
  6. 苹果电脑服务器图标不显示不出来,Mac地图不显示
  7. 外卖和快递行业数据_年轻人“变了”?外卖、快递行业,为何能吸引千万从业者?...
  8. 使用PowerDesigner和PDMReader将数据库导出为数据库设计文档
  9. LCD液晶屏和背光源一定要配套吗
  10. 买白酒时,看清瓶身“这行字”,轻松分辨勾兑酒和纯粮酒