Being an Oracle DBA we are aware that there are many types of backups are available for Oracle database maintenance in the same way we have multiple ways to restore our database.

One question raises here that why do we need have a different kind of ways to backup and recovery in Oracle database?

Answer of this question is that we can find a different kind of business with different requirements of business operation. On daily basis, if we have a full backup which takes hours which is not useful for an organization .

In normal life we do not have the same kind of problems and solutions, in the same manner, we can not apply only one way of backup and recovery for a different kind of conditions occurs in Oracle database.

We have multiple conditions with business requirements.Today we are going to have a look on recovery where we well know about  How to recover from a loss of a read-only tablespace.

We want to test how to restore and recover database from a loss of a read-only tablespace. We can anticipate there is a new feature introduced since Oracle Database 11gR1 that inverted the logic used until 10gR2. Let’s start with the examples. I’ve created a read-only tablespace named READ_ONLY using the following command:

SQL> CREATE TABLESPACE READ_ONLY DATAFILE '/home/oracle/app/oracle/oradata/orcl/read_only01.dbf' SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 10M;
SQL> ALTER TABLESPACE READ_ONLY READ ONLY;

The “report schema” command shows READ_ONLY tablespace information

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 831 SYSTEM *** /home/oracle/app/oracle/oradata/orcl/system01.dbf
2 1105 SYSAUX *** /home/oracle/app/oracle/oradata/orcl/sysaux01.dbf
3 40 UNDOTBS1 *** /home/oracle/app/oracle/oradata/orcl/undotbs01.dbf
4 225 USERS *** /home/oracle/app/oracle/oradata/orcl/users01.dbf
5 82 EXAMPLE *** /home/oracle/app/oracle/oradata/orcl/example01.dbf
6 7 APEX_1930613455248703 *** /home/oracle/app/oracle/oradata/orcl/APEX_1930613455248703.dbf
7 1 READ_ONLY *** /home/oracle/app/oracle/oradata/orcl/read_only01.dbf

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

The following are my current backup pieces:

RMAN> list backup summary;

List of Backups
===============
Key TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- ------------------- ------- ------- ---------- ---
20 B A A DISK 28-08-2012 23:27:18 1 1 YES TAG20120828T232717
21 B F A DISK 28-08-2012 23:31:06 1 1 YES TAG20120828T232719
22 B A A DISK 28-08-2012 23:31:18 1 1 YES TAG20120828T233118
23 B F A DISK 28-08-2012 23:31:20 1 1 NO TAG20120828T233119
24 B F A DISK 29-08-2012 08:25:11 1 1 NO TAG20120829T082509
25 B F A DISK 02-09-2012 21:46:12 1 1 NO TAG20120902T214611
26 B F A DISK 02-09-2012 22:11:24 1 1 NO TAG20120902T221123

I want to list all the datafiles included in one of my backup, so you can verify I haven’t any backup of my read-only tablespace.

RMAN> list backup tag TAG20120828T232719;

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

BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
21 Full 759.52M DISK 00:03:47 28-08-2012 23:31:06
BP Key: 21 Status: AVAILABLE Compressed: YES Tag: TAG20120828T232719
Piece Name: /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_08_28/o1_mf_nnndf_TAG20120828T232719_83vfl839_.bkp
List of Datafiles in backup set 21
File LV Type Ckp SCN Ckp Time Name
---- -- ---- ---------- ------------------- ----
1 Full 13907792 28-08-2012 23:27:19 /home/oracle/app/oracle/oradata/orcl/system01.dbf
2 Full 13907792 28-08-2012 23:27:19 /home/oracle/app/oracle/oradata/orcl/sysaux01.dbf
3 Full 13907792 28-08-2012 23:27:19 /home/oracle/app/oracle/oradata/orcl/undotbs01.dbf
4 Full 13907792 28-08-2012 23:27:19 /home/oracle/app/oracle/oradata/orcl/users01.dbf
5 Full 13907792 28-08-2012 23:27:19 /home/oracle/app/oracle/oradata/orcl/example01.dbf
6 Full 13907792 28-08-2012 23:27:19 /home/oracle/app/oracle/oradata/orcl/APEX_1930613455248703.dbf

