Восстановление работоспособности Оракл RAC после полной потери дисков

THE HOLY BIBLE - King James Version - БИБЛИЯ в Синодальном переводе
"Нас Атакуют!" Изобличи козни лукавого, запрети диаволу

Восстановление работоспособности Оракл RAC после полной потери дисков

Технология Oracle Real Application Cluster (RAC) получила широкое распространение благодаря производительности, масштабируемости и надёжности. Предлагаемые Ораклом средства резервного копирования позволяют быстро восстановить данные пользователя после потери дисков. В то же время, полная потеря voting disks и crs disks происходит редко и обычно застаёт администраторов баз данных врасплох. Непродуманные действия приводят к необходимости переустановки Grid Infrastructure (т.е. всего кластера).

Предлагаемая читателю заметка рассказывает о быстром восстановлении работоспособности Oracle RAC 11g Grid Infrastructure после полной потери voting disks (дисков кворума) и crs disks.

Прежде чем мы продолжим, я хотел бы привести строки из Евангелия:



.................. == От Марка святое благовествование == ......................
=== Глава 16, Стих 14 ===
14 Наконец, явился самим одиннадцати, возлежавшим на вечери,  и упрекал их за
 неверие и жестокосердие, что видевшим Его воскресшего не поверили.
15 И сказал им: идите по всему миру и проповедуйте Евангелие всей твари.
16 Кто будет веровать и креститься, спасен будет; а кто не будет веровать,
 осужден будет.

Лично для вас благая весть - Единородный Сын Божий Иисус Христос любит вас, Он взошёл на крест за ваши грехи, был распят и на третий день воскрес, сел одесную Бога и открыл нам дорогу в Царствие Небесное.

В преддверии Великого Поста и Пасхи Христовой начинается Неделя о Страшном суде. В эту неделю каждому из нас следует особенно хорошо задуматься о том, как и для чего мы живём, какие поступки совершаем и как относимся к окружающим нас братьям и сёстрам.
Евангелие от Марка ясно показывает нам что Господь, невзирая на лица, осуждает всех согрешивших - даже Святых Апостолов Иисус упрекал "за неверие и жестокосердие, что видевшим Его воскресшего не поверили". И это были люди, ходившие со Христом, следовавшие во всём Его учению, видевшие ужас Его распятия. Задумайтесь - каково же будет нам, ежедневно грешащим и не кающимся, расстраивающим, раздражающим и гневящим Отца небесного нашими неверием и жестокосердием? Именно поэтому последняя неделя перед Великим Постом и напоминает нам о неизбежности Страшного Суда. Судя по нашим делам, все мы заслуживаем осуждения за наше безверие и невнимание к Богу. Что же делать нам, как спастись? И тут Евангелие даёт нам простой и ясный ответ - "Кто будет веровать и креститься, спасен будет".

Покайтесь, примите Иисуса как вашего Спасителя, ибо наступают последние времена и время близко - стоит Судья у ворот.

Пожалуйста, в своих каждодневных трудах, какими бы занятыми вы себе ни казались - находите время для Бога, Его заповедей и Библии.

На главной странице этого сайта вы найдете программу для чтения Библии в командной строке - буду очень рад если программа окажется полезной. Пожалуйста, читайте Библию, на экране или в печатном виде - вы будете искренне удивлены как много там сказано лично про вас и ваши обстоятельства.


Вернёмся к нашим техническим деталям.

В качестве тестовой системы мы будем использовать 8-узловой Oracle 11g Release 2 кластер на платформе Exadata. Начав с быстрого обзора средств резервного копирования, мы предпримем деструктивные действия и в конце восстановим полную работосопособность системы.

Резервное копирование для RAC

Для удачного последующего восстановления кластера вначале нам необходимо проверить наличие полного работающего бэкапа кластерной базы данных и CRS дисков.

Начнём с холодного (offline) бэкапа кластерной базы данных. Если у вас имеется надёжная проверенная резервная копия базы, то этот шаг можно пропустить. На платформе Exadata (как и любой другой, использующей Oracle ASM), мы должны использовать Recovery Manager.

........................ == Книга пророка Варуха == ............................
=== Глава 3, Стих 2 ===
1 Господи Вседержителю, Боже Израиля! стесненная душа и  унылый  дух  взывает  к
Тебе:
2 услышь,  Господи,  и  помилуй,  ибо  Ты  Бог  милосердый;  помилуй,   ибо   мы
согрешили пред Тобою;
3 Ты    -    вечно    пребывающий,    а    мы     -     вечно        погибающие.

(b+/b-, c+/c-, +/-, *) >

[oracle@reatdb01 backup]$ rman

Recovery Manager: Release 11.2.0.2.0 - Production on Mon Feb 20 01:06:39 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

RMAN> connect target

connected to target database (not started) -- База должна быть остановлена
-- без использования опции "abort".

RMAN> startup mount -- Монтируется только один экземпляр из восьми.

Oracle instance started
database mounted

Total System Global Area    8351150080 bytes

Fixed Size                     2243120 bytes
Variable Size               4580181456 bytes
Database Buffers            3758096384 bytes
Redo Buffers                  10629120 bytes

RMAN>  -- База данных не открывается для пользователей.

RMAN> report schema
2> ;

