Ganze Tabellen einer Datenbank sichern als einzelner Datensatz

Ganze Tabellen einer Datenbank sichern
Es werden in diesem Beispiel in einer Schleife eine Tabelle einer Staging-Datenbank in einem einzigem Feld eines Satzes in der [BackupsTabelle] in einer anderen Datenbank [BackupDB] gesichert.

Es wird dabei auch T-SQL Code bereitgestellt, um diese komprimierten und gesicherten Daten, ohne Aufwand lesbar zu machen.

Durch diese Form der Sicherungen, können mglw. komplette ETL-Strecken, zu erneut eingespielt werden.

Ganze Tabellen einer Datenbank sichern.docx

Limits: Ein Feld mit dem Typ NVARCHAR(MAX) kann nicht mehr als 2 GByte  enthalten

Print Friendly, PDF & Email

Visual Studio 2019 + Data Tools

Wer das alte VS 2017 oder noch ältere Versionen kennt, kann die Data Tools installieren und dann können neue Projekte anlegen, die auf diesen basieren.
Das neue VS 2019 erlaubt es aber auch nach einer Installation von Data Tools weiterhin nicht, neue Projekte dafür anzulegen.

Diese Funktionalität wird immer versteckter und ich versuche, nicht zuletzt wegen solchen „Verschlimmbesserungen“, immer häufiger kostenfreie Open Source Anwendungen benutzen, um diese nervigen Microsoft Produkten zu vermeiden zu können.

In dem MS-Link https://docs.microsoft.com/en-us/sql/ssdt/download-sql-server-data-tools-ssdt?view=sql-server-ver15 wird ganz versteckt weitere Links, dass es eben nicht ausreicht, die Data Tools zu installieren, sonst jetzt muss man auch weitere „Extension“ installieren muss.

For Analysis Services, Integration Services, or Reporting Services projects, you can install the appropriate extensions from within Visual Studio with Extensions > Manage Extensions or from the Marketplace.

Analysis Services
Integration Services
Reporting Services

Diese drei Extension herunterladen und installieren – Dateien mit der Endung „vsix“ sind Microsoft’s Installer.
Hinweis: Diesen drei Links folgen und gut durchlesen – schon für die ältere SQL Server 2017 Versionen muss noch weitere zusätzliche Extension nötig sind!
Dann kann man Glück haben und es läuft, oder man Pech und ärgert schon wieder mit Microsoftprodukten. Unzufriedenheit und Ärger ist vermutlich von Microsoft gewollt!

Ach so, solche neue Projekte kann man anlegen, wenn man die richtigen Schüsselworte „findet“. Diese Entwicklung halte ich als falsch! Früher gab es schon einmal graphische Dialoge.
Für SSAS-Projekte: „Analysis“ oder „Services“
Für SSIS-Projekte:
Für SSRS-Projekte: „Bericht“
Für SQL Server Projekte: „SQL“
Leider muss man jetzt auch hier viel Scrollen. Und mein 4K Monitor bietet jetzt immer noch nur sechs Einträge an und man darf dann reichlich scrollen. Dass man scrollen kann, sieht man nur, wenn man die Maus in den richtigen Bereich schiebt… (darum ist eben der tolle weiße Dialog Rahmen und darum herum reichlich vieeeeeeeeel weißer Hintergrund). Microsoft weiß eben wie man es schwierig machen kann und keinesfalls flüssig arbeiten soll!

Print Friendly, PDF & Email

BIML

https://www.informatik-aktuell.de/entwicklung/programmiersprachen/biml-macht-datenbeladung-zum-kinderspiel.html

https://www.cathrinewilhelmsen.net/2016/04/21/get-started-bimlexpress/

 

Print Friendly, PDF & Email

Nur Fehlernummern (Error Code) in SSIS-Jobs

Leider werden in SSIS-Jobs nur unverständliche Fehlernummern hinterlegt. Manche Nummern sind auch im Internet nicht sofort zu finden.
Eine Lösung wäre, suchen nach der Fehlernummer in d. u. g. Seite:
https://docs.microsoft.com/en-us/sql/integration-services/integration-services-error-and-message-reference?view=sql-server-2017
Oder diese Liste einmal in eine eigene Datenbank hinterlegen und dann können diese Fehlermeldung in Jobs erweitert werden…

