使用RMAN备份与恢复数据库(4)——数据文件的备份与恢复

使用RMAN备份与恢复数据库(4)——数据文件的备份与恢复

备份数据文件可以使用copy和backup命令,两者的区别在于:使用copy命令备份时,备份数据文件中的所有数据块(包括空白块),而backup命令,则备份高水位以下的块(忽略空白块)。

一、使用copy命令备份数据文件

1、备份数据文件

RMAN> copy datafile 5 to '/home/oracle/rmanbak/data01.dbf';

Starting backup at 2020-04-09 17:54:49
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=/usr/local/oradata/orcl/data01.dbf
output file name=/home/oracle/rmanbak/data01.dbf tag=TAG20200409T175449 RECID=8 STAMP=1037296490
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 2020-04-09 17:54:52

2、查看数据文件备份信息

RMAN> list copy of datafile 5;

List of Datafile Copies
=======================

Key     File S Completion Time     Ckp SCN    Ckp Time           
------- ---- - ------------------- ---------- -------------------
8       5    A 2020-04-09 17:54:50 1634429    2020-04-09 17:54:49
        Name: /home/oracle/rmanbak/data01.dbf
        Tag: TAG20200409T175449

二、恢复数据文件

1、修改数据库中的数据

连接soctt用户,往t1表中添加一条记录:

SQL> select * from t1;

	ID NAME
---------- --------------------
	 1 Jack
	 2 Tome

Elapsed: 00:00:00.01
SQL> insert into t1 values(333,'Jerry');

1 row created.

Elapsed: 00:00:00.00
SQL> commit;

Commit complete.

Elapsed: 00:00:00.04
SQL> select * from t1;

	ID NAME
---------- --------------------
	 1 Jack
   333 Jerry
	 2 Tome

2、查看并删除数据文件

连接sys用户,查看数据文件信息,然后删除5号数据文件,命令如下:

SQL> select file_id,file_name from dba_data_files order by 1;

   FILE_ID FILE_NAME
---------- --------------------------------------------------
	 1 /usr/local/oradata/orcl/system01.dbf
	 2 /usr/local/oradata/orcl/sysaux01.dbf
	 3 /usr/local/oradata/orcl/undotbs01.dbf
	 4 /usr/local/oradata/orcl/users01.dbf
	 5 /usr/local/oradata/orcl/data01.dbf
	 
SQL> host rm /usr/local/oradata/orcl/data01.dbf

3、重启数据库

由于缺少数据文件,数据库只能启动到mount状态。

SQL> startup force;
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size		    2220200 bytes
Variable Size		  482348888 bytes
Database Buffers	  578813952 bytes
Redo Buffers		    5554176 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/usr/local/oradata/orcl/data01.dbf'


SQL> select status from v$instance;

STATUS
------------
MOUNTED

Elapsed: 00:00:00.01

4、使用RMAN还原数据文件

RMAN> restore datafile 5;

Starting restore at 2020-04-09 18:07:17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=10 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00005 to /usr/local/oradata/orcl/data01.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/rmanbak/data01_backup.dbf
channel ORA_DISK_1: piece handle=/home/oracle/rmanbak/data01_backup.dbf tag=TAG20200409T175540
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
Finished restore at 2020-04-09 18:07:21

5、使用RMAN恢复数据文件

RMAN> recover datafile 5;

Starting recover at 2020-04-09 18:07:52
using channel ORA_DISK_1

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

Finished recover at 2020-04-09 18:07:52

6、打开数据库

RMAN> alter database open;

database opened

8、查看数据

登录scott,查看t1表中的数据:

SQL> select * from t1;

	ID NAME
---------- --------------------
	 1 Jack
   333 Jerry
	 2 Tome

三、使用backup命令备份数据文件

1、查看数据库信息

RMAN> report schema;

Report of database schema for database with db_unique_name ORCL

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    780      SYSTEM               ***     /usr/local/oradata/orcl/system01.dbf
2    520      SYSAUX               ***     /usr/local/oradata/orcl/sysaux01.dbf
3    225      UNDOTBS1             ***     /usr/local/oradata/orcl/undotbs01.dbf
4    15       USERS                ***     /usr/local/oradata/orcl/users01.dbf
5    50       DATA01               ***     /usr/local/oradata/orcl/data01.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    38       TEMP                 32767       /usr/local/oradata/orcl/temp01.dbf

2、备份数据文件data01

RMAN> backup datafile 5 format '/home/oracle/rmanbak/data_%d_%s_%p_%T';

