Копирование базы данных с одного сервера SQL на другой - PullRequest
1 голос
/ 17 февраля 2011

Привет.

Мы работаем с Microsoft SQL Server 2008 на одной машине с одной лицензией. Нам нужно создать идентичный экземпляр разработки базы данных, содержащейся на этом сервере, включая таблицы, триггеры, значения по умолчанию, данные, представления, ключи, ограничения и индексы.

В качестве временного решения я скачал и установил SQL Server 2008 Express R2 вместе с инструментарием SQL Server 2008 на отдельном компьютере. Затем я использовал DTSWizard.exe и указал его на удаленный хост в качестве источника данных и локальный компьютер в качестве цели.

Передача данных сначала казалась хорошей, поскольку таблицы, индексы и т. Д. Создавались, но после небольшого перебора я понял, что это НЕ передача / установка значений по умолчанию для любых полей! Многие из полей имеют ограничения «NOT NULL», и мы взаимодействуем с COM API (Response RCK), который не позволяет нам вручную редактировать запросы, поэтому мы застряли в том, как они взаимодействуют с записями базы данных / вставки ( включая использование значений по умолчанию, обходящих ограничения NOT NULL.)

В качестве второго варианта мы использовали параметр «Создать сценарий» и экспортировали все таблицы, ограничения, индексы, значения по умолчанию, данные и т. Д. В виде файла .SQL, но сейчас я не уверен, как загрузить этот файл SQL в SQL Сервер, потому что это 4,9 ГБ - все, что требуется, не обходя размера этого монстра.

Итак, мои вопросы: Ли я могу сделать полную копию базы данных SQL на другой сервер, включая значения по умолчанию? - Или есть способ импортировать файл .SQL, не копируя и не вставляя его как новый запрос?

P.S: Извините, если мой "Microsoft" язык не идеален, я парень из Linux, знакомый с PostgreSQL и mySQL.

Ответы [ 3 ]

2 голосов
/ 17 февраля 2011

Почему бы просто не сделать полную резервную копию базы данных и восстановить ее на новом сервере?Это будет включать в себя все, включая значения по умолчанию?

Вот некоторый SQL, который должен это сделать (отредактируйте пути и логические имена файлов в соответствии с вашими потребностями):

-- On the source server run:
BACKUP DATABASE [TestDb] 
    TO DISK = N'C:\TEMP\TestDb.bak' 
    WITH 
        NOFORMAT, 
        NOINIT,  
        NAME = N'SourceDb-Full Database Backup', 
        SKIP, 
        NOREWIND, 
        NOUNLOAD,  
        STATS = 10
GO

-- On the other server run
RESTORE DATABASE [DestDb] 
    FROM DISK = N'C:\Temp\TestDb.bak' 
    WITH  
        FILE = 1,  
        MOVE N'TestDb' TO N'C:\TEMP\DestDb_data.mdf',  
        MOVE N'TestDb_log' TO N'C:\TEMP\DestDb_log.ldf',  
        NOUNLOAD,  STATS = 10
GO

и вам нужно переместитьфайл резервной копии между серверами, если он недоступен по сети ...

1 голос
/ 18 февраля 2011

Наконец-то нашел решение, которое работает.

В SQL Server 2008 возникает ошибка при экспорте базы данных, в которой значения DEFAULT не переносятся в структуры таблиц.

Вот мое решение для обхода этого:

  • Щелкните правой кнопкой мыши базу данных, которую вы хотите сделать резервную копию.
  • Если появится диалоговое окно «Добро пожаловать в мастер создания сценариев SQL Server», нажмитеследующий.В противном случае перейдите к следующему шагу.
  • Выберите базу данных, которую вы хотите перенести.
  • Ниже перечислены ключевые моменты, которые необходимо сделать для правильного выбора:
    • Установить для Script по умолчанию значение True
    • Скрипт USE DATABASE для False
    • Скрипт данных для True
    • Скрипт индексирует для True
    • Скрипт Первичные ключи для True
    • Скрипт Запускает дляTrue
    • Сценарий уникальных ключей для True
  • После того, как вы завершили настройку других необязательных параметров, нажмите Далее>.
  • Проверка хранимых процедур, таблиц иПросмотрите (не проверяйте пользователей, если вы не хотите / нуждаетесь в этом.) И нажмите Далее>.
  • Нажмите «Выбрать все», чтобы выбрать все сохраненные процедуры, и нажмите «Далее»>.
  • Нажмите «Выбрать все», чтобы выбратьвсе таблицы и нажмите «Далее»>.
  • Нажмите «Выбрать все», чтобы выбрать все представления, и нажмите «Далее»>.
  • В режиме «Сценарий» выберите «Сценарий в файл».
  • Нажмите «Обзор»... Нажмите и выберите папку и имя файла, который вы хотите сохранитьскрипт SQL под.В этом примере мы будем использовать my_script.sql.
  • Нажмите Finish.

Теперь, когда у нас есть резервная копия всей базы данных, включая таблицы, представления, хранимые процедуры, индексы, данные,и т.д. пришло время импортировать эти данные в новую базу данных.

На компьютере, на котором вы хотите восстановить эту информацию, выполните следующие действия:

  • Откройте командную строку, нажавПуск -> Выполнить ... или Нажатие Windows (Super) + R на клавиатуре.
  • Введите «cmd» без кавычек в диалоговом окне «Выполнить» и нажмите «ОК».
  • Перейдите в каталогВаш файл SQL находится по адресу.В моем случае, cd "C: \ Documents and Settings \ Администратор \ Рабочий стол"
  • Тип "sqlcmd -s [сервер] [экземпляр] -i my_script.sql" ... [сервер] - любое имявашей машины с Windows, и [instance] - это имя вашего экземпляра SQL.Для SQLExpress это «SQLEXPRESS» без кавычек.
  • Нажмите Enter, и вы уже в пути!

Надеюсь, это поможет кому-то еще, кто столкнулся с множеством проблем!

0 голосов
/ 04 августа 2017

Возможно выполнить оба запроса с одного сервера

- На исходном сервере запустите:

BACKUP DATABASE [TestDb] 
    TO DISK = N'C:\TEMP\TestDb.bak' 
    WITH 
        NOFORMAT, 
        NOINIT,  
        NAME = N'SourceDb-Full Database Backup', 
        SKIP, 
        NOREWIND, 
        NOUNLOAD,  
        STATS = 10 GO

- На другом сервере запустить

RESTORE DATABASE [DestDb] 
    FROM DISK = N'C:\Temp\TestDb.bak' 
    WITH  
        FILE = 1,  
        MOVE N'TestDb' TO N'C:\TEMP\DestDb_data.mdf',  
        MOVE N'TestDb_log' TO N'C:\TEMP\DestDb_log.ldf',  
        NOUNLOAD,  STATS = 10
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...