Print Friendly, PDF & Email

SQL: Agent Job anlegen

Das Anlegen von Agent Jobs sind eigentlich recht einfach. Aber gilt nicht für den allerersten Job;-). Aber es sind mehrere Schritte:

  1. Meist erst das Bereitstellen einer SSIS-Solutions. Dazu mehr unter „SQL: Deploy SSIS-Solution“
  2. Einmalig meist das Anlegen eines Credentials und eines Proxy. Dazu mehr unter „SQL: Credentials und Proxy“
  3. Dann das eigentliche Anlegen des Agent Jobs (hier unten im Text)
  4. Und das Testen…Und wo man die Ursachen von Fehlern findet (hier ganz unten im Text)

Möglicherweise fehlen noch Rechte:

Lösung: Rolle ssis_admin in SSISDB und Rolle db_ssisoperator in msdb hinzufügen. Falls dann sind aber diese „User“ zwar in den beiden Datenbank (jeweils unter: Security / Users) sichtbar, aber so mit einem „X“ oder „irgendwie deaktiviert“… Dann müssen diese User auch in der Datenbank hinzugefügt werden – wie im T-SQL Code:
(Bitte die meinuser und meinlogin anpassen – und häufig sind beide gleichen Buchstabenfolge. Speziell bei AD-Usern und AB-Gruppen.)

USE [SSISDB]
GO
CREATE USER [ meinuser ] FOR LOGIN [ meinlogin ] WITH DEFAULT_SCHEMA=[dbo]
GO
EXEC sp_addrolemember @rolename = 'ssis_admin', @membername = 'meinuser';
GO

USE [msdb]
GO
CREATE USER [ meinuser ] FOR LOGIN [ meinlogin ] WITH DEFAULT_SCHEMA=[dbo]
GO
EXEC sp_addrolemember @rolename = 'db_ssisoperator', @membername = 'meinuser';
GO
Print Friendly, PDF & Email

SSIS Job: OLEDB oder ADO.NET?

Was ist besser OLEDB oder ADO.NET?

Diese Frage kann ich nicht beantworten, aber in einem DataFlow kann zwar beides benutzt werden, aber wenn ADO.NET als Quelle benutzt wird, werden auch „char(…)“ immer weitergeleitet als „nchar(…)“ – Und wenn auch das Ziel unbedingt char(…) sein, müsste man das wieder zurückwandeln
Das Bedeutet für mich: Im Zweifel OLEDB…

4. Jun. 2019 Zusatz: 
Als Ziel wurde ein ADO.NET benutzt und mehrere hundert Sätze wurden ohne entsprechende Fehlermeldung nicht importiert. Genauer, wir hatten 1-4 Fehlermeldungen und viele fehlenden Sätzen – aber nicht „Bulk“! Wir hatten „Bulk“ nicht angehakt. 

 

Print Friendly, PDF & Email

„Full cache“ oder „Partial cache“ in dem „Lookup“ Control?

Was ist der Unterschied?

Der „Full cache“ wird (vermutlich) nur einmal geladen und während des Imports nicht mehr aktualisiert.
Dieser Cache wird komplett im Arbeitsspeicher abgelegt und nicht ausgelagert – kann also bei riesigen durchsuchten Tabellen zum „out of memory“ führen.
Und genauso wichtig: der Full Cache wird immer „Case sensitive“ genutzt – ein MSCRM dagegen meist „Case Insensitive“!

Der „Partial cache“ wird aktualisiert, wenn im erstem Moment im Cache kein Treffer ist, wird erst versucht ob das Satz schon in der DB ist und wenn das so ist, wird dieser Treffer im Cache eingetragen.

Das bedeutet für die normale Integration soll/muss meist „Partial cache“ genutzt werden, wenn Tabellen durchsucht werden, die möglicherweise neue bzw. andere Sätze enthalten!

 

Link/s:

https://blog.sqlauthority.com/2014/05/15/sql-server-ssis-look-up-component-cache-mode-notes-from-the-field-028/

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/0e9a7e11-7baa-4147-ab02-02f43bbe0a87/what-is-difference-between-full-cache-and-partial-cache-in-lookup-transformation-in-ssis?forum=sqlintegrationservices

