2016-01-13 2 views
2

У меня есть концептуальный вопрос.Как скопировать данные из одной базы данных в другую?

У меня есть две базы данных, которые имеют одинаковую структуру. В одной базе данных уже содержится много данных. Эти данные должны быть перенесены в другую базу данных через Select и Insert.

Как я могу выполнить эту миграцию данных с максимальной производительностью?

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

Вторая идея состояла в том, чтобы создать пользовательский тип, который содержит имя табуляции и имена таблиц ссылочных таблиц и флаг bool, который хранит, были ли скопированы данные в таблице. Этот тип сохраняется для каждой таблицы в списке. Затем я запускаю новый поток, который проверяет, прежде чем копировать, были ли созданы таблицы ссылок для каждой таблицы. Если нет, я выполняю Thread.Sleep(), после чего я проверю его снова.

Есть ли хорошо работающий подход к этой проблеме?

Любые предложения будут полезны.

EDIT: Старая база данных - база данных базы данных SQL. Новая база данных представляет собой базу данных сервера ms sql.

+0

Большинство систем баз данных имеют механизм [объемного копирования] (https://msdn.microsoft.com/en-us/library/7ek5da1a (v = vs.110) .aspx). Используйте это. – Heinzi

+1

SELECT/INSERT - самый худший способ сделать это. Я бы настоятельно рекомендовал использовать Database-Tools для этого. Возможно, «Лучшим местом для этого было бы« Администраторы базы данных ». http://dba.stackexchange.com/ –

+0

Проблема заключается в том, что старая база данных является базой данных sqlbase, а новая - сервером ms sql. Итак, теперь я разрабатываю один из этих «Database-Tools» – Bambuk

ответ

2

Вы можете использовать либо:

1) SQL Replication Server

Или 2) SQL Server Merge заявление

Вы можете использовать SQL Server Linked Servers для подключения различных платформ баз данных (например, SQL Server, , mysql, db2, ...)

+0

Репликация SQL Server не работает в моем случае, но я проверю, будет ли решение со связанными серверами и оператором слияния SQL-сервера. thanks :) – Bambuk

+0

Обратите внимание, что оператор 'merge' не может работать со связанным сервером. Вы должны написать свои собственные инструкции 'insert' или' update' –

+0

Вам не нужен Linked Server. SQLBase UNLOAD напишет инструкции Insert для вас. Просто РАЗГРУЗИТЕ, и у вас будет все DDL, DML и данные, которые вы должны подготовить для повторной загрузки SQlServer. – GuptaSteve

0

Лучший совет: придерживаться SQLBase. Второй лучший совет, используйте команду SQLBase UNLOAD через SQLTalk. Это будет записывать все операторы DDL, необходимые для воссоздания базы данных, где - включая триггеры, хранимые процедуры, индексы и т. Д., Плюс все данные для загрузки, если вы используете правильные параметры, во внешний файл. Этот файл может быть дополнительно отредактирован программно, если необходимо, чтобы он был в формате сервера sql (не так много различий). Существует много вариантов команды UNLOAD, которая не может быть написана здесь подробно, но вот ссылка на синтаксис. Обратите внимание, что SQLBase v12 был выпущен за последние месяцы, а производительность увеличилась в десять раз. С правильной настройкой и индексами и т. Д. он будет превосходить Sql Server с точки зрения эффективности и производительности. В базе данных 100 Гб наше время ответа прошло от 50 секунд до 3 секунд без дополнительной работы.

Смежные вопросы