Indizes aktualisieren….

/**************************************************************
 Bitte als SYSDBA anmelden.

 DEFRAGMENTATION von Indizes - es ist nicht notwendig zusätzliche
 Bibliotheken aufzurufen

 ACHTUNG: HIER SIND ZWEI STELLEN FREIZUSCHALTEN!!!

 HINWEIS: die richtige DB festlegen
   
***************************************************************/
use   --FranksDB
go
--Hier ist bewusst ein Fehler eingebaut, damit die DB korrekt festgelegt ist


--DEFRAGMENTATION:
SET NOCOUNT ON;
DECLARE @objectid int;
DECLARE @indexid int;
DECLARE @partitioncount bigint;
DECLARE @schemaname sysname;
DECLARE @objectname sysname;
DECLARE @indexname sysname;
DECLARE @partitionnum bigint;
DECLARE @partitions bigint;
DECLARE @frag float;
DECLARE @command varchar(8000);
-- ensure the temporary table does not exist
IF EXISTS (SELECT name FROM sys.objects WHERE name = 'work_to_do')
	DROP TABLE work_to_do;

--diesen parameter "DB_ID()" darf man nicht benutzten - wieso auch immmer
DECLARE @DBID bigint;
select @DBID=DB_ID();

-- conditionally select from the function, converting object and index IDs to names.
SELECT	object_id AS objectid,
	index_id AS indexid,
	partition_number AS partitionnum,
	avg_fragmentation_in_percent AS frag
INTO work_to_do
FROM sys.dm_db_index_physical_stats (@DBID, NULL, NULL , NULL, 'LIMITED')
WHERE avg_fragmentation_in_percent > 10.0 AND index_id > 0;
-- Declare the cursor for the list of partitions to be processed.
DECLARE partitions CURSOR FOR SELECT * FROM work_to_do;

-- Open the cursor.
OPEN partitions;

-- Loop through the partitions.
FETCH NEXT
	FROM partitions
	INTO @objectid, @indexid, @partitionnum, @frag;

WHILE @@FETCH_STATUS = 0
	BEGIN;
	SELECT @objectname = o.name, @schemaname = s.name
	FROM sys.objects AS o
	JOIN sys.schemas as s ON s.schema_id = o.schema_id
	WHERE o.object_id = @objectid;

	SELECT @indexname = name FROM sys.indexes WHERE object_id = @objectid AND index_id = @indexid;

	SELECT @partitioncount = count (*) FROM sys.partitions  WHERE object_id = @objectid AND index_id = @indexid;

	-- 30 is an arbitrary decision point at which to switch between reorganizing and rebuilding
	IF @frag <= 10.0
	BEGIN;
		SELECT @command = 'Index: [' + @indexname + '] ON [' + @schemaname + '].[' + @objectname + ']...OK';
	END;

	IF @frag > 10.0 AND @frag <= 30.0
	BEGIN;
		SELECT @command = 'ALTER INDEX [' + @indexname + '] ON [' + @schemaname + '].[' + @objectname + '] REORGANIZE';
		IF @partitioncount > 1
			SELECT @command = @command + ' PARTITION=' + CONVERT (CHAR, @partitionnum);
		--EXEC (@command);  -----HIER FREISCHALTEN!!!!!
	END;

	IF @frag > 30.0
	BEGIN;
		SELECT @command = 'ALTER INDEX [' + @indexname +'] ON [' + @schemaname + '].[' + @objectname + '] REBUILD';
		IF @partitioncount > 1
			SELECT @command = @command + ' PARTITION=' + CONVERT (CHAR, @partitionnum);
		--EXEC (@command); -----HIER FREISCHALTEN!!!!!
	END;
	PRINT 'Executed ' + @command;

	FETCH NEXT FROM partitions INTO @objectid, @indexid, @partitionnum, @frag;
END;
-- Close and deallocate the cursor.
CLOSE partitions;
DEALLOCATE partitions;

-- drop the temporary table
--Select * from work_to_do
IF EXISTS (SELECT name FROM sys.objects WHERE name = 'work_to_do')
	DROP TABLE work_to_do;

-- FERTIG Meldung
PRINT 'All Indices was reorganized or rebuilded. '

macOS als virtuelle Maschine auf einem Windows-Host….

Quelle/n:
https://www.nicksherlock.com/2018/06/installing-macos-mojave-on-proxmox/
https://techsviewer.com/install-macos-mojave-vmware-windows/
Der zweite Link noch einmal als PDF:
How to Install macOS Mojave Final on VMware on Windows PC
Hinweis: Alle dieser Links „KÖNNTEN“ benutzt werden um ein macOS auf einen „nicht Apple Rechner“ zu bringen – ich kann das jedoch nicht empfehlen und schon gar nicht, wenn unsichere Quellen genutzt werden um etwas auf einen Rechner zu installieren.

macOS Mojave…Mojave.app=>Mojave.dmg=>Mojave.iso

Um eine „Mojave.iso“ Datei (z.B. um dies in VMware/Fusion oder anderen virtuellen Maschinen installieren oder dies auf einem USB-Stick zu bringen, müssen Sie das über den Apple „App Store“ downloaden.
Irgendwann sind die knapp über 6 GB heruntergeladen und dann fängt Apple an das zu installieren – ab diesem Dialog die automatische Installation beenden.
Entweder „option+command+Esc“


oder im Menü des Installers „beenden“.
Jetzt sollte sich diese 6 GB im Order „Programme“ finden als „macOS Mojave installieren.app“

Die gewünschte *.iso Datei habe ich erstellt nach dem u.g. Link und die .sh Datei auch gleich gesichert – die die Angaben der Ordner musste ich anpassen:
create_iso_mojave.sh

Bitte die Endung „.txt“ wieder entfernen. Und um das Script zu starten bitte eine Shell(=Terminal) öffnen und:

sh pfad>/datei.sh

Quelle:
https://www.nicksherlock.com/2018/06/installing-macos-mojave-on-proxmox/
Hinweis: Dieser Link „KÖNNTE“ auch benutzt werden um ein macOS auf einen „nicht Apple Rechner“ zu bringen – ich kann das jedoch nicht empfehlen und schon nicht, wenn unsichere Quellen genutzt werden um etwas auf einen Rechner zu installieren.

Microsoft Access Database Engine 2016 Redistributable

Excel-Dateien in ein MS SQL Server importieren ist war schon eine zeitfressende Nervigkeit mit den unterschiedlichen „Störungen“ (einmal positiv beschrieben)…

Wie auch immer dieser o.g. Fehler gibt’s immer wieder einmal vor…
Die Lösung wird ja eigentlich aus der Fehlermeldung vorgibt – aber 32 oder 64 bit? Oder welche Version soll man nehmen?

Link:https://www.microsoft.com/en-us/download/details.aspx?id=54920

Aber diese Fehler sind fast programmiert:

Falls MS Office bereits installiert ist, dann feststellen ob 32 oder 64 bit installiert ist und dann
muss die Installation „/quiet“ erfolgt…
Vorab: Scheinbar wird vom SQL Import/Export-Assistent nur die 32bit Version erkannt! Also ich benötigte immer nur die 32bit Version!

Zitat (o.g. Link):
If Office 365 is already installed, side by side detection will prevent the installation from proceeding. Instead perform a /quiet install of these components from command line. To do so, download the desired AccessDatabaseEngine.exe or AccessDatabaeEngine_x64.exe to your PC, open an administrative command prompt, and provide the installation path and switch Ex: C:\Files\AccessDatabaseEngine.exe /quiet

SSRS: „multi value“ Parameter Übergeben an Subreports und Datasets…

Mir sind zwei etwas unterschiedliche Ansätze wichtig. Speziell die Variante 2 ist wichtig wenn große Mengen von Sätzen in einem Parameter benutzt wird.

Variante 1

=join(Parameters!.Value,",")

und kann im Dataset an beliebigen Stellen benutzt werden – vor allem als zwischen Variable im SQL-Code des Dataset benutzt werden.

Variante 2

Parameter in Datasets:
=Parameters!MyParamName.Value

Achtung nicht das „(0)“: =Parameters!MyParamName.Value(0)
Aber im Dataset muss der Parameter direkt so genutzt werden und nur bedingt mehrfach oder im SQL-Code an interne Variablen zu übergeben:

...
WHERE values IN (@parameter)
...

Link/s:

https://stackoverflow.com/questions/13725622/passing-multivalue-parameter-to-a-subreport

https://docs.microsoft.com/de-de/sql/reporting-services/report-design/add-a-multi-value-parameter-to-a-report?view=sql-server-2017

SQL: Index über ein View? Schemabinding ist die Lösung – aber nicht immer…

Schemabindung ist sehr interessant, weil dann komplexe Views plötzlich schnell aufgerufen werden können. Aber hat auch Voraussetzungen und sogar Nachteile haben. Z.B. sind dann alle Tabellen, die auf den View zugreifen gesperrt , gegen struktureller Änderungen. Das bedeutet, wenn ein neues Feld in die Tabelle soll, muss der/die View/s gelöscht werden und dann wieder angelegt werden. Die alle Indizes, dieser betroffenen View/s müssen dann auch wieder angelegt werden.

Voraussetzungen sind recht komplex und sind in der Quelle reichlich beschrieben. Aber es wird keine Fehlermeldung geben, lediglich kann es sein, dass der „View with schemabinding“ lediglich die Daten nicht persistent speichert.

Aber damit man ganz schnell feststellen kann welche SET-Options im System eingerichtet sind ist in einer „neuen“ SSMS-Query hiermit leicht abfragen:

SELECT 
SESSIONPROPERTY ('NUMERIC_ROUNDABORT')  as "NUMERIC_ROUNDABORT soll 0",
SESSIONPROPERTY ('ANSI_PADDING') as "ANSI_PADDING soll 1", 
SESSIONPROPERTY ('ANSI_WARNINGS') as "ANSI_WARNINGS soll 1", 
SESSIONPROPERTY ('CONCAT_NULL_YIELDS_NULL') as "CONCAT_NULL_YIELDS_NULL soll 1",
SESSIONPROPERTY ('ARITHABORT') as "ARITHABORT soll 1",
SESSIONPROPERTY ('QUOTED_IDENTIFIER') as "QUOTED_IDENTIFIER soll 1" ,
SESSIONPROPERTY ('ANSI_NULLS') "ANSI_NULLS soll 1"

https://docs.microsoft.com/de-de/sql/relational-databases/views/create-indexed-views?view=sql-server-2017

SQL: Mehrere Sätze als einzelner String zusammenfassen

Weil die neue STRING_AGG() nicht mehr als 8000 Zeichen akzeptiert, muss man sich weiterhin behelfen:

DECLARE @T TABLE (t uniqueidentifier)
Insert into @T
Select '19324C4B-83AE-E211-83C9-005056B05853'
union all 
Select '99324C4B-83AE-E211-83C9-005056B05800'

--Mehrere Sätze als einzelner String zusammenfassen:
SELECT STUFF(
 				(
				SELECT ','+CAST(t as varchar(38))
				FROM @t
				FOR XML PATH ('')
				)
			,1,1,'')

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. 

 

Liste aller ISO Normen und deren Bedeutung

Die ISO Normen sind international vereinbart und wird bei der „International Organisation for Standardization“ verabschiedet.

Leider werden diese Regeln der Normen hier nur kostenfrei veröffentlicht, aber nur kostenpflichtig die z.B. „ISO 4217“ Die Liste aller Währungen die das Kürzel „EUR“ der Europäischen Währung und die Unterteilung als 100 Cent sind 1 EUR enthält.

Link/s:
https://www.iso.org/maintenance_agencies.html

Dynamisches SQL – Beispiel „Anzahl von Sätzen allen Tabellen“

Gelegentlich möchte man sich T-SQL generieren lassen und dann auch noch starten zu lassen. Als Beispiel ist eine Kontrolle, ob wirklich alle Tabellen „truncated“ wurde…. Manchmal kommt noch eine Tabelle hinzu und schon wird vergessen dass auch diese neue Tabelle auch geleert sein sollte. Das Beispiel soll nur zeigen, wie es möglich ist – der Befehl STRING_AGG funktioniert erst ab SQL Server 2016 (Vorher wurde XML in dem SQL eingebaut):

DECLARE @Schema nvarchar(64) = 'dbo'
DECLARE @SQL nvarchar(max)
DECLARE @ParmDefinition nvarchar(max) = '@CountOUT int OUTPUT'
DECLARE @Count bigint
Select @SQL='SELECT @CountOUT = '+STRING_AGG('(Select count(1) from ['+[schemas].[name]+'].['+[tables].[name]+'])','+')
from sys.tables tables left outer join sys.schemas schemas on schemas.schema_id=tables.schema_id 
where [tables].[type]='U' 
and [schemas].[name] like @Schema
EXEC sp_executesql @SQL, @ParmDefinition, @CountOUT=@Count OUT
Select @Count as TotalRows

Hinweis: Der Befehlt STRING_AGG() darf jedoch maximal 8000 Zeichen produzieren – daher wird dies im Zweifel nicht benutzt werden kann!

Link/s:
https://docs.microsoft.com/de-de/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql?view=sql-server-2017

„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/

 

Win10 Desktopsymbole…

Die Desktopsymbole können in Win 10 festgelegt werden in der „Personalisierung“…Zu finden in als rechter Mausklick auf dem Desktop und dort „Anpassen“ auswählen:

Und dann die Desktopsymboleinstellungen anklicken:

DNS Cache leeren

So löschen Sie den DNS Cache und die gespeicherte Liste der Domänennamen
Rufen Sie mit [Win +R] den Ausführen-Dialog auf.
Geben Sie cmd ein und drücken die Eingabetaste.
Nun öffnet sich ein Fenster zur Eingabe von Kommandozeilen-Befehlen.
Geben Sie hier ipconfig /flushdns ein und drücken Sie die [Return]-Taste.

Testen kann man ob die IP-Adresse eines Rechners finden kann
Eine Shell öffnen
Geben Sie hier rdfo ein und drücken Sie die [Return]-Taste.

Link/s:
https://www.tippscout.de/windows-dns-cache-loeschen_tipp_2292.html

Windows: Test-Dateien schnell erzeugen

Testdateien benötigt man gelegentlich um z.B. um die Geschwindigkeit von „Copy-Befehlen“ zu testen oder einfach um einen Platz sicherstellen um

fsutil file createnew C:\dummy.tmp 1073741824

1 MB = 1048576 Bytes
100 MB = 104857600 Bytes
1 GB = 1073741824 Bytes
10 GB = 10737418240 Bytes
100 GB = 107374182400 Bytes
1 TB = 1099511627776 Bytes
10 TB = 10995116277760 Bytes

Quelle:
http://www.winforpro.com/einfach-groe-test-dateien-erstellen/

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.

SQL Server Icons mit blauem Fragezeichen?

Es ist zwar nicht weiter wichtig, aber wenn es irritiert oder konkrete Fragen gestellt wird, habe auch ich gesucht und wurde fündig….

Es ist lediglich der SSMS nicht in der Lage den Status einzelner Dienste des angebundenen fernen SQL Servers

Link 1: https://dba.stackexchange.com/questions/176666/blue-icon-with-question-mark-what-does-it-mean

Hier wird klar der Port 135 des Firewall und es ist von Microsoft mehr Information zu beschaffen:

Link 2: https://docs.microsoft.com/en-us/sql/sql-server/install/configure-the-windows-firewall-to-allow-sql-server-access?view=sql-server-2017#BKMK_port_135

Power BI – Linksammlung

Linksammlung:

Microsoft Kurs:

https://www.edx.org/course/analyzing-visualizing-data-power-bi

 

Gravierende Änderung im Power BI seit März 2023

https://www.youtube.com/watch?v=5LhYxgtBToQ

SQL Server: Welcher Port wird vom SQL Server genutzt?

Es ist zwar möglich die alle Ports festzustellen
netstat -ano
Aber das macht eine zu lange Liste…
Kurzer Test ob der Standard Port 1433 festgelegt ist:
netstat -ano | findstr 1433
Aber wenn das nichts bringt, dann den SQL Server selber fragen:

SELECT DISTINCT 
    local_tcp_port 
FROM sys.dm_exec_connections 
WHERE local_tcp_port IS NOT NULL 

Weiterbildung ist wichtig und sollte bezahlbar sein!

Ich bekomme regelmäßig Angebote über Webcast-Schulungen per Email. Die Schulungen die ich angeschaut hatte waren alle kostenlos und sind völlig ohne Zeitvorgaben! Lediglich muss man ca. 100 EUR zahlen wenn man eine „Urkunde“ über den Kurs haben will. Alle Themen zu finden unter:
https://www.edx.org/

Des weiteren habe ich interessante Kurse gefunden:

https://www.udemy.com/

https://www.whizlabs.com/

Speziell für iOS Kurse gab es die Website:
https://members.codingtutor.de/jetzt-loslegen/
Aber vielleicht nicht wirklich preiswert und die (schriftlich!) versprochene „persönliche“ Unterstützung gibt es nicht einmal per E-Mail. Aber der Trainer, erklärt die Themen doch überdurchschnittlich gut – und der Kurs ist in deutsch!

 

DUNS Nummern….

Eine DUNS®-Nummer sind 9-stellige, weltweit eindeutige Nummern. 

Es kann festgestellt zu welchem Unternehmen die DUNS®-Nummer gehört und abgefragt werden über der UPIK®-Plattform .Hierzu muss die DUNS®-Nummer sowie das Land, in welchem das gesuchte Unternehmen seinen Geschäftssitz hat, eingegeben werden. Umgekehrt kann auch anhand der Adressdaten eines Unternehmens die zugehörige DUNS®-Nummer gesucht werden.

DUNS®-Nummern können von Unternehmen kostenlos auf der UPIK®-Plattform beantragt werden. DUNS®-Nummern werden nicht an Privatpersonen vergeben.

DUNS®-Nummern wurden 1962 von der Firma Dun & Bradstreet eingeführt und heißen eigentlich D&B D-U-N-S® Nummer.

Links:

https://www.upik.de/

https://ecosio.com/de/blog/2016/06/17/Was-ist-eine-DUNS-Nummer/

 

 

 

 

T-SQL Settings: LANGUAGE, Dateformat und DATEFIRST

Immer wieder wäre es schön kurzeitig andere Einstellungen zu nutzten. Speziell damit T-SQL Batches sehr unabhängig arbeiten können:

--Save the old / usual settings:
DECLARE @DATEFIRST int = @@DATEFIRST
DECLARE @LANGUAGE nvarchar(100) = @@LANGUAGE
DECLARE @DATEFORMAT nvarchar(100) = (
   select	s.date_format 
   from	sys.dm_exec_sessions s 
   where	s.session_id = @@SPID
   )
--Set new temporary Settings:
SET DATEFIRST 7;
SET DATEFORMAT mdy;
SET LANGUAGE US_ENGLISH;
…
…
--Restore the saved settings:
SET LANGUAGE @language;  /*Germany: "Deutsch" */
SET DATEFIRST @DATEFIRST;  /*Germany: "dmy" */
SET DATEFORMAT @DATEFORMAT;  /*Germany: "1" */

ACHTUNG: Variablen sind alle verloren nach jedem „GO“ – auch wenn ein GO in einem Kommentar seht ist das meist verloren!
Wie auch immer, solche Einstellungen gelten ohnehin nur in aktuellen Session.

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“

Notepad++ mit Plugin „Compare“

Die derzeit aktuellste Notepad++ hat die Version 7.7.1
Quelle: https://notepad-plus-plus.org/download/

und es können viele Plugins ausgewählt werden und darunter ist wieder „Compare“.


Es galt im 2018:

Die derzeit aktuellste Notepad++ hat die Version 7.5.8
Quelle: https://notepad-plus-plus.org/download/

Hier entweder 32 oder 64bit auswählen, installieren und das unbedingt sich „merken“ 😉 Das zusätzliche Plugin „Compare“ ist seit der Version 7.5 nicht mehr im Notepad++ und kann auch nicht mehr ohne weiteres nachinstalliert werden. Gründe lag an Werbung in dem „Plugin Manager“. Wen es interessiert: https://notepad-plus-plus.org/news/notepad-7.5-released.html

Dann den Plugin Manager extra installieren (bisher bekam ich keine Werbung) und mehr Anleitung unter: http://bruderste.in/npp/pm/#install und Download unter: https://bruderste.in/npp/pm/update.htm

Hier wurde leider nicht schön angegeben welche Variante der Plugin Manager die richtige wäre und habe von https://github.com/bruderstein/nppPluginManager/releases die Version „PluginManager_v1.4.11_UNI.zip “ heruntergeladen. Dieses Zip-Datei auspacken und die Datei „PluginManager.exe“ in den Order legen, wo das „npp.exe“ ist (z.B. „C:\Program Files (x86)\Notepad++“) und die „gpup.exe“ in den Unterordner „updater“.

Dann das Plugin „Compare“ herunterladen (richtige Version – sonst gibt’s mehrere Probleme) und auspacken. Quelle: https://github.com/pnedev/compare-plugin/releases/tag/v2.0.0

Nun Notepad++ als Administartor(!) starten und unter Setting/Import/ImportPlugin(s)… den gerade ausgepackten Ordner auswählen (das Notepad++ läuft als Administrator und  möglicherweise liegt der ausgepackter Datei nicht an der erwarteten Stelle;-) – also „ComparePlugin.dll“ auswählen und das war es. Notepad++ beenden und normal starten….z.B. zwei Dateien auswählen und über rechte Mausklick „Notepad++“ starten. Und unter Plugin sollte „Compare“ bereitstehen.

 

T-SQL: Fehlende Indizes…

Häufig scheinen Abfragen überraschend langsam sein, oder immer langsam werden…. Als Tunings-Maßnahme lohnen sich meist als erster Versuch Indizes in der Datenbank. Lediglich sind bestimmte Rechte für der u. g. TSQL-Code notwendig


-- Missing Index Script
-- Original Author: Pinal Dave (C) 2011
-- verändert von Frank Odenbreit 2011/2013/2016

/*
Es werden zwar die 50 wichtigsten Indizes geholt und diese nachher sortiert nach ihrem Namen
(Ähnlichkeiten sollte man erkennen können, ggf. anpassen bzw. aus kommentieren)
*/


Select *
from (
SELECT TOP 50
	dm_mid.database_id AS DatabaseID,
	dm_migs.user_seeks as user_seeks,
	dm_migs.avg_user_impact as avg_user_impact, 
	dm_migs.avg_user_impact * (dm_migs.user_seeks+dm_migs.user_scans) AS Avg_Estimated_Impact,
	dm_migs.last_user_seek AS Last_User_Seek,	object_name(dm_mid.object_id) AS [TableName],
	--*,

	'CREATE NONCLUSTERED INDEX [ndx' + object_name(dm_mid.object_id) + '__'
	+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.equality_columns,''),', ','_'),'[',''),']','') +
	CASE
	WHEN dm_mid.equality_columns IS NOT NULL AND dm_mid.inequality_columns IS NOT NULL THEN '_'
	ELSE ''
	END
	+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.inequality_columns,''),', ','_'),'[',''),']','')
	+ ']'
	
	+ ' ON ' + dm_mid.statement		+ ' (' + ISNULL (dm_mid.equality_columns,'')
	+ CASE WHEN dm_mid.equality_columns IS NOT NULL AND dm_mid.inequality_columns IS NOT NULL THEN ',' ELSE
	'' END
	+ ISNULL (dm_mid.inequality_columns, '')
	+ ')'
	
	+ ISNULL (' INCLUDE (' + dm_mid.included_columns + ')', '') 
	+ '  WITH (pad_index=OFF,Fillfactor=90,ignore_dup_key=OFF,allow_row_locks=ON,allow_page_locks=ON,DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]'
	
	AS Create_Statement
	
