您的位置:首页 > 数据库 > Oracle

ORACLE使用RMAN对SYSTEM表空间进行介质恢复

2013-09-17 11:27 676 查看
注意:数据库应该支持在归档模式。

1.对SYSTEMG表空间做一个备份

[oracle@bys001 ~]$ rman target /

Recovery Manager: Release 11.2.0.1.0 - Production on Tue Sep 17 10:42:18 2013

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

connected to target database: BYS1 (DBID=3957527513)

RMAN> list backup;

using target database control file instead of recovery catalog

specification does not match any backup in the repository

RMAN> backup tablespace system;

Starting backup at 17-SEP-13

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=45 device type=DISK

channel ORA_DISK_1: starting full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

input datafile file number=00001 name=/u01/oradata/bys1/system01.dbf

channel ORA_DISK_1: starting piece 1 at 17-SEP-13

channel ORA_DISK_1: finished piece 1 at 17-SEP-13

piece handle=/u01/flash_recovery_area/BYS1/backupset/2013_09_17/o1_mf_nnndf_TAG20130917T104438_93hjjqph_.bkp tag=TAG20130917T104438 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:02:26

channel ORA_DISK_1: starting full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

including current control file in backup set

including current SPFILE in backup set

channel ORA_DISK_1: starting piece 1 at 17-SEP-13

channel ORA_DISK_1: finished piece 1 at 17-SEP-13

piece handle=/u01/flash_recovery_area/BYS1/backupset/2013_09_17/o1_mf_ncsnf_TAG20130917T104438_93hjok2q_.bkp tag=TAG20130917T104438 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03

Finished backup at 17-SEP-13

RMAN> exit

##################################################################################################

2.创建一个表空间,并在此表空间上建表

BYS@bys1>select log_mode from v$database;

LOG_MODE

------------
ARCHIVELOG

BYS@bys1>select * from user_role_privs;

USERNAME                       GRANTED_ROLE                   ADM DEF OS_

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

BYS                            DBA                            NO  YES NO

建表空间和表
BYS@bys1>create tablespace rmantest datafile '/u01/oradata/bys1/rmantest.dbf' size 10m;

BYS@bys1>create table test5 tablespace rmantest as select * from dba_objects where 1=0;

col file_name for a40

BYS@bys1>select file_name,tablespace_name,bytes/1024/1024 m from dba_data_files union select file_name,tablespace_name,bytes/1024/1024 m from dba_temp_files;

FILE_NAME                                TABLESPACE_NAME                         M

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

/u01/oradata/bys1/example01.dbf          EXAMPLE                               100
/u01/oradata/bys1/rmantest.dbf           RMANTEST                               10

/u01/oradata/bys1/sysaux01.dbf           SYSAUX                                620

/u01/oradata/bys1/system01.dbf           SYSTEM                                690

/u01/oradata/bys1/temp01.dbf             TEMP                                  771

/u01/oradata/bys1/undotbs01.dbf          UNDOTBS1                              125

/u01/oradata/bys1/users01.dbf            USERS                             1703.75

BYS@bys1>select table_name,tablespace_name from user_tables where table_name='TEST5';

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------

TEST5                          RMANTEST

BYS@bys1>select df.tablespace_name,df.sum_df_m as space_m,df.sum_df_m-fs.sum_fs_m as used_m,fs.sum_fs_m as free_space,to_char(trunc((df.sum_df_m-fs.sum_fs_m)/df.sum_df_m,2)*100) as "used_%" from (select tablespace_name,sum(bytes/1024/1024) as sum_df_m from
dba_data_files group by tablespace_name) df,(select tablespace_name,sum(bytes/1024/1024) as sum_fs_m from dba_free_space group by tablespace_name) fs where df.tablespace_name=fs.tablespace_name  and df.tablespace_name='RMANTEST';

TABLESPACE_NAME                   SPACE_M     USED_M FREE_SPACE used_%

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

RMANTEST                               10     1.0625     8.9375 10

BYS@bys1>exit

################################################################

3.模拟SYSTEM表空间故障--这里是把SYSTEM表空间的数据文件改名

发现此时数据库还是正常运行,并且可以做DML操作。但是DDL或涉及数据字典表的操作会报错。--也验证了删除系统表空间的数据文件数据库并不会SHUTDOWN.

使用shutdown immediate;关闭数据库时因为需要向数据文件中写入CHECKPOING相关信息,所以报错。使用ABORT选项关闭数据库。

此时打开数据库会报错,无法锁定数据文件。此时数据库是MOUNT状态

[oracle@bys001 bys1]$ pwd

/u01/oradata/bys1

[oracle@bys001 bys1]$ ls

control01.ctl  redo01.log  redo03.log    sysaux01.dbf  temp01.dbf     users01.dbf

example01.dbf  redo02.log  rmantest.dbf  system01.dbf  undotbs01.dbf

[oracle@bys001 bys1]$ mv system01.dbf system01.dbfa

[oracle@bys001 bys1]$ ls

control01.ctl  redo01.log  redo03.log    sysaux01.dbf   temp01.dbf     users01.dbf

example01.dbf  redo02.log  rmantest.dbf  system01.dbfa  undotbs01.dbf

[oracle@bys001 bys1]$ sqlplus / as sysdba

SYS@bys1>select open_mode from v$database;

OPEN_MODE

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

READ WRITE

SYS@bys1>conn bys/bys

Connected.

BYS@bys1>select * from test5;

no rows selected

BYS@bys1>insert into test5 select * from dba_objects where rownum<5;

