Создание бэкапов с помощью MS SQL Server 2005  и восстановление данных 1С v8.1


 
 

Здесь будет описан ритуал создания резервной копии данных информационной базы 1С:Предприятие 8.1 для «настоящих» 1С-ников (читай способных осилить максимум пару страниц), чтобы потом не было проблем, если потребуется восстановить потерянную информацию заказчика.

   
 
  1. Существует ряд программ (например Acronis Recovery for MS SQL Server, Handy Backup, Symantec Backup Exec и др.) которые позволяют освоить бэкапы методом тыка. Но в цивилизованных странах  эти программы принято покупать :), поэтому в условиях «текущего якобы кризиса» мы экономим деньги и повышаем квалификацию до администратора баз данных, т.е. учимся пользоваться штатным механизмом бэкапов  MS SQL Server 2005.

Примечание. Бэкап средствами Postgre здесь, средствами DB2 здесь.
По вопросам приобретения и поддержки обращайтесь по адресу soft@rarus.ru.

  1. Не ждите нудной теории, но обязательно ПРОДЕЛАЙТЕ ЗАДАНИЯ, а не просто прочтите. Потребуется 40 минут.

ПОНИМАНИЕ ВЛИЯНИЯ СВОЙСТВА RECOVERY MODEL БАЗЫ ДАННЫХ

  1. Создайте две информационные базы из этого dt-шника в клиент-серверном варианте. Пусть первая называется db1cfull , а вторая – db1csimple . С помощью SQL Server Management Studio для базы db1csimple в свойствах (properties) для реквизита recovery model укажите simple . Рекомендую для этого скрипт:
    USE [master]
    GO
    ALTER DATABASE [db1csimple] SET RECOVERY SIMPLE WITH NO_WAIT
    GO
    ALTER DATABASE [db1csimple] SET RECOVERY SIMPLE
    GO
  1. Убедитесь, что для базы db1cfull по-умолчанию будет стоять full.. Это связано с тем, что новые базы при создании копируют свойства системной базы model.
  2. Сравним исходный размер файлов данных (они скорее всего будут называться вроде db1cfull.mdf и db1csimple.mdf) и файлов журналов транзакций (они скорее всего будут называться вроде db1cfull_log.ldf и db1csimple_log.ldf). Запустим обе информационные базы в режиме 1С:Предприятие и нажмем в обеих кнопку «Выполнить».
  3. Вернемся понаблюдать за файлами db1cfull.mdf и db1csimple_log.ldf. В процессе исполнения обработок видно, что в процессе наполнения информационной базы генерируемыми обработкой документами, в разных базах способ заполнения файлов отличается . Это означает, что база db1cfull будет забивать логом весь диск.

Совет. Кому надо уменьшить лог, делает следующие шаги (выполняет код):

    1. DBCC SHRINKFILE (db1cfull_log, 2); /*ОБРАТИТЕ ВНИМАНИЕ: Если целевой размер не достигнут, переходите к следующему шагу.*/
    2. BACKUP LOG db1cfull WITH TRUNCATE_ONLY;
    3. DBCC SHRINKFILE(db1cfull_log,2) /* transaction log будет усечён до заданного размера. */

