2014-04-10 3 views
6

Ich habe eine Skriptaufgabe, die bestimmte übergebene Objekte von einem Server zu einem anderen überträgt. Dies ist der CodeSSIS-Paket läuft in Visual Studio einwandfrei, schlägt aber fehl, wenn es manuell in der bereitgestellten Box ausgeführt wird

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; 
     } 

Es funktioniert gut, wenn ich es über Visual Studio laufen 2012. Aber wenn ich es auf die Box einsetzen und es über rechts laufen den Paketnamen in SSMS klicken und schlagen ausführen, es nicht mit diese Nachricht "Objekt mit SMO übertragen: Fehler: Beim Übertragen von Daten ist ein Fehler aufgetreten. Weitere Informationen finden Sie in der inneren Ausnahme."

Ich konvertierte das Skript auch in eine Konsolenanwendung und führte es auf der Box aus, auf der ich das Paket zuvor bereitgestellt und über Terminal ausgeführt hatte und erfolgreich übertragen konnte, sodass es nicht nach fehlenden DLLs aussieht .

Dies ist der Code für die Konsolenanwendung

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. 
      } 
     } 
    } 
} 

ich verschiedene Dinge ausprobiert, aber ohne Erfolg. Jede Hilfe würde sehr geschätzt werden.

P.S. Ich verwende diese auf SQL Server 2012

+1

Wenn Sie Ihre Log-Nachricht smoex.Inner ändern zu schließen, Punkte sie bieten nicht nur die Einsicht in Bezug auf die Fehler? Wenn Sie dieses Paket auf dem Remote-Server ausführen, wie rufen Sie es auf? Verwendet dies das Projektbereitstellungsmodell (neu) oder das Paketbereitstellungsmodell? – billinkc

+0

Ich verwende das Projektbereitstellungsmodell. Und ich rufe es auf, indem ich mich auf diesem Server mit SSMS anmelde, dann zu dem Projekt unter Integrationsservices-Kataloge-> ssisdb -> ... navigiere und dann mit der rechten Maustaste auf das Paket klicke und auf Ausführen klicke. – bootkick

+0

Auch interne Oden nicht helfen, da die Ausnahme, die protokolliert wird, ist nicht die, die ich werfe. Ich erhalte die Fehlerliste mit dieser Auswahl message_type, \t Nachricht von ssisdb.internal.operation_messages wo operation_id = 74404 \t Auftrag von message_time asc – bootkick

Antwort

Verwandte Themen