It’s confirmed even when you issue the “report need backup” command, showing which datafiles, according to your rman backup policy configuration, need to be backed up. The command says datafile read_only01.dbf belonging to READ_ONLY tablespace must still be backed up.

RMAN> report need backup;

RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 1
Report of files with less than 1 redundant backups
File #bkps Name
---- ----- -----------------------------------------------------
7 0 /home/oracle/app/oracle/oradata/orcl/read_only01.dbf

Now let’s simulate a loss of that datafile

[oracle@localhost ~]$ cd /home/oracle/app/oracle/oradata/orcl
[oracle@localhost orcl]$ ll
total 2512876
-rw-rw---- 1 oracle oracle 7348224 Aug 29 07:39 APEX_1930613455248703.dbf
-rw-rw---- 1 oracle oracle 9814016 Sep 2 22:22 control01.ctl
-rw-rw---- 1 oracle oracle 85991424 Aug 29 07:39 example01.dbf
drwxrwxr-x 2 oracle oracle 4096 Jul 27 07:53 non_default_location
-rw-rw---- 1 oracle oracle 1056768 Sep 2 22:03 read_only01.dbf
-rw-rw---- 1 oracle oracle 52429312 Aug 29 07:39 redo01.log
-rw-rw---- 1 oracle oracle 52429312 Aug 29 07:39 redo02.log
-rw-rw---- 1 oracle oracle 52429312 Sep 2 22:22 redo03.log
-rw-rw---- 1 oracle oracle 1158684672 Sep 2 22:22 sysaux01.dbf
-rw-rw---- 1 oracle oracle 871374848 Sep 2 22:22 system01.dbf
-rw-rw---- 1 oracle oracle 20979712 Sep 2 21:56 temp01.dbf
-rw-rw---- 1 oracle oracle 41951232 Sep 2 22:22 undotbs01.dbf
-rw-rw---- 1 oracle oracle 235937792 Aug 29 07:39 users01.dbf
[oracle@localhost orcl]$ mv read_only01.dbf read_only01.dbf.20120902_222234.bck

If i try to start the database some errors are shown:

[oracle@localhost ~]$ sqlplus / as sysdba
SQL> startup
ORACLE instance started.

Total System Global Area 456146944 bytes
Fixed Size 1344840 bytes
Variable Size 352324280 bytes
Database Buffers 96468992 bytes
Redo Buffers 6008832 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/home/oracle/app/oracle/oradata/orcl/read_only01.dbf'
Now the first recovery scenario. Let's shutdown the instance
SQL> shutdown immediate;
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.

Connect with RMAN and start the instance in MOUNT mode

[oracle@localhost dbs]$ rman target /

Recovery Manager: Release 11.2.0.2.0 - Production on Sun Sep 2 22:31:25 2012

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

connected to target database (not started)

RMAN> startup mount;

Oracle instance started
database mounted

Total System Global Area 456146944 bytes

Fixed Size 1344840 bytes
Variable Size 352324280 bytes
Database Buffers 96468992 bytes
Redo Buffers 6008832 bytes

Issue a simply “restore tablespace” command. RMAN will create again the tablespace looking in the redo log.

RMAN> restore tablespace read_only;

Starting restore at 02-09-2012 22:33:02
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK

creating datafile file number=7 name=/home/oracle/app/oracle/oradata/orcl/read_only01.dbf
restore not done; all files read only, offline, or already restored
Finished restore at 02-09-2012 22:33:04

If we try to open the database it says, of course, one datafile needs to be recovered.

RMAN> alter database open;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 09/02/2012 22:33:57
ORA-01113: file 7 needs media recovery
ORA-01110: data file 7: '/home/oracle/app/oracle/oradata/orcl/read_only01.dbf'

Issue the recover command so you can be able to open your database.

RMAN> recover tablespace read_only;

Starting recover at 02-09-2012 22:34:35
using channel ORA_DISK_1

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

Finished recover at 02-09-2012 22:34:36

RMAN> alter database open;

database opened

Now have a look at the second recovery scenario. What it really makes the difference is when we have to recover a read-only tablespace after a restore of the entire database. Until a certain release Oracle didn’t restore the read-only tablespace: you had to expressly issue the restore command.

Let’s simulate a lost of all datafiles.

