بازیابی خودکار block های خراب در سناریو اکتیو دیتا گارد (BMR)
یکی از قابلیت های خوب در سناریو اکتیو دیتا گارد اوراکل(۱۱g)، بازیابی Block corrupt ها در سرور primary به وسیله استندبای سرور ( و بر عکس) می باشد، این عملیات بازیابی به صورت خودکار و بدون متوجه شدن کاربران و متاثر شدن سامانه سرویس گیرنده می باشد (BMR ویا BLOCK MEDIA RECOVERY).
در مثال زیر یکبار این عملیات شبیه سازی گردیده و مراحل کار نمایش داده می شود.
ابتدا یک tablespace تست ساخته و جدول مورد نظر را در آن می سازیم و سپس داده مورد نظر را در آن وارد می کنیم
PRI>create tablespace test datafile ‘/u01/app/oracle/oradata/orcl/test01.dbf’ size 30M;
PRI> create user test identified by test default tablespace test;
PRI> grant connect, resource to test;
PRI> Create table test.test_tab as select * from hr.employees;
insert into test.test_tab select * from test.test_tab;
/
/
/
/
commit;
با دستور زیر اولین block تخصیص داده شده به این جدول را پیدا می کنیم
PRI>select min(dbms_rowid.rowid_block_number(rowid))
from test.test_tab;
MIN(DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID))
—————————————–
۱۳۱
در این مرحله با دستور سیستم عاملی DD دو تا از بلاک ها را خراب می کنیم.
#dd if=/dev/zero of=/u01/app/oracle/oradata/orcl/test01.dbf bs=8192 conv=notrunc seek=136 count=2
کنترل می کنیم با دستور dbv که ۲ تا block corrupt ایجاد شده باشد.
[oracle@host1 ~]$ dbv file=/u01/app/oracle/oradata/orcl/test01.dbf blocksize=8192
Page 136 is marked corrupt
Corrupt block relative dba: 0x01800088 (file 6, block 136)
Completely zero block found during dbv:
Page 137 is marked corrupt
Corrupt block relative dba: 0x01800089 (file 6, block 137)
Completely zero block found during dbv:
Total Pages Marked Corrupt : 2
در این قسمت بافر اوراکل را خالی کرده و برروی جدولی که ساخته ایم ( ایجاد block corrupt ) دستور select را اجرا می کنیم، توقع داریم که خطای در جواب اعلام گردد اما نتیجه صحیح اعلام می گردد.
PRI>alter system flush buffer_cache;
select count(*) from test.test_tab;
اگر به alert log مراجعه گردد متوجه می شویم عملیات BMR اجرا گردیده است .
# tailf /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
——————
Tue Dec 18 12:43:01 2012
ALTER SYSTEM: Flushing buffer cache
Tue Dec 18 12:43:26 2012
– BLOCK 136 IS FOUND CORRUPT AND IS DUMPED IN TRACE FILE
Hex dump of (file 6, block 136) in trace
file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_12608.trc
Corrupt block relative dba: 0x01800088 (file 6, block 136)
Completely zero block found during multiblock buffer read
Reading datafile ‘/u01/app/oracle/oradata/orcl/test01.dbf’ for corruption at rdba:
۰x01800088 (file 6, block 136)
Reread (file 6, block 136) found same corrupt data
– REQUEST FOR AUTO BMR SENT FOR BLOCK 136
Requesting Auto BMR for (file# 6, block# 136)
– BLOCK 137 IS FOUND CORRUPT AND IS DUMPED IN TRACE FILE
Hex dump of (file 6, block 137) in trace
file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_12608.trc
Corrupt block relative dba: 0x01800089 (file 6, block 137)
Completely zero block found during multiblock buffer read
Reading datafile ‘/u01/app/oracle/oradata/orcl/test01.dbf’ for corruption at rdba:
۰x01800089 (file 6, block 137)
Reread (file 6, block 137) found same corrupt data
– REQUEST FOR AUTO BMR SENT FOR BLOCK 136
Requesting Auto BMR for (file# 6, block# 137)
– AUTO BMR SUCCESSFUL FOR BLOCK 136
Waiting Auto BMR response for (file# 6, block# 136)
Auto BMR successful
– AUTO BMR SUCCESSFUL FOR BLOCK 137
Waiting Auto BMR response for (file# 6, block# 137)
Auto BMR successful
و درآخر با ابزار dbv مجدد کنترل می شود.
[oracle@host1 ~]$ dbv file=/u01/app/oracle/oradata/orcl/test01.dbf blocksize=8192
Total Pages Marked Corrupt : 0