ASM - где бы найти толковое описание и HOWTO?..

GL
Дата: 18.03.2011 18:02:42
С АСМ'ом раньше никогда не работал, так что просьба сильно не пинать. Появился ряд вопросов, ответы на которые я не смог сразу найти в документации или поведение реальной системы сильно от документации отличается.

Версия и ASM и базы:
sys@+asm> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0      Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
В качестве документации использовалось, в основном,
Oracle® Automatic Storage Management Administrator's Guide
11g Release 2 (11.2)
Part Number E16102-07
.Вопрос 0. Существует ли дополнительная _оракловая_ документация на тему ASM? Может быть, я просто её не увидел?

Вопрос 1. Как осуществить замену дисков на более ёмкие? Я делал так:
alter diskgroup DATA drop disk 'DATA_0003';
-- подождали, пока он дропнется - смотрим в v$asm_disk
-- подождали, пока станет пусто в v$asm_operation
-- вынули старый, вставили новый
select * from v$asm_disk;
alter diskgroup DATA add disk '/dev/sdg4';
-- подождали пока он добавится - смотрим в v$asm_disk
-- подождали пока дискгруппа станет целой - смотрим в v$asm_diskgroup
-- подождали, пока станет пусто в v$asm_operation
После этого можно менять следующий диск.
Вопросы:
а) почему момент фактического окончания операции не совпадает с окончанием операции в v$asm_operation?
б) можно ли не дожидаться окончания операций в v$asm_disk?
в) можно ли как-то временно затормозить ребаланс, для того, чтобы он прошёл всего единожды и только для вновь вставленного диска?

Вопрос 2: Остановил сервер halt -p. Понятно, что база закрылась некорректно, хотя и работа на ней не велась.
Заменил винт, включил. ASM отказался стартовать - всё в соответствии с документацией.
Собственно, вопрос: как правильно заменить умерший винт, если машина выключена?
Я делал так (менялось два диска, по одному в каждой группе):
-- все попытки перевести старые файлы в offline или дроппуть не увенчались успехом
-- в связи с невоспринимаемыми инстансом именами что-то вроде _DROPPED_0003_DATA
alter diskgroup DISK mount force;
alter diskgroup FRA mount force;
-- все попытки перевести старые файлы в offline или дроппуть не увенчались успехом
-- в связи с невоспринимаемыми инстансом именами что-то вроде _DROPPED_0003_DATA
-- через некоторое время, диски пропали сами
alter diskgroup DATA add disk '/dev/sdf4';
alter diskgroup FRA add disk '/dev/sdk4';
-- ребилд пошёл
Вот в этот момент я решил открыть базу. База смонтировалась, но не открылась:
alert_olap.log
...
ALTER DATABASE MOUNT
NOTE: Loaded library: System
SUCCESS: diskgroup DATA was mounted
NOTE: dependency between database olap and diskgroup resource ora.DATA.dg is established
SUCCESS: diskgroup FRA was mounted
NOTE: dependency between database olap and diskgroup resource ora.FRA.dg is established
Successful mount of redo thread 1, with mount id 31089765
Database mounted in Exclusive Mode
Lost write protection disabled
Completed: ALTER DATABASE MOUNT
Fri Mar 18 14:15:40 2011
alter database open
Beginning crash recovery of 1 threads
parallel recovery started with 7 processes
Started redo scan
Completed redo scan
read 5 KB redo, 0 data blocks need recovery
Aborting crash recovery due to error 15081
Errors in file /u01/app/oracle/diag/rdbms/olap/olap/trace/olap_ora_6038.trc:
ORA-15081: failed to submit an I/O operation to a disk
Errors in file /u01/app/oracle/diag/rdbms/olap/olap/trace/olap_ora_6038.trc:
ORA-15081: failed to submit an I/O operation to a disk
ORA-15081 signalled during: alter database open
...

