Chinaunix首页 | 论坛 | 博客
  • 博客访问: 663143
  • 博文数量: 109
  • 博客积分: 6081
  • 博客等级: 准将
  • 技术积分: 1318
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 10:28
文章分类
文章存档

2011年(8)

2010年(39)

2009年(62)

分类: Oracle

2009-11-01 14:33:52


rman 备份知识:
一、在启用rman 备份时,要启用 archive log 模式。
查看是否处在 archive log 模式
SQL〉archive log list 
修改到 archive log 模式:
SQL〉startup mount
 
//修改archivelog 的文件格式
SQL>alter system set  log_archive_format='%t_%s_%r.dbf' scope=both;
 
//修改archivelog 的存放路径,下面为归档路径在ASM中diskgroup中
SQL>alter system set  log_archive_dest='+DGDATA/jw/arch/'  scope=both; 
SQL〉alter database  archivelog;
SQL〉archive log list;
SQL〉alter system  archive  log current;   //马上进行归档
SQL〉alter database open;
SQL〉archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            +DGDATA/jw/arch/
Oldest online log sequence     137
Next log sequence to archive   139
Current log sequence           139
 
 
二、登陆rman
#su - oracle
$rman nocatalog     直接进入rman,以非 catalog 方式进行备份
rman〉connect target /     连接到 target database
rman〉backup database;  对数据库进行全备
rman〉list backupset;    查看备份的情况
默认备份存放的目录:@ORACLE_BASE/flash_recovery_area/数据库 名/backupset/时间/
这个参数来之于
rman〉 show all;  查看备份参数
 
 
三、catalog  和nocatalog 的区别
rman  的nocatalog 方式下的备份信息放在 control file 里面
由于control file 是一个二进制的文件,在linux 地下用 strings 命令查看  control file 里面的信息。
#string control03.ctl    就可以看到有备份的信息出现了。
rman 的 catalog 方式时,备份信息放在 catalog database里面。
 
 
四、增量备份
增量备份 (0级增量备份也是全备,但可以做为后级增量备份的基础,full 备不能)
rman〉backup incremental level=0 database;
增量备份(1级增量备份)
rman〉backup incremental level=1 database;
备份 出来的文件小很多。
rman〉backupset list;

五、rman备份文件与信息一致性处理
利用 rman 对以前的 archivelog 进行处理提前备走,再修改切换到新的archivelog 的新目录。如果直接切换到新的归档,而之前的archivelog 没有用rman备走,那么应该采用以下操作:
#rman target /
rman> crosscheck archivelog all;      //一般在 archive log 备份失败时,需要需要重新检查。
rman> delete expired archivelog all;
在controlfile中记录着每一个archivelog的相关信息,当我们在OS下把这些物理文件delete掉或异常变动后,在controlfile中仍然记录着这些archivelog的信息,当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,也就是oracle并不知道这些文件已经不存在了!这时候我们要做手工的清除。
rman> crosscheck archivelog all;的作用就是检查控制文件和实际物理文件的差别。
rman> delete expired archivelog all;就是同步控制文件的信息和实际物理文件的信息。
如果单独执行crosscheck而没有执行delete那么备份还是失败的,原因是那些控制文件的信息和实际的信息还是不同
 
rman> crosscheck backupset; 是检查备份集和实际的文件
 
rman> delete expired backupset;  删除过期无效的备份集

1、备份集有两种状态A(Available,RMAN认为该项存在于备份介质上)X(Expired,备份存在于控制文件或恢复目录中,但是并没有物理存在于备份介质上)
2、crosscheck 的目的是检查RMAN 的目录以及物理文件,如果物理文件不存在于介质上,将标记为Expired。如果物理文件存在,将维持Available。如果原
先标记为Expired的备份集再次存在于备份介质上(如恢复了损坏的磁盘驱动器后),crosscheck将把状态重新从Expired标记回Available。
3、crosscheck 输出分两部分。第一部分列出确定存在于备份介质上的所有备份集片,第二部分列出不存在于备份介质上的备份集片,并将其标记为Expired。
当设置备份保存策略后,一个备份过期,crosscheck之后标记为丢弃的备份状态依旧为availabel,要删除丢弃备份
rman〉delete obsolete
 
五、rman 备份操作
# rman  nocatalog   以nocatalog 方式登录rman
rman〉connect target 
  连接到目标库 ,如果数据库及 监听没有启动,这是不行的应该
rman〉connect target /  提示连接到一个idle instance
rman〉startup    启动数据库这个根sqlplus 里面的操作一样的。
 
数据库全备
rman〉backup database plus archivelog delete input;  
这个也是一个全备(包括了datafile,controlfile,spfile,archivelog),可 以不要delete input ,表示备份完成后,把archive log 删除,以节约空间。
 
数据库增备
rman〉backup incremetal level=0 database plus archivelog;
rman〉backup incremetal level=1 database plus archivelog;
 