https://blogs.msdn.microsoft.com/mattm/2008/11/23/lookup-pattern-incremental-persistent-cache-updates/

 

Print Friendly, PDF & Email

VisualStudio 2017: Text in Annotation ist unsichtbar?

Wieso ist der Text unsichtbar ist? Ursache weiterhin unbekannt, aber die Lösung: Die Annotation anklicken – solange man weiß wo die sein sollte;-(

Dann ist der Rahmen sichtbar und „rechter Mausklick“ im Annotation  den Dialog „Set Text Annotation Font…“ öffnen und nur mit „OK“ bestätigen…

Problem ist natürlich für einen Dritten, der keine Idee haben kann wo ein Text versteckt sein könnte…. 

Bisher ist mir keine sonstige Lösung bekannt.

Print Friendly, PDF & Email

Voraussetzung für das Anlegen von SSIS – SQL Agent Jobs

Vorab:
Um einen normalen SSIS-Job (*.dts oder *.ispac) als SQL Server Agent Job laufen zu lassen, muss ein Proxy festgelegt sein – und beim Anlegen eines Proxy werden die hinterlegten Credentials verlangt.
Also muss zuerst ein Credentials hinterlegt werden.

SQL Server Aufruf: „Security / Credentials“
Credentials name: SendDataMigrationStatusCred
Identity: „Domain User“ (e.g. Admin, SSISAdmin… ask the Support)

SQL Server Aufruf: „SQL Server Agent / Proxies“:
Proxy name: SendDataMigrationStatusProxy
Credentials name: SendDataMigrationStatusCred
Active to he following subsystems: SQL Server Integration Services Packages
(Wir wollen üblicherweise diesem Proxy nur das Erlauben, was unbedingt nötig ist – also nur ein einziges Häkchen)

SQL Server Aufruf: „SQL Server Agent / Jobs“
Anlage eines neues Agent Jobs:  DeltaImport
Der Job hat nur einen einzigen Step (in diesem Beispiel):
Hinweis: Dieses Beispiel nutzt einen *.ispac Job, der im SSIS-Catalog hinterlegt ist.

„Schedules“ oder andere Einstellungen können an dieser Stelle festgelegt werden.

Oder es werden die Schedules nicht hier definiert, sondern als „Maintenance Plans“. Das erlaubt mehr Möglichkeiten wie ein „Controlling“. Damit können bei Abbruch eines Agent Jobs andere Agent Jobs aufgerufen werden oder bestimmte Einstellungen zurückgesetzt werden bevor der geplante Agent Job gestartet wird.

 

 

Management / Maintenance Plans
Check DeltaImport“

Print Friendly, PDF & Email

DataTools sind plötzlich verloren – was kann los sein?

Das Problem erwischt uns bei uns seit kurzer Zeit ganz kalt:
Von heute auf morgen kann man nicht mehr Integration Service Projekte aufrufen.

Vorab: Die Ursache ist schlicht und einfach war das „Disable the extension“ anzuklicken – Bitte: Maximal darf „Never Show this message again“ angeklickt werden, oder ganz rechts das „X“.

Was war passiert?

Als das Visual Studio gerade einmal neu gestartet wurde… und nichts geht mehr!


Auch ein „vollständiges VisualStudio“ und „DataTools“ oder nur die „DataTools“ Update, Repair, Neuinstallation… hat bisher gar nichts gebracht– höchstens Zeit, Nerven oder ein noch kaputteres System!

Lösung im Visual Studio: Einfach dieses „Microsoft Integration Service Projekts“ wieder „enablen“:
(Aufruf über Menü im VS: Tools / Extensions an Updates / „Microsoft Integration Service Projekts“)

Dann muss man (derzeit) das Visual Studio leider noch einmal starten und weil die Anzeige scheinbar weiterhin so kaputt ist, muss man jetzt die Projekt einfach „reloaden“:

Wie wurde das überhaupt disabled? Ja, die Ursache ist der Empfehlung  von Microsoft zu folgen und einfach die „Extension“ zu disablen (siehe ganz oben den gelben Balken;-).

Diese Quelle hilft (aber zeigte nicht die Ursache):
https://stackoverflow.com/questions/49310399/microsoft-datatransformationservices-wizards-error-in-vs-2017

Print Friendly, PDF & Email

Wozu Integrationuser, Scribeuser oder SSISUser?

Wozu Integrationuser, Scribeuser oder SSISUser? Und wenn das etwas bringt was kostet das und wie kann das erreichen?

Wozu? Bei Integration von zwei Systemen müssen alle Änderungen jeweils des Anderen bringen. Und solche Änderungen können die Änderungen dieses speziellen „Integrationuser“ herausgefiltert werden.

Was kostet das? Im MSCRM kann das ein kostenfreier User sein – solange dieser „Non-Interactive“ ist. Gilt für on-premise und Online.

Wie kann man erreichen? Diesen User Neuanlegen und dabei so einstellen:

  • Lizenztyp: „Professional User“
  • Rolle: „Systemadministrator“
  • Accessmode: „Non-Interactive“

Dabei kann es sein, bei einem MS Dynamic 365 einen zeitliche Aspekt zu beachten. Hier fand ich einen gute Beschreibung:
https://community.dynamics.com/crm/b/innovatingoncrm/archive/2014/09/25/crm-online-non-interactive-user

 

Print Friendly, PDF & Email

SQL Server und VisualStudio: 32 oder 64 bit? Welches Target ist möglich?

Wenn man einen einzigen SQL Server frisch installiert hat, dann scheint es einfach sein. Aber falls man auf eine unbekanntes System kommt, muss man selber schauen:

--SQL Serverversion:
Select @@version

Aber wenn man dann per VisualStudio und/oder den Data Tools Jobs anlegt, dann muss meist das „Target“ korrekt angepasst werden und muss mehr hinterfragen:

<nnn> Version 32/64bit
140 SQL Server 2017
130 SQL Server 2016
120 SQL Server 2014
110 SQL Server 2012

Um 32 bit oder 64 bit zu entscheiden, muss im Filesystem nachgeschaut werden und kontrolliert werden, ob eine DtsDebugHost.exe vorhanden ist:

C:\Program Files (x86)\Microsoft SQL Server\<nnn>\DTS\Binn\

oder

C:\Program Files\Microsoft SQL Server\<nnn>\DTS\Binn\

Print Friendly, PDF & Email

SSIS/Kingsway MSCRM-Lookup per ScriptComponent

 

Verweise:

//KingswaySoft.DynamicsCrmServices   
//Pfad: C:\WINDOWS\assembly\GAC_MSIL\KingswaySoft.DynamicsCrmServices\1.0.0.0__705df8e0751bcea7\KingswaySoft.DynamicsCrmServices.dll
//KingswaySoft.IntegrationToolkit.DynamicsCrm   
//Pfad: C:\Program Files (x86)\Microsoft SQL Server\120\DTS\PipelineComponents\KingswaySoft.IntegrationToolkit.DynamicsCrm.dll

Namespaces im Code:

using KingswaySoft.DynamicsCrmServices.Soap2011.OrganizationService;
using KingswaySoft.DynamicsCrmServices.Soap2011.OrganizationService.Messages;
using KingswaySoft.DynamicsCrmServices.Soap2011.OrganizationService.Metadata;
using KingswaySoft.DynamicsCrmServices.Soap2011.OrganizationService.Query;
using KingswaySoft.IntegrationToolkit.DynamicsCrm;

Code:

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        /*
         * Add your code here
         * 
         * http://www.kingswaysoft.com/blog/2013/06/24/Writing-Script-Component-or-Script-Task-using-CRM-Connection-Manager
         */

        //var connMgr = this.Connections.Dynamics365;
        //var conn = (CrmConnection)connMgr.AcquireConnection(null);

        var connMgr = this.Connections.Dynamics365;
        var connectionString = (string)connMgr.AcquireConnection(null);
        var conn = new CrmConnection(connectionString);

        var orgService = (IOrganizationService)conn.GetCrmService();

        //Select parentcustomerid from contact where contact = '00000-0000000000-00000-00000-0000'
        var inputValue = Row.contactid;  // input0: Field "contactid"
        var retrievedEntity = orgService.Retrieve("account", parmInputvalue, new ColumnSet("parentcustomerid"));
        var outputValue = retrievedEntity.GetAttributeValue("parentcustomerid");
        Row.parentcustomerid = outputValue;  // output0: new Field "parentcustomerid"
    }
