数据库恢复一例(2)

恢复|数据|数据库

最近通过做实验总结出一种数据库恢复方法,对今后的工作很有帮助:

数据库为非归档状态,只有一周前的数据文件的备份,无redolog,归档日志和controlfile的备份,此种情况一但数据库出故障只能做不完全恢复,会丢失一周前做备份时到出故障那一时候的所有数据,具体恢复方法如下:

操作系统为solaris8,内存2G,2颗CPU.

实验步骤:
$sqlplus /nolog
SQL>connect / as sysdba
SQL> archive log list
Database log mode No Archive Mode
Automatic archival Enabled
Archive destination /opt/oracle/arch/ORCL
Oldest online log sequence 895
Current log sequence 897

SQL> select * from v$logfile;

GROUP# STATUS
---------- -------
MEMBER
--------------------------------------------------------------------------------
3
/opt/oracle/db04/oradata/ORCL/redo03.log

2
/opt/oracle/db03/oradata/ORCL/redo02.log

1
/opt/oracle/db02/oradata/ORCL/redo01.log

SQL> select * from v$controlfile;

STATUS
-------
NAME
--------------------------------------------------------------------------------

/opt/oracle/db02/oradata/ORCL/control01.ctl

/opt/oracle/db03/oradata/ORCL/control02.ctl

/opt/oracle/db04/oradata/ORCL/control03.ctl

SQL>alter database backup controlfile to trace;
(备份控制文件,此时会在$ORACLE_BASE/admin/ORCL/udump目录里生成trace文件)

SQL> shutdown immediate (关闭当前数据库)
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> quit
Disconnected

模拟数据丢失:

删除当前所有的数据文件,控制文件和redolog文件:

