run{
change archivelog all crosscheck;
CROSSCHECK BACKUPSET;
DELETE force NOPROMPT OBSOLETE;
allocate channel c1 type disk;
backup full tag 'dbfull' format '/opt/oracle/backup/full_%d_%T_%s' database
plus archivelog format '/opt/oracle/backup/arch_%d_%T_%s'
delete all input;
release channel c1;
}
这是我的备份脚本,保留7天的备份,计划是在每天凌晨2点执行,大家看这个脚本有什么问题吗?
1.麻烦各位高手帮忙写个恢复用的脚本或者语句,我在网上看的太杂,不知道该怎么写了。
2.如果在2点之后数据库出了问题,执行恢复之后,数据库是恢复到最后一次备份时的状态吗?在这段时间之内的数据是不是就丢了,能找回来吗?应该怎么解决?
change archivelog all crosscheck;
CROSSCHECK BACKUPSET;
DELETE force NOPROMPT OBSOLETE;
allocate channel c1 type disk;
backup full tag 'dbfull' format '/opt/oracle/backup/full_%d_%T_%s' database
plus archivelog format '/opt/oracle/backup/arch_%d_%T_%s'
delete all input;
release channel c1;
}
这是我的备份脚本,保留7天的备份,计划是在每天凌晨2点执行,大家看这个脚本有什么问题吗?
1.麻烦各位高手帮忙写个恢复用的脚本或者语句,我在网上看的太杂,不知道该怎么写了。
2.如果在2点之后数据库出了问题,执行恢复之后,数据库是恢复到最后一次备份时的状态吗?在这段时间之内的数据是不是就丢了,能找回来吗?应该怎么解决?
run
{
allocate channel c1 device type disk;
backup full tag 'dbfull' format '/opt/oracle/backup/full_%d_%T_%s' database
plus archivelog format '/opt/oracle/backup/arch_%d_%T_%s'
delete all input;
sql 'alter system archive log current';
release channel c1;
}
{
CROSSCHECK BACKUPSET;
delete noprompt expired backup;
delete noprompt obsolete;
}
restore database;
recover database;
};2.如果你的归档存在的话就没关系,在恢复的同时oracle会自动应用归档和redo的.
备份脚本:create script b_whole_inc0
{
allocate channel d1 type disk;
backup
incremental level 0
format '/export/home/oracle/ora10g/backup/rman_bak/db_bak0_%d_%s_%p_%t'
tag 'whole_inc0'
database;
release channel d1;
}create script b_whole_inc1
{
allocate channel d1 type disk;
backup
incremental level 1
format '/export/home/oracle/ora10g/backup/rman_bak/db_bak1_%d_%s_%p_%t'
tag 'whole_inc1'
database;
release channel d1;
}create script b_whole_inc2
{
allocate channel d1 type disk;
backup
incremental level 2
format '/export/home/oracle/ora10g/backup/rman_bak/db_bak2_%d_%s_%p_%t'
tag 'whole_inc2'
database;
release channel d1;
}create script archive_log_current
{
sql 'alter system archive log current';
}
create script b_archive_2days
{
allocate channel d1 type disk;
execute script archive_log_current;
backup
format '/export/home/oracle/ora10g/backup/rman_bak/arch_%d_%s_%p_%t'
tag 'arch_bak_2days'
archivelog
from time 'sysdate-2';
release channel d1;
}create script archive_delete3
{
allocate channel d1 type disk;
execute script archive_log_current;
backup
format '/export/home/oracle/ora10g/backup/rman_bak/arch_%d_%s_%p_%t'
tag 'arch_bak_day3'
archivelog
from time 'sysdate-3' until time 'sysdate-2'
delete input;
release channel d1;
}2,如果归档日至和redolog没有丢失或者被破坏的话,还是可以恢复的。
你可以使用不完全恢复,恢复到备份之后到破坏之前的某个时间点,logseq或SCN。
之后使用alter databaase open resetlogs 就可以使数据库正常打开。
但是你之前的备份都会失效,因为数据库会产生一个新的incarnation。
你要在数据库opne之后,马上进行一次0级备份。
在你执行介质恢复的时候,oracle会读取备份以来的所有归档日志,一般来说crash都发生在故障时,因此很有可能实例是靠shutdown abort的不干净的方式来关闭的.
那么这时候在介质恢复完成后,o如果你的redo还在,那么会应用redo里面的信息.这样就保证了可恢复的完整性.当然,前提是当前redo没有损坏.否则的话.就需要基于cancel的恢复了.
怎么样取到破坏前的logseq或scn呢?
检查v$recover_file;
确定时间点的,scn等工作,你可以检查alert日至,v$log,
以及v$log_history动态视图,
也可以咨询值班的同事,呵呵。