Инструмент для ситуаций передачи данных, созданный только для теоретических целей, который может быть полезен для передачи большого количества данных с SQL Server (2000 или выше) и/или Oracle (10G или выше) экземпляру (SQL> SQL, SQL> Oracle, Oracle> SQL и Oracle> Oracle).
Обычно копировать SQL Server и/или таблицы Oracle из одного экземпляра в другой.
Обычно мы, вероятно, решаем использовать мастер импорта/экспорта SSMS, пакет услуг интеграции или метод передачи данных в качестве текстового файла.
Но проблемы могут возникнуть, если мы говорим о таблицах с более чем 300 миллионами записей или 30 ГБ и больше, если они должны быть скопированы за минимальное время.
Если нам повезло, эта таблица может иметь кластерный индекс в SQL Server или индекс с частотной гистограммой в Oracle. Это сценарий, когда этот маленький проект играет роль.
Если у нас нет кластерного индекса в таблице исходной, есть некоторая надежда, мы реализовали новый метод (немного медленнее, чем кластерный, но хороший) для копирования данных из таблицы кучи, как в Oracle, так и в SQL Server.
Его логика очень проста: он сканирует статитику кластерного индекса в SQL Server или гистограмму в Oracle, и определяет сбалансированные кластеры данных.
Это означает, что он создает столько же запросов, сколько параметризованных потоков, и эти запросы фильтровали в поле кластерного индекса, пытаясь получить одинаковый объем данных каждый. Затем он запускает их, используя sqlbulkcopy .net fw или oraclebulkcopy из метода odp.net. Как куча, это «разделение» таблица с детерминированной функцией и модулем (%% lockres %% в SQL Server и Rowid в Oracle), и запустите каждый запрос в одном потоке.
Мы должны советовать, что в зависимости от количества потоков это очень интенсивный процесс, а в некоторых случаях потребление ЦП может возрасти до 100%, а длина очереди на дисков может вызвать длительное ожидание.
Из -за этого мы рекомендуем запустить на другом сервере, кроме источника данных и назначения.
Таким образом, со структурой 2 сетей с двумя сетевыми картами 100 Мбит на каждом сервере, мы достигли скорости передачи 190 МБ/SEG.
Вы должны проверить его в статистических целях, прежде чем думать об использовании его в производственной среде.
Дополнительные примечания: увеличение производительности будет достигнуто в соответствии с определенными круговыми стойками, а иногда он не будет вынужден из -за характера данных внутри кластерного столбца. Прежде всего, необходимо прояснить, что кластерный индекс сохраняет информацию о статистике только первого столбца составного индекса, поэтому стало более критичным, чтобы кластерный индекс был хорошо дизайн. Мы имеем в виду, что лучше следовать кончику поля упорядочения от того, что с наибольшей гранулярностью до менее одного. Другая проблема, которая может столкнуться, - это количество нулевых данных. Статистические данные говорят о не нулевых данных, поэтому, если таблица имеет 80% нулевых данных многопоточности, не выиграет от них, так как все нулевые данные копируются в одном потоке в качестве уникальной партии. Естественно, мы также рекомендуем, чтобы в таблице назначения не было никаких индексов (чтобы разрешить множество объемных потоков вставки), не было разделов и не было несправедливо, чтобы ускорить процесс вставки.
Этот DLL может быть расстроен в другие проекты ETL, которые не зависят или не построены на платформе SSIS.