前几天听了boobooke上的海明老师RMAN视频教程,感觉讲得不错,自己做了些笔记,方便回忆
RMAN备份
1. 注意运行的rman命令,在linux下有很多个rman命令,一定要确保运行的是oracle下的rman,通过如下设置可以确保运行的rman是oracle下的rman
解决方案:
切换到oralce用户,编辑.bash_profile文件,确保最后一个PATH变量设置成如下形式
PATH=$ORACLE_HOME/bin:$PATH
2. 确保oracle数据库是运行在archivelog模式下,否则不能用rman进行备份和恢复
解决方案:
用sys用户作为系统管理员登录sqlplus,输入archive log list可以查看数据库的模式,如果不是archivelog模式,则运行(在sqlplus下运行)
2.1 shutdown normal或shutdown immediate关闭数据库
2.2 startup mount 启动数据库到mount状态
2.3 如果要启用归档模式,运行alter database archivelog 命令 (如果需要停止归档模式,运行alter database noarchivelog 命令)
2.4 (可选)Oracle10g之前,你还需要修改初始化参数使数据库处于自动归档模式。
在pfile/spfile中设置如下参数:
log_archive_start = true
重启数据库此参数生效,此时数据库处于自动归档模式。
也可以在数据库启动过程中,手工执行:
archive log start
使数据库启用自动归档,但是重启后数据库仍然处于手工归档模式
3.非catalog全备份
3.1 在oracle用户下运行rman(默认是nocatalog)或rman nocatalog进入rman
3.2 连接到target数据库:在rman下运行connect target /
3.3 查看备份信息:list backupset
3.4 全备份数据库 backup database;
3.5 list backupset
3.6 根据3.5的信息,查看备份后生成的相应的文件
3.7 在rman下运行show all查看参数
3.8 因为是用非catalog方式备份,所有备份信息保存在control file里面,而control file是二进制文件,需要用"strings 控制文件名"来查看
4.非catalog 0级增量备份
4.1 backup incremental level=0 database;(backup incremental level 0 database;)
4.2 跟全备份的唯一区别(几乎完全一样):往后的后续增量备份不能在全备份上进行,可以在0级增量备份集上进行
5.非catalog 1级增量备份(先要和0级的比较,所以时间也很长,但如果数据库没多大变化则文件应该很小)
5.1 backup incremental level 1 database
注:如果备份失败,会产生垃圾backupset,用change backupset 3 delete;进行删除,其中3是backupset编号
注:闪回恢复区问题
SQL> show parameter db_recovery_file_dest;
解决方法:
.增大闪回恢复区
ALTER SYSTEM SET db_recovery_file_dest_size=40g scope=both;
2.将归档设置到其他目录,修改alter system set log_archive_dest = 其他路径
可事先用show parameter log_archive_dest查看
3.转移或者删除闪回恢复区里的归档日志。
6. 启用自动备份
在root下输入 crontab -e -u oracle
45 23 * * 0 /u01/oracle/bin/rman target / msglog=/u01/rmanbak/bakl0.log cmdfile=/u01/rmanbak/script/bakl0
45 23 * * 1 /u01/oracle/bin/rman target / msglog=/u01/rmanbak/bakl2.log cmdfile=/u01/rmanbak/script/bakl2
45 23 * * 2 /u01/oracle/bin/rman target / msglog=/u01/rmanbak/bakl2.log cmdfile=/u01/rmanbak/script/bakl2
45 23 * * 3 /u01/oracle/bin/rman target / msglog=/u01/rmanbak/bakl1.log cmdfile=/u01/rmanbak/script/bakl1
45 23 * * 4 /u01/oracle/bin/rman target / msglog=/u01/rmanbak/bakl2.log cmdfile=/u01/rmanbak/script/bakl2
45 23 * * 5 /u01/oracle/bin/rman target / msglog=/u01/rmanbak/bakl2.log cmdfile=/u01/rmanbak/script/bakl2
45 23 * * 6 /u01/oracle/bin/rman target / msglog=/u01/rmanbak/bakl2.log cmdfile=/u01/rmanbak/script/bakl2
service crond restart(重启crontab服务)
7. controlfile丢失(rman)
dbid=3801665252
configure controlfile autobackup off;(默认)
configure controlfile autobackup on;(修改后controlfile 会自动备份)
//delete backupset 24;
8. 口令文件丢失(补充) </u01/oracle/dbs/orapwwilson> (跟rman备份完全无关,随时可以恢复)
cd /u01/oracle/dbs/
orapwd file=orapwwilson password=passw0rd entries=5
9. spfile丢失 (/u01/oracle/dbs/spfilewilson.ora)丢失后启动数据库不行
startup nomount;
set dbid 3801665252
resotre spfile from autobackup;(可能找不到,用下一条指令指定文件)
resotre spfile from '自动备份的controlfile';
shuddown immediate;
startup(如果不能启动需要 set dbid)
set dbid 3801665252
startup
10. controlfile丢失
shutdown abort;(controlfile丢失后,用shutdown immediate不能关数据库)
startup nomount;
restore controlfile from autobackup;
alter database mount;
recover database;
alter database open resetlogs;(之后要做full database backup,否则12步会失败,因为resetlogs后onlineredolog丢失<有待研究>)
11. redofile丢失(在sqlplus下执行)<在rman下执行可能有些问题>
shutdown immediate;(这里指online redolog file)
startup mount
recover database until cancel;
alter database open resetlogs;(之后要做full database backup,否则12步会失败,因为resetlogs后onlineredolog丢失<有待研究>)
12. datafile丢失 (老师演示不成功,其实很简单)(后来演示成功了)
rman target /
sql "alter database datafile 3 offline" (3是datafile的编号,用rman查看)
restore datafile 3
recover datafile 3
sql "alter database datafile 3 online"
13.tablespace丢失
rman target /
sql "alter tablespace users offline immediate" <users为tablespace名称>
restore tablespace users
recover tablespace users
sql "alter database users online"
14.非catalog完全恢复(在sqlplus下执行,先shutdown abort;)
startup nomount;(在rman下执行)
restore controlfile from autobackup;
alter database mount;
restore database;
recover database;(失败,redolog丢失)<替换方案,在sqlplus下,recover database until cancel,也失败,也因为没有redolog>
{//替代方案
sqlplub /nolog
conn /as sysdba;
create pfile from spfile
vi /u01/oracle/dbs/initwilson.ora (在最后添加:*._allow_resetlogs_corruption='TRUE')
在sqlplus下:shutdown immediate;
startup pfile=/u01/oracle/dbs/initwilson.ora mount
alter database open resetlogs;
}
alter database open resetlogs;
15. 基于时间点的恢复(不演示)
run{
set until time "to_date('07/01/02 15:00:00','mm/dd/yy hh24:mi:ss'"
restore database;
recover database;
alter database open resetlogs;
}
16.基于SCN的恢复
startup mount;
restore database UNTIL SCN 10000; (10000为SCN号,用rman查看)
recover database UNTIL SCN 10000;
alter database open resetlogs;(一见到这行就表明不是完全恢复,有可能丢失)
17.基于日志系列恢复(select * from v$log;)<不演示>
startup mount;
restore database UNTIL SEQUENCE 100 thread 1;
recover database UNTIL SEQUENCE 100 thread 1;
alter database open resetlogs;
18. restore跟recover(处理redolog)都是成对出现的
19. report schema
list backup
crosscheck backup
delete
<select * from dba_sys_privs>
20.catalog模式下的rman(作用跟用controlfile是完全一样的)<catalog database 跟 target database要在不同的机器上,实验环境下可以在通一台机器上进行,生产环境下应该分开>
.创建catalog表空间
create tablespace rman_ts datafile '/u01/oracle/rmants.dbf' size 20M;
.创建rman用户并授权
create user rman identified by rman default tablespace rman_ts quota unlimited on rman_ts;
grant recovery_catalog_owner to rman;
grant connect to rman;(如果失败再回来加,应该是不用加的)
.创建恢复目录
rman catalog rman/rman
rman>create catalog tablespace rman_ts;
rman>register database;
//rman>connect target /
通过如下方式来连接catalog database,之后的备份跟前面的完全一样
rman target / catalog rman/rman