ВОССТАНОВЛЕНИЕ ДАННЫХ 1С v8.1

  1. Лучший способ научиться выбирать правильный способ создания резервной копии (бэкапа) – начать с конца – попытаться восстановить данные. Две наиболее распространенные ситуации: напортачили бухи и накрылся жесткий диск.
  2. В обоих случаях критериями нашей работы будет:
    1. Есть ли вообще резервная копия (бэкап)? Классические ошибки здесь:
      1. за установку сервера заплатили, а за настройку резервного копирования нет, при этом заказчик не проинформирован, что ему следует воспользоваться услугами по настройке бэкапов
      2. копии делались, но их целостность не проверялась (лень подымать бэкап в копию рабочей базы)
      3. копии делались на тот же физический диск, где хранятся данные (копирование на разные логические диски)
    1. Сколько предприятие будет ждать, пока данные будут восстановлены (время простоя)? Классика жанра:
      1. а Сергей (админ) сегодня болеет (в отпуске)
      2. нет резервного жесткого диска (сервера), надо покупать
    1. Какой промежуток времени/данных будет потерян (актуальность копии данных)? Ошибками администрирования здесь могут быть:
      1. выбрана полная модель резервирования, но не делаются копии журнала транзакций, а только полная копия всей базы
      2. документы вносятся с высокой интенсивностью в базу (несколько тысяч в день), а копия выполняется только ночью или используется модель SIMPLE
  1. Параметр восстановления (Recover model) базы данных SIMPLE годиться только если Вы собираетесь делать например только полные копии базы ночью, а потерянные данные за день после бэкапа пользователи с энтузиазмом восстановят сами J. Зато есть плюс – логи не забивают весь диск.
  2. Первое правило админа: ВСЕГДА ДОЛЖНА БЫТЬ ПОЛНАЯ РЕЗЕРВНАЯ КОПИЯ! (Разностные копии, копии логов без полного бэкапа будут бесполезны).
  3. В нашей информационной базе открываем справочник «Справочник 1» и добавляем элемент «Эта запись должна быть сохранена».
  4. Щелкаем мышкой на базе правой кнопкой – Tasks – Back Up – Backup type:FULL , Ok.
    Скрипт полной резервной копии: BACKUP DATABASE [db1csimple] TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\db1csimple.bak' WITH NOFORMAT, NOINIT,  NAME = N'db1csimple-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10;
  5. Теперь имитируем ошибочные действия пользователей и удаляем в справочнике «Справочник 1» элемент «Эта запись должна быть сохранена». Далее востанавливать данные из полной копии в туже самую базу просто. Закрываем все сеансы пользователей 1С:Предприятие. Снова правой кнопкой мыши по базе – Tasks – Restore – Database, переход на закладку Options, “Overwrite the existing database ” и  Ok.
    Скрипт восстановления базы:RESTORE DATABASE [db1csimple] FROM  DISK = N'C:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\db1csimple.bak' WITH  FILE = 1,  NOUNLOAD,  REPLACE,  STATS = 10
  6. Снова открываем «Справочник 1» . Видим, что удаленная запись восстановлена. Нюанс, мы использовали полную (full) копию для восстановления данных, что является часто не самым удобным способом на большом количестве данных из-за достаточно большого времени создания самой копии. Зато если представить, что накрылся жесткий диск с нашей базой, то это самое оно.
  7. Отличие восстановления базы в новое место (или если сервер «упал»)  в том, что создаем новую базу (она может называться также, но в учебных целях назовем «DBSimpleNew») . При восстановлении базы в интерактивном режим точно также правой кнопкой мыши по базе – Tasks – Restore – Database, выбираем FROM DEVICE, кнопка выбора "...", кнопка ADD, выбираем файл полной резервной копии, Ок, включаем флажок Restore, переход на закладку Options, “Overwrite the existing database ”, НО ИСПРАВЛЯЕМ старые ИМЯ И ПУТЬ на актуальные и  Ok. Обычно имя файла данных совпадает с именем базы, а имя лога имеет суфикс "_log".
  8. Скрипт восстановления базы: RESTORE DATABASE [dbsimplenew] FROM DISK = N'C:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\db1csimple.bak' WITH FILE = 1, MOVE N'db1csimple' TO N'F:\SQLDATA\dbsimplenew.mdf', MOVE N'db1csimple_log' TO N'E:\SQLLOG\dbsimplenew_log.LDF', NOUNLOAD, REPLACE, STATS = 10
  9. Попробуйте самостоятельно выполнить резервное копирование журанала транзакций. А затем восстановить.

Ну вот вроде и все.

Прочее. Пример бэкапа для экспресс версии (не мое).

Кому хочется поподробней, но лень читать книжки, приходите на курсы :).

Перейти к списку статей сайта
   
 
Курсы Администрирование 1С
Работы Экспертиза 1С
© Гилёв Вячеслав, 2004-2009
email: gilev_slava @ mail.ru