[oracle@localhost orcl]$ rm APEX_1930613455248703.dbf example01.dbf sysaux01.dbf system01.dbf undotbs01.dbf users01.dbf
[oracle@localhost orcl]$ mv read_only01.dbf read_only01.dbf.20120903_074547.bck
[oracle@localhost orcl]$ ll
total 165544
-rw-rw---- 1 oracle oracle 9814016 Sep 3 07:47 control01.ctl
drwxrwxr-x 2 oracle oracle 4096 Jul 27 07:53 non_default_location
-rw-rw---- 1 oracle oracle 1056768 Sep 2 22:34 read_only01.dbf.20120903_074547.bck
-rw-rw---- 1 oracle oracle 52429312 Sep 3 07:45 redo01.log
-rw-rw---- 1 oracle oracle 52429312 Sep 3 07:45 redo02.log
-rw-rw---- 1 oracle oracle 52429312 Sep 3 07:45 redo03.log
-rw-rw---- 1 oracle oracle 20979712 Sep 2 21:56 temp01.dbf

Start again RMAN and open your instance in MOUNT mode.

[oracle@localhost orcl]$ rman target /

Recovery Manager: Release 11.2.0.2.0 - Production on Mon Sep 3 07:47:09 2012

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

connected to target database (not started)

RMAN> startup mount

Oracle instance started
database mounted

Total System Global Area 456146944 bytes

Fixed Size 1344840 bytes
Variable Size 360712888 bytes
Database Buffers 88080384 bytes
Redo Buffers 6008832 bytes

Now it’s time to restore and recover the entire database

RMAN> restore database;

Starting restore at 03-09-2012 07:48:05
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 device type=DISK

creating datafile file number=7 name=/home/oracle/app/oracle/oradata/orcl/read_only01.dbf
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 /home/oracle/app/oracle/oradata/orcl/system01.dbf
channel ORA_DISK_1: restoring datafile 00002 to /home/oracle/app/oracle/oradata/orcl/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00003 to /home/oracle/app/oracle/oradata/orcl/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /home/oracle/app/oracle/oradata/orcl/users01.dbf
channel ORA_DISK_1: restoring datafile 00005 to /home/oracle/app/oracle/oradata/orcl/example01.dbf
channel ORA_DISK_1: restoring datafile 00006 to /home/oracle/app/oracle/oradata/orcl/APEX_1930613455248703.dbf
channel ORA_DISK_1: reading from backup piece /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_08_28/o1_mf_nnndf_TAG20120828T232719_83vfl839_.bkp
channel ORA_DISK_1: piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_08_28/o1_mf_nnndf_TAG20120828T232719_83vfl839_.bkp tag=TAG20120828T232719
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:04:15
Finished restore at 03-09-2012 07:52:22

RMAN> recover database;

Starting recover at 03-09-2012 07:52:59
using channel ORA_DISK_1

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

Finished recover at 03-09-2012 07:53:27
Open your database
RMAN> alter database open;

database opened

RMAN is able to gather information about READ_ONLY tablespace

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 831 SYSTEM *** /home/oracle/app/oracle/oradata/orcl/system01.dbf
2 1105 SYSAUX *** /home/oracle/app/oracle/oradata/orcl/sysaux01.dbf
3 40 UNDOTBS1 *** /home/oracle/app/oracle/oradata/orcl/undotbs01.dbf
4 225 USERS *** /home/oracle/app/oracle/oradata/orcl/users01.dbf
5 82 EXAMPLE *** /home/oracle/app/oracle/oradata/orcl/example01.dbf
6 7 APEX_1930613455248703 *** /home/oracle/app/oracle/oradata/orcl/APEX_1930613455248703.dbf
7 1 READ_ONLY *** /home/oracle/app/oracle/oradata/orcl/read_only01.dbf

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

RMAN>

Connecting to the instance I can verify my tablespace is there and available.

[oracle@localhost orcl]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Mon Sep 3 07:57:44 2012

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

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from hr.TEST_RO_TABLE;

A
----------
1
2
3
4
5

As we can see there’s no more any difference.

Until 11gR1 by default, the restore command skipped datafiles associated with read-only tablespaces. If you needed read-only tablespaces restored, then you had to use the “check readonly” command or restore each read-only tablespace individually.

Source

For More Detail , You can join us follow:

LinkedIn Group: Oracle Cloud DBAAS

Facebook Page: OracleHelp

About The Author

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.