备份表空间
rman〉report schema; 显示整个数据库的规划情况表,包含tablespace, datafile等。
rman〉backup tablespace users;  全备份 users 表空间

备份控制文件
rman> backup current controlfile;  单独备份controlfile

rman> backup database include current controlfile;
全备份数据库时,默认 已经包含了,可以不指明。(可以通过这样来增加controlfile的镜像)
 
镜像备份,相当于拷贝:
rman〉copy datafile 5 to '/u01/rmanbak/tbs01bak.dbf';
 5 为对应于rman> report schema; 文件号
rman〉list copy;  显示copy 的镜像备份
 
rman批命令备份:
rman〉run{
allocate channel cha1 type disk;
backup format "/u01/rmanbak/full_%t"
tag full-backup 
database;
release channel cha1;
}
 
 
六、编写一周自动备份计划
1、编写备份脚本
#vi bakl0
run{
allocate channel cha1 type disk;
backup
incremetal level 0
format "/u01/rmanbak/inc0_%u_%T"
tag monday_inc0 
database;
release channel cha1;
}
#vi bakl1
run{
allocate channel cha1 type disk;
backup
incremetal level 1
format "/u01/rmanbak/inc1_%u_%T"
tag monday_inc1 
database;
release channel cha1;
}
#vi bakl2
run{
allocate channel cha1 type disk;
backup
incremetal level 2
format "/u01/rmanbak/inc2_%u_%T"
tag monday_inc2 
database;
release channel cha1;
}
#crontab -e -u oracle
45 23 * * 0 rman target / msglog=bakl0.log cmdfile=bakl0
45 23 * * 1 rman target / msglog=bakl0.log cmdfile=bakl2
45 23 * * 2 rman target / msglog=bakl0.log cmdfile=bakl2
45 23 * * 3 rman target / msglog=bakl0.log cmdfile=bakl1
45 23 * * 4 rman target / msglog=bakl0.log cmdfile=bakl2
45 23 * * 5 rman target / msglog=bakl0.log cmdfile=bakl2
45 23 * * 6 rman target / msglog=bakl0.log cmdfile=bakl2
#service crond restart
 
七、rman恢复
恢复control file控制文件,首先,关闭数据库
sql> shutdown abort;
#rman target /
rman〉startup nomount;
rman> restore controlfile from autobackup;  
rman〉quit
#rman  tartget /
rman>alter database mount;  //control 已经恢复了,可以mount 起来
rman>alter database resetlogs;  //会报错,应该recover database,会报 controlfile 有问题。
rman> recover database;
rman>alter database open resetlogs;

spfile 丢失,恢复
startup nomount;
set dbid 9815108;
restore spfile from autobackup;
shutdown immediate;
set dbid  9815108;
startup;
 

redolog file 丢失的恢复
#sqlplus / as sysdba
SQL>shutdown immediate;
SQL>startup mount;
SQL>recover database until  cancel;
SQL>alter database open resetlogs;
SQL>select * from dual;

datafile 丢失
rman>sql "alter database datafile 3 offline";  3为 datafile 的编号
rman>report schema;
rman>restore datafile 3
rman>recover datafile 3
rman>sql "alter database datafile 3 online";
表空间恢复:
rman〉sql "alter tablespace users offline";
或者
rman> sql "alter tablespace users offline immediate";
rman> restore tablespace users;
rman>recover tablespace users;
rman>sql "alter tablespace users online";
 
在数据库出现问题时,非catalog 方式完全恢复
startup nomount;
restore controlfile from autobackup;
alter database mount;
restore database;
recover database;
alter database open resetlogs;

八、catalog 数据库的建立
1、创建 catalog 所用的表空间
SQL〉create tablespace rman_ts datafile '/u01/oracle/rmants.dbf' size  20M;
2、创建RMAN 用户并授权
SQL〉 create user rman identified by rman default
tablespace rman_ts quota unlimited on rman_ts;
SQL> grant recovery_catalog_owner to rman;
SQL〉grant connect to rman;
SQL> desc dba_users;  //查看用户信息
SQL〉select username,account_status from dba_users;
SQL> desc dba_sys_privs
SQL〉select * from dba_sys_privs where grantee='resource';
查看授权资源之后,获得的权限
SQL〉select * from dba_sys_privs where  grantee='recovery_catalog_owner';
或者:
SQL> create user rman identified by rman;
SQL> alter user rman default tablespace rman_ts temporary tablespace temp;
SQL> alter user rman quota unlimited on rman_ts;
SQL> grant connect, resource, recovery_catalog_owner to rman;
SQL> exit;

3、创建恢复目录
#rman catalog rman/rman
rman> create catalog tablespace rman_ts;
rman>exit
4、在media server端的使用,注册catalog 数据库
配置media server 端的 tnsname 连接到 catalog rman 库
#rman target / catalog

rman> register database;
 
 
阅读(1203) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~