2014-04-10 7 views
6

Mam zadanie skryptu, które przekazuje pewne przekazywane obiekty z jednego serwera na drugi. Jest to kodPakiet SSIS działa poprawnie w programie Visual Studio, ale kończy się niepowodzeniem, gdy jest uruchamiany ręcznie w wdrożonym polu

public void Main() 
     { 
      try 
      { 
      string schemaName = Dts.Variables["$Package::SchemaName"].Value.ToString(); 
      string objectName = Dts.Variables["$Package::ObjectName"].Value.ToString(); 

      //object rawETLConnection = Dts.Connections["etl"].AcquireConnection(Dts.Transaction); 
      //Server etlServer = (Server)rawETLConnection; 

      Server etlServer = new Server("ciesqldeva04"); 
      Database etlDB; 
      etlDB = etlServer.Databases["sell_side_content"]; 




      //object rawReportingConnection = Dts.Connections["reporting"].AcquireConnection(Dts.Transaction); 
      //Server reportingServer = (Server)rawReportingConnection; 
      Server reportingServer = new Server("ciesqldeva05"); 





       Transfer xfr; 
       xfr = new Transfer(etlDB); 
       xfr.DestinationServer = reportingServer.Name; 
       xfr.DestinationDatabase = "sell_side_content"; 
       xfr.DropDestinationObjectsFirst = true; 
       xfr.CopyAllObjects = false; 
       xfr.CopyData = true; 
       xfr.CopySchema = true; 
       xfr.Options.DriAll = true; 


       xfr.ObjectList.Add(etlDB.Tables[objectName, schemaName]); 

       xfr.TransferData(); 
      } 
      catch (SmoException smoex) 
      { 
       Dts.Events.FireError(120, " SMO - TransferObjects.dtsx", smoex.Message, "", 0); 

      } 
      catch (Exception ex) 
      { 
       Dts.Events.FireError(120,"Non SMO - TransferObjects.dtsx",ex.Message,"",0); 

      } 
      Dts.TaskResult = (int)ScriptResults.Success; 
     } 

To działa dobrze, gdy go uruchomić za pomocą Visual Studio 2012. Ale gdy wdrożyć go na polu i go uruchomić poprzez kliknięcie prawym przyciskiem nazwę pakietu w SSMS i uderzanie wykonać, to nie z ten komunikat "Przenieś obiekt za pomocą SMO: Błąd: Wystąpił błąd podczas przesyłania danych.Więcej szczegółów na temat wewnętrznego wyjątku."

Przekonwertowałem skrypt do aplikacji konsolowej i uruchomiłem go na pudełku, w którym poprzednio wdrożyłem pakiet, i uruchomiłem go za pośrednictwem terminala. Był on w stanie pomyślnie przesłać, więc nie wygląda na problem z brakującymi bibliotekami DLL .

Jest to kod dla tej aplikacji konsoli

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Data; 
using Microsoft.SqlServer.Dts.Runtime; 
using Microsoft.SqlServer.Management.Smo; 
using System.Collections.Specialized; 
using System.Collections; 
namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Server etlServer = new Server("ciesqldeva04"); 
      Database etlDB; 
      etlDB = etlServer.Databases["sell_side_content"]; 




      //object rawReportingConnection = Dts.Connections["reporting"].AcquireConnection(Dts.Transaction); 
      //Server reportingServer = (Server)rawReportingConnection; 
      Server reportingServer = new Server("ciesqldeva05"); 




      try 
      { 
       Transfer xfr; 
       xfr = new Transfer(etlDB); 
       xfr.DestinationServer = reportingServer.Name; 
       xfr.DestinationDatabase = "sell_side_content"; 
       xfr.DropDestinationObjectsFirst = true; 
       xfr.CopyAllObjects = false; 
       xfr.CopyData = true; 
       xfr.CopySchema = true; 
       xfr.Options.DriAll = true; 


       xfr.ObjectList.Add(etlDB.Tables["award_sector", "people"]); 

       xfr.TransferData(); 
      } 
      catch (SmoException smoex) 
      { 
       Console.WriteLine("This is an SMO Exception"); 
       //Display the SMO exception message. 
       Console.WriteLine(smoex.Message); 
       //Display the sequence of non-SMO exceptions that caused the SMO exception. 
      } 
     } 
    } 
} 

próbowałem różnych rzeczy, ale bez powodzenia. Każda pomoc byłaby bardzo cenna.

P.S. Używam tego na SQL Server 2012.

+1

Jeśli zmienisz wiadomość dziennika obejmują smoex.Inner, kropki dostarczać żadnego wglądu co do błędu? Kiedy uruchamiasz ten pakiet na serwerze zdalnym, w jaki sposób go wywołujesz? Czy jest to przy użyciu modelu wdrażania projektu (nowy) lub modelu wdrażania pakietu? – billinkc

+0

Używam modelu wdrażania projektu. Wzywam go, logując się do tego serwera za pomocą SSMS, a następnie przechodząc do projektu w katalogach usług integracji-> ssisdb -> ..., a następnie klikając prawym przyciskiem myszy na pakiet i wykonując komendę execute. – bootkick

+0

Również wykonywanie odesów nie pomaga, ponieważ wyjątek, który jest rejestrowany, nie jest tym, który wyrzucam. Otrzymuję listę błędów za pomocą tego komunikatu wybierz message_type, \t wiadomość z ssisdb.internal.operation_messages gdzie operation_id = 74404 \t sortuj według message_time asc – bootkick

Odpowiedz

Powiązane problemy