Исправление логических повреждений в индексе
С течением времени локальные индексы могут быть повреждены по разным причинам, включая ошибки приложений, ошибки системного программного обеспечения или ошибки на уровне аппаратного обеспечения. Повреждённый индекс может не проявлять себя в течение длительного периода времени, пока пользователи не столкнутся с соответствующими сообщениями об ошибках, указывающих на индексное повреждение. Следовательно, в ваши обязанности должен входить периодический мониторинг секций на предмет повреждения индексов и своевременного принятия соответствующих мер для исправления подобных повреждений.
Существует два типа индексных повреждений: логический и физический. Мы уже знаем, что физические повреждения исправляются с помощью утилиты PROUTIL TPIDXBUILD.
Логические повреждения в индексах происходят, когда по каким-то причинам в таблице отсутствуют или есть неправильные ROWID. Например, когда:
- индексный ключ ссылается на не существующую запись;
- существующая запись не имеет индексного ключа;
- индексный ключ ссылается на некорректную запись.
Один из способов проверки логических повреждений в индексах заключается в мониторинге сообщений об ошибках в журнале базы данных. Для исправления логических индексных повреждений в одной или нескольких секциях таблицы применяется утилита PROUTIL IDXFIX.
Утилита IDXFIX используется в онлайн для проверки и исправления логических индексных повреждений в одной или нескольких секциях. В ней вы можете указать, необходимо ли проверить только записи, только индексы или и то и другое. После чего IDXFIX выполняет сканирование и восстановление повреждённых индексов.
Интерфейс утилиты IDXFIX имеет семь пунктов меню:
- Scan records for missing index entries – сканирует записи на предмет отсутствующих или некорректных индексных ключей и, если было указано, исправляет их. Используйте этот пункт, если вы подозреваете, что некоторые из ваших записей не имеют индексных ключей
- Scan indexes for individual index entries – сканирует индексы на предмет повреждённых индексных ключей и, если было указано, исправляет их. Используйте этот пункт, если вы подозреваете, что некоторые из индексных ключей ссылаются на некорректные записи.
- Both 1 and 2 above – выполнение первых двух пунктов.
- Cross-reference check of multiple indexes for table – выполнение перекрёстной проверки двух или более индексов в таблице. Сначала выполняется проверка каждого индекса в отдельности. Затем, выполняется сравнение индексов (index-to-index) чтобы проверить, что список ROWID, сгенерированный одним индексом, соответствует списку ROWID, сгенерированным другим (и).
- Build indexes from existing indexes – перестройка одного или нескольких индексов на основе неповреждённого индекса.
- Delete one record and its index entries – запрашивается RECID записи, которую вы хотите удалить. После этого, удаляется запись и все её индексные ключи. Используйте этот пункт только, если существует запись с потерянными ключами, и вы действительно хотите её удалить.
- Quit – выход из утилиты IDXFIX.
proenv>proutil sportsco -C idxfix OpenEdge Release 12.0 as of Fri Feb 22 19:02:39 EST 2019 Index Fix Utility 1. Scan records for missing index entries with index block validation. 2. Scan indexes for invalid index entries. 3. Both 1 and 2 above. 4. Cross-reference check of multiple indexes for a table. 5. Build indexes from existing indexes. 6. Delete one record and its index entries. 8. Scan records for missing index entries. q. Quit. Enter selection:
Если вы выбрали пункт 1, 2 или 3, то перед вами откроется дополнительное меню, пункты которого позволяют указать, какие индексы необходимо исправить, и где они размещены (например, в области или в таблице). Для секционированных таблиц вы можете выбрать одну или несколько секций.
Select one of the following: -------------------- All (a/A) - Choose all the indexes Some (s/S) - Choose only some of the indexes By Area (r/R) - Choose indexes in selected areas By Schema (c/C) - Choose indexes by schema owners By Table (t/T) - Choose indexes in selected tables By Partition (p/P) - Choose indexes in selected table partitions By Activation (v/V) - Choose active or inactive indexes -------------------- Quit (q/Q) Enter your selection:
Поскольку пункт 3 утилиты PROUTIL IDXFIX включает в себя возможности пунктов 1 и 2, то зная, как работает пункт 3, вы легко разберётесь с ними. Поэтому далее по шагам рассмотрим работу именно этого пункта.
- Запустите PROUTIL IDXFIX на базе данных:
proenv>proutil sportsco -C idxfix OpenEdge Release 12.0 as of Fri Feb 22 19:02:39 EST 2019 Index Fix Utility 1. Scan records for missing index entries with index block validation. 2. Scan indexes for invalid index entries. 3. Both 1 and 2 above. 4. Cross-reference check of multiple indexes for a table. 5. Build indexes from existing indexes. 6. Delete one record and its index entries. 8. Scan records for missing index entries. q. Quit. Enter selection:
- На предложение выбрать пункт меню, введите 3 и нажмите Enter. Откроется следующий уровень меню:
Enter your selection: 3 Invalid response. Try again. (2785) Select one of the following: -------------------- All (a/A) - Choose all the indexes Some (s/S) - Choose only some of the indexes By Area (r/R) - Choose indexes in selected areas By Schema (c/C) - Choose indexes by schema owners By Table (t/T) - Choose indexes in selected tables By Partition (p/P) - Choose indexes in selected table partitions By Activation (v/V) - Choose active or inactive indexes -------------------- Quit (q/Q) Enter your selection:
- На предложение выбрать пункт меню, введите p (By Partition) и нажмите Enter. Откроется меню Choose Table Partitions to Fix Indexes, в котором необходимо выбрать секции.
Enter your selection: p Choose Table Partitions to Fix Indexes ---------------------------------------------------------------------------------------------------------------------- Option| Table Name | Table Owner | Partition Name : ID |Number ---------------------------------------------------------------------------------------------------------------------- 1|Customer |PUB |Customer-1:1 | 4 2|Customer |PUB |Customer-2:2 | 4 3|Customer |PUB |Customer-3:3 | 4 4|Customer |PUB |Customer-4:4 | 4 5|Customer |PUB |Customer-5:5 | 4 6|Customer |PUB |Customer-6:6 | 4 7|Customer |PUB |Customer-7:7 | 4 8|Customer |PUB |Customer-8:8 | 4 9|Customer |PUB |Customer-9:9 | 4 10|Customer |PUB |Customer-10:10 | 4 11|Customer |PUB |Customer-11:11 | 4 12|Customer |PUB |Customer-12:12 | 4 13|Customer |PUB |Customer-13:13 | 4 14|Customer |PUB |Customer-14:14 | 4 15|Customer |PUB |Customer-15:15 | 4 16|Customer |PUB |Customer-16:16 | 4 17|Customer |PUB |Customer-17:17 | 4 18|Customer |PUB |Customer-18:18 | 4 19|Customer |PUB |Customer-19:19 | 4 20|Customer |PUB |Customer-20:20 | 4 21|Customer |PUB |Customer-21:21 | 4 22|Customer |PUB |Customer-22:22 | 4 23|Customer |PUB |Customer-23:23 | 4 24|Order |PUB |Order-12:1 | 13 25|Order |PUB |Order-11:2 | 13 ---------------------------------------------------------------------------------------------------------------------- Page 1 of 2 Input Your Choice (c/C) - Change Display (a/A) - All (n/N) - Next Page (q/Q) - Quit (g/G) - Go
- Укажите секции, вводя поочерёдно соответствующие им номера (из поля Option) и нажимая Enter.
Choose Table Partitions to Fix Indexes ---------------------------------------------------------------------------------------------------------------------- Option| Table Name | Table Owner | Partition Name : ID |Number ---------------------------------------------------------------------------------------------------------------------- * 1|Customer |PUB |Customer-1:1 | 4 2|Customer |PUB |Customer-2:2 | 4 * 3|Customer |PUB |Customer-3:3 | 4 4|Customer |PUB |Customer-4:4 | 4 * 5|Customer |PUB |Customer-5:5 | 4 6|Customer |PUB |Customer-6:6 | 4 7|Customer |PUB |Customer-7:7 | 4 8|Customer |PUB |Customer-8:8 | 4 9|Customer |PUB |Customer-9:9 | 4
- Как только будут выбраны все необходимые секции (выбранные секции помечаются звёздочкой), введите g (для продолжения). Откроется меню Choose Indexes to Fix, в котором необходимо выбрать индексы.
- Укажите индексы, вводя поочерёдно соответствующие им номера (из поля Option) и нажимая Enter.
Choose Indexes to Fix --------------------------------------------------------------------------------------------------------------------- Option| Table Name | Table Owner | Index Name |G/L|Number --------------------------------------------------------------------------------------------------------------------- * 1|Customer |PUB |CountrySalesrepLocalIdx | L | 67 --------------------------------------------------------------------------------------------------------------------- Page 1 of 1 Input Your Choice (c/C) - Change Display (t/T) - All Active Indexes (i/I) - All Inactive Indexes (a/A) - All (q/Q) - Quit (g/G) - Go
- Как только будут выбраны все необходимые индексы (выбранные индексы помечаются звёздочкой), введите g (для продолжения).
- Утилита попросит подтвердить ваш выбор. Введите y (yes) и нажмите Enter.
- На вопрос Fix indexes on Scan, введите y (yes) и нажмите Enter.
- Утилита очередной раз попросит подтвердить ваш выбор. Введите y (yes) и нажмите Enter.
- Вам будет задан вопрос, желаете ли вы проверить все записи или указать диапазон.
- Введите a (All) и затем y (yes).
- Дождитесь завершения работы утилиты сообщением:
Is this correct? (y/n) y Fix indexes on Scan. Is this correct? (y/n) y Provide a range of records to scan through. Type All or the recid to start the scan at or Q to quit. All Is this correct? (y/n) y Scanning records 64 to 16320 in area 300 for missing keys: Phase 1, processing block number 128 in area 300. (8365) Record scan of 64 to 16320 in area 300 complete: 30 keys read, 30 total. Scanning records 32 to 6624 in area 301 for missing keys: Record scan of 32 to 6624 in area 301 complete: 0 keys read, 30 total. 3 indexes, 15 blocks, 30 keys checked. Index fix completed successfully. (4332) proenv>