FROM sys.dm_db_missing_index_groups dm_mig
	INNER JOIN sys.dm_db_missing_index_group_stats dm_migs ON dm_migs.group_handle = dm_mig.index_group_handle
	INNER JOIN sys.dm_db_missing_index_details dm_mid ON dm_mig.index_handle = dm_mid.index_handle
WHERE dm_mid.database_ID = DB_ID()
ORDER BY Avg_Estimated_Impact DESC 
) as t
order by Create_Statement asc

NAV: „Document“ unterscheiden anhand des Type

Im Navision werden in den „Sales_header“ und „Sales_header_archive“ die folgende unterschiedliche Art von Sätzen anhand des Feldes Dokument Type abgelegt:

Document Type Type Name
0 Angebot
1 Auftrag
2 Rechnung
3 Gutschrift
4 Blanket Order
5 Bestellung retur/Return Order
9 Budget Daten

Link/s:

https://docs.microsoft.com/en-us/dynamics-nav/fin-graph/resources/dynamics_salesorder#properties

 

Und in den „Sales_lines“, „Sales_lines_archive“ und „Sales_invoice_line“ gibt es das ähnliche Feld Type noch einmal jedoch mit anderer Bedeutung

If you look at Type Field Properties, OptionString.. we will have , G/L Account, Item, Fixed Asset, Charge (Item)
which means

