Книга знаний

1С:Предприятие / Администрирование

Бэкап базы средствами SQL-DMO

В статье приведен пример обработки для архивации базы средствами SQL DMO. Просто скопируйте образец кода в файл ERT, подставьте свои пароли и явки.Автор статьи: romix | Редакторы: MikleV, borik
Последняя редакция №7 от 07.10.10 | История
URL: http://kb.mista.ru/article.php?id=121

Ключевые слова: backup, sql, резервная копия, SQLDMO


Пример для 1С:Предприятие 7.7



В каталоге информационной базы, в которой вы будете запускать обработку, создайте подпапки Archive и Temp. В папку ExtForms положите файл 7z.exe.  http://www.7-zip.org/

ф_база - это элемент справочника БазыДанных на форме, в котором есть текстовые реквизиты Сервер, Пользователь, Пароль, ИмяБД, Каталог_ИБ. Можно их задать и просто строками.

Процедура КомандаСистемы1(СтрКоманда)
    Сообщить(""+СтрКоманда);
    КодВозврата=КомандаСистемы(СтрКоманда);
    Сообщить("Код возврата: "+КодВозврата);
    
КонецПроцедуры

//////////////////////////////////////////////////////////////////////
Функция Ведущий0(ч)
    Если ч<10 Тогда
        Возврат "0"+ч;
    КонецЕсли;
    Возврат ч;
КонецФункции

//////////////////////////////////////////////////////////////////////
Функция ПолучитьВременнуюМетку()
    перем гг, мм, дд, ч, м, с;
    д=ТекущаяДата();
    ТекущееВремя(ч, м, с);
    
    гг=ДатаГод(д);
    мм=ДатаМесяц(д);
    дд=ДатаЧисло(д);
    
    Возврат СокрЛП(ф_База.Наименование)+"_"+гг+"_"+Ведущий0(мм)+"_"+Ведущий0(дд)+"__"+Ведущий0(ч)+"_"+Ведущий0(м)+"_"+Ведущий0(с);
КонецФункции


//*******************************************
Процедура Сформировать()
    Если ПустоеЗначение(ф_База)=1 Тогда
        Предупреждение("Укажите базу для архивации");
        Возврат;
    КонецЕсли;
    
    ИмяКат=СокрЛП(ф_База.Каталог_ИБ);
    Если Прав(ИмяКат,1)<>"\" Тогда
        ИмяКат=ИмяКат+"\";
    КонецЕсли;
    
    
    Если фс.СуществуетФайл(ИмяКат+"1cv7.md")=0 Тогда
        Предупреждение("Не найден файл конфигурации"+РазделительСтрок+ИмяКат+"1cv7.md");
        Возврат;
    КонецЕсли;    
    
    
    Сообщить(ТекущееВремя()+" Начало архивации.");
    SQLServer=СоздатьОбъект("SQLDMO.SQLServer");
    SQLServer.LoginSecure=1;
    SQLServer.AutoReConnect=0;
    SQLServer.Connect(СокрЛП(ф_База.Сервер), СокрЛП(ф_База.Пользователь), СокрЛП(ф_База.Пароль));   
    
    стрБД = СокрЛП(ф_База.Наименование);
    
    ИмяBak=КаталогИБ()+"Temp\" + стрБД  + ".bak";
    ФС.УдалитьФайл(ИмяBak);
    
    Имя7z=КаталогИБ()+"Archive\"+ПолучитьВременнуюМетку()+".7z";
    
    Сообщить(ТекущееВремя()+" Создание резервной копии базы данных "+ стрБД +"...");
    Backup=СоздатьОбъект("SQLDMO.Backup");
    Backup.Action=0; //резервирование всей базы данных
    Backup.DataBase=ф_База.ИмяБД;
    Backup.Files=ИмяBak;
    Backup.MediaName=стрБД + ".bak "+РабочаяДата()+" "+ТекущееВремя();
    Backup.BackupSetName= стрБД;
    Backup.BackupSetDescription="Резервная копия";
    Backup.SQLBackup(SQLServer);
    
    Сообщить(ТекущееВремя()+" Упаковка MD файла...");
    
    
    команда=КаталогИБ()+"ExtForms\7z.exe a "+Имя7z+" "+ИмяКат+"1cv7.md "+ИмяКат+"1Cv7.dba "+ИмяКат+"1Cv7.dds "+ ИмяКат+"usrdef\users.usr";
    КомандаСистемы1(команда); 
    
    Сообщить(ТекущееВремя()+" Можно изменять конфигурацию...");
    
    Команда=КаталогИБ()+"ExtForms\7z.exe a "+Имя7z+" "+ИмяBak+" -mx3";
    ЗапуститьПриложение(команда);
    
    Сообщить(ТекущееВремя()+" Выгрузка будет завершена после окончания архивации: "+Имя7z);

