Копирование базы данных SQL Server Express на другой компьютер
я увеличиваю заднюю часть приложения доступа клиента завтра и должен быть готов с планом для конкретной проблемы с этим клиентом. Босс должен иметь возможность забрать файл данных из офиса, где SQL Server находится на регулярной основе (обычно ежемесячно), и выполнить статистический анализ данных.
Я посмотрел на самый простой способ скопировать всю базу данных SQL server с сервера на локальный SQL Express и там решения не работают в этом сценарий потому что:
не может использовать одноразовое решение (мастер публикации базы данных), так как это должно быть сценарием.
не может использовать какой-либо метод, который зависит от двух компьютеров, подключенных к сети, так как это не вариант-данные должны быть переданы через USB-накопитель (так что, нет репликации).
невозможно использовать метод, который зависит от запуска средств управления SQL Server из консоли сервера или рабочая станция для резервного копирования.
Не могу подключиться к базе данных SQL Server непосредственно для анализа, поскольку данные можно переносить в другие места.
Я думаю, что мне нужно как-то вызвать скрипт, который создает файл резервной копии, а затем скопировать результат на USB-накопитель. Затем мне нужен второй скрипт для копирования файла резервной копии с USB-накопителя и восстановления его на другой SQL Server.
транспортируемые данные только для чтения (или любые внесенные изменения не должны возвращаться на главный сервер), и данные не будут обновляться во втором месте. В настоящее время он написан с простым старым пакетным файлом для копирования файла MDB, и мне нужно что-то такое же простое для пользователя.
Он не может иметь никаких зависимостей, скажем, от Powershell (SQL Server Management Studio), потому что я не хочу, чтобы он был установлен на компьютере, на котором пользователь запускает скрипт (есть полдюжины рабочие станции сценарий должен быть доступен для запуска, и я не хочу устанавливать что-то на всех из них).
Я собираюсь настроить агент резервного копирования для создания резервной копии каждую ночь, поэтому я мог бы скопировать этот файл без необходимости инициировать резервное копирование перед копированием. Таким образом, мне может потребоваться только сценарий восстановления на целевом компьютере.
мысли, предложения, советы?
4 ответов
вы определенно должны быть в состоянии создать что-то подобное.
одна часть будет T-SQL CREATE BACKUP
скрипт .sql
скрипт и выполнить это из стандартного пакета Windows (*.bat
) или "Command" (*.cmd
файл) с помощью sqlcmd
инструмент командной строки.
это было бы примерно так:
резервное копирование.в SQL
BACKUP DATABASE YourDatabase
TO DISK = 'Z:\Backup\YourDatabase.bak'
WITH FORMAT;
вторая часть будет .файл sql с T-SQL RESTORE
сценарий, в основном читаю данные из заданного местоположения на диске и восстановление его в том экземпляре SQL Server там.
восстановить.в SQL
RESTORE DATABASE YourDatabase
FROM AdventureWorks2008R2Backups
WITH
MOVE 'YourDatabase_Data' TO 'C:\MSSQL\Data\YourDatabase.mdf',
MOVE 'YourDatabase_Log' TO 'C:\MSSQL\Data\YourDatabase_Log.ldf';
GO
конечно, вам нужно адаптировать эти имена и пути к вашим собственным фактическим требованиям - но это должно просто дать вам подсказку, как начать с этого начинания.
для выполнения одного из них .SQL-скрипт с помощью sqlcmd
, вам нужно что-то например:
sqlcmd -S (name of server) -U (login) -P (password) -I (name of script file)
например
sqlcmd -S (local) -U someuser -P top$secret -I backup.sql
ресурсы:
У меня была такая же проблема с транспортировкой БД между производством (сервером) и тестовой разработкой (локально в другом месте), а также транспортировкой готовой БД на хост-сервер.
Как оказалось, я могу просто транспортировать .MDF сам по себе.
- убедитесь, что целевая БД не подключена к этой БД, удалите ее сначала в SSMS.
- переместить .MDF сам по себе (без файла журнала).
- в целевом местоположении по умолчанию c:\program файлы...язык SQL..\Data make убедитесь, что все предыдущие экземпляры MDF и LDF перемещены или удалены-если он видит .ldf там путается.
- в SSMS выберите присоединение. Нажмите Add, выберите .МДФ.
- в этот момент, в поле прямо ниже, он покажет, что MDF и LDF прикреплены и что LDF отсутствует. Нажмите LDF и нажмите кнопку Удалить.
- теперь MDF будет прикреплен и будет добавлен новый/пустой LDF.
Я делаю это все время, работает отлично -- сохраняет тревогу транспортировать большое .ldf. (Я часто использую dropbox.com вместо флэш-накопителя и сначала зашифруйте файл с помощью PKZIP / SecureZip.)
Я не уверен, что произойдет, если вы скопируете MDF с запущенным сервером, хотя я не останавливаю его перед копированием. Я не уверен, как сделать этот сценарий-прикрепление может быть сценарием, но я не уверен в удалении .LDF перед продолжением.
вы можете создать сценарий сервера для создания копии моментального снимка база данных, затем транспортируйте этот MDF, зная, что он не обновляется.
другая идея-написать программу для вставки всех записей в файл SQL-Server compact edition и транспортировки этого? Я не пробовал, но читал об этом.
просто мысль, но если он в настоящее время уходит с копией файла MDB со всеми данными только для себя, то почему бы не продолжать так. Вы можете просто сделать все это в access с запросом для каждой таблицы.
Если вы настроите свой MDB" reporting "с таблицами, связанными и называемыми "tblFoo_LINKED", и локальной таблицей под названием" tblFoo", вы можете просто запустить немного кода VBA, который будет проходить через все таблицы и выполнять что-то вроде
INSERT INTO tblFoo SELECT * FROM tblFoo_LINKED
в SQL восстановление резервного копирования сервера по-прежнему будет вариантом, на который я бы пошел, но просто предлагает другое вращение на вещах, которые могут соответствовать вашим потребностям
Почему бы не продолжить копирование файла базы данных? Это выглядит как достаточно маленькая операция, чтобы уйти с кратковременной паузой: вы можете сжать базу данных, отсоединить и скопировать файлы напрямую. В целевой системе вы можете прикрепите БД SQLExpress по имени файла в строке подключения.