Type Bedeutung
0 Blank
1 G/L Account
2 Item
4 Fixed Asset
5 Charge (Item)

Link/s:

https://docs.microsoft.com/en-us/dynamics-nav/fin-graph/resources/dynamics_salesinvoice

https://dynamicsuser.net/nav/f/users/43343/purchase-invoice-line-entry-type

SLX: Fehlermeldung bei Anlage neuer Felder…

Egal bei Benutzung im Architekt oder über dem Administrator Tool, bei beiden erfolgen Fehlermeldungen:

Auch Neustart bringt nichts.

SLX 7.5.3 Datenbank eingehängt in eine installierte SLX 7.5.4 Umgebung. Ist das die Ursache?

 

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

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

 

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\

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

 

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.

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

 

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

MS Report mit Parameter mit Zeiträume [von – bis]

Bei Anpassungen von Reports sind gelegentlich vorbereitete Zeiträume zielführend und hilfreich:

Select 	
	dateadd(SECOND, -1, [dbo].fn_UTCToLocalTime([dbo].[fn_EndOfToday](getutcdate()))) as EndOfToday
	,[dbo].fn_UTCToLocalTime([dbo].[fn_BeginOfThisWeek](getutcdate())) as BeginOfThisWeek
	, dateadd(SECOND, -1, [dbo].fn_UTCToLocalTime([dbo].[fn_EndOfThisWeek](getutcdate()))) as EndOfThisWeek

	, [dbo].fn_UTCToLocalTime([dbo].[fn_BeginOfLastMonth](getutcdate())) as BeginOfLastMonth
	, [dbo].fn_UTCToLocalTime([dbo].[fn_BeginOfThisMonth](getutcdate())) as BeginOfThisMonth
	, dateadd(SECOND, -1, [dbo].fn_UTCToLocalTime([dbo].[fn_EndOfThisMonth](getutcdate()))) as EndOfThisMonth

	, [dbo].fn_UTCToLocalTime([dbo].[fn_BeginOfLastYear](getutcdate())) as BeginOfLastYear
	, [dbo].fn_UTCToLocalTime([dbo].[fn_BeginOfThisYear](getutcdate())) as BeginOfThisYear
	, dateadd(SECOND, -1, [dbo].fn_UTCToLocalTime([dbo].[fn_EndOfThisYear](getutcdate()))) as EndOfThisYear

