Utilice RMAN para hacer una copia de seguridad y restaurar la base de datos (10) -repare los bloques de datos dañados

Utilice RMAN para hacer una copia de seguridad y restaurar la base de datos (10) -repare los bloques de datos dañados

Si un archivo de datos es normal, pero algunos bloques de datos en el archivo de datos están dañados, puede usar RMAN para repararlo.

1. Daño del bloque de datos simulado

1. Cree un nuevo espacio de tabla data03

Cree un nuevo espacio de tabla data03 con un tamaño de archivo de 5M.

SQL> create tablespace data03 datafile '/usr/local/oradata/orcl/data03.dbf' size 2m;

Tablespace created.

Elapsed: 00:00:00.40
SQL> select name from v$datafile;

NAME
-----------------------------------------------------------------------------------
/usr/local/oradata/orcl/system01.dbf
/usr/local/oradata/orcl/sysaux01.dbf
/usr/local/oradata/orcl/undotbs01.dbf
/usr/local/oradata/orcl/users01.dbf
/usr/local/oradata/orcl/data01.dbf
/usr/local/oradata/orcl/data02.dbf
/usr/local/oradata/orcl/data03.dbf

2. Cree una tabla en el espacio de tabla data03

Cree una tabla scott.t_emp en el espacio de tabla y agregue datos para llenar todo el espacio de tabla.

SQL> create table scott.t_emp tablespace data03 as select * from scott.e02 where rownum<20000;
Table created.

3. Utilice RMAN para hacer una copia de seguridad del espacio de la tabla

RMAN> recover tablespace data03;

Starting recover at 2020-04-12 14:45:55
using channel ORA_DISK_1
using channel ORA_DISK_2

starting media recovery
media recovery complete, elapsed time: 00:00:00

Finished recover at 2020-04-12 14:45:56

RMAN> backup tablespace data03 format '/home/oracle/rmanbak/data03.bak';

Starting backup at 2020-04-12 14:47:50
using channel ORA_DISK_1
using channel ORA_DISK_2
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00007 name=/usr/local/oradata/orcl/data03.dbf
channel ORA_DISK_1: starting piece 1 at 2020-04-12 14:47:51
channel ORA_DISK_1: finished piece 1 at 2020-04-12 14:47:52
piece handle=/home/oracle/rmanbak/data03.bak tag=TAG20200412T144751 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2020-04-12 14:47:52

4. Configure el espacio de tabla data03 como fuera de línea.

SQL> alter tablespace data03 offline;

Tablespace altered.

5. Edite el archivo data03.dbf con vim y guárdelo.

[oracle@wgx orcl]$ vim -b data03.dbf

6. Configure el espacio de tabla data03 en línea

SQL> alter tablespace data03 online;
Tablespace altered.

Dos, ver los datos de la tabla t_emp

Cuando se indica que hay un bloque de datos defectuoso, el resultado es el siguiente:

SQL> select count(*) from scott.t_emp;
select count(*) from scott.t_emp
                           *
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 7, block # 158)
ORA-01110: data file 7: '/usr/local/oradata/orcl/data03.dbf'

Tres, use RMAN para reparar bloques de datos dañados

1. Ver la información del bloque de datos dañado

Como puede ver, dos bloques de datos están dañados.

SQL> select file#,block# from v$database_block_corruption;

     FILE#     BLOCK#
---------- ----------
	 7	  163
	 7	  158

Elapsed: 00:00:00.04

2. Utilice RMAN para reparar bloques de datos dañados

RMAN> blockrecover corruption list;

Starting recover at 2020-04-12 14:53:35
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=9 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=133 device type=DISK

channel ORA_DISK_1: restoring block(s)
channel ORA_DISK_1: specifying block(s) to restore from backup set
restoring blocks of datafile 00007
channel ORA_DISK_1: reading from backup piece /home/oracle/rmanbak/data03.bak
channel ORA_DISK_1: piece handle=/home/oracle/rmanbak/data03.bak tag=TAG20200412T144751
channel ORA_DISK_1: restored block(s) from backup piece 1
channel ORA_DISK_1: block restore complete, elapsed time: 00:00:01

starting media recovery
media recovery complete, elapsed time: 00:00:03

Finished recover at 2020-04-12 14:53:40

Cuatro, ver los datos de la tabla t_emp

SQL> select count(*) from scott.t_emp;

  COUNT(*)
----------
     19999

Cinco, ver la información del bloque de datos dañado

SQL> select file#,block# from v$database_block_corruption;

no rows selected

¡La reparación fue exitosa!

Supongo que te gusta

Origin blog.csdn.net/weixin_44377973/article/details/105474057
Recomendado
Clasificación