using target database control file instead of recovery catalog
Report of database schema for database with db_unique_name reatdb

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    740      SYSTEM               ***     +DBFS_DG/reatdb/datafile/system.256.770108715
2    2820     SYSAUX               ***     +DBFS_DG/reatdb/datafile/sysaux.257.770108715
3    100      UNDOTBS1             ***     +DBFS_DG/reatdb/datafile/undotbs1.258.770108715
4    5        USERS                ***     +DBFS_DG/reatdb/datafile/users.259.770108715
5    345      EXAMPLE              ***     +DBFS_DG/reatdb/datafile/example.267.770108799
6    25       UNDOTBS2             ***     +DBFS_DG/reatdb/datafile/undotbs2.268.770108945
7    50       UNDOTBS3             ***     +DBFS_DG/reatdb/datafile/undotbs3.269.770108945
8    50       UNDOTBS4             ***     +DBFS_DG/reatdb/datafile/undotbs4.270.770108945
9    50       UNDOTBS5             ***     +DBFS_DG/reatdb/datafile/undotbs5.271.770108945
10   525      UNDOTBS6             ***     +DBFS_DG/reatdb/datafile/undotbs6.272.770108945
11   1050     UNDOTBS7             ***     +DBFS_DG/reatdb/datafile/undotbs7.273.770108945
12   150      UNDOTBS8             ***     +DBFS_DG/reatdb/datafile/undotbs8.274.770108945

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    475      TEMP                 32767       +DBFS_DG/reatdb/tempfile/temp.266.770108797

RMAN>

RMAN> backup current controlfile format '/u01/app/oracle/backup/ctrl_bckp.dmp';

Starting backup at 20-FEB-12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=128 instance=reatdb1 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
channel ORA_DISK_1: starting piece 1 at 20-FEB-12
channel ORA_DISK_1: finished piece 1 at 20-FEB-12
piece handle=/u01/app/oracle/backup/ctrl_bckp.dmp tag=TAG20120220T012323 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 20-FEB-12

RMAN>

RMAN> backup spfile format '/u01/app/oracle/backup/spfile_bckp.dmp';

Starting backup at 20-FEB-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 20-FEB-12
channel ORA_DISK_1: finished piece 1 at 20-FEB-12
piece handle=/u01/app/oracle/backup/spfile_bckp.dmp tag=TAG20120220T012355 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 20-FEB-12

RMAN>
RMAN> sql 'alter database backup controlfile to trace';

sql statement: alter database backup controlfile to trace

RMAN>

RMAN> backup database format '/u01/app/oracle/backup/bckp_%U';

Starting backup at 20-FEB-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00002 name=+DBFS_DG/reatdb/datafile/sysaux.257.770108715
input datafile file number=00011 name=+DBFS_DG/reatdb/datafile/undotbs7.273.770108945
input datafile file number=00001 name=+DBFS_DG/reatdb/datafile/system.256.770108715
input datafile file number=00010 name=+DBFS_DG/reatdb/datafile/undotbs6.272.770108945
input datafile file number=00005 name=+DBFS_DG/reatdb/datafile/example.267.770108799
input datafile file number=00012 name=+DBFS_DG/reatdb/datafile/undotbs8.274.770108945
input datafile file number=00003 name=+DBFS_DG/reatdb/datafile/undotbs1.258.770108715
input datafile file number=00007 name=+DBFS_DG/reatdb/datafile/undotbs3.269.770108945
input datafile file number=00008 name=+DBFS_DG/reatdb/datafile/undotbs4.270.770108945
input datafile file number=00009 name=+DBFS_DG/reatdb/datafile/undotbs5.271.770108945
input datafile file number=00006 name=+DBFS_DG/reatdb/datafile/undotbs2.268.770108945
input datafile file number=00004 name=+DBFS_DG/reatdb/datafile/users.259.770108715
channel ORA_DISK_1: starting piece 1 at 20-FEB-12
channel ORA_DISK_1: finished piece 1 at 20-FEB-12
piece handle=/u01/app/oracle/backup/bckp_03n3ojrv_1_1 tag=TAG20120220T012727 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:02:25
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 20-FEB-12
channel ORA_DISK_1: finished piece 1 at 20-FEB-12
piece handle=/u01/app/oracle/backup/bckp_04n3ok0h_1_1 tag=TAG20120220T012727 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 20-FEB-12

RMAN>

[oracle@reatdb01 ~]$ ls -latrh /u01/app/oracle/backup/
total 2.4G
drwxr-xr-x 13 oracle oinstall 4.0K Feb 20 01:05 ..
-rw-r-----  1 oracle oinstall  19M Feb 20 01:23 ctrl_bckp.dmp
-rw-r-----  1 oracle oinstall  96K Feb 20 01:23 spfile_bckp.dmp
-rw-r-----  1 oracle oinstall 2.4G Feb 20 01:27 bckp_03n3ojrv_1_1
-rw-r-----  1 oracle oinstall  19M Feb 20 01:30 bckp_04n3ok0h_1_1
drwxr-xr-x  2 oracle oinstall 4.0K Feb 20 01:30 .
-rw-r-----  1 oracle oinstall  13K Feb 20 01:30 control_create.sql
[oracle@reatdb01 ~]$

Теперь проверим наличие резервных копий Oracle CRS, автоматически включающих диски кворума (voting disks). Oracle CRS делает такие копии самостоятельно, через определённые интервалы времени, установленные производителем.

.......................... == Книга Екклезиаста == .............................
=== Глава 2, Стих 11 ===
11 И оглянулся я на  все  дела  мои,  которые  сделали  руки  мои,  и  на  труд,
которым трудился я, делая _их:_ и вот, все - суета и  томление  духа,  и  нет
_от них_ пользы под солнцем!
12 И обратился я, чтобы взглянуть на мудрость и  безумие  и  глупость:  ибо  что
_может сделать_ человек после царя _сверх того,_ что уже сделано?
13 И  увидел  я,  что  преимущество  мудрости  перед  глупостью  такое  же,  как
преимущество света перед тьмою:
14 у мудрого глаза его - в голове его, а глупый  ходит  во  тьме;  но  узнал  я,
что одна участь постигает их всех.

(b+/b-, c+/c-, +/-, *) >

-- Определим где находятся автоматические резервные копии OCR / VD.
[oracle@reatdb01 ~]$ /u01/app/11.2.0/grid/bin/ocrconfig -showbackup
reatdb01     2012/02/19 23:57:24     /u01/app/11.2.0/grid/cdata/reat/backup00.ocr  -- каждые 4 часа
reatdb01     2012/02/19 19:57:23     /u01/app/11.2.0/grid/cdata/reat/backup01.ocr
reatdb01     2012/02/19 15:57:23     /u01/app/11.2.0/grid/cdata/reat/backup02.ocr
reatdb01     2012/02/19 07:57:21     /u01/app/11.2.0/grid/cdata/reat/day.ocr -- ежедневно
reatdb01     2012/02/19 07:57:21     /u01/app/11.2.0/grid/cdata/reat/week.ocr -- еженедельно
reatdb08     2011/12/17 09:47:21     /u01/app/11.2.0/grid/cdata/reat/backup_20111217_094721.ocr -- backup сделан
reatdb08     2011/12/17 09:44:35     /u01/app/11.2.0/grid/cdata/reat/backup_20111217_094435.ocr -- пользователем
[oracle@reatdb01 ~]$

[oracle@reatdb01 ~]$ ls -la /u01/app/11.2.0/grid/cdata/reat/
total 50312
drwxrwxr-x 2 oracle oinstall    4096 Feb 19 23:57 .
drwxrwxr-x 5 oracle oinstall    4096 Dec 17 03:34 ..
-rw------- 1 root   root     8568832 Feb 19 23:57 backup00.ocr
-rw------- 1 root   root     8568832 Feb 19 19:57 backup01.ocr
-rw------- 1 root   root     8568832 Feb 19 15:57 backup02.ocr
-rw------- 1 root   root     8568832 Feb 19 07:57 day.ocr
-rw------- 1 root   root     8568832 Feb  2 23:53 week_.ocr
-rw------- 1 root   root     8568832 Feb 19 07:57 week.ocr
[oracle@reatdb01 ~]$

Очевидно, что теперь мы имеем все необходимые копии. Убедимся что наш кластер исправно работает.

........... == Второе соборное послание святого апостола Петра == ..............
=== Глава 2, Стих 8 ===
4 Ибо, если Бог  ангелов  согрешивших  не  пощадил,  но,  связав  узами  адского
мрака, предал блюсти на суд для наказания;
5 и если не пощадил первого мира, но в  восьми  душах  сохранил  семейство  Ноя,
проповедника правды, когда навел потоп на мир нечестивых;
6 и если города Содомские и  Гоморрские,  осудив  на  истребление,  превратил  в
пепел, показав пример будущим нечестивцам,
7 а   праведного   Лота,   утомленного   обращением   между   людьми    неистово
развратными, избавил
8 (ибо сей праведник, живя между  ними,  ежедневно  мучился  в  праведной  душе,
видя и слыша дела беззаконные) --
9 то, конечно, знает  Господь,  как  избавлять  благочестивых  от  искушения,  а
беззаконников соблюдать ко дню суда, для наказания,
10 а  наипаче  тех,  которые  идут  вслед  скверных  похотей  плоти,   презирают
начальства, дерзки, своевольны и не страшатся злословить высших,
11 тогда как и Ангелы, превосходя их крепостью и силою,  не  произносят  на  них
пред Господом укоризненного суда.

(b+/b-, c+/c-, +/-, *) >

[oracle@reatdb01 ~]$ /u01/app/11.2.0/grid/bin/crsctl check cluster -all
**************************************************************
reatdb01:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
reatdb02:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
reatdb03:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
reatdb04:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
reatdb05:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
reatdb06:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
reatdb07:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
reatdb08:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
[oracle@reatdb01 ~]$

Теперь настало время нарушить спокойствие наших ДБА и произвести "необратимые разрушения".

Диагностика потери работоспособности RAC

Итак, что-то произошло и наша кластерная база данных стала недоступна для пользователей. Выясним, что же случилось. Мы уже знаем что на узлах кластера нет активных процессов базы данных. Работает ли сам кластер?

[oracle@reatdb01 ~]$ /u01/app/11.2.0/grid/bin/olsnodes
PRCO-19: Failure retrieving list of nodes in the cluster
PRCO-2: Unable to communicate with the clusterware
[oracle@reatdb01 ~]$

Сам кластер находится в неработоспособном состоянии. Посмотрим были ли какие-либо нарушения в работе операционной системы.