olap_ora_6038.trc
...Successfully allocated 7 recovery slaves
Using 20 overflow buffers per recovery slave
Thread 1 checkpoint: logseq 4, block 444926, scn 973420
cache-low rba: logseq 4, block 520004
on-disk rba: logseq 4, block 520014, scn 1005578
start recovery at logseq 4, block 520004, scn 0
Reading mirrors of log member '+DATA/olap/onlinelog/group_1.258.746043091' (thread 1 seq 4 block 520014)
ksfdrfms:Mirror Read file=+DATA/olap/onlinelog/group_1.258.746043091 fob=0x3041b3710 bufp=0x2b7d6bf44000 blkno=520014 nbytes=91136
ksfdrfms: Read success from mirror side=1 logical extent number=0 disk=DATA_0003 path=/dev/asm/sdf4
Mirror I/O done from ASM disk /dev/asm/sdf4
ksfdrnms:Mirror Read file=+DATA/olap/onlinelog/group_1.258.746043091 fob=0x3041b3710 bufp=0x2b7d6bf44000 nbytes=91136
ksfdrnms: Read success from mirror side=2 logical extent number=1 disk=DATA_0004 path=/dev/asm/sdc4
Mirror I/O done from ASM disk /dev/asm/sdc4
ksfdrnms:Mirror Read file=+DATA/olap/onlinelog/group_1.258.746043091 fob=0x3041b3710 bufp=0x2b7d6bf44000 nbytes=91136
Reading mirrors of log member '+FRA/olap/onlinelog/group_1.256.746043099' (thread 1 seq 4 block 520014)
ksfdrfms:Mirror Read file=+FRA/olap/onlinelog/group_1.256.746043099 fob=0x3041b3d50 bufp=0x2b7d6bf44000 blkno=520014 nbytes=91136
ksfdrfms: Read success from mirror side=1 logical extent number=0 disk=FRA_0002 path=/dev/asm/sdb4
Mirror I/O done from ASM disk /dev/asm/sdb4
ksfdrnms:Mirror Read file=+FRA/olap/onlinelog/group_1.256.746043099 fob=0x3041b3d50 bufp=0x2b7d6bf44000 nbytes=91136
ksfdrnms: Read failed from mirror side=2 logical extent number=1 dskno=65535
...
----------------------------------------------
ORA-15081: failed to submit an I/O operation to a disk
ORA-15081: failed to submit an I/O operation to a disk

Как только диски в ASM'е проребалансировались, база успешно открылась:
alert_olap.log
...
Fri Mar 18 14:27:08 2011
SUCCESS: disk _DROPPED_0000_FRA (0.3915945199) dropped from diskgroup FRAFri Mar 18 14:28:52 2011
alter database open
Beginning crash recovery of 1 threads
parallel recovery started with 7 processes
Started redo scan
Completed redo scan
read 5 KB redo, 0 data blocks need recovery
Started redo application at
Thread 1: logseq 4, block 520004
Recovery of Online Redo Log: Thread 1 Group 1 Seq 4 Reading mem 0
Mem# 0: +DATA/olap/onlinelog/group_1.258.746043091
Mem# 1: +FRA/olap/onlinelog/group_1.256.746043099
Completed redo application of 0.00MB
Completed crash recovery at
Thread 1: logseq 4, block 520014, scn 1025578
0 data blocks read, 0 data blocks written, 5 redo k-bytes read
Fri Mar 18 14:28:53 2011
Thread 1 advanced to log sequence 5 (thread open)
Thread 1 opened at log sequence 5
Current log# 2 seq# 5 mem# 0: +DATA/olap/onlinelog/group_2.259.746043113
Current log# 2 seq# 5 mem# 1: +FRA/olap/onlinelog/group_2.257.746043123
Successful open of redo thread 1
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Fri Mar 18 14:28:53 2011
SMON: enabling cache recovery
[6635] Successfully onlined Undo Tablespace 2.
Undo initialization finished serial:0 start:320444 end:320814 diff:370 (3 seconds)
Dictionary check beginning
Dictionary check complete
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
SMON: enabling tx recovery
Database Characterset is CL8MSWIN1251
No Resource Manager plan active
replication_dependency_tracking turned off (no async multimaster replication found)
Starting background process QMNC
Fri Mar 18 14:28:55 2011
QMNC started with pid=36, OS id=6669
LOGSTDBY: Validating controlfile with logical metadata
LOGSTDBY: Validation complete
...

