Oracle数据库备份与恢复-nologging+直接路径加载(导致不完全恢复出现大量逻辑坏块)

(1)逻辑坏块分析

数据库开启foce logging的重要性,可以避免由于直接路径加载 和 no logging导致RMAN恢复出现大量逻辑坏块。

ORA-26040: 数据块是使用 NOLOGGING 选项加载的+

SQL> show user
USER 为 "NMOS"
SQL>
SQL>
SQL> create table t1 as select * from dba_objects;

表已创建。

SQL> create table t2 as select * from dba_objects;

表已创建。

SQL> connect / as sysdba
已连接。
SQL> show user
USER 为 "SYS"
SQL> create table t3 as select * from dba_objects;

表已创建。

SQL> connect nmos/123
已连接。
SQL> alter table t1 nologging;

表已更改。

SQL>  insert /*+append*/ into t1 select * from dba_objects;

已创建 72933 行。

SQL> commit;

提交完成。

SQL>  insert  into t2 select * from dba_objects;

已创建 72933 行。

SQL> commit;

提交完成。

SQL> connect / as sysdba
已连接。
SQL> create table t4 as select * from dba_objects;

表已创建。

SQL> alter table t3 nologging;

表已更改。

SQL> alter table t4 nologging;

表已更改。

SQL> insert /*+append*/ into t3 select * from dba_objects;

已创建 72934 行。

SQL> commit;

提交完成。

SQL> insert  into t4 select * from dba_objects;

已创建 72934 行。

SQL> commit;

提交完成。

SQL> select UNRECOVERABLE_CHANGE# from v$datafile;

UNRECOVERABLE_CHANGE#
---------------------
                    0
                    0
                    0
                    0
                    0
                    0
                    0
           6297396
                    0

已选择 9 行。

SQL>

SQL> startup force mount;
ORACLE 例程已经启动。

Total System Global Area 5066719232 bytes
Fixed Size                  8757280 bytes
Variable Size            1056968672 bytes
Database Buffers         3992977408 bytes
Redo Buffers                8015872 bytes
数据库装载完毕。
SQL> exit
从 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 断开

C:\Users\Administrator>rman target /

恢复管理器: Release 12.2.0.1.0 - Production on 星期一 12月 17 10:37:24 2018

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

已连接到目标数据库: ORCL (DBID=1514004854, 未打开)

RMAN> restore database;

从位于 17-12月-18 的 restore 开始
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=262 设备类型=DISK

通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00001 还原到 F:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\SYSTEM01.DBF
通道 ORA_DISK_1: 将数据文件 00003 还原到 F:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\SYSAUX01.DBF
通道 ORA_DISK_1: 将数据文件 00005 还原到 F:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\UNDOTBS01.DBF
通道 ORA_DISK_1: 将数据文件 00007 还原到 F:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\USERS001.DBF
通道 ORA_DISK_1: 将数据文件 00008 还原到 F:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\SYSTEM02.DBF
通道 ORA_DISK_1: 将数据文件 00009 还原到 F:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\SYSTEM03.DBF
通道 ORA_DISK_1: 将数据文件 00010 还原到 F:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\SYSTEM04.DBF
通道 ORA_DISK_1: 将数据文件 00011 还原到 F:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\USERS00221.DBF
通道 ORA_DISK_1: 将数据文件 00012 还原到 F:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\123.DBF
通道 ORA_DISK_1: 正在读取备份片段 F:\APP\ADMINISTRATOR\VIRTUAL\PRODUCT\12.2.0\DBHOME_1\DATABASE\1PTL07BJ_1_1
通道 ORA_DISK_1: 片段句柄 = F:\APP\ADMINISTRATOR\VIRTUAL\PRODUCT\12.2.0\DBHOME_1\DATABASE\1PTL07BJ_1_1 标记 = TAG20181217T102243
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:25
在 17-12月-18 完成了 restore

 

RMAN> recover database;

从位于 17-12月-18 的 recover 开始
使用通道 ORA_DISK_1

正在开始介质的恢复
介质恢复完成, 用时: 00:00:02

在 17-12月-18 完成了 recover

RMAN> ALTER DATABASE open;

已处理语句

RMAN> exit


恢复管理器完成。

C:\Users\Administrator>sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on 星期一 12月 17 10:38:18 2018

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


连接到:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> select count(1) from t3;

  COUNT(1)
----------
  145866

SQL> select count(1) from t4;

  COUNT(1)
----------
    145867

SQL> connect nmos/123
已连接。
SQL> select count(1) from t1;
select count(1) from t1
       *
第 1 行出现错误:
ORA-01578: ORACLE 数据块损坏 (文件号 11, 块号 4014)
ORA-01110: 数据文件 11:
'F:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\USERS00221.DBF'
ORA-26040: 数据块是使用 NOLOGGING 选项加载的


SQL> select count(1) from t2;

  COUNT(1)
----------
 145864

SQL>

解决手段:开启force logging模式。

SQL> alter database force logging;

 

数据库已更改。

 

SQL> create table forcelogging nologging as select * from dba_objects;

 

表已创建。

 

SQL> insert /*+append*/ into forcelogging select * from dba_objects;

 

已创建 72871 行。

 

SQL> commit;

 

提交完成。

C:\Users\Administrator>sqlplus nmos/123

 

SQL*Plus: Release 12.2.0.1.0 Production on 星期一 12月 24 15:56:38 2018

 

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

 

上次成功登录时间: 星期一 12月 24 2018 15:52:28 +08:00

 

连接到:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

 

SQL>

SQL>

SQL>

SQL> select count(1) from forcelogging;

 

  COUNT(1)

----------

    145741

 

SQL> select count(1) from t1;

select count(1) from t1

       *

第 1 行出现错误:

ORA-01578: ORACLE 数据块损坏 (文件号 11, 块号 4014)

ORA-01110: 数据文件 11:

'F:\APP\ADMINISTRATOR\VIRTUAL\ORADATA\ORCL\USERS00221.DBF'

ORA-26040: 数据块是使用 NOLOGGING 选项加载的

 

SQL>

 

  1. 结论

1 开始force logging模式可以避免一些nologging+直接路径加载等不可恢复的操作导致的逻辑坏块问题。

2 对于sys用户的对象事务操作强制日志。

3 普通用户对象事务没有强制日志。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值