数据库恢复一例

原创 2004年09月17日 16:54:00

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

数据库为非归档状态,假如只有一周前的数据文件的备份,无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 file_name,tablespace_name from dba_data_files;

FILE_NAME                                          TABLESPACE_NAME
-------------------------------------------------- ------------------------------
/opt/oracle/db02/oradata/ORCL/system01.dbf         SYSTEM
/opt/oracle/db02/oradata/ORCL/tools01.dbf          TOOLS
/opt/oracle/db02/oradata/ORCL/rbs01.dbf              RBS
/opt/oracle/db02/oradata/ORCL/temp01.dbf           TEMP
/opt/oracle/db02/oradata/ORCL/users01.dbf          USERS
/opt/oracle/db02/oradata/ORCL/indx01.dbf           INDX
/opt/oracle/db02/oradata/ORCL/drsys01.dbf          DRSYS
/opt/oracle/db02/oradata/ORCL/test.dbf             TEST

8 rows selected.

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

确认数据文件的路径,并做物理冷备份:
$  tar  cvf   /backup/full.tar  /opt/oracle/db02/oradata/ORCL     /opt/oracle/db03/oradata/ORCL    /opt/oracle/db04/oradata/ORCL

模拟数据丢失:

删除当前所有的数据文件,控制文件和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

将做备份后的tar包解开,还原备份:

$tar xvf  /backup/full.tar

删除所有的控制文件和日志文件,只留下数据文件: 

$rm /opt/oracle/db02/oradata/ORCL/control01.ctl
$rm /opt/oracle/db03/oradata/ORCL/control02.ctl
$rm /opt/oracle/db04/oradata/ORCL/control03.ctl
$rm /opt/oracle/db02/oradata/ORCL/redo01.log
$rm /opt/oracle/db03/oradata/ORCL/red02.log
$rm /opt/oracle/db04/oradata/ORCL/red03.log

因为此时只有datafile, 无redofile和controlfile, 数据库只能启动到nomount状态:
SQL> startup nomount
ORACLE instance started.

Total System Global Area 1134141116 bytes
Fixed Size                   102076 bytes
Variable Size             311750656 bytes
Database Buffers          819200000 bytes
Redo Buffers                3088384 bytes

编辑udump目录下生成的orcl_ora_7140.trc文件,把里面的创建controlfile的那部分内容粘贴下来放在SQL里执行:
(这里要注意一定要用resetlogs方式重建控制文件,resetlogs之后会生成新的redolog,并且把当前redofile的sequence置为1,否则创建控制文件会失败):
SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG
   
MAXLOGFILES 32
    MAXLOGMEMBERS 2
    MAXDATAFILES 254
    MAXINSTANCES 8
    MAXLOGHISTORY 907
LOGFILE
  GROUP 1 '/opt/oracle/db02/oradata/ORCL/redo01.log'  SIZE 50000K,
  GROUP 2 '/opt/oracle/db03/oradata/ORCL/redo02.log'  SIZE 50000K,
  GROUP 3 '/opt/oracle/db04/oradata/ORCL/redo03.log'  SIZE 50000K
DATAFILE
  '/opt/oracle/db02/oradata/ORCL/system01.dbf',
  '/opt/oracle/db02/oradata/ORCL/tools01.dbf',
  '/opt/oracle/db02/oradata/ORCL/rbs01.dbf',
  '/opt/oracle/db02/oradata/ORCL/temp01.dbf',
  '/opt/oracle/db02/oradata/ORCL/users01.dbf',
  '/opt/oracle/db02/oradata/ORCL/indx01.dbf',
  '/opt/oracle/db02/oradata/ORCL/drsys01.dbf',
  '/opt/oracle/db02/oradata/ORCL/test.dbf',
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的状态,发现生成了新的redolog)
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

版权声明:本文为博主原创文章,未经博主允许不得转载。

_minimum_giga_scn恢复数据库一例

某行今天报告一个3T的库,恢复后无法OPEN,要求我方介入。 到现场之前想当然的觉得无非不就是resetlog走起,结果到了以后用户说已经resetlog过了,从磁带恢复要两天,心凉半截。 接手系...
  • heavenmouse
  • heavenmouse
  • 2014年12月13日 20:37
  • 612

DB2恢复一例 SQL0928N

环境是AIX 6.1,DB2版本9.7.0.7 首先查看db2主进程是否存在 ps -ef|grep db2sys 若不存在使用db2start打开数据库 备份介质为冷备数据源...
  • sunjiapeng
  • sunjiapeng
  • 2014年06月29日 23:20
  • 2523

Postgresql 恢复一例

今天在将pg_dump压缩过的dump文件,通过pg_restore 导入到测试库时,中途异常中断,造成测试库Server donw 机,而且之后数据无法启动。 -- 数据库异常down机的 cs...
  • u011598529
  • u011598529
  • 2015年03月15日 17:27
  • 1033

【数据库】基于日志系统的恢复机制

对于需要持久化数据的软件或者系统,必须要解决的问题是如何处理意外中断导致的数据丢失问题。比如一个交易系统,用户正在购买商品,突然断电了,那么如何恢复用户的账户信息?该不该扣款?商家的商品到底有没有卖出...
  • u010900754
  • u010900754
  • 2017年06月01日 16:58
  • 310

Oracle数据库备份与恢复 - RMAN恢复

RMAN恢复原理首先还是得理解Oracle数据库恢复的一个原理。数据库恢复是指将数据库恢复到一个一致性的状态,整个恢复操作可以分为两个步骤,数据库修复(RESTORE)和恢复(RECOVER)。Ora...
  • pan_tian
  • pan_tian
  • 2015年07月15日 17:16
  • 6903

数据库的恢复模式

所有的数据库都可以设置为三个不同的恢复模式 完全(full),简单(simple),大容量日志(Bulk-Logged).A完全恢复模式完全恢复模式是默认的恢复模式。在完全恢复模式下,需要手工的对事务...
  • zhao__fang
  • zhao__fang
  • 2015年10月30日 10:55
  • 688

恢复实战:用完整的数据库文件恢复数据库

win7系统中的oracle数据库可能会出现一些莫名的问题,最终数据库和监听服务都无法启动,但是数据文件是完好无损的。此时如何快速恢复数据库?最近刚碰到这样的事情,正好实战一把。   先看一下我的数据...
  • qq_25265293
  • qq_25265293
  • 2015年11月23日 16:50
  • 466

利用RMAN恢复整个数据库

利用RMAN恢复整个数据库案例一 适合场合:恢复的目录一致,同时备份的过程中有归档日志 恢复的数据库目录和down机的数据库一致,还有一个就是RMAN备份的时候已经备份了归档日志。 备份脚本:...
  • u013012406
  • u013012406
  • 2017年02月25日 09:27
  • 1457

SQL数据库(7)——数据库恢复技术

事务的基本概念事务的定义 一个数据库操作序列 一个不可分割的工作单位 恢复和并发控制的基本单位 在关系数据库中,一个事务可以使一条或多条SQL语句,或这个程序 事务的特性事务的ACID特性: 原子性...
  • longxinghaofeng
  • longxinghaofeng
  • 2017年01月01日 13:26
  • 971

数据库的故障及其恢复策略

在数据库运行过程中,可能会出现各种各样的故障,这些故障可分为以下三类:事务故障、系统故障和介质故障。应该根据故障类型的不同,采取不同的恢复策略。   1,事务故障及其恢复:   事务故障表示由非预...
  • Devillyd
  • Devillyd
  • 2016年05月08日 10:52
  • 1924
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库恢复一例
举报原因:
原因补充:

(最多只允许输入30个字)