КонецПроцедуры   
 
//////////////////////////////////////////////////////////////////////

Процедура ПриОткрытии()        
    
    ф_База = Константа.ОсновнаяБаза;
    
КонецПроцедуры // ПриОткрытии()   

//////////////////////////////////////////////////////////////////////


Пример скачивать тут: http://x-romix.narod.ru/backup1c_77_sql.7z (левой кнопкой мыши). Там надо ввести в справочник логины, пароли, явки и путь к базе данных.

Примеры работы с SQL-DMO были почерпнуты из книги Андрея Михайлова "1С:Предприятие 7.7/8.0 - системное программирование".

Пример для 1С:Предприятие 8.0 (от MikleV)



SQLDMO предоставляет разработчику полный доступ к свойствам , методам и объектам MS SQL Server
Для версии 8.0 написал обработку : http://immortalmikle.narod.ru/mainpage.html
В обработке: получение списка доступных серверов и их баз. Бэкап базы и логов, шринк - по расписанию. (через Обработчик Ожидания).Подробнее - в модуле объекта обработки.
Данная обработка писалась в качестве ознакомления с объектами и средствами SQLDMO, а также для администрирования базы на MS SQL Server 2005 EE .



Ещё один пример wsf - скрипта (от borik)




<?xml version="1.0" encoding="windows-1251"?>

<job id="T1">
  <script language="VBScript">
   <![CDATA[


Option Explicit


Dim Backup, SQLServer, SQLServerName, cDate, sDateFile, Database
Dim Login, password
Dim backup_dir, arch_num, prefix, suffix
Dim oShell, fso
Dim command_Dos, command_Dir ,dos_command, command_For, command_Del


set  Backup        = CreateObject("SQLDMO.Backup")
set  SQLServer    = CreateObject("SQLDMO.SQLServer")
Set oShell = WScript.CreateObject("WScript.Shell")
Set fso = WScript.CreateObject("Scripting.FileSystemObject")



SQLServer.LoginSecure = 0
SQLServer.AutoReConnect = 0

cDate = FormatDateTime(date,2)



'//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
' ВНИМАНИЕ!!! Ниже указанные параметры необходимо определить

' Укажите имя MSSQL сервера
SQLServerName = "n2162"

' Укажите имя архивируемой базы данных
Database = "wms"    

' Укажите логин и пароль владельца базы данных, либо пользователя sa  
Login = "sa"
password = ""


'укажите количество последних сохраняемых архивов
arch_num    = "5"

' укажите каталог BACKUP
backup_dir    = "C:\"

'укажите префикс архива, например <092_001_>
prefix    = ""

'укажите расширение формируемого архива, например <*.bak>
suffix    = ".bak"


'//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

' Проверим существует ли указанный путь к каталогу с архивными копиями
If (Not fso.FolderExists(backup_dir)) Then
   msgbox "Указанный вами путь ИБ: " &  backup_dir & "  отсутствует"
   WScript.Quit()
End If





SQLServer.Connect SQLServerName, Login , password

'SQLServer.Connect SQLServerName, "sa", "password"


' Опция "Action" - указывает вид резервного копирования.
' Параметры:
' 0 - Полный Бэкап
' 1 - Дифференциальное резевное копирование (копируются файлы с момента последнего полного бэкапа)
' 2 - бэкап определенных файлов  
' 3 - бэкап только файла транзакций

'Опция BackupSetDescription - основное описание резевной копии




Backup.Action = 0
Backup.Database             = Database
Backup.Files             = backup_dir + prefix + "_" + mid(cDate,1,2) + mid(cDate,4,2) + mid(cDate,9,2) +  suffix
Backup.MediaName             =  Database
Backup.BackupSetName           =  Database
Backup.BackupSetDescription     = "FullResCop"
Backup.SQLBackup(SQLServer)                





' Удалим лишние архивы

command_Dos = "%COMSPEC% /C "

command_Dir = "dir /B /O:-D " + backup_dir + prefix + "*" + suffix + " |more +" + arch_num + " > " + backup_dir + "delete.lst"
command_For = "for /F %f in (" + backup_dir + "delete.lst) do del " + backup_dir + "%f"
command_Del = "del " + backup_dir + "delete.lst"



oShell.Run command_Dos  + command_Dir,0,False
Wscript.Sleep(500)
oShell.Run command_Dos  + command_For,0,False
Wscript.Sleep(500)
oShell.Run command_Dos  + command_Del,0,False



'*** End

]]>
   </script>
</job>

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика