У меня есть данные в таблице в Oracle на одном сервере, которые я хочу ежедневно копировать в таблицу в SQL Server 2008 на другом сервере.
Мое решение (которое работает хорошо, но несколько громоздко) выглядит следующим образом:
Я запускаю следующий пакетный файл на компьютере Oracle
dumpdata --schema=mydb/mypassword --source-query="select * from MyTable"
MyTable >> q:\output1.sql
dumpData
происходит из пакета cx_OracleTools
, а q: сетевой диск на компьютере с SQL Server
Затем я запускаю следующий пакетный файл на компьютере с SQL Server
sqlcmd -i before.sql
ssr.exe 0 "to_date(" "convert(datetime," output1.sql
ssr.exe 0 "'YYYY-MM-DD HH24:MI:SS'" "101" output1.sql
ssr.exe 0 ");" "); /SSR_NL/ GO /SSR_NL/" output1.sql
sqlcmd -i output1.sql -o error.txt
В первой строке запускается SQL, который удаляет строки из таблицы в базе данных SQL Server.
Вторая, третья и четвертая строки преобразуют даты в формат, понятный SQL Server.
Пятая строка импортирует строки в базу данных SQL Server.
Теперь подпрограмма dumpData (поскольку она создает операторы INSERT) создает огромные файлы, поэтому я изменил dumpData для выполнения следующих действий:
dumpdata --schema=mydb/mypassword --source-query="select * from MyTable
where to_char(update_date,'yyyy')='2012'" MyTable >> q:\output1.sql
Теперь у меня есть поле update_date в таблице, которое изменяется при каждом обновлении строки. Поэтому я подумал, что скопирую только те строки, которые изменились в 2012 году (это управляемый размер), и импортирую их в базу данных SQL Server.
Однако для меня недостаточно удалить те строки в базе данных SQL Server, которые изменились в 2012 году в базе данных SQL Server, а затем выполнить импорт. Мне нужно удалить все те строки в базе данных SQL Server, которые были изменены в 2012 году в базе данных Oracle.
Если бы я мог как-то преобразовать свой текстовый файл INSERTS в UPSERT (см. Решения для INSERT ИЛИ ОБНОВЛЕНИЯ на SQL Server ), тогда моя проблема была бы решена.
В качестве альтернативы, я мог бы использовать SSIS 2008.
У кого-нибудь есть простые идеи, как я могу настроить свое существующее решение для работы?
Спасибо ...