Parameter von MSCRM/Dyn365 Reports

Sobald ein Report neu angelegt wird. können auch viele Parameter  automatisch angeboten werden. Diese Parameter sind „hidden“ und haben lediglich einen statischen „Default“ Value.

Lediglich haben einige Parameter eine besondere Bedeutung. Speziell „CRM_Url“: DIeser (leere!) Parameter wird benötigt um von einem Report wieder in das CRM zu springen.

Scribe / maximum memory for Message Processor

Scribe / maximum memory for Message Processor
 
 
 
 

With Insight 7.6.2 and above, the registry settings have been moved to the Scribe Internal Database. If you have upgraded from a previous version of Scribe Insight and had the MAXMEMORYUSAGEMS or MAXMEMORYUSAGEEM values set in the registry, they have been migrated to the database. I you are a new install of Insight 7.6.2 and above or never had teh above registry setting in your previous version, you can insert them via the following script:



INSERT INTO [SCRIBEINTERNAL].[SCRIBE].[KSYNC] VALUES (‚MESSAGEPROCESSOR‘,’SETTINGS.MAXMEMORYUSAGEMS‘,’600′)



INSERT INTO [SCRIBEINTERNAL].[SCRIBE].[KSYNC] VALUES (‚MESSAGEPROCESSOR‘,’SETTINGS.MAXMEMORYUSAGEEM‘,’600′)