</pre

 

Print Friendly, PDF & Email

KingswaySoft „Integrations Toolkit“ Parallelität

Das Kingsway „SSIS Integrations Toolkit for Dynamics 365“ kann seit den neuen Versionen die Parallelität ein- bzw. ausschalten:

In selbst umgesetzten Importe wurde die Parallelität jedoch komplett anderes umgesetzt.

Einer der wichtigsten Punkte war wie Klarheit, welche Sätze Importiert wurde und welche nicht. Es wurden die Sätze z. B. nach dem Erstem Buchstaben des Namens in eigene Jobs verteilt und damit 26 oder 27 Jobs (A-Z und andere Zeichen) gleichzeitig erlaubt. Technisch sind diese vielen Jobs alle nur ein Einziger, jedoch Aufgerufen mit Parametern. Der klare Vorteil, wenn bestimmte Buchstaben vollständig durchlief, mussten nicht alle neu importiert, sondern fehlerfreie Buchstaben konnten deaktiviert werden und mussten damit nicht erneut importiert. Immer wenn einmal die Menge groß wird und damit mehrere Millionen Sätze importiert werden müssen, kommt der Faktor „Laufzeit“ ins Spiel und dann können Importe auch überraschend abgebrochen aus anderen Gründen des Imports-Job selber. Und die leichte Übersicht spart viel Analyse und dann können die fehlende Jobs viel schneller wieder gestartet werden.