4 rows created.

BYS@bys1>commit;
Commit complete.

此时查询新建的表不报错:

BYS@bys1>select count(*) from test5;

  COUNT(*)

----------
         4

建表时报错--涉及数据字典,数据字典在系统表空间

BYS@bys1>create table test6 as select * from emp;

create table test6 as select * from emp

                                    *

ERROR at line 1:

ORA-00604: error occurred at recursive SQL level 1

ORA-01116: error in opening database file 1
ORA-01110: data file 1: '/u01/oradata/bys1/system01.dbf'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3

ORA-00604: error occurred at recursive SQL level 1
ORA-01116: error in opening database file 1

ORA-01110: data file 1: '/u01/oradata/bys1/system01.dbf'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3

BYS@bys1>select * from tab;

select * from tab

              *

ERROR at line 1:

ORA-00604: error occurred at recursive SQL level 1

ORA-01116: error in opening database file 1

ORA-01110: data file 1: '/u01/oradata/bys1/system01.dbf'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3

ORA-00604: error occurred at recursive SQL level 1

ORA-01116: error in opening database file 1

ORA-01110: data file 1: '/u01/oradata/bys1/system01.dbf'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3

BYS@bys1>conn / as sysdba

Connected.

SYS@bys1>shutdown immediate;
ORA-01116: error in opening database file 1

ORA-01110: data file 1: '/u01/oradata/bys1/system01.dbf'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3

SYS@bys1>select open_mode from v$database;

OPEN_MODE

--------------------
READ WRITE

SYS@bys1>shutdown abort;

ORACLE instance shut down.

SYS@bys1>startup;

ORACLE instance started.

Total System Global Area  631914496 bytes

Fixed Size                  1338364 bytes

Variable Size             260047876 bytes

Database Buffers          364904448 bytes

Redo Buffers                5623808 bytes

Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file

ORA-01110: data file 1: '/u01/oradata/bys1/system01.dbf'

SYS@bys1>select status from v$instance;

STATUS

------------
MOUNTED

######################################################

4,使用RMAN恢复系统表空间

RMAN> list backup;

List of Backup Sets

===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time

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

1       Full    596.67M    DISK        00:02:19     17-SEP-13      

        BP Key: 1   Status: AVAILABLE  Compressed: NO  Tag: TAG20130917T104438

        Piece Name: /u01/flash_recovery_area/BYS1/backupset/2013_09_17/o1_mf_nnndf_TAG20130917T104438_93hjjqph_.bkp

  List of Datafiles in backup set 1

  File LV Type Ckp SCN    Ckp Time  Name

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

  1       Full 1646291    17-SEP-13 /u01/oradata/bys1/system01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time

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

2       Full    9.64M      DISK        00:00:10     17-SEP-13      

        BP Key: 2   Status: AVAILABLE  Compressed: NO  Tag: TAG20130917T104438

        Piece Name: /u01/flash_recovery_area/BYS1/backupset/2013_09_17/o1_mf_ncsnf_TAG20130917T104438_93hjok2q_.bkp

  SPFILE Included: Modification time: 16-SEP-13

  SPFILE db_unique_name: BYS1

  Control File Included: Ckp SCN: 1646360      Ckp time: 17-SEP-13

RMAN> restore tablespace system;

Starting restore at 17-SEP-13

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=18 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 00001 to /u01/oradata/bys1/system01.dbf

channel ORA_DISK_1: reading from backup piece /u01/flash_recovery_area/BYS1/backupset/2013_09_17/o1_mf_nnndf_TAG20130917T104438_93hjjqph_.bkp

channel ORA_DISK_1: piece handle=/u01/flash_recovery_area/BYS1/backupset/2013_09_17/o1_mf_nnndf_TAG20130917T104438_93hjjqph_.bkp tag=TAG20130917T104438

channel ORA_DISK_1: restored backup piece 1

channel ORA_DISK_1: restore complete, elapsed time: 00:01:55

Finished restore at 17-SEP-13

RMAN> recover tablespace system;

Starting recover at 17-SEP-13

using channel ORA_DISK_1

starting media recovery

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

Finished recover at 17-SEP-13

RMAN> alter database open;

database opened

RMAN> exit

Recovery Manager complete.

########################################################################

6.登陆数据库,查看数据是否正常

[oracle@bys001 bys1]$ sqlplus / as sysdba

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SYS@bys1>select open_mode from v$database;

OPEN_MODE

--------------------
READ WRITE

SYS@bys1>conn bys/bys

Connected.
可以看到,备份的SYSTEM表空间之后的创建表空间、建表插入数据的操作产生的数据都正常。

BYS@bys1>select count(*) from test5;

  COUNT(*)

----------

         4

BYS@bys1>col file_name for a40

BYS@bys1>select file_name,tablespace_name,bytes/1024/1024 m from dba_data_files union select file_name,tablespace_name,bytes/1024/1024 m from dba_temp_files;

FILE_NAME                                TABLESPACE_NAME                         M

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

/u01/oradata/bys1/example01.dbf          EXAMPLE                               100
/u01/oradata/bys1/rmantest.dbf           RMANTEST                               10

/u01/oradata/bys1/sysaux01.dbf           SYSAUX                                620

/u01/oradata/bys1/system01.dbf           SYSTEM                                690

/u01/oradata/bys1/temp01.dbf             TEMP                                  771

/u01/oradata/bys1/undotbs01.dbf          UNDOTBS1                              125

/u01/oradata/bys1/users01.dbf            USERS                             1703.75
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: