В настоящее время у меня есть три копии моего веб-сайта (Live, Staging и Development) с базой данных для каждой на трех отдельных серверах. Чаще всего возникает ошибка, требующая актуальной базы данных, поэтому я использую RDP в Live DB, захожу в SQL Server Management Studio и создаю резервную копию базы данных. Оттуда я скопирую файлы .bak на промежуточные серверы db и dev db, используя RDP, и вручную перезапишу каждый db.
Это работает, но это очень ручной процесс. Очевидно, что то, что я делаю с помощью пользовательского интерфейса, можно сделать с помощью такой команды:
BACKUP DATABASE MySiteDB
TO DISK = 'c:\MySiteDB.bak'
WITH FORMAT,
MEDIANAME = 'MySiteDB',
NAME = 'Live backup'
GO
Я мог бы также восстановить его, используя такую команду:
RESTORE DATABASE MySiteDB
FROM DISK = 'X:\MySiteDB.bak'
WITH
REPLACE,
STATS = 10, -- Show progress (every 10%)
MOVE 'MySiteDB_Data' TO 'C:\MSSQL\DATA\MySiteDB.mdf',
MOVE 'MySiteDB_Log' TO 'C:\MSSQL\DATA\MySiteDB.ldf'
GO
Однако для этого мне все равно потребуется войти на каждый сервер и скопировать файл вручную.
В идеале я хотел бы иметь возможность запускать командный файл на моем сервере разработки, который будет создавать резервную копию на моем живом сервере базы данных, копировать ее на сетевой диск на промежуточном сервере базы данных (назовем это X:\
), а затем сделайте полную резервную копию и перезапишите существующую базу данных MySiteDB при постановке (а затем, возможно, восстановите ее на сервере разработки). Таким образом, синхронизация промежуточной базы данных для работы является одноэтапным процессом.
Я попытался понять, как это можно сделать, и самое близкое, что я могу найти, - это создать связь между базами данных. Однако я также нашел EXEC AT
команда. Я не уверен, что они такие же, но похоже, что я мог бы делать здесь то, что хочу, согласно Эта статья.
При этом я до сих пор не могу понять, как бы объединить все эти запросы в один запрос, который можно запустить с одного сервера. Это просто вопрос использования EXEC AT
связать эти команды вместе? Кроме того, как работает связь с сервером? Могу ли я создать временную ссылку с помощью команды?
Любая помощь будет оценена.
У вас должно получиться сделать это с помощью batch и sqlcmd. Предполагая, что у вас есть сценарии резервного копирования и восстановления, которые записывают в общие ресурсы на серверах:
@ECHO ON
set backupscript=c:\path\backup.sql
set restorescript=c:\path\restore.sql
set livestore=\\server\share
set stagestore=\\server\share
set devstore=\\server\share
set liveserver=server\inst
set stageserver=server\inst
set devserver=server\inst
sqlcmd -E -S%liveserver% -i "%backupscript%"
copy "%livestore%\*" %stagestore%
copy "%livestore%\*" %devstore%
sqlcmd -E -S%stageserver% -i "%restorescript%"
sqlcmd -E -S%devserver% -i "%restorescript%"