Страница 1 из 1
Резервирование удаляемых записей в другую базу
Добавлено: 30 мар 2006, 17:08
molann
Добрый день. Есть такая просьба о помощи к знающим людям.
Как можно забэкапить удаляемые из базы записи в другую базу?
Структура самой базы в принципе заранее известна, меняться вряд ли будет. Цель - простое их сохранение для возможности их дальнейшего просмотра.
Уже много вычитал про сторонние репликаторы, но надо бы программно реализовать на Delphi.
Глобально задача состоит в чистке базы (т.е удаляем из нее все уже ненужное, например пока по времени и еще кое-чего, потом бэкапоресторим ее, бэкапные архивы сохраняем, чтоб их тож можно было посмотреть). Удаляемые записи скидываем в имеющe.cz пустую копию базы и ее тоже бэкапим пока.
Про копирование таблиц в пределах одной базы уже много чего нашел (там все просто, буквально одним инсертом), а вот в другую пока не встречал.
Пока других идей у меня нет, буду делать копирование с перебором поле-запись-таблица через IBTable.
Заранее спасиб, если кто откикнется.
Добавлено: 30 мар 2006, 17:14
kdv
через IBTable вообще никакие копирования данных делать нельзя, это написано тут
www.ibase.ru/devinfo/ibx.htm
и тут
www.ibase.ru/devinfo/impexp.htm
"сохранение для дальнейшего просмотра" - это как???
Перенос из одной БД в другую - это понятно, можно использовать двухфазный коммит (но обязательно все делать в транзакции snapshot).
www.ibase.ru/devinfo/ibtrans.htm
Добавлено: 30 мар 2006, 17:25
molann
За советы спасиб. Особенно за двухфазный, не подумал.
Через тэйбл хотел пробовать, потому что через IBSQL пока не осенило как.
Просмотр: тупо посмотреть потом, что мы удаляли в прошлом.
И еще вопрос: читал топик про нотпускание файла базы после shutdown, решение кроме "ждать" так и не найдено? Потому что с делэями работает через раз, а чаще через много раз. Кто-то еще писал что SYSDBA shutdown пофигу, это ведь чушь?
Добавлено: 31 мар 2006, 08:12
Dimitry Sibiryakov
Чтобы "тупо посмотреть потом" необязательно данные выкидывать в отдельную базу. Могут и в этой полежать.
SYSDBA и владелец базы действительно могут подключиться несмотря на shutdown. Это не чушь ибо shutdown как раз для того и сделан чтобы они могли спокойно (от других пользователей) администрировать базу.
Добавлено: 31 мар 2006, 09:39
molann
В том и смысл, что из текущий базы их надо выкинуть, н необходим их последующий просмотр. Все это будет делаться естественно, когда меньше всего народу, может ночью, может нет, и в принципе, все кто все-таки не отключиться сам после мессаджа, будут нещадно обрублены. А енто работает почему-то периодически. Мне кажется, что это уже винда не отпускает файлик базы, хэндл что ли открытым остается.
Добавлено: 31 мар 2006, 13:14
Dimitry Sibiryakov
molann писал(а):В том и смысл, что из текущий базы их надо выкинуть
Ты говоришь что их надо выкинуть, я говорю что нет, так что возникает естественный вопрос: сколько гигабайт занимает твоя база?
molann писал(а):будут нещадно обрублены.
Отсюда возникает второй вопрос: с каких это пор удаление записей (пусть даже массовое) стало требовать монопольного доступа?
Добавлено: 31 мар 2006, 16:07
molann
Весит-то она не шибко много, проблема в том, что записи лишние появляются очень часто и в больших кол-вах (хранятся типа отсчеты определеныые для аппаратуры и много всег еще), поэтому нужно их периодически жахать оттуда, ну и дырки соответсвенно поубивать. Вот для бэкапарестора и нужен монопольный доступ.
Если несложно, изложи тогда свое мнение, как поступить. А то я так еще долго буду все объяснять.
Добавлено: 01 апр 2006, 00:28
smu
molann писал(а):Вот для бэкапарестора и нужен монопольный доступ
Для бэкапа монопольный доступ не нужен. Рестор на живую базу никто не делает (если не хочешь неприятных сюрпизов).
molann писал(а):
записи лишние появляются очень часто
А почему? Может здесь кроется проблема, которую можно решить?
Добавлено: 01 апр 2006, 12:51
molann
База бэкапится, архивчик ныкается, если все ок мы ее дропаем и ресторим на ее место старую. Так вот дропается она только периодически.
А с ее засиранием уже ниче не сделаешь, все уже работает достаточно давно и люди не дураки далеко, все что можно оптимизировать уже сделали. Я же говорю, в базу сыпятся необходимые для работы аппаратуры данные и т.д.
Добавлено: 01 апр 2006, 13:24
kdv
если все ок мы ее дропаем и ресторим на ее место старую.
я надеюсь - наоборот. сначала рестор, и если он успешен, "дропаем старую базу".
Добавлено: 01 апр 2006, 13:56
molann
Это-то понятно, но суть не в этом. Еще бы дропалась она потом стабильно.
Добавлено: 03 апр 2006, 08:44
Dimitry Sibiryakov
molann писал(а):поэтому нужно их периодически жахать оттуда, ну и дырки соответсвенно поубивать.
Дырки??? В базе нет дырок. Если хочется убивать ненужные данные - убивайте (хотя я бы подумал над тем зачем ненужные данные вообще в базу заносятся). После этого - backup
без ключа -g (пофиг что он может идти несколько часов - запустите на ночь) и... все.
Добавлено: 03 апр 2006, 09:14
molann
Бэкап программный, с ним-то все нормально.
Добавлено: 03 апр 2006, 13:55
Dimitry Sibiryakov
Тогда в чем глубинный смысл рестора с заменой базы?
Добавлено: 05 апр 2006, 18:22
molann
Пока я тут всем пытаюсь объяснить, зачем мне надо так делать, сам уже в принципе все сделал. Осталось только добить то ли винду, то ли IB, чтоб они файл сразу отпускали после шатдауна.
Замена - чтобы у девайсов-клиентов была актуальная, без лишнего устаревшего-ненужного хлама минимальная по размеру база.
Добавлено: 06 апр 2006, 08:10
Dimitry Sibiryakov
Клиника. База будет минимальна только сразу после восстановления. Потом начнет расти. Так стоит ли огород городить? По-моему, проще оставить ее сразу большой. По крайней мере сэкономится время на удлинении файла. Еще раз повторяю для тех кто с фокса пришел: в IB базе дырок нет. Сжимать ее не надо!