SQL Azure - таблица копирования между базами данных
Я пытаюсь запустить следующий SQL:
INSERT INTO Suppliers ( [SupplierID], [CompanyName])
Select [SupplierID], [CompanyName] From [AlexDB]..Suppliers
и получил сообщение об ошибке "ссылка на имя базы данных и/или сервера не поддерживается в этой версии SQL-сервера"
Любая идея, как копировать данные между базами данных "внутри" сервера?
Я могу загрузить данные на клиент, а затем обратно на сервер, но это очень медленно.
Ответы
Ответ 1
Я знаю, что это старо, но у меня было другое ручное решение для одного запуска.
Используя SQL Management Studio R2 SP1 для подключения к azure, я прямо щелкаю по исходной базе данных и выбираю сгенерировать скрипты.
во время работы мастера, после того, как я выбрал свои таблицы, я выбираю, что я хочу выводить в окно запроса, затем нажимаю кнопку "Дополнительно". Примерно на полпути вниз окно свойств
существует опция "тип данных для script". Я выбираю это и меняю его на "только данные", затем я заканчиваю мастер.
Все, что я делаю, это проверить script, переставить вставки для ограничений и изменить использование сверху, чтобы запустить его против моей целевой БД.
Затем я нажимаю правой кнопкой мыши на целевую базу данных и выбираю новый запрос, копирую script в него и запускаю его.
Готово, данные перенесены.
надеюсь, что кто-то поможет
Ответ 2
С 2015 года это можно сделать, используя упругие запросы к базе данных, также известные как кросс-запросов к базе данных.
Я создал и использовал этот шаблон, он копирует 1,5 миллиона строк за 20 минут:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL SQL_Credential
WITH IDENTITY = '<username>',
SECRET = '<password>';
CREATE EXTERNAL DATA SOURCE RemoteReferenceData
WITH
(
TYPE=RDBMS,
LOCATION='<server>.database.windows.net',
DATABASE_NAME='<db>',
CREDENTIAL= SQL_Credential
);
CREATE EXTERNAL TABLE [dbo].[source_table] (
[Id] BIGINT NOT NULL,
...
)
WITH
(
DATA_SOURCE = RemoteReferenceData
)
SELECT *
INTO target_table
FROM source_table
Ответ 3
К сожалению, нет способа сделать это в одном запросе.
Самый простой способ добиться этого - использовать "Синхронизация данных" для копирования таблиц. Преимущество этого заключается в том, что он также будет работать между серверами и синхронизирует ваши таблицы.
http://azure.microsoft.com/en-us/documentation/articles/sql-database-get-started-sql-data-sync/
На практике у меня не было такого большого опыта работы с "Синхронизацией данных", который работает в процессе производства, но он отлично подходит для однократных заданий.
Одна проблема с "Синхронизацией данных" заключается в том, что она создаст большое количество "синхронизирующих" объектов в вашей базе данных, и удаление фактической "синхронизации данных" с портала Azure может или не может их очистить. Следуйте инструкциям в этой статье, чтобы очистить их вручную:
https://msgooroo.com/GoorooTHINK/Article/15141/Removing-SQL-Azure-Sync-objects-manually/5215
Ответ 4
SQL-Azure не поддерживает инструкцию USE и фактически не выполняет кросс-db-запросы. Таким образом, указанный выше запрос будет терпеть неудачу.
Если вы хотите скопировать/создать резервную копию db на другой sql azure db, вы можете использовать копирование "Тот же сервер" или "Кросс-сервер" в SQL-Azure. Обратитесь к этой статье msdn
Ответ 5
Вы можете использовать такой инструмент, как SQL Data Compare от Red Gate Software, который может перемещать содержимое базы данных из одного места в другое и полностью поддерживает SQL Azure, 14-дневная бесплатная пробная версия должна позволить вам увидеть, может ли она делать то, что вам нужно.
Полное раскрытие: я работаю в Red Gate Software
Ответ 6
Используйте следующие шаги, нет прямого способа сделать это. Но с помощью какого-то трюка мы можем.
Шаг 1: Создайте еще одну таблицу с той же структурой таблицы поставщиков внутри [AlexDB], скажите, что это SuppliersBackup
Шаг 2: Создайте таблицу с той же структурой таблицы поставщиков внутри DesiredDB
Шаг 3: Включите синхронизацию данных между AlexDB..Suppliers и DesiredDB..Поставщики
Шаг 4: Усечение данных от AlexDB..Поставщики
Шаг5: Скопируйте данные из AlexDB..SuppliersBackup в AlexDB..Поставщики
Шаг 6. Теперь запустите синхронизацию
Данные, скопированные в DesiredDB.
Ответ 7
Старый пост, но другой вариант - Мастер миграции Sql Azure
Ответ 8
Хорошо, я думаю, что нашел ответ - никак. необходимо переместить данные клиенту или сделать некоторые другие трюки. Здесь ссылка на статью с пояснениями: Ограничения SQL Azure: только одна БД на подключение
Но любые другие идеи приветствуются!
Ответ 9
Несколько вариантов (скорее обходные пути):
- Сгенерировать script с данными
- Использовать синхронизацию данных в Azure
- Использовать MS Access (импорт и экспорт) со многими исключениями (например, GUID в Access)
- Используйте 3-х сторонние инструменты, такие как Red Gate.
К сожалению, нет простого и встроенного способа сделать это до сих пор.
Ответ 10
Если у вас есть версия onprem с sp_addlinkedsrvlogin, вы можете настроить Linked Servers как для исходной, так и для целевой базы данных, тогда вы можете запустить свою вставку в запрос.
См. "Поддержка SQL Server для связанного сервера и распределенные запросы к базе данных Windows Azure SQL" в этом блоге: https://azure.microsoft.com/en-us/blog/announcing-updates-to-windows-azure-sql-database/