In der Realität müssen die Anzahl der parallele Jobs passen zu den Kapazitäten vom Import-Server, Frontserver und dem SQL Server. Wenn Virtuelle Server benutzt werden, können speziell diese zu den Initial Importen kurzfristig anders konfigurieren als in der Produktivzeit.

Print Friendly, PDF & Email

Merge von MSCRM-Sätzen per Kingswaysoft

Merge per Kingswaysoft Nötig ist dazu das normale „SSIS Integration Toolkit for Microsoft Dynamics 365“ und nicht das „SSIS Productivity Pack“. Link: https://www.kingswaysoft.com/products/ssis-integration-toolkit-for-microsoft-dynamics-365/help-manual/crm/destination
CRM Destination Component Editor – Action (Nur möglich bei account / contact / lead / incident):

Merge action is only possible with the following CRM entities:

  • account
  • contact
  • lead

When Merge action is chosen, you will be working with the following 4 columns with the first two columns being required in order to merge a pair of CRM records:

  • targetid – the record that you would like to retain.
  • subordinateid – the record that is going to be retired, in which case, the record itself will be deactivated and all child records will be re-parented underneath the retained record which is specified by the targetid input column.
  • CoalesceNonEmptyValues (since v8.0) – specify a Boolean value to determine whether to coalesce non-empty value during the Merge operation. When the input value for this field is true, the destination component will try to coalesce non-empty values during the Merge operation. For example, when this is set to true, if the subordinate record has a value for a particular field, but the target record does not have a value (usually in the format of NULL), then the value from the subordinate record will be copied over to the target entity record. The default behavior is false if this field is not mapped.
  • PerformParentingChecks (since v8.0) – specify a Boolean value to determine whether a parenting check is needed during the Merge operation. Set to Ture to check if the parent information is different for the two entity records, otherwise, False

 

Print Friendly, PDF & Email

Darstellen der Rechte im MSCRM…

Es können mehrere Rechte im MSCRM für eine Person bzw. Team und jede Entität und und und …
Die Rechte sollten klar festzustellen, aber gelegentlich gibt es Ausnahmen. Siehe unten!

Beispiel ein Import meldet die Fehlermeldung mit der Nummer 262153.
Ein Binäre Darstellung gibt:

0100 0000 0000 0000 1001

…(siehe Link)…
But wait, There is no Access Right with a binary value of 1000. Since I’ve been unable to find any other documentation, my guess is that something on our installation (that was an upgrade from a CRM 4.0 server) still has a reference to the CRM 4.0 enum values in which AppendToAccess is actually 8 (1000) rather than 16 (0001 0000).

