Показать полную графическую версию : [решено] Резервное копирование файлов баз данных через команды операционной системы
Ситуация такая. W2K3 сервер - 1шт. на нем AD и выход в Интернет по ADSL, компьютеров в сети - 8 шт, пользователей - 10 шт. На сервере хранятся - база данных 1С-бухгалтерия (сетевая), MS SQL - сервер и база, с которой работают менеджеры.
Задача такая - периодическое сохранение (ежесуточное) баз данных.
Решение - создать copy.bat - файл, копирующий базы данных, который можно будет запускать стандартными средствами, например в 3 часа ночи (без моего участия).
Вот, что у меня поучается (содержимое copy.bat):
set datetemp=%date%
xcopy/e/y/h/f d:\data d:\DATA_COPY\%datetemp%\
xcopy/e/y/h/f C:\PROGRA~1\MICROS~1\MSSQL\Data\master.mdf d:\DATA_COPY\%datetemp%\
Трудность - при копировании базы данных MS SQL, а именно файла master.mdf, выдается сообщение:
C:\PROGRA~1\MICROS~1\MSSQL\Data\master.mdf
Попытка доступа к ресурсу, занятому другим приложением
Замечено - что, если в Диспетчере задач Windows убить 2 прцесса - sqlmangr.exe и sqlservr.exe - доступ к файлу master.mdf возможен, команда xcopy выполняется "на ура". (ну это понятно)
Внимание вопрос :)
как из командной строки "убить" работющий процесс?
как потОм из командной строки "запустиь" только что убитый процесс
А почему не делать резервное копирование средствами sql сервера?
Надеюсь что поможет.. сам не пробовал.. так что ты отпиши о результатах пожалуста.
1.чтобы убить порцесс можно воспоьзоваться прогой taskKill.exe или tsKill.exe из WinDir/system32/ посмотри по /? что тебе нужно.
2.Потом, по идее чтоб снова запустить процесс нужно воспользоваться командой RanAs.exe
Задача такая - периодическое сохранение (ежесуточное) баз данных.
Базырезервируются только средствами Microsoft SQL Server. Через SQL Server Enterprise Manager - вы можете настроить резервирование (Для обычного резервирования удобнее для начала настроить планобслуживания баз Managment - Database Maintance Plans.
Регулярное резервное копирование реализуется средствами компонента-службы SQLServer Agent (который должен быть настроен на автозапуск).
Решение - создать copy.bat - файл, копирующий базы данных, который можно будет запускать стандартными средствами, например в 3 часа ночи (без моего участия).
Вот, что у меня поучается (содержимое copy.bat):
set datetemp=%date%
xcopy/e/y/h/f d:\data d:\DATA_COPY\%datetemp%\
xcopy/e/y/h/f C:\PROGRA~1\MICROS~1\MSSQL\Data\master.mdf d:\DATA_COPY\%datetemp%\
Решение для резервирования баз неправильное, все базы находятся в монопольном использовании сервера SQL
Подтверждение:
Трудность - при копировании базы данных MS SQL, а именно файла master.mdf, выдается сообщение:
C:\PROGRA~1\MICROS~1\MSSQL\Data\master.mdf
Попытка доступа к ресурсу, занятому другим приложением
Замечено - что, если в Диспетчере задач Windows убить 2 прцесса - sqlmangr.exe и sqlservr.exe - доступ к файлу master.mdf возможен, команда xcopy выполняется "на ура". (ну это понятно)
sqlmangr.exe - это SQL Server Service Manager (из трея программа)
sqlservr.exe - Это ваш сервер баз данных Microsoft SQL Server 2000
поэтому когда вы снимаете процессы эти - понятно что никтобольше блокировать базы не будет.
Внимание вопрос
как из командной строки "убить" работющий процесс?
как потОм из командной строки "запустиь" только что убитый процесс
ответить я вам отвечу, но, делать так рекомендовать не буду. по резервированию баз лучше почитайте дополнительный материал (например есть мощный ресурс SQL.RU)
напомню что снимаете вы не процессы, а работающие службы, поэтому для их управления есть специальные команды:
net stop mssqlserver /y
net start mssqlserver
и судя по всему у вас Агент не запускается автоматически (его запус можно настроить через свойства сервера в Enterprise manager,SQL Service Manager, или Start - Administrative Tools - Services - SQLSERVERAGENT)
и тогда полные команды будут выглядеть так (на отключение):
net stop sqlserveragent
net stop mssqlserver
( и на запуск)
net start mssqlserver
net start sqlserveragent
Удачи.
SkyF, и еще в дополнение хочется добавить, что при аварийном снятии задачи sql-сервера(а желаемое снятие задачи из консоли именно оно и есть) возможна потеря данных... А даже вероятная потеря данных в торговой базе данных критична.
Делаешь вот такой батник и запускаешь его из шедулера сколько хочешь, у меня каждые 2 часа это делается. Тут идет полный бакап, архивирование и перенос архива
в другое хранилище (с путями разберешься сам, удачи):
del \\sqlserv1\archiv\*.dat
del \\sqlserv1\archiv\*.bak
del \\sqlserv1\archiv\*.log
"C:\Program Files\Microsoft SQL Server\MSSQL\Binn\SQLMAINT" -D baza1 -Rpt D:\archiv\report.log -BkUpDB D:\archiv -BkUpMedia DISK -DelBkUps 1
"C:\Program Files\Microsoft SQL Server\MSSQL\Binn\SQLMAINT" -D baza2 -Rpt D:\archiv\report.log -BkUpDB D:\archiv -BkUpMedia DISK -DelBkUps 1
"C:\Program Files\Microsoft SQL Server\MSSQL\Binn\SQLMAINT" -D baza3 -Rpt D:\archiv\report.log -BkUpDB D:\archiv -BkUpMedia DISK -DelBkUps 1
rem SQLMAINT -D msdb -Rpt D:\archiv_opt\report.log -BkUpDB D:\archiv -BkUpMedia DISK -DelBkUps 1
d:
cd d:\archiv_opt
ren nicol_db_*.* baza1_db_dump.dat
ren master_db_*.* baza2_db_dump.dat
ren stat_db_*.* baza3_db_dump.dat
rem ren msdb_db_dump.* msdb_db_dump.dat
start /min /wait c:\util\zip\pkzip25.exe -add=update -lev=9 -recurse -dir=full -excl=*.zip d:\archiv\tmpsqlserv1\archiv.zip \\sqlserv1\sqlserv1_d\archiv\*_db_dump.dat
start /min /wait c:\util\zip\pkzip25.exe -add=freshen -lev=9 -recurse -dir=full -excl=*.zip d:\archiv\tmpsqlserv1\archiv.zip \\sqlserv1\sqlserv1_d\archiv\*_db_dump.dat
for /f "tokens=2,3,4 delims=. " %%i in ('date /t') do mkdir d:\archiv\sql_baza_reserv\%%k%%j%%i
for /f "tokens=2,3,4 delims=. " %%i in ('date /t') do xxcopy d:\archiv\tmpsqlserv1\ d:\archiv\sql_baza_reserv\%%k%%j%%i /y
rem Копирование архива на другой сервер
xxcopy d:\archiv\SQL_baza_RESERV \\SQLSERV\sqlserv_z\Archiv\baza /s /bx /y
exit
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.