Есть ли другой метод, кроме использования ssis для получения данных с сервера sql в oracle? - PullRequest
0 голосов
/ 14 февраля 2019

Проблема в том, что с помощью ssis я делаю источник ado в пункт назначения ado.Этот метод записывает только 88 строк в секунду и работает очень медленно.

using Oracle.ManagedDataAccess.Client;
using System;
using System.Data;
using System.Data.SqlClient;

namespace SQLconnection
{
internal static class Program
{
    private static void Main(string[] args)
    {
        SqlConnection conn = new SqlConnection("Data Source=;Database=;Integrated Security=yes");
        conn.Open();
        SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE", conn);
        SqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            Console.WriteLine(reader.GetString(0) + ", " + reader.GetString(19));
        }

        conn.Close();
        conn.Dispose();

        Console.ReadLine();

        OracleConnection con = new OracleConnection("User Id=;Password=;Data Source=;");
        con.Open();
        OracleCommand cmd2 = con.CreateCommand();
        cmd2
            .CommandText = "SELECT \'Hello World!\' FROM dual";

        OracleDataReader reader2 = cmd2.ExecuteReader();
        reader2.Read();
        Console.WriteLine(reader2.GetString(0));

        Console.WriteLine(con.ServiceName);
        Console.WriteLine(con.ServerVersion);
        Console.WriteLine(con.HostName);

        con.Close();

        Console.ReadLine();

    }
}
}

Можно ли каким-либо образом установить соединение и передать данные через консольное приложение?Я чувствую, что это будет быстрее, чем 88 строк в секунду.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Я обнаружил, что файловые операции выполняются намного быстрее при массовых передачах данных.

Я бы исследовал использование утилиты BCP out для создания текстовых файлов с разделителями из SQL-сервера.Прочитайте: https://docs.microsoft.com/en-us/sql/tools/bcp-utility?view=sql-server-2017

Получить его в Oracle может быть немного сложнее (у меня очень ограниченный опыт работы с Oracle).Что касается следующего вопроса, вы можете исследовать его с помощью скриптов SQL Loader:

Oracle: импорт CSV-файла

Однако при использовании BCP есть несколько ошибок:

  • В зависимости от структуры данных (у вас есть запятые и возврат каретки в текстовых полях в ваших данных?), Рассмотрите возможность использования пользовательских разделителей для полей и записей.Это можно легко указать в команде BCP с помощью параметров -t и -r
  • Очевидно, убедитесь, что поля и данные совпадают (или, по крайней мере, сопоставимы) между форматами.Вы можете использовать опцию QUERYOUT в BCP для создания пользовательских запросов, которые должны дать вам возможность приводить, если вам нужно, и упорядочивать столбцы так, как вы хотите.

Возможно, это не самое сексуальное решение, но он может работать, может быть очень повторяемым и может видеть высокую пропускную способность данных.Мы делали это для процесса ETL от Sybase ASE к SQL Server и увидели, что время обработки упало до 10% по сравнению с тем, что они использовали для других методов базы данных.

Очевидно, однако, YMMV, поэтому сначала протестируйте.

0 голосов
/ 14 февраля 2019

Да, вы можете написать консольное приложение, которое использует собственный поставщик Oracle для передачи данных в Oracle.

https://www.oracle.com/webfolder/technetwork/tutorials/obe/db/dotnet/GettingStartedNETVersion/GettingStartedNETVersion.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...