v8: Бэкап базы средствами SQL-DMO Ключевые слова: backup, sql, резервная копия, SQLDMO
Пример для 1С:Предприятие 7.7
В каталоге информационной базы, в которой вы будете запускать обработку, создайте подпапки Archive и Temp. В папку ExtForms положите файл rar.exe.
//////////////////////////////////////////////////////////////////////
Функция Ведущий0(ч)
Если ч<10 Тогда
Возврат "0"+ч;
КонецЕсли;
Возврат ч;
КонецФункции
//////////////////////////////////////////////////////////////////////
Функция ПолучитьВременнуюМетку()
перем гг, мм, дд, ч, м, с;
д=ТекущаяДата();
ТекущееВремя(ч, м, с);
гг=ДатаГод(д);
мм=ДатаМесяц(д);
дд=ДатаЧисло(д);
Возврат ""+гг+"_"+Ведущий0(мм)+"_"+Ведущий0(дд)+"__"+Ведущий0(ч)+"_"+Ведущий0(м)+"_"+Ведущий0(с);
КонецФункции
//*******************************************
Процедура Сформировать()
Сообщить(ТекущееВремя()+" Начало архивации.");
SQLServer=СоздатьОбъект("SQLDMO.SQLServer");
SQLServer.LoginSecure=0;
SQLServer.AutoReConnect=0;
SQLServer.Connect("УКАЖИТЕ ЗДЕСЬ ИМЯ ВАШЕГО СЕРВЕРА SQL","sa","УКАЖИТЕ ЗДЕСЬ ВАШ ПАРОЛЬ SA");
ИмяBak=КаталогИБ()+"Temp\Base2006.bak";
ИмяRar=КаталогИБ()+"Temp\Base2006.rar";
Backup=СоздатьОбъект("SQLDMO.Backup");
Backup.Action=0; //резервирование всей базы данных
Backup.DataBase="Base2006"; //ИМЯ БАЗЫ ДАННЫХ
Backup.Files=ИмяBak;
Backup.MediaName="Base2006.bak "+РабочаяДата()+" "+ТекущееВремя();
Backup.BackupSetName="Base2006";
Backup.BackupSetDescription="Резервная копия";
Backup.SQLBackup(SQLServer);
Сообщить(ТекущееВремя()+" Сжатие архива.");
//Выполняем архивацию при помощи rar.exe
КомандаСистемы(КаталогИБ()+"ExtForms\rar.exe m "+ИмяRar+" "+ИмяBak+" -m1 -ep");
//Добавляем файлы MD и DBA
КомандаСистемы(КаталогИБ()+"ExtForms\rar.exe a "+ИмяRar+" h:\Base2006\1Cv7.MD h:\Base2006\1Cv7.dba -ep");
ИмяАрхива=КаталогИБ()+"Archive\"+ПолучитьВременнуюМетку()+".rar";
фс.ПереименоватьФайл(ИмяRar,ИмяАрхива,1);
Сообщить(ТекущееВремя()+" Выгрузка завершена: "+ИмяАрхива);
КонецПроцедуры
Примеры работы с 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>
|