一、在启用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 sys/password@tnsname 连接到目标库 ,如果数据库及 监听没有启动,这是不行的应该
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/rman@tnsname
rman> register database;