- 论坛徽章:
- 0
|
原帖由 netbackup 于 2009-7-1 16:18 发表
无牙就是厉害!
controlfile_record_keep_time缺省值是7天,前面有兄弟说这个过期后数据恢复的问题,其实没有关系,即使超过这个时间值,仍然可以恢复数据库的,以nocatalog方式为例,就可以通过PL/SQL从备 ...
controlfile_record_keep_time ???
Oralce 9i开始nocatalog备份方式备份记录写入controlfile保留是以次数为准不是以多少天为准,通过配置rman参数CONFIGURE RETENTION POLICY TO REDUNDANCY来实现。
controlfile_record_keep_time是说你的备份记录存在于controlfile中最大是记当量是保留7天的记录,并不是说7天后就清除。准确点说是:
control_file_record_keep_time表示控制文件里可重复使用的记录所能保存的最小天数。如果新增加一条记录到控制文件可以重复使用的部分,这时最老的记录尚没有超出最小保留天数,那么记录将控制文件的这一部分将扩展。如果将该参数设置为0,那么控制文件可以重复使用的部分将永远不会扩展。
虽然controfile的大小是可以手工调整的,但不可以动态增长(就是手工修改也得停机).所以当备份记录过多时可能将controfile空间撑满.但在实际环境中controfile中存7000-8000条备份记录是没有问题的,生产环境中一年之内产生7000-8000次备份的量的情况很小,所以不必担心.
也就说只要不设为0 controlfile中就有记录存在,当然设的太小的话你每备份一次就得把controlfile备份一次,在实际生产环境中我们通常会每次备份完成就备一次controlfile,当此参数设的太小的情况下,大不了恢复之前把相应的controlfile导一次就完事了。
通过PL/SQL从备份的image中将controlfile的备份数据恢复回来???
这个是备份到磁盘的吧,或者说你在备份脚本中强制指定了备分格式;说白了rman是先将备份内容打包成一个文件然后写入磁带,而并非是rman直接将数据写入磁带.脚本区别如下:
指定格式的:
connect target rmanbak/rmanbak;
run {
allocate channel t1 type 'sbt_tape';
backup full filesperset 4 (database format 'dbf_%t_%s_%p' );
release channel t1;
}
以上方式是按备份集名称'dbf_%t_%s_%p' 写入磁带或磁盘
没有指定格式的:
connect target rmanbak/rmanbak;
run {
allocate channel t1 type 'sbt_tape';
backup full filesperset 4 database;
release channel t1;
}
以上方式在备份过程中rman直接将数据写入磁带,虽然也是按备份集方式存入磁带,但他的备份集名称是自动生成的.
在不采用指定格式的情况下情况下你根本不知道备份到磁带或磁盘上的oracle数据的备份集名称,在N多备份集中你知道那一个是你要的,你又如何导出呢?
现在用户多使用9i或以上版本oracle了,并且现在多采用spfile方式管理oracle参数,并不使用init_SID.ora文件了.所以还是在rman中配置以下参数:
CONFIGURE RETENTION POLICY TO REDUNDANCY 500; #保留多少次备份,这个自已去算了(按你周期内的db和archivelog备份次数据和恢复到多长间前)
CONFIGURE CONTROLFILE AUTOBACKUP ON; #备分完成spfile和controlfile自动备份
这样你就不用去维护controfile与spfile的备份了(这是oracle 9i及以上版本的新功能,8i不具备)
当灾难发生时你只要:
首先从autobackup中导出spfile到文件pfile并修改与实际环境相符,并从pfile创建spfile
其次从autobackup将controfile导出来,将数据置于nomount状态就可以导数据文件了
再次直接作recover无需将archivelog导到主机磁盘直接作回滚
[ 本帖最后由 redwaves 于 2009-7-2 17:14 编辑 ] |
|