$rm -rf ?/opt/oracle/db02/oradata/ORCL/*

$rm /opt/oracle/db03/oradata/ORCL/redo02.log

$rm /opt/oracle/db03/oradata/ORCL/control02.ctl

$rm /opt/oracle/db04/oradata/ORCL/redo03.log

$rm /opt/oracle/db04/oradata/ORCL/control03.ctl

把一周前备份的数据文件copy回来,目录结构和以前一样,但这时因为没有redolog和controlfile文件,数据库只能启动到nomount状态:

编辑udump目录下生成的orcl_ora_7140.trc文件,把里面的创建controlfile的那部分内容粘贴下来放在SQL里执行:
(这里要注意一定要用resetlogs方式重建控制文件,resetlogs之后会生成新的redolog,并且把当前redofile的sequence置为1,否则创建控制文件会失败):
SQL>STARTUP NOMOUNT
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG
2 MAXLOGFILES 32
3 MAXLOGMEMBERS 2
4 MAXDATAFILES 254
5 MAXINSTANCES 8
6 MAXLOGHISTORY 907
7 LOGFILE
8 GROUP 1 '/opt/oracle/db02/oradata/ORCL/redo01.log' SIZE 50000K,
9 GROUP 2 '/opt/oracle/db03/oradata/ORCL/redo02.log' SIZE 50000K,
10 GROUP 3 '/opt/oracle/db04/oradata/ORCL/redo03.log' SIZE 50000K
11 DATAFILE
12 '/opt/oracle/db02/oradata/ORCL/system01.dbf',
13 '/opt/oracle/db02/oradata/ORCL/tools01.dbf',
14 '/opt/oracle/db02/oradata/ORCL/rbs01.dbf',
15 '/opt/oracle/db02/oradata/ORCL/temp01.dbf',
16 '/opt/oracle/db02/oradata/ORCL/users01.dbf',
17 '/opt/oracle/db02/oradata/ORCL/indx01.dbf',
18 '/opt/oracle/db02/oradata/ORCL/drsys01.dbf',
19 '/opt/oracle/db02/oradata/ORCL/wacos.dbf',
20 '/opt/oracle/db02/oradata/ORCL/wacos01.dbf',
21 '/opt/oracle/db02/oradata/ORCL/wacos02.dbf',
22 '/opt/oracle/db02/oradata/ORCL/wacos03.dbf',
23 '/opt/oracle/db02/oradata/ORCL/wacos04.dbf',
24 '/opt/oracle/db02/oradata/ORCL/wacos05.dbf',
25 '/opt/oracle/db02/oradata/ORCL/wacos06.dbf',
26 '/opt/oracle/db02/oradata/ORCL/nms.dbf',
27 '/opt/oracle/db02/oradata/ORCL/test.dbf'
28 CHARACTER SET WE8ISO8859P1;

Control file created.

SQL> alter database open resetlogs;(以resetlogs方式打开数据库)
Database altered.

SQL> select status from v$instance; (检查数据库的状态)
STATUS
-------
OPEN

SQL> select * from v$logfile; (检查logfile的状态)
GROUP# STATUS
---------- -------
MEMBER
--------------------------------------------------------------------------------
3
/opt/oracle/db04/oradata/ORCL/redo03.log

2
/opt/oracle/db03/oradata/ORCL/redo02.log

1
/opt/oracle/db02/oradata/ORCL/redo01.log

SQL> select * from v$controlfile; (检查控制文件的状态)

STATUS
-------
NAME
--------------------------------------------------------------------------------

/opt/oracle/db02/oradata/ORCL/control01.ctl

/opt/oracle/db03/oradata/ORCL/control02.ctl

/opt/oracle/db04/oradata/ORCL/control03.ctl

时间: 2024-10-18 16:49:27

数据库恢复一例(2)的相关文章

数据库恢复一例(1)

恢复|数据|数据库 oracle9i回滚段表空间丢失后的处理方法: 用隐含参数恢复数据库的例子: 具体操作步骤如下: 首先把初init.ora文件里自动管理改为手工管理,然后加入隐含参数:#undo_management=AUTOundo_tablespace=UNDOTBS_corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_S

PostgreSQL 最佳实践 - pg_rman 数据库恢复示例 与 软件限制解说

背景 pg_rman备份已经讲完了,接下来讲一下数据恢复. 由于pg_rman使用了物理备份,所以恢复时,与普通物理备份的恢复原理是一样的. 需要将数据文件恢复,同时需要提供recovery.conf,在recovery.conf中指定需要恢复到哪个位置,以及如何获取XLOG归档文件等配置. 数据库恢复 pg_rman数据恢复时的两个必要要素 1. 新的$PGDATA 2. 备份目录 命令的选项也很简单,甚至可以不指定任何option Restore options: The parameter

数据库恢复方案

数据库恢复方案 http://netkiller.github.io/journal/db.restore.html Mr. Neo Chen (netkiller), 陈景峰(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地518131+86 13113668890+86 755 29812080<netkiller@msn.com> $Id$ 版权 2011, 2012, 2013 http://netkiller.github.io $Date$ 摘要 这里所谈的内容是对备份数据

SYBASE ASA数据库恢复方法

SYBASE ASA数据库当遇到不正常关机时,很容易出现异常,如:表或索引出错,麻烦的是用drop table t_name删除表时数据库就会DOWN下.下面是我常用的两种恢复方法: 一.用备份数据库恢复: 1.用备份数据库启动 2.翻译出错数据库的日志(可能有多个文件) 3.按顺序执行翻译出的日志文件,read 文件 二.没有备份数据库 现象:set rowcount 10 select * from table_name时数据down下 用dbvalid检查此表时报错 检查处理方法:1.删除

Oracle RAC(4 TB ASM) 数据库恢复详细记录

6月底我们接到某客户的紧急支持请求,其客户数据库在不久前由于机房停电,导致数据库重启后无法启动. 我们通过teamviewer远程初步分析了alert log以及kfed读取了几个disk 发现,数据库无法启动的根本原因在于ASM diskgroup无法mount.而ASM diskgroup 无法mount的根本原因在于,ASM元数据出现损坏,其中表现为ASM 启动时无法进行事务恢复. 这里我们先不去纠结为什么会坏.对于asm的元数据如果出现损坏,那么修复的难度可想而知. 这里我采取了非常简单

windowsTB 非归档Oracle数据库恢复小case

这是友情支持一个朋友的数据库恢复case,昨天圣诞节的时候来个求助,只能速度帮忙解决了好过节去了.首先我们来看下的alert log都有哪些信息: Wed Dec 23 15:19:21 2015 SMON: enabling tx recovery Wed Dec 23 15:19:21 2015 Database Characterset is ZHS16GBK Opening with internal Resource Manager plan where NUMA PG = 2, CP

如何进行数据库恢复

云数据库RDS(ApsaraDB for RDS,简称RDS)是一种稳定可靠.可弹性伸缩的在线数据库服务.基于飞天分布式系统和全SSD盘高性能存储,支持MySQL.SQL Server.PostgreSQL和PPAS(高度兼容Oracle)引擎,默认部署主备架构且提供了容灾.备份.恢复.监控.迁移等方面的全套解决方案,彻底解决数据库运维的烦恼! 网站数据对每个站长来说都是最宝贵的,如果一个操作不当,一不小心删除某个插件,则有可能导致数据丢失,系统崩溃等情况发生,从而造成严重的后果.因此,我们平时

RAC数据库恢复到单实例数据库

RAC数据库恢复到单实例数据库的基本步骤如下: a.准备单实例服务器,pfile文件,启动到nomount b.备份rac数据库 c.将备份文件拷贝到单实例服务器 d.在单实例服务器上还原.恢复 e.resetlogs打开数据库 f.rename redo文件名 g.disable thread 2并删除其redo组 h.增加temp临时表空间数据文件 i.删除不必要的undo表空间 业务需要(比如,测试备份)将RAC数据库通过备份恢复到单实例服务器:下面是实际操作步骤:测试环境:RHEL4u7

SQL Server 系统数据库恢复

原文:SQL Server 系统数据库恢复 标签:SQL SERVER/MSSQL SERVER/数据库/DBA/故障恢复/master 概述      SQL Server 维护一组系统级数据库(称为"系统数据库"),这些数据库对于服务器实例的运行至关重要.每次进行大量更新后,都必须备份多个系统数据库.必须备份的系统数据库包括 msdb.master 和 model.如果有任何数据库在服务器实例上使用了复制,则还必须备份 distribution 系统数据库.备份这些系统数据库,就可