Как создать и выполнить пакет служб SSIS на удаленном сервере и источнике назначения sql, используя EzAPI - PullRequest
1 голос
/ 20 июля 2011

Мне нужно создать консольное приложение, которое может копировать таблицу с одного удаленного экземпляра сервера SQL на другой экземпляр удаленного сервера SQL.

Я использую библиотеку под названием EzAPI

Оба соединения (источник и адресаты) и имя таблицы будут предоставлены как консольное приложение в качестве параметров.

Вот моя попытка:

public class OleDBToOleDB : EzSrcDestPackage<EzOleDbSource, EzSqlOleDbCM, EzOleDbDestination, EzSqlOleDbCM>
    {

        public OleDBToOleDB(Package p) : base(p) { }

        public static implicit operator OleDBToOleDB(Package p) { return new OleDBToOleDB(p); }                

        public OleDBToOleDB(string SrcServer, string SrcDB, string SrcTable,string SrcUser,string SrcPassword, string DstServer, string DstDB, string DstTable,string DstUser,string DstPassword)            
        {
            SrcConn.SetConnectionString(SrcServer, SrcDB);
            SrcConn.ServerName = SrcServer;
            SrcConn.InitialCatalog = SrcDB;
            SrcConn.UserName = SrcUser;
            SrcConn.Password = SrcPassword;

            Source.Table = SrcTable;

            DestConn.SetConnectionString(DstServer, DstDB);
            DestConn.ServerName = DstServer;
            DestConn.InitialCatalog = DstDB;
            DestConn.UserName = DstUser;
            DestConn.Password = DstPassword;


            Dest.Table = DstTable;                        
        }        
    }

static void Main(string[] args)
        {            
            OleDBToOleDB p = new OleDBToOleDB("localhost", "TestDB", "Address", "sa", "123", "localhost", "DestDB", "Address", "sa", "123");

            p.Execute();

            Console.Write(string.Format("Package2 executed with result {0}\n",p.ExecutionResult));
        }

Проблема с этим кодом:

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

Необработанное исключение: System.Runtime.InteropServices.COMException (0xC020801C): исключение из HRESULT: 0xC020801C

После поиска в Интернете я обнаружил, что эта ошибка означает, что эта ошибка является исключением AcquireConnections служб Integration Services.

Так как я могу запустить этот код на удаленном экземпляре сервера sql и заставить пакет создать таблицу на конечном сервере перед передачей данных.

Заранее спасибо.

1 Ответ

1 голос
/ 27 января 2012

Служба SSIS нуждается в обеих таблицах во время генерации пакета, поскольку она должна получить полные метаданные для каждого столбца в ваших таблицах. Вы можете установить для свойства ValidateMetadata значение false, в этом случае оно не будет проверяться, но вам нужно будет заполнить все данные самостоятельно. Это не легко.

Я думаю, что самое простое, что вы можете сделать, это: 1) создать пакет с локальными подключениями и отключить проверку для целевого компонента 2) Теперь установите новые строки подключения в исходные и конечные компоненты. 3) запустить пакет

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

Я думаю, что также проще реализовать вашу задачу с SqlBuldCopy без SSIS

...