Решено Создание баз данных

Статус
Закрыто для дальнейших ответов.

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#1
Всем привет!
Темы уже поднимались, но закрыты. Так что вот... вопрос собственно задача следующая:
необходимо создать БД и запаковать ее в zip. C этим проблем нет, но есть проблемы с базой после распаковки из архива. При попытке открыть такую базу возникают ошибки типа:
Код:
This database cannot be opened because a consistency check of it is needed
Код:
File truncated - file may have been damaged
Код:
RRV bucket is corrupt.
На сколько я понимаю - должно пройти какое-то количество времени, после которого база будет полностью готова к работе.

Так собственно вопрос - как определить, что база сформирована полностью и ее можно архивировать?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#3
Код:
Set DbTarget = New NotesDatabase(me.Server, me.File)
Call DbTarget.Create("", "", True)
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#4
1. Делать это ручками через толстый клиент
2.Подождать пока отработает репликатор
3.Закрыть толстый клиент
4.Подождать писят секунд
5.Архивировать

;)
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#5
1. Делать это ручками через толстый клиент
2.Подождать пока отработает репликатор
3.Закрыть толстый клиент
4.Подождать писят секунд
5.Архивировать

;)
мне вот интересно, ты написал лишь бы написать?
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#6
При попытке открыть такую базу возникают ошибки типа:
может проверять статус задач? fixup будет с именем БД
[DOUBLEPOST=1438767094,1438766966][/DOUBLEPOST]и потом - почему бы не экспортить БД через ДХЛ, с зипованием и разворачивать соответ.
можно задействовать СиАПИ (кот. за бэкап и рекавери отвечает), но возни там много...
 

erdi

Well-known member
20.08.2008
265
17
#7
1) попробуй 3-й параметр в false если потом только зипование идет
2) я обычно вместо db.create использую db.CreateCopy
 

savl

Lotus team
28.10.2011
2 131
102
#8
@NickProstoNick,
пока обедал уже ответили..
db.CreateCopy - если нужен только дизайн, так как это новая копия базы, даже ACL не копируется.
Процесс отпускает копию сразу после копирования.
Если нужны документы и ACL, то либо "делаем" сами, либо ждем окончания работы.

У меня так "самописная" архивация сделана:
1. Делаем копию db.CreateCopy
2. Копируем ACL
3. Копируем документы
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#9
Отвечу всем скопом...
DXL - не вариант. При восстановлении вероятней всего испортятся UNIDы документов. Я же копирую документы с сохранением.
CreateCopy - хорошо, но как быть с шедульными агентами? Если базу вовремя не убрать - можно накосячить. Если база достаточно большая и за время копирования документов сервер успеет поставить в очередь шедульные агенты - проблемы гарантированы

В общем проблему я кажется решил (тестирую). Вчера думал об этом, но почему-то не сделал. Сегодня после сообщения @lmike добавил фиксап и компакт через объект базы. Один час - полет нормальный
 

rinsk

Lotus team
12.11.2009
900
44
#10
Если задача сбекапить базы - почему бы не использовать репликацию?
Т.е. создается пустая реплика за пределами каталога data и backupdb.replicate ?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#11
Реплику для бекапа?
Интересно, а что вы будете делать с восстановлением дизайна?
Как восстанавливать историчность документов? Вдруг пользователь ошибся и надо откатиться?
Реплика - это максимум резервная копия, но никак не бекап
 

rinsk

Lotus team
12.11.2009
900
44
#12
Коллега, я бы поделил конечный результат и способ его достижения:)
т.е. вместо копирования базы есть вариант (рабочий кста) его репликации. что дальше делать - решать по ситуации. например сменить репликаид... не говоря об формулах репликации и т.п. вещах.
 

duchan

