分类: Oracle
2008-09-05 07:53:29
恢复目录: 打开
目标数据库:例程启动,数据库加载,mount 不能 open
因为目标数据库不在归档模式下,所以当进行备份/恢复操作的时候数据库无法打
开。目标数据库只能在 MOUNT 状态不能 Open,所以属于脱机备份。
非归档模式不备份 redo日志,只有完全备份和 readonly/offline表空间和数据文件 备份是有意义的,所以非归档模式最好不用 RMAN进行备份,备份语法与归档模式相同,所以这里只做简单介绍。
例: 使用默认的设置脱机全备份的语句
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> backup database;
RMAN> startup;
例:不使用默认的设置执行脱机备份操作 ,在备份命令中指定备份选项
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> run {
allocate channel c1 type disk format '/xxx/ming_%U';
allocate channel c2 type disk format '/xxx/ming_%U';
backup full tag full_db_backup format "/backups/db_t%t_s%s_p%p" (database);
backup current controlfile;
release channel c1 ;
release channel c2 ;
}
在这个例子中,我们分配了两个通道,备份位置是在/xxx。默认情况下,如果备份数据
文件 1 (SYSTEM 表空间),控制文件和参数文件也会备份。可以通过下面的命令显示恢复目录中记载的备份集信息: RMAN> list backupset of database;
$ rman target /
RMAN> startup mount
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;
只有 readonly/offline表空间的备份才有意义。
RMAN> run {
2> allocate channel dev1 type disk;
3> backup
4> tag tbs_users_read_only
5> format "/oracle/backups/tbs_users_t%t_s%s"
6> (tablespace users);
7> }
使用下列命令来显示恢复目录中该表的备份信息:
RMAN> list backupset of tablespace users;
RMAN> RUN{
sql "alter tablespace xx offline immediate;"
restore tablespace xx;
recover tablespace xx;
sql "alter tablespace xx online;"
}
RMAN> run {
2> allocate channel dev1 type "SBT_TAPE";
3> backup
4> format "cf_t%t_s%s_p%p"
5> tag cf_monday_night
6> (current controlfile);
7> release channel dev1;
8> }
注:数据库完全备份将自动备份控制文件。(或者备份时加 include current controlfile)
要用 RMAN 进行联机备份操作,数据库就必须位于 ARCHIVELOG 模式。恢复 目录必须打开,目标数据库例程必须启动,数据库加载或者打开。
这部分只介绍完全恢复,不完全恢复见下一节。
只备份数据文件 (如果 configure controlfile autobackup on; 将自动包括控件文件,
SPFILE):
RMAN> backup database;
同时备份归档日志,然后将备份后的归档日志删除
RMAN> backup database plus archivelog delete input;
明确指定同时备份控件文件:
RMAN> run{
allocate channel c1 type disk;
sql 'alter system archive log current';
backup full database include current controlfile tag 'dbfull'
format '/u06/oracle/rmanback/full_%u_%s_%p';
sql 'alter system archive log current';
release channel c1;
}
可以用 RMAN的 plus archvielog 选项简化数据库备份:
RMAN> run {
2> backup database
3> format '/xxfull%d_%T_%s'
4> plus archivelog
5> format '/xx/arch_%d_%T_%s'
6> delete all input;
7> }
完全恢复:
目标数据库必须是 mount状态
$ rman target /
RMAN> startup mount
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open;
备份命令:
RMAN> backup tablespace users ;
例:
RMAN> RUN{
allocate channel c1 type disk;
backup tablespace users tag 'ts_users' format '/oracle/rmanback/ts_%u_%s_%p' ;
release channel c1;
}
恢复:
如果我们只丢失了特定的表空间的数据文件,那么我们可以选择只恢复这个表空间,而 不是恢复整个数据库。表空间恢复可以在不关闭数据库的情况下进行,只需要将需要恢复的表空间 offline。
RMAN> RUN{
sql "alter tablespace xx offlineimmediate;"
restore tablespace xx;
recover tablespace xx;
sql "alter tablespace xx online;"
}
恢复到一个不同的位置:
RMAN> RUN{
sql "alter tablespace xx offline immediate;"
SET NEWNAME for datafile 1 to '/xx';
restore tablespace xx;
switch datafile 1;
recover tablespace xx;
sql "alter tablespace tbs1 online;"
}
备份命令:
RMAN> backup datafile 3;
RMAN> backup datafile 'D:\ORAC LE\ORADATA\TEST\TEST.DB';
恢复命令:
数 据文件 恢复与表 空间恢 复类 似 。假设数 据文件 号 为 5 的文件丢失 ,文 件名 是:
'E:\ORACLE\ORADATA\USERS.DBF', 那么我们恢复的时候可以指定文件号,也可以指定
文件名。
RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter tablespace users offline immediate";
4> restore datafile 4; --或者 restore 'E:\ORACLE\ORADATA\USERS.DBF'
5> recover datafile 4;
6> sql "alter tablespace users online";
7> release channel dev1;
8> }
恢复到一个不同的位置:
$ rman target /
RMAN> startup mount
RMAN> RUN{
sql "alter tablespace users offline immediate";
SET NEWNAME for datafile 9 to '/xx/user01.dbf';
restore datafile 9;
switch datafile all;
recover datafile 9;
sql "alter tablespace users online";
}
待续。。。。。。