[oracle@reatdb01 ~]$ dcli -g dbs_group -l root uptime -- утилита dcli позволяет запускать команды параллельно
reatdb01: 02:15:10 up 5 min,  1 user,  load average: 0.21, 0.43, 0.22
reatdb02: 02:15:10 up 5 min,  0 users,  load average: 0.23, 0.45, 0.23
reatdb03: 02:15:10 up 5 min,  0 users,  load average: 0.19, 0.30, 0.14
reatdb04: 02:15:10 up 5 min,  0 users,  load average: 0.20, 0.32, 0.16
reatdb05: 02:15:10 up 5 min,  0 users,  load average: 0.06, 0.28, 0.15
reatdb06: 02:15:10 up 5 min,  0 users,  load average: 0.23, 0.26, 0.12
reatdb07: 02:15:10 up 5 min,  0 users,  load average: 0.12, 0.21, 0.10
reatdb08: 02:15:10 up 4 min,  0 users,  load average: 0.19, 0.26, 0.11
[oracle@reatdb01 ~]$

Как видно, все 8 узлов кластера перегрузились сами собой в одно и то же время. Это очень похоже на результат сбоя в работе Oracle Clusterware. Проверим лог файлы в Oracle Grid Infrastructure home.

[root@reatdb01 reatdb01]# pwd
/u01/app/11.2.0/grid/log/reatdb01
[root@reatdb01 reatdb01]#

[root@reatdb01 reatdb01]# tail alertreatdb01.log
...
2012-02-20 02:04:52.798
[cssd(15693)]CRS-1649:An I/O error occured for voting file: o/192.168.10.22/GD_DBFS_CD_03_reatss04;
details at (:CSSNM00059:) in /u01/app/11.2.0/grid/log/reatdb01/cs
sd/ocssd.log.
...
[cssd(15693)]CRS-1615:No I/O has completed after 50% of the maximum interval.
Voting file o/192.168.10.20/GD_DBFS_CD_03_reatss02 will be considered not functional in 99760 milliseconds
...
[cssd(15693)]CRS-1604:CSSD voting file is offline: o/192.168.10.19/GD_DBFS_CD_03_reatss01;
details at (:CSSNM00058:) in /u01/app/11.2.0/grid/log/reatdb01/cssd/ocssd.log.
2012-02-20 02:08:09.079
[cssd(15693)]CRS-1604:CSSD voting file is offline: o/192.168.10.20/GD_DBFS_CD_03_reatss02;
details at (:CSSNM00058:) in /u01/app/11.2.0/grid/log/reatdb01/cssd/ocssd.log.
2012-02-20 02:08:10.081
[cssd(15693)]CRS-1604:CSSD voting file is offline: o/192.168.10.9/GD_DBFS_CD_03_reatss05;
details at (:CSSNM00058:) in /u01/app/11.2.0/grid/log/reatdb01/cssd/ocssd.log.
2012-02-20 02:08:10.081
[cssd(15693)]CRS-1604:CSSD voting file is offline: o/192.168.10.21/GD_DBFS_CD_03_reatss03;
details at (:CSSNM00058:) in /u01/app/11.2.0/grid/log/reatdb01/cssd/ocssd.log.
2012-02-20 02:08:10.082
[cssd(15693)]CRS-1606:The number of voting files available, 1, is less than the minimum number of voting
files required, 3, resulting in CSSD termination to ensure data integrity;
details at (:CSSNM00018:) in /u01/app/11.2.0/grid/log/reatdb01/cssd/ocssd.log
2012-02-20 02:08:10.082
[cssd(15693)]CRS-1656:The CSS daemon is terminating due to a fatal error;
Details at (:CSSSC00012:) in /u01/app/11.2.0/grid/log/reatdb01/cssd/ocssd.log
2012-02-20 02:08:10.113
[cssd(15693)]CRS-1652:Starting clean up of CRSD resources.
2012-02-20 02:08:10.297
[cssd(15693)]CRS-1653:The clean up of the CRSD resources failed.
2012-02-20 02:08:11.626
[ohasd(4597)]CRS-2765:Resource 'ora.evmd' has failed on server 'reatdb01'.
...
[ohasd(4597)]CRS-8011:reboot advisory message from host: reatdb05, component: cssmonit,
with time stamp: L-2012-02-20-02:08:12.438
[ohasd(4597)]CRS-8013:reboot advisory message text: clsnomon_status: need to reboot,
unexpected failure 8 received from CSS
2012-02-20 02:08:12.482
[ohasd(4597)]CRS-8011:reboot advisory message from host: reatdb05, component: cssagent,
with time stamp: L-2012-02-20-02:08:12.439
[ohasd(4597)]CRS-8013:reboot advisory message text: clsnomon_status: need to reboot,
unexpected failure 8 received from CSS
2012-02-20 02:08:12.620
[ohasd(4597)]CRS-8011:reboot advisory message from host: reatdb06, component: cssagent,
with time stamp: L-2012-02-20-02:08:12.620
[ohasd(4597)]CRS-8013:reboot advisory message text: clsnomon_status: need to reboot,
unexpected failure 8 received from CSS
2012-02-20 02:08:12.620
[ohasd(4597)]CRS-8011:reboot advisory message from host: reatdb03, component: cssmonit,
with time stamp: L-2012-02-20-02:08:12.620
[ohasd(4597)]CRS-8013:reboot advisory message text: clsnomon_status: need to reboot,
unexpected failure 8 received from CSS
...
*** reboot ***
...
[cssd(6887)]CRS-1713:CSSD daemon is started in clustered mode
*** ВАЖНО - no Voting Disks ***
2012-02-20 02:12:56.579
[cssd(6887)]CRS-1714:Unable to discover any voting files, retrying discovery in 15 seconds;
Details at (:CSSNM00070:) in /u01/app/11.2.0/grid/log/reatdb01/cssd/ocssd.log
*** ВАЖНО - no CRS Disks ***
2012-02-20 02:13:00.285
[client(6941)]CRS-1013:The OCR location in an ASM disk group is inaccessible.
Details in /u01/app/11.2.0/grid/log/reatdb01/client/crsctl_oracle.log.
...
2012-02-20 02:15:06.721
[client(9501)]CRS-1013:The OCR location in an ASM disk group is inaccessible.
Details in /u01/app/11.2.0/grid/log/reatdb01/client/crsctl_oracle.log.
2012-02-20 02:15:11.877
[cssd(6887)]CRS-1714:Unable to discover any voting files, retrying discovery in 15 seconds;
Details at (:CSSNM00070:) in /u01/app/11.2.0/grid/log/reatdb01/cssd/ocssd.log
2012-02-20 02:15:26.906
[cssd(6887)]CRS-1714:Unable to discover any voting files, retrying discovery in 15 seconds;
Details at (:CSSNM00070:) in /u01/app/11.2.0/grid/log/reatdb01/cssd/ocssd.log
2012-02-20 02:15:41.935
[cssd(6887)]CRS-1714:Unable to discover any voting files, retrying discovery in 15 seconds;
Details at (:CSSNM00070:) in /u01/app/11.2.0/grid/log/reatdb01/cssd/ocssd.log
2012-02-20 02:15:56.964
[cssd(6887)]CRS-1714:Unable to discover any voting files, retrying discovery in 15 seconds;
Details at (:CSSNM00070:) in /u01/app/11.2.0/grid/log/reatdb01/cssd/ocssd.log
[root@reatdb01 reatdb01]#