Using that assumption and the table above, 262153 is made up of ShareAccess, AppendToAccess, and ReadAccess. This means the user has to have sufficient Access Levels for Share, Append, and Read privileges of the entity, in order to successfully perform the requested operation.

Quelle:

http://dotnetdust.blogspot.com/2014/03/how-to-interpret-accessrights-numbers.html

Print Friendly, PDF & Email

Läuft gerade ein SSIS Job?

Das kann per SQL festgestellt werden:

/*per SQL die "laufende SSIS package executions" 
bestimmen:*/
/*Select status, start_time as start_time2, 
         folder_name, project_name ,* 
  from SSISDB.catalog.executions 
  where end_time is null 
  order by start_time desc
*/
Select top 5 status, start_time as start_time2, 
   folder_name, project_name ,* 
from SSISDB.catalog.executions 
order by start_time desc
/*
Die richtige execution_id auswählen und als 
@operation_id eintragen 
(typisch MS - muss ja auch keiner Logik folgen):
Exec catalog.stop_operation  @operation_id =  12210
Exec catalog.stop_operation  @operation_id =  12211
*/


…oder im SSMS (Management Studio) herausfinden:

per SSMS-Dialog:
Rechte Maus auf „Integration Services Catalogs \ SSISDB“ und „Active Operations“ auswählen…Dort die gewünschte Package auswählen und auf „STOP“ klicken.

Links:
https://sabigdata.wordpress.com/2015/02/12/stop-ssis-package-execution-in-ssis-catalog/

Print Friendly, PDF & Email

Kingswaysoft „SSIS Integration Toolkit for Microsoft Dynamics 365“ für SQL Server 2014 aber nicht SQL Server 2017

Wenn erst später ein neuer SQL Server installiert wird, und dann z.B. als Ziel des Visual Studio Projektes jetzt auf „SQL Server 2016“ wechselt wird, dann sind die Kingswaysoft Controls nicht mehr vorhanden!

Versuche:
Repair oder Change des „SSIS Integration Toolkit for Microsoft Dynamics 365“ scheidet wenn das Toolkit weiterhin im Visual Studio sichtbar ist.



Lösung:
Deinstallieren des „SSIS Integration Toolkit for Microsoft Dynamics 365“ und einfach dann wieder installieren. Eine ggf. installierte Lizenz ist dann weiterhin gültig (soweit diese vorher auch gültig war;-)

Print Friendly, PDF & Email

Voraussetzungen für Importe per SSIS

Voraussetzungen für Importe per SSIS: 1) DataTools installieren oder VisualStudio + DataTools for VS 2) Kingswaysoft installieren: „SSIS Integration Toolkit for Microsoft Dynamics 365“ Automatisierung: Nur wenn Lizenz installiert ist 3) Zugriff auf den „Quell-SQL Server“ und/oder Sonstige Quellen 4) Zugriff auf das Ziel „MS Dynamics 365“ bzw. MSCRM 5) Zugriff auf einen „Import-SQL Server“ Versionen? Express: Automatisierung als BATCH Sonst (Standard, Enterprise, ..): Automatisierung per Agent Jobs und/oder SSIS Integration Service und/oder BATCH 6) Datenbank „FOD_StagingDB“ (Angelegt von Importen für Logging, Crossreference, Errorhandling, …) (Benutzt bei Importen per SSIS/Kingswaysoft) Hinweise: • Abhängigkeiten bei Zugriffen von „SELECT – Zugriffe mit Daten mit zwei oder mehreren unterschiedlichen Server kann bestehen z.B. Unterschiede von Daten vom Quell- und Ziel-Server zu bestimmen… • Wie sollen bei Fehlern reagiert werden? Gar kein Errorhandling oder sollen alle Error „wieder vorgelegt werden“ bis Fehler gelöst ist? • Migration oder Integration? ODFR hat bisher keine Migration erlebt! • Unterschied zwischen Full-Import und Delta-Import? Delta-Importe können so geschrieben werden, dass z.B. am jedem 1. Samstag auch Full-Importe erlauben! • Können wir E-Mails an Kd. und uns senden bezüglich bestimmter Fehler/Abbrüche? ODFR empfiehlt dies einzurichten

Print Friendly, PDF & Email