Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

XX001 1С:Предприятие и СУБД

PostgreSQL Error XX001 data_corrupted: Восстановление Повреждений

Обновлено: 26.08.2026 · Официальная документация ↗
  • Фатальная ошибка повреждения страниц данных: ERROR: XX001: invalid page in block XX of relation base/XX/XX.
  • Ошибка контрольной суммы: ERROR: XX001: page verification failed, calculated checksum XXXX but expected YYYY.
  • Отказ выполнения SELECT, pg_dump или резервного копирования на конкретных строках таблицы.
  • В 1С:Предприятие аварийно завершается расчет итогов или проведение документов с сообщением «Ошибка формата потока» / «Повреждена таблица СУБД».

1. Проверка масштаба повреждений с помощью расширения amcheck

Активируйте модуль проверки целостности B-Tree индексов:

CREATE EXTENSION IF NOT EXISTS amcheck;

-- Проверка целостности всех индексов схемы public:
SELECT c.relname, bt_index_check(c.oid, true)
FROM pg_index i
JOIN pg_class c ON c.oid = i.indexrelid
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = 'public' AND c.relam = 403 -- btree
  AND c.relpersistence <> 't';

2. Сценарий: Поврежден только индекс (B-Tree corruption)

Если повреждение локализовано в индексе, данные физической таблицы не пострадали. Выполните перестроение:

REINDEX TABLE CONCURRENTLY my_corrupted_table;

3. Сценарий: Повреждены блоки таблицы (Heap Corruption)

Если поврежден блок самой таблицы (Heap), чтение будет падать. Для аварийного спасения уцелевших данных активируйте обнуление битых страниц в рамках аварийной сессии:

-- ВНИМАНИЕ: Позволяет пропустить битый блок ценой потери находящихся в нем строк!
SET zero_damaged_pages = on;

-- Выгрузка всех читаемых данных в новую копию таблицы:
CREATE TABLE my_table_salvaged AS SELECT * FROM my_corrupted_table;

-- Сброс опасного параметра:
SET zero_damaged_pages = off;

4. Включение и мониторинг Data Checksums

Убедитесь, что в кластере включена проверка контрольных сумм страниц данных для раннего обнаружения сбоев дисков:

SHOW data_checksums;

-- Если выключено, включите в оффлайн-режиме утилитой pg_checksums:
-- 1. systemctl stop postgresql
-- 2. su - postgres -c "/usr/lib/postgresql/16/bin/pg_checksums -e -D /var/lib/postgresql/data"
-- 3. systemctl start postgresql
💡 Практика специалистов: Всегда инициализируйте продакшн-кластеры PostgreSQL с ключом -k (--data-checksums). Это позволяет выявлять скрытую деградацию дисковых массивов на ранних стадиях до того, как повреждения распространятся на резервные копии.

Частые вопросы (FAQ)

Что делает параметр zero_damaged_pages = on?

При обнаружении поврежденного заголовка или невалидной контрольной суммы страницы PostgreSQL не прерывает запрос ошибкой XX001, а забивает поврежденную страницу нулями и логирует предупреждение. Это приводит к потере строк в данном блоке (до 8KB данных), но спасает остальную таблицу.

Почему возникают ошибки XX001 data_corrupted?

Основные причины: аппаратные сбои RAM (bit-rot), сбои контроллеров дисков и SSD без ECC-защиты, внезапное отключение питания сервера при включенном небезопасном кэше записи диска (Write-Caching without BBU), а также баги файловой системы.

Как восстановить потерянные строки после zero_damaged_pages в 1С?

После спасения таблицы выполните 'Тестирование и исправление' в 1С:Конфигураторе с установленным флагом 'Создавать объекты при наличии ссылок на несуществующие', либо восстановите конкретный документ/справочник из резервной копии.

Можно ли восстановить поврежденную страницу без потери строк?

Да, если у вас настроена непрерывная архивация WAL (PITR) и включены data_checksums: восстановите базовую копию до момента аварии и накатите WAL-логи до точки сбоя.

Полезные материалы
Рекомендуем