Лог файлы показывают, что по какой-то причине были одновременно потеряны все CRS и Voting disk файлы, находящиеся в дисковой группе ASM. Визуальная проверка показала, что все диски в трёх ячейках (Exadata Storage Server) были физически повреждены, что привело к невосстановимой потере всех дисковых групп. Подобный эффект может быть причинён плохо работающим RAID контроллером, неудачным обновлением firmware дисков или любым другим логическим повреждением данных. К сожалению, в реальной жизни события развиваются по такому сценарию значительно чаще, чем нам хотелось бы.

Восстановление работоспособности RAC

Предположим, что мы физически заменили все повреждённые диски и они благополучно распознаны дисковыми RAID контроллерами и операционными системами. Возможно, что нам пришлось полностью восстановить операционную систему и конфигурацию повреждённых ячеек Exadata, посредством загрузки со встроенного USB диска. Теперь, когда всё hardware восстановлено, нам необходимо вернуть кластер в рабочее состояние. Этот процесс начинается с восстановления дисковых групп ASM. Выполним некоторые предварительные действия:

............... == Книга Премудрости Иисуса, сына Сирахова == ..................
=== Глава 10, Стих 8 ===
8 Владычество переходит от народа к народу  по  причине  несправедливости,  обид
и любостяжания.

(b+/b-, c+/c-, +/-, *) >

-- убедимся, что Oracle CRS остановлен на всех узлах кластера - выполним команду как "root".
[root@reatdb01 reatdb01]# dcli -g /home/oracle/dbs_group -l root /u01/app/11.2.0/grid/bin/crsctl stop crs -f
... Обычно, на это требуется достаточно долгое время.

-- Теперь все процессы CRS уже должны быть остановлены на всех узлах кластера:
[root@reatdb01 reatdb01]# dcli -g /home/oracle/dbs_group -l root ps -ef | grep d.bin
reatdb01: root     30725 10206  0 02:34 pts/0    00:00:00 grep d.bin
[root@reatdb01 reatdb01]#

-- Определим местонахождение резервных копий OCR
[root@reatdb01 reatdb01]# dcli -g /home/oracle/dbs_group -l root find / -name *.ocr -print
reatdb01: /u01/app/11.2.0/grid/cdata/reat/day.ocr
reatdb01: /u01/app/11.2.0/grid/cdata/reat/backup00.ocr
reatdb01: /u01/app/11.2.0/grid/cdata/reat/week.ocr
reatdb01: /u01/app/11.2.0/grid/cdata/reat/backup01.ocr
reatdb01: /u01/app/11.2.0/grid/cdata/reat/backup02.ocr
reatdb01: /u01/app/11.2.0/grid/cdata/reat/week_.ocr
reatdb03: /u01/app/11.2.0/grid/cdata/reat/day.ocr
reatdb03: /u01/app/11.2.0/grid/cdata/reat/backup00.ocr
reatdb03: /u01/app/11.2.0/grid/cdata/reat/week_.ocr
reatdb03: /u01/app/11.2.0/grid/cdata/reat/day_.ocr
reatdb03: /u01/app/11.2.0/grid/cdata/reat/backup01.ocr
reatdb03: /u01/app/11.2.0/grid/cdata/reat/backup02.ocr
reatdb03: /u01/app/11.2.0/grid/cdata/reat/week.ocr
reatdb08: /u01/app/11.2.0/grid/cdata/reat/backup_20111217_094435.ocr
reatdb08: /u01/app/11.2.0/grid/cdata/reat/backup_20111217_094721.ocr
[root@reatdb01 reatdb01]#