Т.е. до этого времени инстанс полагал, что диск у ASM'а есть? А если бы я просто выдернул винт? Кстати, надо попробовать...
За интересующий период в логах асма много чего есть, но сам лог достаточно большой, так что я его прикрепил отдельным файлом.


Был бы благодарен за любые соображения и пинки в нужных направлениях

---
Интерпретирую программы и двигаю курсор (c)
pravednik
Дата: 18.03.2011 18:21:57
GL,

автор
Вопрос 0. Существует ли дополнительная _оракловая_ документация на тему ASM? Может быть, я просто её не увидел?

Основная - именно та, которую указали. Остальное - или металинк или всевозможные white paper.
автор
Вопрос 1. Как осуществить замену дисков на более ёмкие? Я делал так:

так и надо
автор
Вопросы:
а) почему момент фактического окончания операции не совпадает с окончанием операции в v$asm_operation?
б) можно ли не дожидаться окончания операций в v$asm_disk?
в) можно ли как-то временно затормозить ребаланс, для того, чтобы он прошёл всего единожды и только для вновь вставленного диска?

а) сравниваете операции "drop disk" и "ребалансировку" в v$asm_operation ?. Если да, то это не совсем сравниваемые вещи
б) наверно имели ввиду v$asm_operation? Если да, то лучше не стоит, потому как до момента, когда вам оракл отрапортует, что ребалансинг завершен, ваши действия с диском - на свой страх
в) Нет, потому как перед тем как вытащить диск, сегменты нужно раскидать по оставшимся, а после того как вставили новый - нужно его нагрузить "наравне" с другими дисками.
автор
А если бы я просто выдернул винт? Кстати, надо попробовать...

насколько помню, то в подобном случае АСМ датафайлы с сегментами на этом диске отправит в офлайн
GL
Дата: 18.03.2011 18:32:06
pravednik
...
автор
А если бы я просто выдернул винт? Кстати, надо попробовать...

насколько помню, то в подобном случае АСМ датафайлы с сегментами на этом диске отправит в офлайн
Большое спасибо за ответ - стало хоть чуть-чуть более понятно. Про выдёргивание винта - провёл эксперимент:
alert_olap.log
Fri Mar 18 17:06:29 2011
Errors in file /u01/app/oracle/diag/rdbms/olap/olap/trace/olap_ckpt_7669.trc:
ORA-27072: File I/O error
Linux-x86_64 Error: 5: Input/output error
Additional information: 4
Additional information: 88096
Additional information: -1
WARNING: Read Failed. group:1 disk:2 AU:43 offset:16384 size:16384
WARNING: failed to read mirror side 1 of virtual extent 0 logical extent 0 of file 257 in group [1.1641571347] from disk DATA_0002 allocation unit 43 reason error; if possible,will try another mirror side
NOTE: successfully read mirror side 2 of virtual extent 0 logical extent 1 of file 257 in group [1.1641571347] from disk DATA_0004 allocation unit 1483
Errors in file /u01/app/oracle/diag/rdbms/olap/olap/trace/olap_ckpt_7669.trc:
ORA-27072: File I/O error
Linux-x86_64 Error: 5: Input/output error
Additional information: 4
Additional information: -1
WARNING: Read Failed. group:1 disk:2 AU:0 offset:0 size:4096
ERROR: cannot read disk header of disk DATA_0002 (2:3915945195)
NOTE: process 7669 initiating offline of disk 2.3915945195 (DATA_0002) with mask 0x7e in group 1
Fri Mar 18 17:06:30 2011
NOTE: disk 2 (DATA_0002) in group 1 (DATA) is offline for reads
NOTE: disk 2 (DATA_0002) in group 1 (DATA) is offline for writes
Fri Mar 18 17:08:13 2011
SUCCESS: disk DATA_0002 (2.3915945195) renamed to _DROPPED_0002_DATA in diskgroup DATA
Fri Mar 18 17:14:10 2011
SUCCESS: disk DATA_0001 (1.3915945205) added to diskgroup DATA
Fri Mar 18 17:21:47 2011
SUCCESS: disk _DROPPED_0002_DATA (2.3915945195) dropped from diskgroup DATA
Все датафайлы всё время оставались в онлайне, правда, активность совсем небольшая, может быть, просто записей на этот диск не было?..
lark
Дата: 18.03.2011 18:33:11
Посмотри twiki на сайте CERN, в свое время ребята хорошо покопались внутри ASM
GL
Дата: 18.03.2011 19:44:42
lark,

