`
sony-soft
  • 浏览: 1105061 次
文章分类
社区版块
存档分类
最新评论

探索ORACLE不完全恢复之--基于cancel的恢复 第二篇

 
阅读更多

探索ORACLE不完全恢复之--基于cancel的恢复 第二篇

作者:吴伟龙 Name:Prodence Woo

QQ:286507175 msn:hapy-wuweilong@hotmail.com




基于cancel 的不一致性恢复(归档丢失) 第二篇

主要适用于:基于Cancel的不完全恢复适用场景:Recover时,所需的某个归档日志损坏,或主机断电,current状态的联机日志损坏。

创建测试表

创建wwl002表,切换日志,再创建新的wwl003表,主机断电,删除当前日志,模拟文件损坏。

SQL> conn wwl/wwl

Connected.

SQL> select * from tab;

TNAME TABTYPE CLUSTERID

------------------------------ -----------------

WWL001 TABLE

SQL> create table WWL002 as select *from wwl001;

Table created.

SQL> conn / as sysdba

Connected.

切换日志

SQL> alter system switch logfile;

System altered.

后再创建第二张表

SQL> conn wwl/wwl

Connected.

SQL> create table wwl003 as select *from wwl001;

Table created.

查看当前日志组,确定当前活动的日志组,是组4

SQL> conn / as sysdba

Connected.

SQL> set line 200

SQL> select * from v$log;

GROUP# THREAD# SEQUENCE#BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM

---------- ---------- ---------- -------------------- --- ---------------- ------------- ---------

4 1 2134217728 2 YES ACTIVE 1716929 30-JUL-12

5 1 1134217728 2 YES INACTIVE 1692728 27-JUL-12

6 1 3134217728 2 NO CURRENT 1720396 30-JUL-12

7 1 0134217728 2 YES UNUSED 0

定位当前日志组的日志文件,有两个。

SQL> col member format a30

SQL> select * from v$logfile;

GROUP# STATUS TYPE MEMBER IS_

---------- ------- ------------------------------------- ---

7 ONLINE /DBBak2/oradata/WWL/redo7a.log NO

7 ONLINE /DBBak2/oradata/WWL/redo7b.log NO

6 ONLINE /DBBak2/oradata/WWL/redo6a.log NO

6 ONLINE /DBBak2/oradata/WWL/redo6b.log NO

5 STALE ONLINE /DBBak2/oradata/WWL/redo5a.log NO

5 STALE ONLINE /DBBak2/oradata/WWL/redo5b.log NO

4 ONLINE/DBBak2/oradata/WWL/redo4a.log NO

4 ONLINE/DBBak2/oradata/WWL/redo4b.log NO

8 rows selected.

删除当前日志组文件,模拟在线事务丢失:

SQL> !rm -f/DBBak2/oradata/WWL/redo4a.log

SQL> !rm -f/DBBak2/oradata/WWL/redo4b.log

模拟服务器断电

SQL> shutdown abort;

ORACLE instance shut down.

恢复步骤:

1、尝试启动数据库的时候报当前日志丢失。

SQL> startup

ORACLE instance started.

Total System Global Area 100663296 bytes

Fixed Size 1217884 bytes

Variable Size 88083108 bytes

Database Buffers 8388608 bytes

Redo Buffers 2973696 bytes

Database mounted.

ORA-00313: open failedfor members of log group 4 of thread 1

ORA-00312: online log 4thread 1: '/DBBak2/oradata/WWL/redo4b.log'

ORA-27037: unable toobtain file status

Linux Error: 2: No suchfile or directory

Additional information: 3

ORA-00312: online log 4thread 1: '/DBBak2/oradata/WWL/redo4a.log'

ORA-27037: unable toobtain file status

Linux Error: 2: No suchfile or directory

Additional information: 3

2、尝试Clear redo4

SQL> alter database clear logfile group4;

alter database clear logfile group 4

*

ERROR at line 1:

ORA-01624: log 4 needed for crash recoveryof instance WWL (thread 1)

ORA-00312: online log 4 thread 1:'/DBBak2/oradata/WWL/redo4a.log'

ORA-00312: online log 4 thread 1:'/DBBak2/oradata/WWL/redo4b.log'

3、在当前库做基于Cancel的不完全恢复

SQL> recover database until cancel;

ORA-00279: change 1716930 generated at07/30/2012 11:03:51 needed for thread 1

ORA-00289: suggestion :/DBSoft/product/10.2.0/db_1/dbs/arch1_2_789761098.dbf

ORA-00280: change 1716930 for thread 1 isin sequence #2

Specify log: {<RET>=suggested |filename | AUTO | CANCEL}

auto

ORA-00279: change 1720396 generated at07/30/2012 13:37:21 needed for thread 1

ORA-00289: suggestion :/DBSoft/product/10.2.0/db_1/dbs/arch1_3_789761098.dbf

ORA-00280: change 1720396 for thread 1 isin sequence #3

ORA-00278: log file'/DBSoft/product/10.2.0/db_1/dbs/arch1_2_789761098.dbf' no longer needed forthis recovery

ORA-00308: cannot open archived log'/DBSoft/product/10.2.0/db_1/dbs/arch1_3_789761098.dbf'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

ORA-01547: warning: RECOVER succeeded butOPEN RESETLOGS would get error below

ORA-01194: file 1 needs more recovery to beconsistent

ORA-01110: data file 1:'/DBBak2/oradata/WWL/system01.dbf'

做完恢复之后必须使用resetlogs选项打开数据库:

SQL> alter database open resetlogs;

alter database open resetlogs

*

ERROR at line 1:

ORA-01194: file 1 needs more recovery to beconsistent

ORA-01110: data file 1:'/DBBak2/oradata/WWL/system01.dbf'

恢复之后,使用Resetlogs选项,仍无法打开数据库,提示数据文件不一致,System表空间需要进一步的恢复。
当前日志损坏时,不能基于当前的数据库做不完全恢复。只能用以前的备份,做一个基于Cancel的不完全恢复。

重建下控制文件:

SQL> CREATE CONTROLFILE REUSE DATABASE"WWL" RESETLOGS ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

'/DBBak2/oradata/WWL/redo4a.log',

MAXDATAFILES 100

MAXINSTANCES 8

GROUP 5 (

MAXLOGHISTORY 292

LOGFILE

GROUP 4 (

'/DBBak2/oradata/WWL/redo4a.log',

'/DBBak2/oradata/WWL/redo4b.log'

GROUP 6 (

)SIZE 128M,

GROUP 5 (

'/DBBak2/oradata/WWL/redo5a.log',

'/DBBak2/oradata/WWL/redo5b.log'

'/DBBak2/oradata/WWL/redo7b.log'

)SIZE 128M,

GROUP 6 (

'/DBBak2/oradata/WWL/redo6a.log',

'/DBBak2/oradata/WWL/redo6b.log'

)SIZE 128M,

GROUP 7 (

'/DBBak2/oradata/WWL/redo7a.log',

'/DBBak2/oradata/WWL/redo7b.log'

)SIZE 128M

-- STANDBY LOGFILE

DATAFILE

'/DBBak2/oradata/WWL/system01.dbf',

'/DBBak2/oradata/WWL/undotbs01.dbf',

'/DBBak2/oradata/WWL/sysaux01.dbf',

'/DBBak2/oradata/WWL/users01.dbf',

'/DBBak2/oradata/WWL/wwl001',

'/DBBak2/oradata/WWL/wwl002',

'/DBBak2/oradata/WWL/wwl003'

CHARACTER SET ZHS16CGB231280

34 ;

Control file created.

再次打开,结果还是不行

SQL> alter database open resetlogs;

alter database open resetlogs

*

ERROR at line 1:

ORA-01194: file 1 needs more recovery to beconsistent

ORA-01110: data file 1:'/DBBak2/oradata/WWL/system01.dbf'

可以尝试使用_allow_resetlogs_corruption隐含参数来打开数据库

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

System altered.

修改完参数之后重启数据库到mount状态

SQL> shutdown immediate

ORA-01109: database not open

Database dismounted.

ORACLE instance shut down.

SQL> startup;

ORACLE instance started.

Total System Global Area 100663296 bytes

Fixed Size 1217884 bytes

Variable Size 88083108 bytes

Database Buffers 8388608 bytes

Redo Buffers 2973696 bytes

Database mounted.

ORA-01589: must use RESETLOGS orNORESETLOGS option for database open

同样以resetlogs模式启动数据库

SQL> alter database open resetlogs;

Database altered.

一定记得关闭该参数

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

System altered.

让参数关闭生效,再次启动数据库

SQL> startup force;

ORACLE instance started.

Total System Global Area 100663296 bytes

Fixed Size 1217884 bytes

Variable Size 88083108 bytes

Database Buffers 8388608 bytes

Redo Buffers 2973696 bytes

Database mounted.

Database opened.

检查_allow_resetlogs_corruption 隐含参数是否关闭,确定已经关闭

SQL> show parameter_allow_resetlogs_corruption

NAME TYPE VALUE

----------------------------------------------- ------------------------------

_allow_resetlogs_corruption boolean FALSE

SQL>

因为重建了控制文件,默认是没有制定temp表空间,这里制定下:

SQL> ALTER TABLESPACE TEMP01 ADDTEMPFILE '/DBBak2/oradata/WWL/temp01.dbf' REUSE;

Tablespace altered.

检查数据

SQL> conn wwl/wwl

Connected.

SQL> select * from tab;

TNAME TABTYPE CLUSTERID

------------------------------ -----------------

WWL001 TABLE

WWL002 TABLE

可以看到表WWL002存在,表WWL003不存在。因为WWL003的创建,是保存在当前REDO日志中的,而当前REDO日志损坏,所有当前日志中保存的操作全部丢失了。
归档日志、或者REDO日志损失,数据库就只能恢复到丢失的日志之前了。


分享到:
评论

相关推荐

    Oracle RMAN异机不完全恢复

    ### Oracle RMAN 异机不完全恢复 #### 实验背景 在实际的数据库管理工作中,可能会遇到因误操作导致的数据丢失或损坏的情况。在这种情况下,如何有效地利用备份数据完成数据库的恢复工作至关重要。本实验模拟了一...

    oracle-xe-11.2.0-1.0.x86_64.rpm.zip

    "oracle-xe-11.2.0" 这个标签强调了这个版本的具体信息,Oracle XE 11.2.0 是在 2011 年发布的,它包含了 Oracle 数据库 11g 第二版的主要功能,但限制了内存使用和存储大小,以适应轻量级需求。 在提供的压缩包...

    oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm

    头文件:/usr/include/oracle/11.2/client64/ 下,如果在使用时报错找不到头文件,记得看路径是否是这个。 包文件:/usr/lib/oracle/11.2/client64/ 下,包含{bin、lib}两个文件夹; 1.3 创建文件夹: #mkdir -p /...

    oracle数据库不完全恢复

    Oracle数据库的不完全恢复是一种特殊的恢复机制,它用于在某些特定情况下,如丢失部分归档日志或数据文件,使得完全恢复无法实现时,通过应用部分日志来恢复数据库到故障发生前的一个特定状态。不完全恢复的目标是尽...

    oracle数据库恢复工具ODU-Linux版

    Oracle数据库是全球广泛使用的大型企业级关系型数据库管理系统,其稳定性和可靠性深受...同时,理解Oracle的备份和恢复策略也是数据库管理的关键技能,对于任何使用Oracle数据库的组织来说,这都是必不可少的知识点。

    Oracle 12c备份恢复-RMAN工具技术手册

    RMAN 还可以用 Oracle 数据库的形式给库使用第二个存储位置。这需要在数据库中创建一个模式,称为 RMAN 目录。该目录应在数据库中创建,仅用于这个目的。该目录可以记录许多目标的元数据,用作所有备份信息的中心库...

    oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

    头文件:/usr/include/oracle/11.2/client64/ 下,如果在使用时报错找不到头文件,记得看路径是否是这个。 包文件:/usr/lib/oracle/11.2/client64/ 下,包含{bin、lib}两个文件夹; 1.3 创建文件夹: #mkdir -p /...

    c3p0-oracle-thin-extras-0.9.2.1

    c3p0-oracle-thin-extras-0.9.2.1

    oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.rpm

    oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.rpm client 安装包 rpm -&gt; deb : sudo alien xxx.rpm

    oracle-instantclient11.2-sdk-11.2.0.1.0-1.x86_64.zip

    Oracle Instant Client是Oracle公司提供的一款轻量级的数据库连接工具,它允许开发者和系统管理员在不安装完整Oracle数据库的情况下,与Oracle数据库进行交互。这个压缩包"oracle-instantclient11.2-sdk-11.2.0.1.0-...

    oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86-64.rpm

    oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm

    Oracle 19c 备份恢复-导入导出

    Oracle 19c 备份恢复-导入导出 Oracle 19c 备份恢复-导入导出是指使用 Oracle 数据库提供的工具 exp 和 imp 实现数据库的备份恢复和数据的导入导出。本文将详细介绍 Oracle 19c 备份恢复-导入导出的基本命令、工作...

    oracle11g-client-win-64客户端安装包

    oracle11g-client-win-64客户端安装包

    Oracle经典书籍之---ORACLE-RAC

    《Oracle经典书籍之---ORACLE-RAC》是一本专门探讨Oracle Real Application Clusters(RAC)技术的专业书籍,英文原版提供了深入的理论知识和实践经验。Oracle RAC是Oracle数据库的一项重要特性,它允许多个数据库...

    oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm

    oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm

    Oracle11g 崩溃后-dbf数据库文件恢复

    2. **启动恢复模式**:在Oracle服务器上启动实例,进入恢复模式(NOMOUNT或MOUNT状态)。 3. **恢复控制文件**:如果控制文件丢失或损坏,可以使用`RESTORE CONTROLFILE`命令从备份恢复。 4. **挂载数据库**:使用...

    oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm

    oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm 64位 只为了方便大家下载,请还是以官方的为准

    oracle教程----------------oracle教程

    Java是Oracle跨平台战略的关键,Oracle的中间件产品Oracle Fusion Middleware便基于Java构建,这使得Oracle的解决方案能在不同的硬件平台上无缝运行。通过收购Sun,Oracle不仅强化了其在Java生态中的地位,还获得了...

    kmod-oracleasm(centos6.4-6.9,centos7.1-7.6)下载

    kmod-oracleasm 是一个专门为CentOS操作系统编译的内核模块,它允许操作系统与Oracle ASM进行交互,是Oracle RAC (Real Application Clusters) 在Linux环境下运行的必备组件之一。 在Oracle RAC部署中,Oracle ASM...

    Oracle通过DBF恢复数据

    ### Oracle通过DBF恢复数据 #### 一、背景介绍 在日常工作中,Oracle数据库作为企业级数据管理系统之一,经常面临着各种意外情况,如误删除、误操作或系统故障导致的数据丢失。在这种情况下,如何有效地恢复数据...

Global site tag (gtag.js) - Google Analytics