【赛迪网-it技术报道】完整的oracle rman备份恢复参考示例:
1、建rman库作为repository
$more createrman_db1.sh
set echo on
spool makedb1.log
create database rman
datafile '/export/home/oracle/oradata/rman_data/system.dbf' size 50m autoextend
on next 640k
logfile '/export/home/oracle/oradata/rman_data/redo0101.log' size 10m,
'/export/home/oracle/oradata/rman_data/redo0201.log' size 10m
maxdatafiles 30
maxinstances 8
maxlogfiles 64
character set us7ascii
national character set us7ascii
;
disconnect
spool off
exit
@/export/home/oracle/8.1.6/rdbms/admin/catalog.sql;
rem ********** alter system tablespace *********
alter tablespace system
default storage ( initial 64k next 64k minextents 1 maxextents unlimited pctincr
ease 50);
alter tablespace system
minimum extent 64k;
rem ********** tablespace for rollback **********
create tablespace rbs datafile '/export/home/oracle/oradata/rman_data/rbs.dbf' s
ize 50m
autoextend on next 512k
minimum extent 512k
default storage ( initial 512k next 512k minextents 10 maxextents unlimited pc
tincrease 0 );
rem ********** tablespace for temporary **********
create tablespace temp datafile '/export/home/oracle/oradata/rman_data/temp.dbf'
size 50m
autoextend on next 64k
minimum extent 64k
default storage ( initial 64k next 64k minextents 1 maxextents unlimited pctincr
ease 0) temporary;
rem **** creating four rollback segments ****************
create public rollback segment rbs_0 tablespace rbs
storage ( optimal 64000k );
alter rollback segment "rbs_0" online;
rem **** sys and system users ****************
alter user sys temporary tablespace temp;
alter user system temporary tablespace temp;
disconnect
spool off
exit
$more createrman_db3.sh
spool crdb3.log
@/export/home/oracle/8.1.6/rdbms/admin/catproc.sql
@/export/home/oracle/8.1.6/rdbms/admin/caths.sql
@/export/home/oracle/8.1.6/rdbms/admin/otrcsvr.sql
connect system/manager
@/export/home/oracle/8.1.6/sqlplus/admin/pupbld.sql
disconnect
spool off
exit
2、建repository存放的表空间和rman用户
$more createrman_db4.sh
connect internal
create tablespace rman_ts
datafile '/export/home/oracle/oradata/rman_data/rman_ts.dbf'
size 20m default storage (initial 100k next 100k pctincrease 0);
create user rman_hainan identified by rman_hainan
temporary tablespace temp
default tablespace rman_ts quota unlimited on
rman_ts;
grant recovery_catalog_owner to rman_hainan;
grant connect ,resource to rman_hainan;
3、建catalog,注册目标数据库
$more createrman_db5.sh
rman catalog rman_hainan/rman_hainan@rman msglog=rman.log
create catalog ;
exit;
rman target sys/oracle@db1
connect catalog rman_hainan/rman_hainan@rman
register database;
exit;
4、可以开始做备份了
5、做全备
$more rmanshell
. /export/home/oracle/.profile
rman rcvcat rman_hainan/rman_hainan@rman target / cmdfile /export/home/oracle/ba
ckup_level0.rcv log /export/home/oracle/backup.log
$more backup_level0.rcv
resync catalog;
run {
allocate channel t1 type disk;
backup
incremental level 0
skip inaccessible
tag hot_db_bk_level0
filesperset 3
format '/export/home/oracle/bk_%s_%p_%t.bk'
(database);
sql 'alter system archive log current';
backup
filesperset 10
format '/export/home/oracle/a1_%s_%p_%t.ac'
(archivelog all delete input);
backup
format '/export/home/oracle/df_t%t_s%s_p%p.ct'
current controlfile ;
}
6、做增备
$more rmanshell1
rman rcvcat rman_hainan/rman_hainan@rman target / cmdfile backup_level1.rcv log
backup.log
$more backup_level1.rcv
resync catalog;
run {
allocate channel t1 type disk;
backup
incremental level 1
skip inaccessible
tag hot_db_bk_level1
filesperset 3
format 'bk_%s_%p_%t.bk1'
(database);
sql 'alter system archive log current';
backup
filesperset 10
format 'a1_%s_%p_%t.ac1'
(archivelog all delete input);
backup current controlfile;
}
1、 删除旧的全备
$rman rcvcat rman_hainan/rman_hainan@rman target /
recovery manager: release 8.1.6.0.0 - production
rman-06005: connected to target database: test (dbid=1692992254)
rman-06008: connected to recovery catalog database
rman> list backupset;
rman-03022: compiling command: list
list of backup sets
key recid stamp lv set stamp set count completion time
------- ---------- ---------- -- ---------- ---------- ----------------------
38 145 399987408 0 399987406 153 11-jun-00
根据key来删除旧的备份。
rman> allocate channel for maintenance type disk;
rman> change backupset 169 delete; ----------this is the command to remove the entry & os file
做完后可以看到list backupset和操作系统的文件都没有了。
2、 恢复
(1) 将数据库启动到nomount状态:
$svrmgrl
oracle server manager release 3.1.6.0.0 - production
copyright (c) 1997, 1999, oracle corporation. all rights reserved.
oracle8i enterprise edition release 8.1.6.0.0 - 64bit production
with the partitioning option
jserver release 8.1.6.0.0 - production
svrmgr> connect internal
connected.
svrmgr> startup nomount;
oracle instance started.
total system global area 339275684 bytes
fixed size 94116 bytes
variable size 318685184 bytes
database buffers 16384000 bytes
redo buffers 4112384 bytes
svrmgr> exit
server manager complete.
(2) 恢复控制文件:
$rman rcvcat rman_hainan/rman_hainan@rman target /
recovery manager: release 8.1.6.0.0 - production
rman-06006: connected to target database: test (not mounted)
rman-06008: connected to recovery catalog database
rman> run {
2> allocate channel d1 type disk;
3> restore controlfile;
4> release channel d1;
5> }
(3) 恢复数据文件
rman> run {
2> allocate channel d1 type disk;
3> sql "alter database mount";
4> restore datafile 1;
5> restore datafile 2;
6> restore datafile 3;
7> restore datafile 4;
8> release channel d1;
9> }
(4) 恢复日志文件
rman> run {
2> set archivelog destination to '/export/home/oracle/admin/test/arch';
3> allocate channel d1 type disk;
4> restore archivelog all;
5> release channel d1;
6> }
会把所有的日志文件恢复。
(5) 根据日志做recover
$svrmgrl
oracle server manager release 3.1.6.0.0 - production
copyright (c) 1997, 1999, oracle corporation. all rights reserved.
oracle8i enterprise edition release 8.1.6.0.0 - 64bit production
with the partitioning option
jserver release 8.1.6.0.0 - production
svrmgr> connect internal
connected.
svrmgr> recover database using backup controlfile until cancel;
ora-00279: change 51054 generated at 06/11/2000 11:38:37 needed for thread 1
ora-00289: suggestion : /export/home/oracle/admin/test/arch/arch_1_3.arc
ora-00280: change 51054 for thread 1 is in sequence #3
specify log: { log applied.
ora-00279: change 51058 generated at 06/11/2000 11:38:44 needed for thread 1
ora-00289: suggestion : /export/home/oracle/admin/test/arch/arch_1_4.arc
ora-00280: change 51058 for thread 1 is in sequence #4
ora-00278: log file '/export/home/oracle/admin/test/arch/arch_1_3.arc' no longer
needed for this recovery
specify log: {
log applied.
ora-00279: change 51074 generated at 06/11/2000 11:40:20 needed for thread 1
ora-00289: suggestion : /export/home/oracle/admin/test/arch/arch_1_5.arc
ora-00280: change 51074 for thread 1 is in sequence #5
ora-00278: log file '/export/home/oracle/admin/test/arch/arch_1_4.arc' no longer
needed for this recovery
specify log: { cancel
media recovery cancelled.
svrmgr> alter database open resetlogs;
statement processed.
恢复完成。
svrmgr> select table_name from user_tables;
table_name
------------------------------
bonus
dept
emp
salgrade
test
test_zmy
zmy
zmy_dept
zmy_emp
9 rows selected.
可以检查看到,所有的都恢复了,包括全备份后的事务。(只要有归档日志,都可以恢复)。
3、恢复后rman数据库的同步
$rman rcvcat rman_hainan/rman_hainan@rman target /
recovery manager: release 8.1.6.0.0 - production
rman-06005: connected to target database: test (dbid=1692992254)
rman-06008: connected to recovery catalog database
rman> reset database;
rman-03022: compiling command: reset
rman-03023: executing command: reset
rman-08006: database registered in recovery catalog
rman-03023: executing command: full resync
rman-08029: snapshot controlfile name set to default value: ?/dbs/snapcf_@.f
rman-08002: starting full resync of recovery catalog
rman-08004: full resync complete
闽公网安备 35060202000074号