-- Мы будем восстанавливать последний backup:
[root@reatdb01 reatdb01]# ls -latrh /u01/app/11.2.0/grid/cdata/reat/backup00.ocr
-rw------- 1 root root 8.2M Feb 19 23:57 /u01/app/11.2.0/grid/cdata/reat/backup00.ocr
[root@reatdb01 reatdb01]#

-- Куда же именно необходимо восстановить OCR и VD? В нашей системе - в ASM группу DBFS_DG.
[root@reatdb01 reatdb01]# cat /etc/oracle/ocr.loc
ocrconfig_loc=+DBFS_DG  -- Именно здесь стартующие процессы будут искать конфигурацию CRS.
local_only=FALSE
[root@reatdb01 reatdb01]#

Поскольку OCR диск расположен в ASM группе, восстановить автоматический или пользовательский бэкап OCR напрямую из копии нельзя. Команда "ocrconfig -restore", восстанавливающая OCR, требует присутствия ASM. В то же время, ASM не может стартовать без работающих процессов CRS. К тому же, для удачного восстановления OCR диск должен быть как-то защищён от "посторонних" записей на время копирования данных из backup файла.

Решить эту головоломку позволяет "эксклюзивный" режим запуска процессов CRS.

........................... == Притчи Соломона == ..............................
=== Глава 26, Стих 18 ===
18 Как   притворяющийся   помешанным   бросает   огонь,   стрелы   и     смерть,
19 так - человек, который коварно  вредит  другу  своему  и  потом  говорит:  "я
только пошутил".

(b+/b-, c+/c-, +/-, *) >

-- Запускаем CRS stack в "эксклюзивном" режиме только на том узле кластера, на котором находится резервная копия
[root@reatdb01 ~]# /u01/app/11.2.0/grid/bin/crsctl start crs -excl -nocrs    --- ВАЖНО
CRS-4123: Oracle High Availability Services has been started.
CRS-2672: Attempting to start 'ora.mdnsd' on 'reatdb01'
CRS-2676: Start of 'ora.mdnsd' on 'reatdb01' succeeded
CRS-2672: Attempting to start 'ora.gpnpd' on 'reatdb01'
CRS-2676: Start of 'ora.gpnpd' on 'reatdb01' succeeded
CRS-2672: Attempting to start 'ora.cssdmonitor' on 'reatdb01'
CRS-2672: Attempting to start 'ora.gipcd' on 'reatdb01'
CRS-2676: Start of 'ora.cssdmonitor' on 'reatdb01' succeeded
CRS-2676: Start of 'ora.gipcd' on 'reatdb01' succeeded
CRS-2672: Attempting to start 'ora.cssd' on 'reatdb01'
CRS-2672: Attempting to start 'ora.diskmon' on 'reatdb01'
CRS-2676: Start of 'ora.diskmon' on 'reatdb01' succeeded
CRS-2676: Start of 'ora.cssd' on 'reatdb01' succeeded
CRS-2672: Attempting to start 'ora.drivers.acfs' on 'reatdb01'
CRS-2672: Attempting to start 'ora.cluster_interconnect.haip' on 'reatdb01'
CRS-2672: Attempting to start 'ora.ctssd' on 'reatdb01'
CRS-2676: Start of 'ora.drivers.acfs' on 'reatdb01' succeeded
CRS-2676: Start of 'ora.ctssd' on 'reatdb01' succeeded
CRS-2676: Start of 'ora.cluster_interconnect.haip' on 'reatdb01' succeeded
CRS-2672: Attempting to start 'ora.asm' on 'reatdb01'
CRS-2676: Start of 'ora.asm' on 'reatdb01' succeeded            --- ВАЖНО
[root@reatdb01 ~]#

Необходимые CSS и ASM процессы были запущены без OCR диска с "ограниченной" функциональностью, достаточной для создания дисковой группы и последующего размещения в ней восстановленных записей OCR. Создадим нужные дисковые группы.

......................... == Книга пророка Авдия == ............................
=== Глава 1, Стих 9 ===
5 Не воры ли приходили к тебе? не ночные ли грабители, что ты  так  разорен?  Но
они украли бы столько, сколько надобно им. Если бы проникли к  тебе  обиратели
винограда, то и они разве не оставили бы несколько ягод?
6 Как    обобрано    все    у    Исава    и     обысканы     тайники        его!
7 До границы выпроводят тебя все  союзники  твои,  обманут  тебя,  одолеют  тебя
живущие с тобою в мире,  ядущие  хлеб  твой  нанесут  тебе  удар.  Нет  в  нем
смысла!
8 Не в тот ли день это  будет,  говорит  Господь,  когда  Я  истреблю  мудрых  в
Едоме и благоразумных на горе Исава?
9 Поражены  будут  страхом  храбрецы  твои,  Феман,  дабы  все  на  горе   Исава
истреблены были убийством.

(b+/b-, c+/c-, +/-, *) >

-- Создание дискгруппы, согласно ocr.loc файлу (DBFS_DG в нашем случае)
[oracle@reatdb01 ~]$ . oraenv
ORACLE_SID = [oracle] ? +ASM1
The Oracle base has been set to /u01/app/oracle
[oracle@reatdb01 ~]$

[oracle@reatdb01 ~]$ sqlplus / as sysasm

