Backup and Recovery
Backup and Recovery
And
Recovery
Oracle 10g
ﻤﻤﺎ ﻻ ﺸﻙ ﻓﻴﻪ ﺍﻥ ﻋﻤﻠﻴﺔ ﺍﻟﻤﺤﺎﻓﻅﺔ ﻋﻠﻲ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻥ ﺃﻫﻡ ﻤﺴﺅﻟﻴﺎﺕ ﻤﺩﻴﺭ ﻗﺎﻋﺩﺓ
ﺍﻟﺒﻴﺎﻨﺎﺕ ) ، (DBAﻟﺫﺍ ﻭﺠﺏ ﻋﻠﻲ ﻤﺩﻴﺭ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻻﻫﺘﻤﺎﻡ ﺒﻬﺫﺍ ﺍﻟﺠﺎﻨﺏ ﺃﻴﻤﺎ
ﺇﻫﺘﻤﺎﻡ ،ﻭﻟﻘﺩ ﺭﺃﻴﺕ ﺃﻥ ﺍﻓﻴﺩ ﻨﻔﺴﻲ ﻭﺃﺤﺒﺎﺌﻲ ﻓﻲ ﻫﺫﺍ ﺍﻟﻤﻨﺘﺩﻱ ﺍﻟﺭﺍﺌﻊ ﻟﻴﺱ ﺒﺒﺤﺙ ﻓﻲ ﻫﺫﺍ
ﺍﻟﻤﺠﺎل ﺍﻟﻭﺍﺴﻊ ﻭﺇﻨﻤﺎ ﻋﺭﺽ ﺒﻌﺽ ﺍﻟﺴﻨﺎﺭﻴﻭﻫﺎﺕ ﺍﻟﺘﻲ ﺃﺭﻱ ﺃﻨﻬﺎ ﻭﺍﺴﻌﺕ ﺍﻻﻨﺘﺸﺎﺭ
ﻤﺴﺘﺨﺩﻤﹰﺎ ﺍل Physical backupﺒﻨﻭﻋﻴﻪ ﺍل). (cold & hot
Logical Export
When db down
Cold
Backup Physical
When db up
Hot
RMAN
Cold
Backup
Tape Disk NFS present controlfile
Simple restoring
Possible if
Destination
No archive
log mode
Complete
recovery
Cold
backup Restoring
+ recovery
Type
Archive
log mode Incomplete
recovery
Shut down
Online
Simple
restoring Offline
until cancel
Offline
O/S level until time
until SCN
Controlfile
Backup
Redologfiles
datafiles
Cold Backup
ﺴﺄﻗﻭﻡ ﻫﻨﺎ ﺒﺸﺭﺡ ﺒﺴﻴﻁ ﻟﻠﻤﺨﻁﻁ ﺍﻟﺴﺎﺒﻕ ﺍﻟﺫﻱ ﻴﻤﺜل ﻋﻤﻠﻴﺔ ﺍل cold
backupﻭﺍل restoreﻭﺍل: recovery
: Shut downﺒﻤﺎ ﺃﻨﻨﺎ ﻨﺘﻜﻠﻡ ﻋﻥ ﺍل cold backupﻓﻌﻤﻠﻴﺔ ﺍﻏﻼﻕ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻤﺭ
ﻀﺭﻭﺭﻱ ﻭﺃﺴﺎﺴﻲ ﻗﺒل ﺒﺩﺀ ﻋﻤﻠﻴﺔ ﺍل . backupﺤﺘﻲ ﻨﻀﻤﻥ :
) (SCN data file headers matches the SCN in the control files
: backupﻭﻨﻌﻨﻲ ﻫﻨﺎ ﺃﻨﻭﺍﻉ ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﺘﻲ ﻴﺘﻡ ﻋﻤل ﺍل cold backupﻟﻬﺎ ﻭﻫﻲ ) :
. (controlfile,datafiles,redolog files
: Simple restoringﻫﻨﺎ ﻓﻘﻁ ﻨﻘﻭﻡ ﺒﻌﻤل ﻨﺴﺦ ﻤﻠﻔﺎﺕ ﺍل backupﻭﺍﺭﺠﺎﻋﻬﺎ ﺍﻟﻲ
ﻤﻭﻀﻌﻬﺎ ﺍﻻﺼﻠﻲ ﻓﻲ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺩﻭﻥ ﺘﻁﺒﻴﻕ ﻤﻠﻔﺎﺕ ﺍلarchive log files
ﻭﻤﻠﻔﺎﺕ ﺍل redo log filesﺍﻟﺘﻲ ﻟﻡ ﻴﺘﻡ ﺍﺭﺸﻔﺘﻬﺎ .
: Possible ifﺍﻱ ﺃﻨﻨﺎ ﻨﺴﺘﻁﻴﻊ ﻋﻤل ﺍل complete recoveryﺇﺫﺍ ﻟﻡ ﻨﻔﻘﺩ ﺍل
control fileﺍﻟﺤﻠﻲ ﻭﻜﺫﻟﻙ ﺍل redo log fileﺍﻟﺫﻱ ﻟﻡ ﻴﺘﻡ ﺍﺭﺸﻔﺘﻪ ﻭﻜﺫﻟﻙ ﺍل
archive log filesﺍﻟﺫﻱ ﻨﺤﺘﺎﺠﻪ ﻓﻲ ﻋﻤﻠﻴﺔ ﺍل.recovery
: Typeﻭﻫﻨﺎ ﻨﻘﺼﺩ ﺃﻨﻨﺎ ﻨﺘﺴﺘﻁﻴﻊ ﻋﻤل ﺍل complete recoveryﺴﻭﺍﺀ ﻜﺎﻨﺕ ﻗﺎﻋﺩﺓ
ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻐﻠﻘﺔ ﺃﻭ ﻤﻔﺘﻭﺤﺔ ،ﻭﺫﻟﻙ ﻻﻨﻨﺎ ﻟﻡ ﻨﻔﻘﺩ ﺍل controlfileﺍﻟﺤﺎﻟﻲ ﻭﺍل.redolog
: Incomplete recoveryﻫﻨﺎ ﻻ ﻨﺴﺘﻁﻴﻊ ﺇﺭﺠﺎﻉ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻟﻠﺤﺎل ﺍﻟﺫﻱ ﻜﺎﻨﺕ
ﻋﻠﻴﻪ ﻗﺒل ﺍﻟﻔﺸل ؛ ﺃﻱ ﺃﻨﻨﺎ ﻨﻔﻘﺩ ﺠﺯﺀ ﻤﻥ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺫﻟﻙ ﻻﻨﻨﺎ ﻓﻘﺩﻨﺎ ﺍلcontrolfile
ﺍﻟﺤﺎﻟﻲ ﺃﻭ ﺍل redolog fileﺍﻟﺫﻱ ﻟﻡ ﻨﺄﺭﺸﻔﻪ ﺍﻭ ﺍﺤﺩ ﻤﻠﻔﺎﺕ ﺍلarchive log files
ﺍﻟﺫﻱ ﻨﺤﺘﺎﺠﻪ ﻓﻲ ﻋﻤﻠﻴﺔ ﺍل. recovery
ﻫﻨﺎ ﻴﺠﺏ ﺍﻹﺸﺎﺭﺓ ﺇﻟﻲ ﺍﻨﻪ ﻓﻲ ﺤﺎﻟﺔ ﺍل incomplete recoveryﻴﺠﺏ ﻋﻠﻴﻨﺎ ﺃﻥ ﻨﻔﺘﺢ
ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺍﻟﻭﻀﻊ . resetlogs
ﻓﻔﻲ ﺍﻟﻭﻀﻊ : resetlogs
ﻟﺫﺍ ﻴﻨﺼﺢ ﺒﻌﻤل backupﺠﺩﻴﺩ ﺒﻌﺩ ﻓﺘﺢ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺍﻟﻭﻀﻊ resetlogs
.
Hot Backup
ﺇﺫﺍ ﺃﺭﺩﻨﺎ ﺃﻥ ﺭﺴﻡ ﻤﺨﻁﻁ ﻟﻌﻤﻠﻴﺔ ﺍل Hot Backupﻓﺈﻥ ﺍﻟﻤﺨﻁﻁ ﺍﻟﺴﺎﺒﻕ ﺍﻟﺨﺎﺹ
ﻻ ﻤﻥ offlineﻭﺫﻟﻙ ﻷﻨﻨﺎ
ﺒﺎل Cold Backupﺴﻭﻑ ﻴﺘﻐﻴﺭ ﺒﺤﻴﺙ ﻨﻀﻊ onlineﺒﺩ ﹰ
ﻨﻘﻭﻡ ﺒﻌﻤل ﺍل Backupﺩﻭﻥ ﺇﻏﻼﻕ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ .
ﺃﻴﻀﹰﺎ ﺍل Hot Backupﻻ ﻴﻜﻭﻥ ﻓﻘﻁ ﻋﻠﻲ ﻤﺴﺘﻭﻱ ﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ﻭﺇﻨﻤﺎ ﺃﻴﻀﹰﺎ
ﻋﻠﻲ ﻤﺴﺘﻭﻱ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ .
ﺃﻤﺎ ﺒﺎﻟﻨﺴﺒﺔ ﻟل recoveryﻓﺈﻥ ﺍﻟﻭﻀﻊ ﻻ ﻴﺘﻐﻴﺭ ﺴﻭﺍﺀ ﻜﺎﻥ ﺍﻟﻨﺴﺦ ﺍﻹﺤﺘﻴﺎﻁﻲ
ﺒﺎﺭﺩﹰﺍ ﺍﻡ ﺴﺎﺨﻨﹰﺎ .
Scenario (1)
sys> startup
sys> conn user1/user1
user1> insert into emp select * from emp;
user1> /
[up to some thousands records]
User1> commit;
User1> Select count(*) from emp;
[2000 records]
User1> !
dba12 ~]$ cd /disk3/oradata/orcl
dba12 orcl]$ rm –f *
dba12 orcl]$ exit
user1> conn /as sysdba
sys> select * from dba_users;
Error: (since c/r/d files missing)
sys> Shut abort
sys> !
dba12 ~]$ cd /disk3/oradata/orcl
dba12 orcl]$ cd cold
dba12 cold]$ cp –f * ..
dba12 cold]$ exit
sys> startup mount
sys> alter database recover automatic using backup controlfile
until cancel;
sys> recover cancel;
sys> alter database open resetlogs;
sys> conn user1/user1
user1> select count(*) from emp;
[2000 records]
sys> startup
sys> conn user1/user1
user1> insert into emp select * from emp;
user1> /
[up to some thousands records]
User1> commit;
User1> !
dba12 ~]$ cd /disk3/oradata/orcl
dba12 orcl]$ rm users.dbf
dba12 orcl]$ exit
user1> insert into emp select * from emp;
error: [since datafile users.dbf is missing]
sys> conn / as sysdba
sys> !
dba12 ~]$ cd /disk3/oradata/orcl
dba12 orcl]$ cd cold
dba12 cold]$ cp users.dbf ..
dba12 cold]$ exit
sys> select * from v$ recover_file;
[note the file#]
Sys> alter database datafile 6 offline;
Sys> alter database recover automatic datafile 6;
Sys> alter database datafile 6 online;
Scenario (3)
Sys> startup
Sys> conn user1/user1
User1> insert into emp select * from emp;
User1> / [up to some thousands records]
User1> commit;
User1> !
dba12 ~]$ cd /disk3/oradata/orcl
dba12 orcl]$ rm system.dbf
dba12 orcl]$ exit
user1> conn /as sysdba
sys> select * from dba_users;
error:[since system datafile missing]
sys> shut abort
sys> !
dba12 ~]$ cd /disk3/oradata/orcl/cold
dba12 cold$ cp system.dbf ..
dba12 cold]$ exit
sys> startup mount;
sys> select * from v$recover_file; [note file#]
sys> alter database recover automatic datafile 1 ;
sys> alter database open;
Scenario (4)
Sys> startup
Sys> conn user1/user1
User1> select count(*) from emp; [14 records]
User1> select count(*) from dept; [4 records]
User1> Insert into emp select * from emp;
User1> /
[up to some 448 records]
User1> commit;
User1> Set time on
18:50:35 user1> select count(*) from emp ; [448 records]
18:51:29 user1> drop table emp purge;
18:52:12 user1> insert into dept select * from dept;
18:53:08 user1> /
[up to some 256 records]
18:55:00 user1> commit;
18:56:09 user1> conn /as sysdba
18:56:59 sys> shut immediate
18:57:12 sys> !
dba12 ~]$ cd /disk3/oradata/orcl
dba12 orcl]$ mkdir warm
dba12 orcl]$ cp –f * warm
dba12 orcl]$ cd cold
dba12 cold]$ cp –f * .. [restoring backup]
dba12 cold]$ exit
19:00:00 sys> set time off
Sys> startup mount
Sys> alter database recover automatic using backup controlfile
until time ‘2007/04/17/18:50:35’;
Sys> alter database open resetlogs;
Sys> conn user1/user1
User1> select * from tab; [table ‘emp’ exists’]
User1> select count(*) from emp; [448 records]
User1> select count(*) from dept; [4 records]
User1> !
dba12 ~]$ cd /disk3/oradata/orcl
dba12 orcl]$exp file=emp.dmp tables=emp
username:user1/user1
dba12 orcl]$ exit
user1> conn /as sysdba
sys> shut immediate
sys> !
dba12 ~]$ cd /disk3/oradata/orcl/warm
dba12 warm]$ cp –f * ..
dba12 warm]$ exit
sys> startup
sys> conn user1/user1
user1> select * from tab; [table emp doesn’t exit]
user1> select count(*) from dept; [256]
user1> !
dba12 ~]$ cd /disk3/oradata/orcl
dba12 orcl]$ imp file=emp.dmp tables=emp
username:user1/user1
dba12 orcl]$ exit
user1> select * from tab; [table ‘emp’ exist]
user1> select count(*) from emp; [448 records]
user1> select count(*) from dept; [256 records]
Scenario (5)
Sys> startup
Sys> conn user1/user1
User1> insert into emp select * from emp;
User1> /
[up to some thousands of records]
User1> commit;
User1> !
dba12 ~]$ cd /disk3/oradata/orcl
dba12 orcl]$ rm redolog1a.log redolog2a.log
dba12 orcl]$ exit
user1> insert into emp select * from emp;
user1> /
[up to some thousands of records]
Error:
Sys> startup
Sys> conn user1/user1
User1> insert into emp select * from emp;
User1> /
[up to some thousands of records]
User1> commit;
User1> !
dba12 ~]$ cd /disk3/oradata/orcl
dba12 orcl]$ rm undotbs.dbf
dba12 orcl]$ exit
user1> insert into emp select * rom tab;
user1> /
[up to some thousands of records]
[Loss of controlfiles]
Sys> startup
Sys> conn user1/user1
User1> insert into emp select * from emp;
User1> /
[up to some thousands records]
User1> !
dba12 ~]$ cd /disk3/oradata/orcl
dba12 orcl]$ rm cont.ctl
dba12 orcl]$ exit
user1> conn /as sysdba
sys> alter tablespace user offline;
error: ORA 803
sys> shut abort
sys> !
dba12 ~]$ cd /disk3/oradata/orcl/cold
dba12 cold]$ cp cont.ctl ..
dba12 cold]$ exit
sys> startup mount
sys> recover database using backup controlfile until cancel;
sys> auto or /disk3/oradata/orcl/redolog1a.log;
[Must be current redolog file , else repeat above 2 steps with
other redolog groups member]
Sys> startup
Sys> conn user1/user1
User1> insert into emp select * from emp;
User1> /
User1> /
Error: not enough space
User1> commit;
User1> conn /as sysdba
Sys> alter tablespace ts1 add datafile ‘disk3/oradata/orcl/ts2.dbf’
size 5m;
Sys> conn user1/user1
User1> insert into select * from tab;
User1> /
[some more records]
User1> commit;
User1> !
dba12 ~]$ cd /disk3/oradata/orcl
dba12 orcl]$ rm ts2.dbf
dba12 orcl]$ exit
user1> insert into select * from emp;
Error:[since ts2.dbf is missing]
User1> conn /as sysdba
Sys> shut abort
Sys> startup mount
Sys> alter database create datafile ‘/disk3/oradata/orcl/ts2.dbf’;
Sys> alter database recover automatic datafile
‘/disk3/oradata/orcl/ts2.dbf’;
Sys> Alter database open;
Scenario (9)
[loss of datafile]
Sys> startup
Sys> create tablespace hb datafile ‘/disk3/oradata/orcl/hb.dbf’ size
20m;
Sys> create user user1 identified by user1 default tablespace hb;
Sys> grant connect,resource to user1;
Sys> conn user1/user1
User1> insert into emp select * from emp;
User1> commit;
User1> conn /as sysdba
Sys> alter tablespace hb begin backup;
Sys> !
dba12 ~]$ cd /disk/oradata/orcl
dba12 orcl]$ mkdir hot
dba12 orcl]$ cp hb.dbf hot/
dba12 ~]$exit
sys> alter tablespace hb end backup ;
sys> conn user1/user1
user1> insert into emp select * from emp;
user1> commit;
user1> !
dba12 ~]$ cd /disk3/oradata/orcl
dba12 orcl]$ rm hb.dbf
dba12 orcl]$ exit
user1> create table test (cno number(2));
ERROR:
User1> conn /as sysdba
Sys> shut abort
Sys> !
dba12 ~]$ cd /disk3/oradata/orcl/hot
dba12 hot]$ cp hb.dbf ..
dba12 hot]$ exit
sys> startup mount
sys> select * from v$backup;
sys> select * from v$recover_file; [note file#]
sys> alter database recover automatic datafile 9;
sys> alter database open;
Scenario (10)
[damage tempfile]