Спасибо - было познавательно.

To All:
Вопрос про невозможность начать восстановления экземляра базы до завершения ребалансинга ASM'а остаётся в силе. Или я что-то основательно не понимаю в концептах?
jan2ary
Дата: 18.03.2011 20:37:15
GL
Вопрос про невозможность начать восстановления экземляра базы до завершения ребалансинга ASM'а остаётся в силе. Или я что-то основательно не понимаю в концептах?

Во время нормальной ребалансировки (add/drop disk) дисковой группы проблем с доступом к данным не должно возникать. В Вашем случае естественно, что АСМ проснулся, а голова в тумбочке не понял произошедшего.
Многое зависит от redundancy дисковой группы. В Вашем тестовом случае явно не external, поэтому АСМу удалось провести восстановление группы прозрачно.
denix1
Дата: 19.03.2011 15:55:09
pravednik
автор
А если бы я просто выдернул винт? Кстати, надо попробовать...

насколько помню, то в подобном случае АСМ датафайлы с сегментами на этом диске отправит в офлайн
на самом деле - не так
все зависит от реданданси дисковой группы
при внешней - АСМ должен размонтировать всю дисковую группу, а не играться с отдельным дисков или файлами, которые имеют куски на нем
при нормальной или хай в оффлайн опять же ничего не уйдет - работать будут с зеркальными копиями аллокейшн юнитов
расположенными на других диских,
после того как закончится DISK_REPAIR_TIME(если такое использовалось) диск будет выкинуть из дисковой группы
и запустится ребалансировка
denix1
Дата: 19.03.2011 16:00:24
pravednik
автор
Вопрос 1. Как осуществить замену дисков на более ёмкие? Я делал так:

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

ПС.
да еще и желательно с POWER поиграться - причем в той же команде
denix1
Дата: 19.03.2011 16:02:44
denix1
pravednik
пропущено...

насколько помню, то в подобном случае АСМ датафайлы с сегментами на этом диске отправит в офлайн
на самом деле - не так
все зависит от реданданси дисковой группы
при внешней - АСМ должен размонтировать всю дисковую группу, а не играться с отдельным дисков или файлами, которые имеют куски на нем
при нормальной или хай в оффлайн опять же ничего не уйдет - работать будут с зеркальными копиями аллокейшн юнитов
расположенными на других диских,
после того как закончится DISK_REPAIR_TIME(если такое использовалось) диск будет выкинуть из дисковой группы
и запустится ребалансировка
еще маленькое замечание
АСМ и не может отправить файлы в оффлайн - это функционал экземпляра БД,
причем в 11.2.0.2 в оффлайн отправился бы не какой то конкретный файл, а вся БД...
denix1
Дата: 19.03.2011 16:11:50
GL
а) почему момент фактического окончания операции не совпадает с окончанием операции в v$asm_operation?

потому что - по умолчанию NOWAIT
GL
в) можно ли как-то временно затормозить ребаланс, для того, чтобы он прошёл всего единожды и только для вновь вставленного диска?
так вроде для старого диска ребаланс тоже нужен - данные с него же нужно забрать или как ? ;)
вообще то ребалансировку можно запускать вручную,
например так:
- выставив ASM_POWER_LIMIT=0
- выполнив нужные изменения через ALTER - т.е. фактически на уровне метаданных
- запустив ребалансировку через ALTER DISKGROUP ... REBALANCE POWER ...;

или так:
выполняя ALTER DISKGROUP с POWER 0 - тогда ребалансировка не запустится
далее запускаем вручную через REBALANCE, или указав POWER>0 в последней команде