Копирование базы данных SQL Server Express на другой компьютер

я увеличиваю заднюю часть приложения доступа клиента завтра и должен быть готов с планом для конкретной проблемы с этим клиентом. Босс должен иметь возможность забрать файл данных из офиса, где SQL Server находится на регулярной основе (обычно ежемесячно), и выполнить статистический анализ данных.

Я посмотрел на самый простой способ скопировать всю базу данных SQL server с сервера на локальный SQL Express и там решения не работают в этом сценарий потому что:

  1. не может использовать одноразовое решение (мастер публикации базы данных), так как это должно быть сценарием.

  2. не может использовать какой-либо метод, который зависит от двух компьютеров, подключенных к сети, так как это не вариант-данные должны быть переданы через USB-накопитель (так что, нет репликации).

  3. невозможно использовать метод, который зависит от запуска средств управления SQL Server из консоли сервера или рабочая станция для резервного копирования.

  4. Не могу подключиться к базе данных 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 сам по себе.

  1. убедитесь, что целевая БД не подключена к этой БД, удалите ее сначала в SSMS.
  2. переместить .MDF сам по себе (без файла журнала).
  3. в целевом местоположении по умолчанию c:\program файлы...язык SQL..\Data make убедитесь, что все предыдущие экземпляры MDF и LDF перемещены или удалены-если он видит .ldf там путается.
  4. в SSMS выберите присоединение. Нажмите Add, выберите .МДФ.
  5. в этот момент, в поле прямо ниже, он покажет, что MDF и LDF прикреплены и что LDF отсутствует. Нажмите LDF и нажмите кнопку Удалить.
  6. теперь 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 по имени файла в строке подключения.