Starting backup at 2020-04-09 18:17:18
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00005 name=/usr/local/oradata/orcl/data01.dbf
channel ORA_DISK_1: starting piece 1 at 2020-04-09 18:17:18
channel ORA_DISK_1: finished piece 1 at 2020-04-09 18:17:19
piece handle=/home/oracle/rmanbak/data_ORCL_67_1_20200409 tag=TAG20200409T181718 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2020-04-09 18:17:19

查看备份信息:

RMAN> list backup of datafile 5;

List of Backup Sets
===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
------- ---- -- ---------- ----------- ------------ -------------------
44      Full    17.80M     DISK        00:00:01     2020-04-09 18:17:19
        BP Key: 73   Status: AVAILABLE  Compressed: NO  Tag: TAG20200409T181718
        Piece Name: /home/oracle/rmanbak/data_ORCL_67_1_20200409
  List of Datafiles in backup set 44
  File LV Type Ckp SCN    Ckp Time            Name
  ---- -- ---- ---------- ------------------- ----
  5       Full 1655355    2020-04-09 18:17:18 /usr/local/oradata/orcl/data01.dbf

备份时限制备份片的大小:

RMAN> 

run {
    allocate channel c1 type disk format '/home/oracle/rmanbak/%d_data_%s_%p_%T'
    maxpiecesize=5m;
    backup datafile 5;
}

released channel: ORA_DISK_1
allocated channel: c1
channel c1: SID=10 device type=DISK

Starting backup at 2020-04-09 18:22:03
channel c1: starting full datafile backup set
channel c1: specifying datafile(s) in backup set
input datafile file number=00005 name=/usr/local/oradata/orcl/data01.dbf
channel c1: starting piece 1 at 2020-04-09 18:22:03
channel c1: finished piece 1 at 2020-04-09 18:22:04
piece handle=/home/oracle/rmanbak/ORCL_data_68_1_20200409 tag=TAG20200409T182203 comment=NONE
channel c1: starting piece 2 at 2020-04-09 18:22:04
channel c1: finished piece 2 at 2020-04-09 18:22:05
piece handle=/home/oracle/rmanbak/ORCL_data_68_2_20200409 tag=TAG20200409T182203 comment=NONE
channel c1: starting piece 3 at 2020-04-09 18:22:05
channel c1: finished piece 3 at 2020-04-09 18:22:06
piece handle=/home/oracle/rmanbak/ORCL_data_68_3_20200409 tag=TAG20200409T182203 comment=NONE
channel c1: starting piece 4 at 2020-04-09 18:22:06
channel c1: finished piece 4 at 2020-04-09 18:22:07
piece handle=/home/oracle/rmanbak/ORCL_data_68_4_20200409 tag=TAG20200409T182203 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:04
Finished backup at 2020-04-09 18:22:07
released channel: c1

查看备份信息:

RMAN> list backup of datafile 5;

List of Backup Sets
===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
------- ---- -- ---------- ----------- ------------ -------------------
44      Full    17.80M     DISK        00:00:01     2020-04-09 18:17:19
        BP Key: 73   Status: AVAILABLE  Compressed: NO  Tag: TAG20200409T181718
        Piece Name: /home/oracle/rmanbak/data_ORCL_67_1_20200409
  List of Datafiles in backup set 44
  File LV Type Ckp SCN    Ckp Time            Name
  ---- -- ---- ---------- ------------------- ----
  5       Full 1655355    2020-04-09 18:17:18 /usr/local/oradata/orcl/data01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
------- ---- -- ---------- ----------- ------------ -------------------
45      Full    17.88M     DISK        00:00:03     2020-04-09 18:22:06
  List of Datafiles in backup set 45
  File LV Type Ckp SCN    Ckp Time            Name
  ---- -- ---- ---------- ------------------- ----
  5       Full 1655504    2020-04-09 18:22:03 /usr/local/oradata/orcl/data01.dbf

  Backup Set Copy #1 of backup set 45
  Device Type Elapsed Time Completion Time     Compressed Tag
  ----------- ------------ ------------------- ---------- ---
  DISK        00:00:03     2020-04-09 18:22:06 NO         TAG20200409T182203

    List of Backup Pieces for backup set 45 Copy #1
    BP Key  Pc# Status      Piece Name
    ------- --- ----------- ----------
    74      1   AVAILABLE   /home/oracle/rmanbak/ORCL_data_68_1_20200409
    75      2   AVAILABLE   /home/oracle/rmanbak/ORCL_data_68_2_20200409
    76      3   AVAILABLE   /home/oracle/rmanbak/ORCL_data_68_3_20200409
    77      4   AVAILABLE   /home/oracle/rmanbak/ORCL_data_68_4_20200409

备份时压缩备份集:

RMAN> backup as compressed backupset datafile 5 format='/home/oracle/rmanbak/data01_compress.dbf';

Starting backup at 2020-04-09 18:27:23
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=10 device type=DISK
channel ORA_DISK_1: starting compressed full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00005 name=/usr/local/oradata/orcl/data01.dbf
channel ORA_DISK_1: starting piece 1 at 2020-04-09 18:27:23
channel ORA_DISK_1: finished piece 1 at 2020-04-09 18:27:24
piece handle=/home/oracle/rmanbak/data01_compress.dbf tag=TAG20200409T182723 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2020-04-09 18:27:24

查看备份信息:

RMAN> list backup of datafile 5;


List of Backup Sets
===================


BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
------- ---- -- ---------- ----------- ------------ -------------------
44      Full    17.80M     DISK        00:00:01     2020-04-09 18:17:19
        BP Key: 73   Status: AVAILABLE  Compressed: NO  Tag: TAG20200409T181718
        Piece Name: /home/oracle/rmanbak/data_ORCL_67_1_20200409
  List of Datafiles in backup set 44
  File LV Type Ckp SCN    Ckp Time            Name
  ---- -- ---- ---------- ------------------- ----
  5       Full 1655355    2020-04-09 18:17:18 /usr/local/oradata/orcl/data01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
------- ---- -- ---------- ----------- ------------ -------------------
45      Full    17.88M     DISK        00:00:03     2020-04-09 18:22:06
  List of Datafiles in backup set 45
  File LV Type Ckp SCN    Ckp Time            Name
  ---- -- ---- ---------- ------------------- ----
  5       Full 1655504    2020-04-09 18:22:03 /usr/local/oradata/orcl/data01.dbf

  Backup Set Copy #1 of backup set 45
  Device Type Elapsed Time Completion Time     Compressed Tag
  ----------- ------------ ------------------- ---------- ---
  DISK        00:00:03     2020-04-09 18:22:06 NO         TAG20200409T182203

    List of Backup Pieces for backup set 45 Copy #1
    BP Key  Pc# Status      Piece Name
    ------- --- ----------- ----------
    74      1   AVAILABLE   /home/oracle/rmanbak/ORCL_data_68_1_20200409
    75      2   AVAILABLE   /home/oracle/rmanbak/ORCL_data_68_2_20200409
    76      3   AVAILABLE   /home/oracle/rmanbak/ORCL_data_68_3_20200409
    77      4   AVAILABLE   /home/oracle/rmanbak/ORCL_data_68_4_20200409

BS Key  Type LV Size       Device Type Elapsed Time Completion Time    
------- ---- -- ---------- ----------- ------------ -------------------
46      Full    3.26M      DISK        00:00:01     2020-04-09 18:27:24
        BP Key: 78   Status: AVAILABLE  Compressed: YES  Tag: TAG20200409T182723
        Piece Name: /home/oracle/rmanbak/data01_compress.dbf
  List of Datafiles in backup set 46
  File LV Type Ckp SCN    Ckp Time            Name
  ---- -- ---- ---------- ------------------- ----
  5       Full 1655643    2020-04-09 18:27:23 /usr/local/oradata/orcl/data01.dbf

四、恢复数据文件

如果有多个备份集,默认使用最新的备份集恢复数据。

1、修改数据库中的数据

连接soctt用户,往t1表中添加一条记录:

SQL> select * from t1;

	ID NAME
---------- --------------------
	 1 Jack
       333 Jerry
	 2 Tome

Elapsed: 00:00:00.00
SQL> insert into t1 values(444,'John');

1 row created.

Elapsed: 00:00:00.02
SQL> commit;

Commit complete.

Elapsed: 00:00:00.02
SQL> select * from t1;

	ID NAME
---------- --------------------
	 1 Jack
       333 Jerry
       444 John
	 2 Tome

2、查看并删除数据文件

连接sys用户,查看数据文件信息,然后删除5号数据文件,命令如下:

SQL> select file_id,file_name from dba_data_files order by 1;

   FILE_ID FILE_NAME
---------- --------------------------------------------------
	 1 /usr/local/oradata/orcl/system01.dbf
	 2 /usr/local/oradata/orcl/sysaux01.dbf
	 3 /usr/local/oradata/orcl/undotbs01.dbf
	 4 /usr/local/oradata/orcl/users01.dbf
	 5 /usr/local/oradata/orcl/data01.dbf
	 
SQL> host rm /usr/local/oradata/orcl/data01.dbf

3、重启数据库

由于缺少数据文件,数据库只能启动到mount状态。

SQL> startup force;
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size		    2220200 bytes
Variable Size		  482348888 bytes
Database Buffers	  578813952 bytes
Redo Buffers		    5554176 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/usr/local/oradata/orcl/data01.dbf'


SQL> select status from v$instance;

STATUS
------------
MOUNTED

Elapsed: 00:00:00.01

4、使用RMAN还原数据文件、恢复数据文件、打开数据库

RMAN> 

run {
    restore datafile 5;
    recover datafile 5;
    alter database open;
5> }

Starting restore at 2020-04-09 18:34:09
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=133 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00005 to /usr/local/oradata/orcl/data01.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/rmanbak/data01_compress.dbf
channel ORA_DISK_1: piece handle=/home/oracle/rmanbak/data01_compress.dbf tag=TAG20200409T182723
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
Finished restore at 2020-04-09 18:34:13

Starting recover at 2020-04-09 18:34:13
using channel ORA_DISK_1

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

Finished recover at 2020-04-09 18:34:13

database opened

5、查看数据

登录scott,查看t1表中的数据:

SQL> connect scott/tiger;
Connected.
SQL> select * from t1;

	ID NAME
---------- --------------------
	 1 Jack
   333 Jerry
   444 John
	 2 Tome

五、恢复数据文件时改变数据文件的位置

默认情况下,数据文件恢复到原来的位置。也可以改变数据文件恢复之后的位置,步骤如下:

1、查看数据文件

RMAN> report schema;

Report of database schema for database with db_unique_name ORCL

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    780      SYSTEM               ***     /usr/local/oradata/orcl/system01.dbf
2    530      SYSAUX               ***     /usr/local/oradata/orcl/sysaux01.dbf
3    225      UNDOTBS1             ***     /usr/local/oradata/orcl/undotbs01.dbf
4    15       USERS                ***     /usr/local/oradata/orcl/users01.dbf
5    50       DATA01               ***     /usr/local/oradata/orcl/data01.dbf
6    10       DATA02               ***     /home/oracle/data02.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    20       TEMP                 32767       /usr/local/oradata/orcl/temp01.dbf

2、备份数据文件data02

RMAN> backup datafile 6 format '/home/oracle/rmanbak/data02.dbf';

Starting backup at 2020-04-10 11:24:07
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=00006 name=/home/oracle/data02.dbf
channel ORA_DISK_1: starting piece 1 at 2020-04-10 11:24:07
channel ORA_DISK_1: finished piece 1 at 2020-04-10 11:24:08
piece handle=/home/oracle/rmanbak/data02.dbf tag=TAG20200410T112407 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2020-04-10 11:24:08

3、恢复数据文件data02并且改变位置

把数据文件data02.dbf保存到/usr/local/oradata/orcl目录下。

run {
    set newname for datafile 6 to '/usr/local/oradata/orcl/data02.dbf';
    restore datafile 6;
    switch datafile all;
    recover datafile 6;
    alter database open;
7> }

executing command: SET NEWNAME

Starting restore at 2020-04-10 11:48:46
using channel ORA_DISK_1
using channel ORA_DISK_2

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00006 to /usr/local/oradata/orcl/data02.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/rmanbak/data02.dbf
channel ORA_DISK_1: piece handle=/home/oracle/rmanbak/data02.dbf tag=TAG20200410T112407
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 2020-04-10 11:48:47

datafile 6 switched to datafile copy
input datafile copy RECID=17 STAMP=1037360927 file name=/usr/local/oradata/orcl/data02.dbf

Starting recover at 2020-04-10 11:48:48
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-10 11:48:48

database opened

说明:以上命令如果是第二次执行,可能会报以下错误:

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of switch command at 04/10/2020 11:38:30
ORA-19625: error identifying file /usr/local/oradata/orcl/data02.dbf
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

说明:产生以上错误的原因是:rman在setnewname之后的restore过程,是将现有的数据文件做一份副本,而该副本的信息保存在rman知识库中,当再一次进行restore时,rman试图寻找最新的备份(也就是数据文件副本),而该数据文件副本已经被删除,于是报错。解决的方法是执行以下两条命令,以清除rman知识库中中的副本信息:

RMAN> list copy of datafile 6;

RMAN> delete copy of datafile 6;

4、查看数据文件信息

可以发现,数据文件data02的位置已经发生了变化。

RMAN> report schema;

Report of database schema for database with db_unique_name ORCL

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    780      SYSTEM               ***     /usr/local/oradata/orcl/system01.dbf
2    530      SYSAUX               ***     /usr/local/oradata/orcl/sysaux01.dbf
3    225      UNDOTBS1             ***     /usr/local/oradata/orcl/undotbs01.dbf
4    15       USERS                ***     /usr/local/oradata/orcl/users01.dbf
5    50       DATA01               ***     /usr/local/oradata/orcl/data01.dbf
6    10       DATA02               ***     /usr/local/oradata/orcl/data02.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    20       TEMP                 32767       /usr/local/oradata/orcl/temp01.dbf
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章