使用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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章