powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
15 сообщений из 15, страница 1 из 1
nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
    #40125794
rashid.abzalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

На одном из серверов при создании бэкапа, с помощью nbackup -B 0 ..., произошла ошибка и больше пока не воспроизводится.

Команда:
Код: sql
1.
nbackup.exe -u sysdba -p masterkey -B 0 <алиас БД без указания хоста> <файл на внешнем диске.fdb>


Ошибка:
Код: sql
1.
2.
3.
4.
5.
6.
7.
  [
  PROBLEM ON "end backup".
  unsuccessful metadata update
  -ALTER DATABASE failed
  -Database is not in the physical backup mode
  SQLCODE:-607
  ]



В каких случаях может происходить такая ошибка?
Судя по ошибке, она произошла в конце бэкапа во время выполнения команды END BACKUP, т.е. BEGIN BACKUP был выполнен успешно. А раз так, то как БД оказалась в "not in the physical backup mode"?

В логе firebird.log ничего интересного нет (за интервал времени выполнения этого бэкапа), кроме:
1)
Sat Jan 8 07:00:16 2022
Fatal lock manager error: invalid lock id (309760), errno: 0
2)
Sat Jan 8 11:55:05 2022
Shutting down the server with 1 active connection(s) to 1 database(s), 0 active service(s)

1-е сообщение не относится ко времени бэкапа - оно на 3 часа раньше его старта. Или время в логе пишется в UTC?
2-е сообщение, на сколько я понимаю, штатное для nbackup, которое происходит во время его дисконнекта от БД, из-за того что он работает в embedded режиме? Или тут ошибаюсь?

БД на "побитость" проверял (gfix -validate -full) - ошибок нет.
Используется Firebird 4.0.0.2496 Classic x64.
...
Рейтинг: 0 / 0
nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
    #40125797
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rashid.abzalov
Судя по ошибке, она произошла в конце бэкапа во время выполнения команды END BACKUP, т.е. BEGIN BACKUP был выполнен успешно. А раз так, то как БД оказалась в "not in the physical backup mode"?
Кто-то другой уже выполнил END BACKUP


rashid.abzalov
2-е сообщение, на сколько я понимаю, штатное для nbackup, которое происходит во время его дисконнекта от БД, из-за того что он работает в embedded режиме? Или тут ошибаюсь?
Т.к. у вас CS, то это сообщение мог выдать любой процесс при не штатном завершении.

rashid.abzalov
БД на "побитость" проверял (gfix -validate -full) - ошибок нет.
Это радует
...
Рейтинг: 0 / 0
nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
    #40125803
rashid.abzalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvladКто-то другой уже выполнил END BACKUP
Это совершенно точно исключено. С БД в это время админских задач больше никто не выполнял.

Сейчас проверил, в rdb$backup_history есть только 1 запись с временем окончания (RDB$TIMESTAMP) как раз в 11:55:05.

Есть ли способ как-то обеспечить монопольный доступ к БД для nbackup? И почему он сам этого не делает?
Получается, что в процессе его работы кто-то может легко сделать END BACKUP, и nbackup остановится с такой ошибкой? И после этого не получится найти никаких концов (ни в логе, ни в rdb$backup_history) - кто это сделал и откуда?
...
Рейтинг: 0 / 0
nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
    #40125817
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rashid.abzalov
hvladКто-то другой уже выполнил END BACKUP

Это совершенно точно исключено. С БД в это время админских задач больше никто не выполнял.Другого объяснения у меня пока что нет.
Все ошибаются, админ тоже человек.

rashid.abzalov
Сейчас проверил, в rdb$backup_history есть только 1 запись с временем окончания (RDB$TIMESTAMP) как раз в 11:55:05.
И это ничему не противоречит. Тот, кто обломался при выполнении END BACKUP и не должен был оставить там запись.

rashid.abzalov
Есть ли способ как-то обеспечить монопольный доступ к БД для nbackup? И почему он сам этого не делает?
Монопольный доступ обеспечивается шатдауном, например с gfix.
nbackup этого не делает, т.к. это совершенно не нужно.

rashid.abzalov
Получается, что в процессе его работы кто-то может легко сделать END BACKUP, и nbackup остановится с такой ошибкой?
Если кто попало имеет админские права - да, он может делать что угодно и когда угодно.
Проблем с БД это не создаёт. nbackup и Firebird на это рассчитаны.
А вот файл бекапа я бы проверил.

rashid.abzalov
И после этого не получится найти никаких концов (ни в логе, ни в rdb$backup_history) - кто это сделал и откуда?
Включайте аудит запуска процессов, логгируйте коннекты к БД - все инструменты есть в OS и в Firebird.
...
Рейтинг: 0 / 0
nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
    #40125821
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел ещё раз на nbackup

- запись в rdb$backup_history делает nbackup и комиттит тр-цию до выполнения END BACKUP
Это значит, что ещё один END BACKUP (предположительный) выполнялся не nbackup'ом, например из isql.

- если была ошибка при выполнении END BACKUP, то nbackup не делает detach, так что сообщение в логе ("Shutting down the server...") скорее всего оставил он
...
Рейтинг: 0 / 0
nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
    #40125866
rashid.abzalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В целом понятно, спасибо.

>>Монопольный доступ обеспечивается шатдауном, например с gfix.
Но ведь после такого шатдауна sysdba все равно сможет соединиться с этой БД и выполнить END BACKUP, пусть даже и по ошибке. Т.е получается, что внешними средствами не обеспечить монопольный доступ.

Мне кажется, такой доступ должен обеспечиваться внутренними средствами и nbackup-у он нужен, т.к. раз уж он смог сделать BEGIN BACKUP, то только он в этом же сеансе бэкапа и должен мочь сделать END BACKUP.
И только если что-то пошло не так (по сути это только прибитие процесса, т.к. обработанные исключения должны снимать блокировку - сейчас это не так, но по логике вещей должно быть так), то только тогда sysdba может явной отдельной командой снять такую блокировку (с записью в лог).

>>nbackup этого не делает, т.к. это совершенно не нужно.
nbackup рассчитан на одновременный параллельный бэкап? Если нет, то кто-то должен обеспечивать блокировку. Сейчас это предлагается делать регламентными средствами (на уровне договоренностей), а нужно иметь технические.
...
Рейтинг: 0 / 0
nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
    #40125869
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rashid.abzalovНо ведь после такого шатдауна sysdba все равно сможет соединиться с этой БД и выполнить END BACKUP, пусть даже и по ошибке.
речь про single-user shutdown mode. Здесь "с головой будет только один админ". мультиюзер шатдаун в массе это абсурд. Потому что в массе приложений коннект под сисдба (или владельцем).
...
Рейтинг: 0 / 0
nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
    #40125872
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rashid.abzalov,

вообще-то, если из ДВУХ isql дать alter database begin backup, то второй получит
Код: plaintext
1.
2.
3.
4.
SQL> alter database begin backup;
Statement failed, SQLSTATE = 42000
unsuccessful metadata update
-Database is already in the physical backup mode
SQL>

то же самое должно быть и при параллельном запуске двух нбэкапов, но мне проверять лениво (надо искать баальшую базу, чтобы
успеть запустить 2 нбэкапа).

p.s. самое смешное, что второй isql, увидев ошибку, может дать alter database end backup, ибо они оба равноправные sysdba, а первый isql при такой же команде теперь обломится
Код: plaintext
1.
2.
3.
SQL> alter database end backup;
Statement failed, SQLSTATE = 42000
unsuccessful metadata update
-Database is not in the physical backup mode
Однако, они оба SYSDBA, и их конкуренция - не проблема FB. Первый isql мог вообще сделать дисконнект, и потом опять коннект и alter ...
...
Рейтинг: 0 / 0
nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
    #40125888
rashid.abzalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvречь про single-user shutdown mode
Ага, увидел новые опции, спасибо! Хорошо, что nbackup однопоточный, и не создаст несколько соединений :)
Хотя, это может измениться, да и зачем разрабатывали целую механику дельта-файлов..., если нужно делать целый shutdown.
...
Рейтинг: 0 / 0
nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
    #40125889
rashid.abzalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvвообще-то, если из ДВУХ isql дать alter database begin backup, то второй получит.
то же самое должно быть и при параллельном запуске двух нбэкапов
Да, это так и есть и это правильно. Но раз ни nbackup, ни BEGIN BACKUP не должны работать одновременно в разных сеансах, то почему бы не обеспечивать монопольный доступ к блокированию БД для одной конкретной операции BEGIN BACKUP в рамках одной команды бэкапа в nbackup?

kdvp.s. самое смешное, что второй isql, увидев ошибку, может дать alter database end backup, ибо они оба равноправные sysdba, а первый isql при такой же команде теперь обломится.
Однако, они оба SYSDBA, и их конкуренция - не проблема FB.
Очень "удобная гибкость" ... для создания граблей. А для решения простых административных задач требуется прямолинейная однозначность - если процесс начался, то на пол пути его у тебя никто не уведет, хоть по ошибке, хоть по злому умыслу.
И самое печальное, обо всех этих вклиниваниях не будет никакого упоминания в логах...

kdvПервый isql мог вообще сделать дисконнект, и потом опять коннект и alter ...
Если рассматривать BEGIN BACKUP и END BACKUP как инструмент решающий 3 задачи за один присест - для бэкапа nbackup, для блокировки nbackup -L и для непосредственных команд sql BEGIN BACKUP, то да, такое компромиссное решение выглядит логичным.
Но если рассматривать конкретную операцию бэкапа с nbackup, то такая гибкость уже не выглядит логичным.
...
Рейтинг: 0 / 0
nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
    #40125892
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rashid.abzalovда и зачем разрабатывали целую механику дельта-файлов..., если нужно делать
целый shutdown.

Затем и создавали чтобы было не нужно.

Считалось, что nbackup нужен только солидным организациям с большими базами, а
там пароль sysdba не раздают кому попало. Оптимисты...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
    #40125895
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rashid.abzalov
>>Монопольный доступ обеспечивается шатдауном, например с gfix.
Но ведь после такого шатдауна sysdba все равно сможет соединиться с этой БД и выполнить END BACKUP, пусть даже и по ошибке. Т.е получается, что внешними средствами не обеспечить монопольный доступ.
С точки зрения работы nbackup и\или движка нет никакой необходимости ограничивать доступ к БД по время бекапа.
Более того, я вообще не вижу ни одной точки зрения с такой необходимостью.
Невозможно на 100% защититься от ошибок админа. Ни в какой системе.
Далее. nbackup (как и gbak) предназначен для работы с БД параллельно с пользователями и было бы странно делать иначе.
Если сильно хочется - пишите свою утилиту, которая при коннекте будет переводить БД в single-user shutdown, выполнять бекап и переводить БД в online.
Это возможно. Но до сих пор никому не было нужно.
Может проблема не там, где кажется ?

rashid.abzalov
Мне кажется, такой доступ должен обеспечиваться внутренними средствами и nbackup-у он нужен, т.к. раз уж он смог сделать BEGIN BACKUP, то только он в этом же сеансе бэкапа и должен мочь сделать END BACKUP.
С чего бы это ? nbackup может делать как полный цикл (BEGIN BACKUP + копирование + END BACKUP), так и отдельные действия (BEGIN BACKUP, END BACKUP).
Вы сейчас придумываете какие-то правила под себя, но хотите чтобы они действовали для всех.

rashid.abzalov
И только если что-то пошло не так (по сути это только прибитие процесса, т.к. обработанные исключения должны снимать блокировку - сейчас это не так, но по логике вещей должно быть так), то только тогда sysdba может явной отдельной командой снять такую блокировку (с записью в лог).
Какую блокировку ? Может стоит почитать - как работает nbackup ?

rashid.abzalov
>>nbackup этого не делает, т.к. это совершенно не нужно.
nbackup рассчитан на одновременный параллельный бэкап? Если нет, то кто-то должен обеспечивать блокировку. Сейчас это предлагается делать регламентными средствами (на уровне договоренностей), а нужно иметь технические.
Никто не может начать новый бекап, пока не завершён текущий - больше никаких других блокировок тут не требуется.

PS я правильно понимаю, что про это речь уже не идёт ?
rashid.abzalov
Это совершенно точно исключено

PPS если же речь идёт о "монопольном доступе" к команде END BACKUP тем же процессом , который выдал BEGIN BACKUP,
то это совершенно другой разговор, и всё равно выглядит весьма сомнительно.
...
Рейтинг: 0 / 0
nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
    #40125905
rashid.abzalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvladНевозможно на 100% защититься от ошибок админа. Ни в какой системе.
Но залогировать и выдать warning можно.
Сценарий когда nbackup начал бэкап, и вдруг по среди процесса в другом сеансе сделали END BACKUP - не может считаться нормальным. Это, как минимум, нужно залогировать, а как максимум, другому сеансу нужно было дать отлуп.
Остальные варианты с shutdown и прочее произрастают из невозможности достичь исходной цели штатными средствами. Я только за параллельную работу с пользователями, но не за одновременную работу над одной задачей, в данном случае процессом бэкапа.

hvladВы сейчас придумываете какие-то правила под себя, но хотите чтобы они действовали для всех.
Еще раз, речь только про сценарий когда nbackup начал бэкап, и вдруг по среди процесса в другом сеансе сделали END BACKUP. Я сильно удивлюсь если такой сценарий ожидаемый для всех.

hvladКакую блокировку ? Может стоит почитать - как работает nbackup?
Фраза вырвана из контекста.
Там не описывалось текущее поведение nbackup. Там описывался гипотетический вариант блокировки которая могла бы быть:
rashid.abzalovМне кажется, такой доступ должен обеспечиваться внутренними средствами и nbackup-у он нужен, т.к. раз уж он смог сделать BEGIN BACKUP, то только он в этом же сеансе бэкапа и должен мочь сделать END BACKUP.
И только если что-то пошло не так (по сути это только прибитие процесса, т.к. обработанные исключения должны снимать блокировку - сейчас это не так, но по логике вещей должно быть так), то только тогда sysdba может явной отдельной командой снять такую блокировку (с записью в лог).

hvladPS я правильно понимаю, что про это речь уже не идёт?
Нет, идет. Там никто не мог выполнить sql команды END BACKUP, а бэкап с nbackup-ом это был регламентный процесс, выполнялся планировщиком заданий. Но подтвердить это я никак не могу (в тексте ошибки нет никаких подробностей кто и когда опередил nbackup, и в логах ничего нет, и в rdb$backup_history тоже ничего нет), поэтому, чтобы не наступать на эти же грабли и ведется этот разговор. А сейчас пока придется пробовать это воспроизводить или наблюдать пока не воспроизведется снова.

PS. База ~200 Гб, бэкапилась на внешний USB диск, обычно процесс занимается от 2,5 до 3,5 часов, но на этот раз ошибка произошла примерно через час после старта. По крайней мере, судя по коду nbackup, "commit history insert" произошел успешно и завершился в это время, но commit был последним действием перед блоком catch, т.е. получается, что internal_unlock_database вызывался не из catch блока.
...
Рейтинг: 0 / 0
nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
    #40125910
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rashid.abzalovСценарий когда nbackup начал бэкап, и вдруг по среди процесса в другом сеансе сделали END BACKUP - не может считаться нормальным.
да чего бы это вдруг? Вам Влад посоветовал почитать про nbackup, я вот даже подкину доку:
http://www.ibase.ru/files/firebird/nbackup_ru.pdf

nbackup -L равно alter database begin backup
nbackup -N равно alter database end backup.

Почему вы хотите запретить выполнение этих команд "в разных сеансах"??? Что с вашей точки зрения является "сеансом"?
Кто такой "он же" в смысле выполнителя этих команд? (вообще это может быть один и тот же человек, либо по глупости, либо по специфическим причинам)
Я разве что согласен, что если
- запускаем nbackup -b (аналог -L, копирования, и -N)
- в процессе этого некий сумасшедший админ выполняет nbackup -n
- по окончании nbackup -b получает отлуп (потому что оба были SYSDBA, а база не заблокирована от нескольких sysdba).

Ну так кто вам такую схему мешает провернуть выше с командами -L и -N?
- админ дает nbackup -L
- начинает копировать базу средствами ОС
- другой админ (или тот же) дает nbackup -N
- ... конфликт интересов? (особенно при том, что первый админ получает шлак вместо скопированной БД).

Тогда да, как и сказал Влад - переводите перед нбэкапом базу в single-user shutdown. Но это ваши внутренние проблемы и прихоти.
rashid.abzalovБаза ~200 Гб, бэкапилась на внешний USB диск, обычно процесс занимается от 2,5 до 3,5 часов
как-то тормозно. 18 мегабайт в секунду всего.

p.s. я еще добавлю, что "иллюзия блокирования" может происходить из того, что nbackup -b это как бы одна команда. Но у нас тут не файловый сервер - в этот момент (а это СМЫСЛ нбэкапа) с базой могут работать другие пользователи и другие SYSDBA.
Иначе, ваш вариант с "блокированием" - это остановка ФБ, копирование файла, и запуск ФБ. Тогда никакие sysdba этому процессу не помешают (если опять же, какой-то админ параллельно во время копирования не запустит ФБ).
...
Рейтинг: 0 / 0
nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
    #40125915
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rashid.abzalov
hvladНевозможно на 100% защититься от ошибок админа. Ни в какой системе.

Но залогировать и выдать warning можно.
Сценарий когда nbackup начал бэкап, и вдруг по среди процесса в другом сеансе сделали END BACKUP - не может считаться нормальным. Это, как минимум, нужно залогироватьВы и получили ошибку, нет ?

Сценарий, когда сумасшедший админ удаляет проводки через одну - может считаться нормальным ?
СУБД должна от этого защищать ?

rashid.abzalov
База ~200 Гб, бэкапилась на внешний USB диск,
Это просто праздник жизни какой-то...

Мне добавить пока нечего. Будет новая информация, воспроизведение баги (если это бага) - welcome.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / nbackup -B 0 - PROBLEM ON "end backup" ... "Database is not in the physical backup mode"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]