MSCRM mit Reports und Pre-Filtering…

Es können bei on-Premise MSCRM prinzipell mit SQL als auch XML-Fetch die Daten im Report bneutzt werden. Aber das MSCRM kann ohne die Daten im Code direkt zu beschränken bzw. diese zu filtern: Durch Pre-Filterung!
Ein Dataset muss dabei nur
* bei Datasets mit SQL-Query: muss das ALIAS der Tabelle mit „CRMAF_“ angefangen
* bei XML Fetch: muss z.B. in der <entity name=“account“ enableprefiltering=“1“> eingetragen werden.

Links:
https://nishantrana.me/2014/07/06/using-pre-filtering-in-fetch-xml-based-report-in-crm-2013-online/

Remotedesktop Verbindung – Sicherheitseinstellungen seit 8.5.2018

Microsoft hat am 8.5.2018 bei einem der Updates die Sicherheits- Einstellungen verändert und führt teilweise zu Fehlermeldungen.

Bei einem Zugriff per RDP (=mstsc.exe) auf einen Rechner bedeutet:

„Zugriff per RDP“ => man ist „Client“

„auf einen Rechner“ => das ist der „Server“

Diese Begriffe werden gebraucht bei dem Link von Microsoft: https://go.microsoft.com/fwlink/?linkid=866660

Möglicherweise muss die „AllowEncryptionOracle“ auf 2 gestellt werden, bis auch beim Server die Updates eingespielt sind: