переносить данные из одной базы данных в другую - PullRequest
1 голос
/ 30 мая 2011

У меня огромное количество данных в базе данных, и мне нужно перенести эти данные на другой сервер. Я использую SerializeJSON для записи данных в файлы, которые отлично работали для небольших объемов данных, но теперь я получаю ошибки памяти. Серверы баз данных не находятся в одной сети. Они не могут «видеть» друг друга, поэтому я хочу перенести данные в файлы.

Есть мысли о том, как я могу передавать данные из одной базы данных в другую, используя файлы и ColdFusion?

Ответы [ 4 ]

4 голосов
/ 30 мая 2011

Способ, которым я подхожу к этому, - отключить сервер приложений (ColdFusion) и попытаться ускорить процесс, используя DTS .Идея состоит в том, чтобы экспортировать определенные строки базы данных из каждой таблицы в виде одного экспорта, который затем можно импортировать в другую базу данных.

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

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

Надеюсь, это поможет.

1 голос
/ 31 мая 2011

Ваш вопрос создает впечатление, что OOM происходит при записи данных.Возможно, пытаясь написать весь набор записей.Вместо этого вам, вероятно, нужно написать алгоритм, который перебирает страницы данных - ROW_NUMBER (ORDER BY x, y, z) SQL Server является правильным подходом для этого.Затем вы можете записать несколько файлов или использовать fileWrite (fileObj, data) , чтобы создать один большой файл - последний, вам, вероятно, потребуется формат, отличный от JSON, например CSV.

Теперь, если проблема связана с вставкой данных, есть ошибка с ColdFusion и циклическим выполнением операторов SQL .В основном вам нужно поместить <cfquery>INSERT...</cfquery> внутрь <cfthread/> при многократном цикле.

Наконец, если у вас возникли проблемы с чтением данных из файла, вам необходимо выполнить буферизованное чтение.В этом случае вам нужно будет использовать CSV в качестве формата сериализации или использовать синтаксический анализатор SAX XML, если вы используете XML, но я не знаю о синтаксическом анализаторе JSON, который читает буферизованным способом.

0 голосов
/ 07 июня 2011

Если у вас есть SQL Server Management Studio, почему бы не создать полный файл резервной копии, запишет все данные, а затем запустит восстановление новой базы данных. Это должно восстановить все схемы, таблицы и данные.

НТН, Larry

0 голосов
/ 30 мая 2011

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

...