Well-known member
20.09.2006
110
3
#13
Реплика - это максимум резервная копия, но никак не бекап
вот как раз копия это "резервная копия", а реплика - это бекап (!), поскольку при копировании меняет ID реплики, и могут меняться UNID, а вот при репликации такого не будет и вы получите базу которой можно будет подменить текущую, на остановленном сервере, без каких-то танцев с бубном (мой PreBackup по этому принципу и сделан и походу Вы пытаетесь сделать тот же инструмент ;) - там как после копирования, так и после репликации во внешнюю папку надо сделать программно команду на консоль dbcache flush, что бы сервер "забыл" про базу. А вообще, глянте как делал
Для просмотра контента необходимо: Войти или зарегистрироваться
)
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#14
вот как раз копия это "резервная копия", а реплика - это бекап (!), поскольку при копировании меняет ID реплики, и могут меняться UNID, а вот при репликации такого не будет и вы получите базу которой можно будет подменить текущую, на остановленном сервере, без каких-то танцев с бубном (мой PreBackup по этому принципу и сделан и походу Вы пытаетесь сделать тот же инструмент ;) - там как после копирования, так и после репликации во внешнюю папку надо сделать программно команду на консоль dbcache flush, что бы сервер "забыл" про базу. А вообще, глянте как делал
Для просмотра контента необходимо: Войти или зарегистрироваться
)
Пробовал дучан лет 5 назад. Не понравилось. Много недоработок.
Открою секрет - копировать можно с сохранением UNIDа.
Спорить можно долго, но в принципе "резервная копия" и "бекап" это одно и то же. Но реплика - это ни то ни другое! У репликации совершенно другое назначение!
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#15
Коллега, я бы поделил конечный результат и способ его достижения:)
т.е. вместо копирования базы есть вариант (рабочий кста) его репликации. что дальше делать - решать по ситуации. например сменить репликаид... не говоря об формулах репликации и т.п. вещах.
Как предлагаете решать вопрос с шедульными агентами?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#16
@duchan, я не пытаюсь сделать тот же инструмент. Я его сделал в 2010г. после того как попробовал ваш продукт.

@rinsk, коллега не делайте круги на воде...
Я просто спросил как побороть ошибку при создании базы. Я ни слова не говорил о репликациях и бекапировании!
Моя цель - избавиться от ошибки и не более!

Еще чуть-чуть и будет как в анекдоте:
Американский форум- задал вопрос, тебе на него обстоятельно и вежливо ответят.
Еврейский форум- задал вопрос, тебе зададут встречный вопрос.
Русский форум-задал вопрос, тебе ещё 2 часа будут объяснять какой ты мудак!
Но раз пошла такая пьянка...
Почему не реплика?
Потому что практически нет никакого контроля. Не говоря уже о том, что реплика предназначена не для бекапирования. Реплика - это синхронизация источников (с удалением/без удаления но это синхронизация).
При реплиикации обновляется вся база.
При реплике нет контроля за шедульными агентами (кто из писателей заботится о том, чтоб агент работал только на продуктиве?).

Бекапирование - это слепок на момент времени без последующего обновления копии.
Бекап не должен реплицироваться с источником.
А проблема сохранения UNIDа при копировании - это не проблема
 
Последнее редактирование модератором:

rinsk

Lotus team
12.11.2009
900
44
#17
Как предлагаете решать вопрос с шедульными агентами?
Пассажи с анегдотами оставлю без внимания, а на конкретные вопросы могу ответить:)
Из первоначально задачи не понятно - по какому пути создается база. Я не зря сказал что на сервере или клиенте можно создавать базы ЗА пределами каталога нотес - например c:\temp. При этом - шедульные агенты amgr не видит... так же можно программно откл агенты в базе -
Для просмотра контента необходимо: Войти или зарегистрироваться


P.S. Ну а реплика\не реплика - Как корабль назовешь - так он и поплывет. ктож знает что у Вас за задачи - были озвучены варианты и ничего более. Переубеждать никто не собирается.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#18
@rinsk, если бы мне нужны советы по бекапированию - я бы об этом написал!
Я так же не просил рассказать как стопать агенты.

Я же спросил об ошибках при открытии базы.
Нужно больше информации по коду? Спросите!
Хотя какой еще информации надо?
Есть описание проблемы, вторым моим сообщением приведен метод создания базы
Код:
Set DbTarget = New NotesDatabase(me.Server, me.File)
Call DbTarget.Create("", "", True)
Ну разве что ремарки, что код выполняется на сервере. База может быть как в каталоге Data так и за его пределами.

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

Мне нужно решить проблему в существующем процессе и коде. Мне не нужны альтернативные методы. На изменение процесса нет времени.
Если вам нечего сказать по теме - пропускайте ее! Демагогию разводить не надо.

@lmike, закрой тему, плз. Я вопрос решил.

P.S.
Если для Вас нет разницы реплика или копия... даже не знаю что сказать...
 

duchan

Well-known member
20.09.2006
110
3
#19
Моя цель - избавиться от ошибки и не более!
ну так я Вам и сказал... Попробуйте, может поможет - мне помогло...
после репликации во внешнюю папку надо сделать программно команду на консоль dbcache flush
- можно еще через возврат "dbcache show" проследить, что базу отпустило, и если не отпустило еще раз flush'нуть...

P.S. ... и не надо нервничать ...
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 802
21
#20
@duchan, я еще в девятом сообщении написал, что все получилось.

И кстати, сбрасывать кеш не обязательно. Проблема не в том что база занята сервером, а в том что в базе не сформирована структура.
Как я уже писал - компакта оказалось достаточно. Для копии во вне Data - даже этого не понадобилось.

P.S.
Просто ненавижу когда умничают не по теме.
 
Статус
Закрыто для дальнейших ответов.