SQL*Plus: Release 11.2.0.2.0 Production on Mon Feb 20 03:46:09 2012

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

INST_ID INSTANCE_NAME    HOST_NAME       STATUS       LOGINS
---------- ---------------- --------------------------------------------- ------------ ----------
1 +ASM1     reatdb01.read-and-think.org     STARTED      ALLOWED

1 row selected.

Elapsed: 00:00:00.04
03:46:09 SQL>

03:49:39 SQL> create diskgroup DBFS_DG normal redundancy
03:50:44   2  disk 'o/*/GD_DBFS*' -- Так указываются имена дисков в Exadata
03:51:33   3  ATTRIBUTE 'cell.smart_scan_capable'='true', -- Использовать функцию Exadata Smart Scan
03:51:43   4  'AU_SIZE' = '4M',
03:51:51   5  'COMPATIBLE.ASM' = '11.2.0.2',
03:52:03   6  'COMPATIBLE.RDBMS' = '11.2.0.2';

Diskgroup created.

Elapsed: 00:00:14.54
03:52:24 SQL>

--- Создадим все остальные группы, необходимые для последующего восстановления файлов базы данных

03:56:01 SQL> select GROUP_NUMBER, TOTAL_MB, REQUIRED_MIRROR_FREE_MB, USABLE_FILE_MB, OFFLINE_DISKS
03:56:28   2  from v$asm_diskgroup;

GROUP_NUMBER   TOTAL_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB OFFLINE_DISKS
------------ ---------- ----------------------- -------------- -------------
1 4239360    307200        1965420     0 -- Нет "offline" дисков
2   33996800   2457600       15768828     0
3   32168000   2325376       14920540     0

3 rows selected.

Elapsed: 00:00:00.29
03:56:33 SQL>

1  select GROUP_NUMBER, HEADER_STATUS, count(*)
2  from v$asm_disk
3  group by GROUP_NUMBER, HEADER_STATUS
4* order by GROUP_NUMBER, HEADER_STATUS
03:59:58 SQL> /

GROUP_NUMBER HEADER_STATU   COUNT(*)
------------ ------------ ----------
1 MEMBER   138 -- Все ASM диски являются участниками групп
2 MEMBER   166
3 MEMBER   166

3 rows selected.

Elapsed: 00:00:00.23
03:59:59 SQL>

Теперь у нас есть необходимое "хранилище" для новых записей OCR - дисковая группа DBFS_DG. Восстановим OCR бэкап из найденного выше файла.

........................ == Книга пророка Иеремии == ...........................
=== Глава 2, Стих 17 ===
17 Не причинил ли ты себе  это  тем,  что  оставил  Господа  Бога  твоего  в  то
время, когда Он путеводил тебя?
18 И ныне для чего тебе путь в Египет, чтобы пить  воду  из  Нила?  и  для  чего
тебе путь в Ассирию, чтобы пить воду из реки ее?
19 Накажет  тебя  нечестие  твое,  и  отступничество  твое  обличит  тебя;  итак
познай и размысли, как худо и горько то, что ты оставил Господа  Бога  твоего
и страха Моего нет в тебе, говорит Господь Бог Саваоф.

(b+/b-, c+/c-, +/-, *) >

-- Восстанавливаем последний OCR backup, как пользователь "root".
[root@reatdb01 ~]# /u01/app/11.2.0/grid/bin/ocrconfig -restore /u01/app/11.2.0/grid/cdata/reat/backup00.ocr
[root@reatdb01 ~]#
-- Восстановленные данные сохраняются в дисковой группе DBFS_DG, согласно файлу "/etc/oracle/ocr.loc".

-- Проверим результат восстановления:
[root@reatdb01 ~]# /u01/app/11.2.0/grid/bin/ocrcheck
Status of Oracle Cluster Registry is as follows :
Version                  :          3
Total space (kbytes)     :     262120
Used space (kbytes)      :       4220
Available space (kbytes) :     257900
ID                       : 1452089109
Device/File Name         :   +DBFS_DG
Device/File integrity check succeeded

Device/File not configured

Device/File not configured

Device/File not configured

Device/File not configured

Cluster registry integrity check succeeded

Logical corruption check succeeded

[root@reatdb01 ~]#

Теперь необходимо восстановить данные для дисков кворума (voting disks) - их копии хранятся в только что созданном CRS.

................... == От Луки святое благовествование == ......................
=== Глава 5, Стих 8 ===
8 Увидев это, Симон Петр припал к  коленям  Иисуса  и  сказал:  выйди  от  меня,
Господи! потому что я человек грешный.

(b+/b-, c+/c-, +/-, *) >

[root@reatdb01 ~]# /u01/app/11.2.0/grid/bin/crsctl replace votedisk +DBFS_DG
Successful addition of voting disk 37f5676d6fae4fcabfd097a08e2f4392.
Successful addition of voting disk b1f9ddce679c4f78bf25b7735617e56a.
Successful addition of voting disk 335dbdf0aec74fe9bf9315fb82fc813a.
Successfully replaced voting disk group with +DBFS_DG.
CRS-4266: Voting file(s) successfully replaced  -- По умолчанию создаются 3 диска
[root@reatdb01 ~]#

