对于数据库的稳定性,高可用,跨平台以及海量数据库的处理,Oracle 数据库通常是大型数据库和大企业的首选。尽管如此,仍然不乏很多中小企业想要品尝一下Oracle腥味,因此在Oracle环境中也有不少中小型数据库。出于成本的考虑,通常有可能就搞个标准版了,跑在Linux上。谁叫Oracle太贵呢?对于中小企业而言,选择合理的才是最好的。对我们这些个搞DB的,贵的一定有贵的道理,我们也可以都进多几斗米。哈哈......典型的打工者的心态哟。言归正传,中小企业的成本限制了我们搞高可用,RAC和DG也就比较少了。最近就碰到这样的情形,就是能否模拟DataGuard来保护数据库。我们知道DataGuard可以实时将数据库从主库切换到备库,或者从备库再切换回主库,实现无缝对接,从而避免由于硬件故障所带来的数据损失。下文即是基于上面的情形来使用rman catalog方式从某种程度上模拟DataGuard来更大程度地保护数据。
中小型数据库 RMAN CATALOG 备份恢复方案系列文章:
- 中小型数据库 RMAN CATALOG 备份恢复方案(一)
- 中小型数据库 RMAN CATALOG 备份恢复方案(二)
- 中小型数据库 RMAN CATALOG 备份恢复方案(三)
1、模拟DataGuard可行性分析
a、能否将生产数据库整个结构以相同的结构存在于备份服务器? 可以,热备,冷备,RMAN备份,方式多样化。首次选用冷备初始化数据库。
b、抛开DG的什么逻辑物理Standy来考虑,即不考虑实现自动或手动failover。只考虑的Prod机器硬件故障,DB在备份服务器可用。可行。
c、能否将数据库损失减小到最少?DG可以定时传送archivelog,自动apply,那我们也可以定时传送archivelog,不过自动apply有难度。
d、对于定时传送的archivelog,能否最终应用的备份服务器?可以,不论是添加/减少表空间/数据文件,数据变化更是没有问题的了。
e、数据丢失的程度取决于最后剩余未及时传送的archivelog以及Prod的redo log,这个会损失,没有办法,毕竟不是DG。
2、备份恢复方案规划
下面是数据库备份的方案规划
系统环境: Linux,Oracle 10g Standard
数据库环境: 主数据库位于Prod服务器,备份数据库位于Bak服务器,数据库容量 list global script names;
List of Stored Scripts in Recovery Catalog
Global Scripts
Script Name
Description
-----------------------------------------------------------------------
global_arch
global_del_obso
global_inc0
global_restore
RMAN> print global script global_arch;
printing stored global script: global_arch
{
allocate channel ch1 type disk maxpiecesize=2g;
allocate channel ch2 type disk maxpiecesize=2g;
set limit channel ch1 readrate=10240;
set limit channel ch1 kbytes=2048000;
set limit channel ch2 readrate=10240;
set limit channel ch2 kbytes=2048000;
crosscheck archivelog all;
delete noprompt archivelog all;
sql " alter system archive log current";
backup as compressed backupset archivelog all delete input tag='Archbk';
release channel ch1;
release channel ch2;
}
--Author : Robinson Cheng
--Blog : http://www.linuxidc.com
RMAN> print global script global_del_obso;
printing stored global script: global_del_obso
{
allocate channel ch1 device type disk;
delete noprompt obsolete redundancy 1;
release channel ch1;
}
RMAN> print global script global_inc0;
printing stored global script: global_inc0
{
configure retention policy to redundancy 1;
configure backup optimization on;
configure controlfile autobackup on;
allocate channel ch1 device type disk maxpiecesize=5g;
allocate channel ch2 device type disk maxpiecesize=5g;
set limit channel ch1 readrate=10240;
set limit channel ch1 kbytes=4096000;
set limit channel ch2 readrate=10240;
set limit channel ch2 kbytes=4096000;
backup as compressed backupset incremental level 0 database tag='Inc0';
release channel ch1;
release channel ch2;
execute global script global_arch;
execute global script global_del_obso;
}
RMAN> print global script global_restore;
printing stored global script: global_restore
{
restore controlfile;
sql 'alter database mount';
crosscheck backup;
delete noprompt expired backup;
crosscheck copy;
delete noprompt expired copy;
allocate channel ch1 type disk;
allocate channel ch2 type disk;
restore database;
release channel ch1;
release channel ch2;
shutdown immediate;
}