Проверка целостности файла данных базы данных PostgreSQL

12

Когда я запускаю систему баз данных PostgreSQL, как мне узнать, что моя база данных в целом имеет 100% целостность? Как мне узнать, все ли мои файлы данных и страницы на 100% хороши, без повреждений?

В мире Microsoft SQL Server есть команда, с помощью которой вы можете выполнить команду DBCC CHECKDB, которая сообщит вам о наличии проблем. Вот ссылка, если вы заинтересованы в получении дополнительной информации о команде. DBCC CHECKDB (Transact-SQL)

Я - параноик, склонный к целостности базы данных (который должен быть любой, кто работает с базой данных в роли типа DBA), и этот тип вещей мешает мне хорошо спать по ночам. Такая утилита обязательна! Поиски в Google обнаружили несколько попыток использования таких инструментов, и, по моему мнению, если это не официально принятый инструмент проекта PostgreSQL, я не буду доверять ему что-то столь важное.

Вот несколько ссылок на людей, которые задают подобные вопросы, и я не считаю, что это однозначный ответ. И, на мой взгляд, показывает, что PostgreSQL должен иметь некоторые инструменты, которые, по-видимому, есть у Oracle и Microsoft SQL Server.

Первая ссылка самая интересная, которую я нашел на эту тему. Я думаю, что комментарий к статье, который, вероятно, резюмирует это, гласит: «Postgres довольно неубедительный, когда дело доходит до выявления повреждения базы данных и ее исправления. Единственный способ обнаружить это - выгрузить базу данных или выбрать * из каждой таблицы в базе данных. «.

Как PostgreSQL защищает от частичной записи страниц и повреждения данных

Проверка данных и повреждение файла индекса - Dev Shed

Помощь: мой стол поврежден!

PostgreSQL: поврежденный первичный ключ, несовместимая таблица

Я полагаю, что есть шанс, что 9.3 может иметь некоторые функции проверки коррупции. Похоже, что можно надеяться на то, что проверка файлов подкачки будет суммирована, если кто-то выберет. Так что все выглядит хорошо, если вы подумаете об использовании ZFS и / или будущей версии Postgres с суммированием проверки страницы. https://commitfest.postgresql.org/action/patch_view?id=759

ОБНОВЛЕНИЕ: 14 января 2012 г. Похоже, что использование файловой системы на основе ZFS позволяет обнаружить повреждение путем проверки суммирования каждого блока данных. Я должен буду изучить это дальше и посмотреть, если это обходной путь, позволяющий человеку спокойно спать по ночам, зная, что его данные в базе данных не будут молча повреждены.

ОБНОВЛЕНИЕ: 17 января 2012 г. - Как найти файлы, поврежденные с помощью ZFS. http://docs.oracle.com/cd/E18752_01/html/819-5461/gbbwl.html#gbcuz

ОБНОВЛЕНИЕ: 14 апреля 2014 9.3 действительно получили контрольные суммы данных. https://wiki.postgresql.org/wiki/What's_new_in_PostgreSQL_9.3

Kuberchaun
источник
2
Под целостностью я подразумевал целостность файлов подкачки и тому подобное. Тип материала, который вы обычно видите, только если вы пишете запрос, который попадает на страницу с повреждением. Например, когда диск начинает выходить из строя, некоторые данные на диске могут начать портиться. Как бы вы это заметили?
Kuberchaun

Ответы:

8

PostgreSQL до 9.3 не имел контрольных сумм блоков. Функция была добавлена ​​в 9.3 (задолго до того, как этот вопрос был опубликован).

Чтобы удовлетворить ваши потребности, я бы, вероятно, разработал собственную контрольную сумму (триггеры?) - работая со значениями атрибутов, а не со страницами данных.

filiprem
источник
4
Возможно, стоит добавить, что начиная с Postgres 9.3 вы можете по желанию включить контрольные суммы
a_horse_with_no_name