[root@reatdb01 ~]# /u01/app/11.2.0/grid/bin/crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
1. ONLINE   37f5676d6fae4fcabfd097a08e2f4392 (o/192.168.10.18/GD_DBFS_CD_09_reatss14) [DBFS_DG]
2. ONLINE   b1f9ddce679c4f78bf25b7735617e56a (o/192.168.10.17/GD_DBFS_CD_08_reatss13) [DBFS_DG]
3. ONLINE   335dbdf0aec74fe9bf9315fb82fc813a (o/192.168.10.16/GD_DBFS_CD_07_reatss12) [DBFS_DG]
Located 3 voting disk(s).
[root@reatdb01 ~]#

Сами экземпляры ASM могли использовать общий серверный параметр файл, хранимый в дисковой группе и потерянный вместе с дисками. В таком случае содержимое SPFILE для ASM может быть легко восстановлено - найдите в ASM alert log файле строку "System parameters with non-default values" и используйте последующие значения.

Теперь, когда все необходимые действия по восстановлению данных выполнены, мы можем остановить CRS, всё ещё работающий в "эксклюзивном" режиме.

.............................. == Псалтирь == ..................................
=== Глава 27, Стих 9 ===
9 Спаси народ Твой и благослови наследие Твое; паси их и возвышай  их  во  веки!

(b+/b-, c+/c-, +/-, *) >

[root@reatdb01 ~]# /u01/app/11.2.0/grid/bin/crsctl stop crs -f
CRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on 'reatdb01'
CRS-2673: Attempting to stop 'ora.drivers.acfs' on 'reatdb01'
CRS-2673: Attempting to stop 'ora.ctssd' on 'reatdb01'
CRS-2673: Attempting to stop 'ora.asm' on 'reatdb01'
CRS-2673: Attempting to stop 'ora.mdnsd' on 'reatdb01'
CRS-2677: Stop of 'ora.mdnsd' on 'reatdb01' succeeded
CRS-2677: Stop of 'ora.asm' on 'reatdb01' succeeded
CRS-2673: Attempting to stop 'ora.cluster_interconnect.haip' on 'reatdb01'
CRS-2677: Stop of 'ora.drivers.acfs' on 'reatdb01' succeeded
CRS-2677: Stop of 'ora.cluster_interconnect.haip' on 'reatdb01' succeeded
CRS-2677: Stop of 'ora.ctssd' on 'reatdb01' succeeded
CRS-2673: Attempting to stop 'ora.cssd' on 'reatdb01'
CRS-2677: Stop of 'ora.cssd' on 'reatdb01' succeeded
CRS-2673: Attempting to stop 'ora.diskmon' on 'reatdb01'
CRS-2673: Attempting to stop 'ora.gipcd' on 'reatdb01'
CRS-2677: Stop of 'ora.gipcd' on 'reatdb01' succeeded
CRS-2673: Attempting to stop 'ora.gpnpd' on 'reatdb01'
CRS-2677: Stop of 'ora.diskmon' on 'reatdb01' succeeded
CRS-2677: Stop of 'ora.gpnpd' on 'reatdb01' succeeded
CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'reatdb01' has completed
CRS-4133: Oracle High Availability Services has been stopped.
[root@reatdb01 ~]#

Наш кластер уже может быть запущен в нормальном режиме. Конечно, база данных не сможет запуститься - её файлы были потеряны.

......... == Второе послание к Коринфянам святого апостола Павла == ............
=== Глава 5, Стих 18 ===
18 Все же от Бога, Иисусом Христом  примирившего  нас  с  Собою  и  давшего  нам
служение примирения,
19 потому  что  Бог  во  Христе  примирил  с  Собою  мир,  не   вменяя   _людям_
преступлений их, и дал нам слово примирения.

(b+/b-, c+/c-, +/-, *) >

[root@reatdb01 ~]# /u01/app/11.2.0/grid/bin/crsctl start crs
CRS-4123: Oracle High Availability Services has been started.
[root@reatdb01 ~]#

[oracle@reatdb01 ~]$ dcli -g dbs_group -l root  /u01/app/11.2.0/grid/bin/crsctl start crs
reatdb01: CRS-4640: Oracle High Availability Services is already active
reatdb01: CRS-4000: Command Start failed, or completed with errors.
reatdb02: CRS-4123: Oracle High Availability Services has been started.
reatdb03: CRS-4123: Oracle High Availability Services has been started.
reatdb04: CRS-4123: Oracle High Availability Services has been started.
reatdb05: CRS-4123: Oracle High Availability Services has been started.
reatdb06: CRS-4123: Oracle High Availability Services has been started.
reatdb07: CRS-4123: Oracle High Availability Services has been started.
reatdb08: CRS-4123: Oracle High Availability Services has been started.
[oracle@reatdb01 ~]$

[root@reatdb01 ~]# /u01/app/11.2.0/grid/bin/crsctl check cluster
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online

[root@reatdb01 ~]# /u01/app/11.2.0/grid/bin/crsctl check cluster -all
**************************************************************
reatdb01:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
reatdb02:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
reatdb03:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
reatdb04:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
reatdb05:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
reatdb06:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
reatdb07:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
reatdb08:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
[root@reatdb01 ~]#

Всё, что остаётся сделать для полного восстановления нашего кластера - это восстановить базу данных из бэкапа, используя Oracle RMAN. Я уверен, что уважаемый читатель сможет справиться с этой задачей. Моя заметка Резервное копирование баз данных Oracle - современный подход может направить вас в нужном направлении.

Спасибо что зашли,

Будьте благословенны!
Денис