Добрый день.
На один момент времени есть две идентичные базы в ms sql. По сути вторая база это просто снятая копия первой. С копией в течении некоторого времени проводятся действия, а именно сжатие. По завершении этих действий в копию нужно залить все данные из первой базы, что появились в ней с момента снятия копии. Как это сделать?
Добрый день.
На один момент времени есть две идентичные базы в ms sql. По сути вторая база это просто снятая копия первой. С копией в течении некоторого времени проводятся действия, а именно сжатие. По завершении этих действий в копию нужно залить все данные из первой базы, что появились в ней с момента снятия копии. Как это сделать?
А просто заменить старую копию на новую не вариант?
Долго сжимается, что-ли, за ночь не успеть?
Вы средствами sql хотите это сделать?
Что если перенести обработкой "Выгрузка и загрузка данных XML" документы с определённой даты и провести эти документы в базе-приёмнике?
Есть задача сжать базу размером ~800ГБ. Но в окно служебной доступности к базе, SHRINKDATABASE не успеет отработать.
Появилась идея создать копию рабочей базы, сжать ее и затем залить в нее те данные из рабочей базы, которых не достает (которые прилетели за время сжатия), ну и после заливки переключить работу на сжатую базу.
Появилась идея создать копию рабочей базы, сжать ее и затем залить в нее те данные из рабочей базы, которых не достает (которые прилетели за время сжатия), ну и после заливки переключить работу на сжатую базу.
Вопрос, как залить данные?
Через РИБ, зарегистрировать объекты для обмена, выгрузить в подчиненный узел, потом сделать узел основным
(8) Включить две базы в репликацию возможно только если это две абсолютно идентичные базы. А здесь одна рабочая и несжатая, а вторая сжатая и без новых данных за время сжатия
(4) Обработка сама создаёт список объектов конфигурации базы, и предназначена для загрузки в идентичную конфигурацию. Можно попробовать протестировать, а там не получится без программиста, так не получится.
У вас обычные формы или управляемые?
RAISERROR(@msg, 1, 1) WITH NOWAIT;
WAITFOR DELAY '00:00:01';
END;
Показать
Это для 2008, для более старших, можешь расскоментить, что б красившее мессаги выводились. Размер шринка, то же можешь увеличить. Хотя, и так норм. Работе остальных юзверей не мешает.
(12) Быстрее на самом деле. И..не всё ли равно, сколько он будет делаться ? Он не мешает работе пользователей. Запустил и радуйся.
Это всяко быстре, чем из твоей базы делать риб, создавать узел с полным обменом, разворачивать бэкап скуля, прибивать всю регистрацию изменений для этого узла, потом все изменения тащить еще в шринкованную базу, в надежде что что-то не потерялось, потом подменять имена баз. Оно тебе вообще нннадо ?
У тя хоть база в 800 гигов за сколько из бэкапа подымается ?
1. А не помешает ли она ежедневному обслуживанию базы (бэкап, дефраг, статистика)?
2. И главное, прежде чем усекать базу (SHRINKFILE) ее нужно сначала сжать (DATA_COMPRESSION), т.к. внутри файла свободного места нет, а эта процедура точно блочит таблицы и выполняться в рабочее время не может. А за технологическое окно выполниться не успеет. Тут какие мысли?
(18) ? А откуда тогда утверждение 800 ---->200 ?
Ты надеешься, что после сжатия (DATA_COMPRESSION = PAGE) у тя будет кучка свободного места для шринка ?
(23) ясно-понятно. Ну и делайте сжатие, тупо выполнив
EXEC sp_MSforeachtable 'ALT ER TABLE ? REBUILD WITH (DATA_COMPRESSION = PAGE)'
EXEC sp_MSforeachtable 'ALT ER INDEX ALL ON ? REBUILD WITH (DATA_COMPRESSION = PAGE)'
И перед этим базу в симпл, мдоп поднять>1 (потом вернуть взад).
А шринк, потом уже скриптом на работающих пользователях.
На самом деле я этот скрипт доделал и ограничил его выполнение по времени и отрабатывал его. Но потом возникла идея сделать все на копии, а потом в сжатую и усеченную копию залить недостающие данные. Рассматривал вариант системы отслеживания измененных данных в MS SQL и затем через SSIS заливать, но похоже это гораздо сложнее реализовать, чем за несколько ночей прогонять на рабочей базе.
А тут у меня вопрос возник, а не нужно ли перед выполнением Вашего скрипта запускать SHRINKFILE с параметром NOTRUNCATE, дабы сместить все данные в начало файла?
target_size
Если он указан, то инструкция DBCC SHRINKFILE пытается сжать файл до размера target_size. Используемые страницы в освобождаемой области файла перемещаются в свободное пространство в сохраняемых областях файла.
(37) ну ты тугой.. % указать в окошке сколько будет доступно свободного места после сжатия.
А в формуле в скрипте не трудно увидеть, по сколько он за раз усекает.. разве это не очевидно, не ?