Datenverkehr mit der Fritzbox aufzeichen

Manchmal muss man kontrollieren, ob und welche Pakete in das Internet gehen. Auch in der FritzBox ist das möglich:
http://fritz.box/html/capture.html 

Dort dann z.B. „Internet“ starten… und nach dem erwarteten Daten dann „stoppen“ und die Datei anschauen.

Hinweis: Bei einem iPad z.B. funktioniert das nicht – im normalem Rechner kommt nach der Anmeldung ein Dialog wo die Log-Datei abgelegt werden soll.

Quelle:
https://praxistipps.chip.de/fritzbox-datenverkehr-mitschneiden_9989

Ändern des SSAS Modus

Technisch kann man beide Modi bereitstellen indem zusätzliche Instanzen bereitgestellt werden. Wenn jedoch bei der Installation der SSAS Modus „falsch“ installiert wurde, und einfach nur richtigen Modus haben will, der könnte das erreichen, indem die msmdsrv.ini angepasst wird und dann die Instanz einfach neu starten:

Bei Multidimensional: <DeploymentMode>0</DeploymentMode>

Bei Sharepoint: <DeploymentMode>1</DeploymentMode>

Bei Tabellarisch: <DeploymentMode>2</DeploymentMode>

Die ini-Datei ist bei der Standardinstallation:
C:\Program Files\Microsoft SQL Server\MSAS14.SQL2017\OLAP\Config
Wobei die hier Teile abhängig von der installierten Version sind.

Quelle/n:

https://www.sqlservercentral.com/articles/how-to-change-an-analysis-services-instance-to-tabular-mode

https://docs.microsoft.com/de-de/sql/analysis-services/instances/determine-the-server-mode-of-an-analysis-services-instance?view=sql-server-2014

 

 

 

Datenbank shrinken, aber die Dateien werden nicht kleiner?

Prinzipiell sollte es möglich sein eine Datenbank oder einzelne Dateien, z.B. das LOG zu verkleinern. Aber diese werden niemals kleiner, als die „Inital Size“.

Wenn es jedoch immer noch funktioniert, kann es an vorhandenen Indizes, die auch stark fragmentiert sein können.

Gute „vorbereitete Lösung“ habe ich gefunden bei:

https://blog.pmd-media.com/2009/10/08/howto-verkleinern-einer-microsoft-sql-server-datenbank/

 

--Erst alle Indizes neu aufbauen
DECLARE @TableName varchar(255)
DECLARE TableCursor CURSOR FOR
   SELECT DISTINCT QUOTENAME(TABLE_SCHEMA)+'.'+QUOTENAME(table_name)
   FROM information_schema.tables
   WHERE table_type = 'base table'
   order by 1 asc
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
   print @TableName+'....'
   DBCC DBREINDEX(@TableName,' ',90)
   FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
print 'FERTIG'

--Und nachher wirklich shrinken:
go
dbcc shrinkdatabase    (, NOTRUNCATE)
go
dbcc shrinkdatabase    (, TRUNCATEONLY)
GO

SQL: Zahlen in lokalem Format

Problem Darstellung eines Ergebnisses per T-SQL möchte man gelegentlich unterschiedlich formatieren.
Speziell bei „Datum“ und „Zahlen“ hat man ständig mit Problemen.
Beispiel im SQL hat man ständig Werte wie „9999.99 aber im deutschem Excel wird nicht als 9.999,99“ verstanden und muss ständig mit hohem Zeitaufwand im Excel als „Text“ eingelesen und dann werden bei den betroffenen Spalten erst Punkt in Komma gewandelt und dann müsse die Spalten in die richtige Formate gebracht werden.
Bei DATUM lässt sich das in einer T-SQL Abfrage mit einem einfachen „SET“-Kommando anpassen. Leider gibt’s bisher keine einfache Lösung bei Microsoft.
Daher hilft möglicherweise der „FORMAT“-Befehl…

SELECT
    -- c => currency
    -- n => numeric
    FORMAT(987654321, N'N', C.culture) AS some_number
,   FORMAT(987654321, N'c', C.culture) AS some_currency
,   C.culture
FROM
    (
        -- Language culture names
        -- http://msdn.microsoft.com/en-us/library/ee825488(v=cs.20).aspx
        VALUES
            ('en-US')
        ,   ('en-GB')
        ,   ('de-DE')
    ) C (culture);

Select FORMAT(987654321, N'N', 'de-DE') AS some_number

Quelle: https://stackoverflow.com/questions/4377352/how-do-i-format-a-number-with-commas-in-t-sql

iPad Version feststellen?

Auf der Rückseite der iPad sollen diese Modellnummer (z.B. A1671) zu finden – aber dazu müsste man das aus dem Cover holen…

In den Systemeinstellungen im Menü „Allgemein“ und dort ganz oben „Info“. Dort gibt es den Menüpunkt „Modellnummer“. Dieser gibt jedoch eine ganz andere Darstellung! Lösung: Einfach auf die „Modellnummer“ tippen und dann erscheint die gewünschte Darstellung.

Bsp.: MPA42FD/A  <=> A1671

Übrigens, gleich an der gleichen Seite ist gleich der Modellname im Klartext zu finden.

Bsp.: iPad Pro (12,9 Zoll, 2. Generation)

Liste welcher Modellnummer zu den iPad gehören ist hier bei Apple zu finden:
https://support.apple.com/de-de/HT201471

 

Azure Data Factory (ADF)

SQL Satury – Transitioning From SSIS to Azure Data Factory:
https://www.sqlsaturday.com/SessionDownload.aspx?suid=17898

Azure Data Factory Dokumentation:
https://docs.microsoft.com/de-de/azure/data-factory/

On-Premise / Hybrid (Azure – SSIS) / Azure:
https://docs.microsoft.com/de-de/azure/data-factory/concepts-integration-runtime

Zugriff auf On-Premise SQL Server:
https://docs.microsoft.com/de-de/azure/data-factory/create-self-hosted-integration-runtime

Bereitstellen der Azure-SSIS Integration Runtime in Azure Data Factory:
https://docs.microsoft.com/de-de/azure/data-factory/tutorial-deploy-ssis-packages-azure

 

 

 

Rezo ja lol ey

Bewerten muss jeder für sich! Sicherlich wird das Video und die Links nicht ewig erreichbar sein.

Video:

Quellen im Video:

https://docs.google.com/document/d/1C0lRRQtyVAyYfn3hh9SDzTbjrtPhNlewVUPOL_WCBOs/mobilebasic

BIML

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

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

 

OpenSteetMap? Geo-Koordinaten?

Link/s:

https://learnosm.org/de/beginner/

https://export.hotosm.org/de/v3/

https://developers.google.com/maps/documentation/geocoding/get-api-key?hl=de

Hinweis: Sehr unterschiedlich können die GPS Koordinaten sein, die man sich beschaffen kann für eine normale Straßen-Adresse – je nach dem benutztem „Webservice“. Genau so unterschiedlich können die Position in der Landkarte dargestellt sein für eine wohldefinierte Koordinaten, sei es Bing, Google, OpenStreetMap, …  Es haben sich gezeigt, dass eine einzelne Adresse im Nürnberger Gebiet fast 500 m unterschiedlich dargestellt werden kann!

Fazit: Man sollte das gleiche System benutzen für das Bestimmen von GPS Koordinaten aus einer Straßen-Adresse und für das Darstellen von GPS-Koordinaten in der Landkarte!

 

Website(URL) in das Startmenü?

Quelle: https://www.winboard.org/artikel/windows-10-webseiten-als-kachel-im-startmenue-hinterlegen-so-gehts.8570/

Lösung:

  1. Im IE rechts oben bei den drei „Ellipsen“ auf die Maus klicken (linke Taste)
  2. Im Menü „Diese Seite an Start anheften“ anklicken
  3. Im Startmenü  selber dann an die gewünschte Position verschieben

 

 

SSMS verbraucht CPU und reagiert nicht mehr alle paar Minuten…

Problem: Das SSMS (SQL Server Management Studio) hängt alle paar Minuten – Auch ein Neustart des SSMS bringt nichts.
Nebeninformation: CPU vom SSMS wird 15-25% und das RAM vom SSMS mehrere GB!

 

Ursache: Eine T-SQL Query ist syntaktisch defekt und das SSMS „wild“ zu werden. Es scheint mit einem Zusammenhang mit dem IntelliSense zu haben.

Lösung: Korrektur des T-SQL Code und ein paar Minuten geduldig sein, CPU verringert sich schneller und das RAM normalisiert sich etwas später!

Ähnliche Feststellungen:
https://superuser.com/questions/1195570/sql-server-management-studio-cpu-and-ram-usage-keeps-increasing-for-no-reason

Xojo & Aloe Express

Software Anwendung, für alle Platformen (iOS, OS X, Windows, Linux, Rasberry PI). Die Entwicklungssprache ist Basic ähnlich. Die Software IDE erlaubt eine graphische Entwicklung ähnlich wie XCode oder Visual Studio.

https://www.xojo.com/

Und einen Webservice bereitstellen, auch unter Windows, Linux und OS X:

https://aloe.zone/

Preis: ca. 100-1500 EUR/Jahr

Hinweis: Die Lizenz ist nur fällig, wenn die Software kompiliert wird.

Hinweis: Die Lizenz darf die Software auch nach Ablauf der Lizenz benutzt werden, aber eben keine Xojo- Updates mehr.

WLAN „QR“ bereitstellen?

Es geht, indem man ein QR mit dem folgendem Text erstellt:

WIFI:S:gästenetz;T:WPA;P:klartestpasswort;

Problem: Man möchte z.B. für Gäste ein Netz freigeben. Aber man müsste ja das Passwort extra weitergeben. Die meisten aktuellen Laptops, Tablets und Smartphones reicht es über die Standard Kamera App über ein QR zu halten – und der Rest geht wie von alleine. Aber den Inhalt eines QR kann über viele QR Code Reader App ausgelesen werden und ist dann in Klartext bekannt.

In Firmen, jedoch werden häufig diese Passwörter gar nicht weitergeben, sondern müssen manuell von einem Admin eingetragen werden.

Als Sicherheit können in privaten/geschlossenen Netzen, einen Zugriff nur über eingetragene MAC-Adresse erlaubt werden. Muss aber im Accesspoint irgendwo eingerichtet werden (soweit möglich); Und, die MAC-Adresse kann vom Client geändert werden – ist also keine echte Sicherheit!

Nebenbei: QR-Code (engl. Quick Response) ist ein zweidimensionaler Code und ist fehlerkorrigierend und es können bis ca. 30% der Fläche fehlen bzw. beschädigt sein und wird trotzdem gelesen.

Link/s:

https://qifi.org/
https://github.com/zxing/zxing/wiki/Barcode-Contents#wifi-network-config-android

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…

PowerBI: Filter darstellen….

Benutzte Filter können leicht so unübersichtlich werden, dass es schon wäre, wenn der Anwender die benutzten Filter sehen könnte.
Sei es, dass man den Filter in den Charts als „Tooltips“ darstellen kann oder als ständige Anzeige als Visual.

Man könnte für jede Entität, die an der Filterung betroffen ist eine Measure wie „Selected„. Und dieses Measure, oder mehrere, können als Tooltips angehängt werden.

Solche Measure können komplex werden – weil eine unbekannte Anzahl von Sätzen angehakt sind:
https://www.sqlbi.com/articles/displaying-filter-context-in-power-bi-tooltips/
Hinweis: Wenn DirectQuery benutzt wurde, dann ist diese Variante noch nicht möglich… Problem: CONCATENATEX()

Bilder dynamisch in PowerBI?

Quelle/n:

https://blog.gbrueckl.at/2018/01/storing-images-powerbi-analysis-services-data-models/

https://jasonsql.files.wordpress.com/2017/02/temp.gif

Bilder als URL? Derzeit inakzeptabel, weil ein online Zugriff auf die URL notwendig ist. Und keine dynamische Änderungen möglich.

Ersatz: Das/die Bilder als base64based encoded in einer Tabelle bereitstellen – oder diese in einem zusätzlichem „Measure“ hinzufügen. 

Beispiel:
Cast(‚data:image/jpeg;base64,/9j/4AAQ….EIwioxVkj/9k=‘ as nvarchar(max)

Tools um einzelne Bilder in 64based encoded manuell bereitzustellen:
https://onlinejpgtools.com/convert-jpg-to-base64
https://www.browserling.com/tools/image-to-base64

Optional, können per T-SQL alle Bilder aus Ordner eingelesen werden.

Bilder in Tabellen lassen sich jederzeit darstellen, lediglich wenn ein einzelnes Bild dargestellt werden, ist immer die Tabellen Überschriften vorhanden und lässt sich nicht zu unterdrücken.

Normale Bilder im PowerBI lassen sich nur per URL festlegen – Mir entfällt die Visualisierung vom Marketplace:

Ereignisanzeige/Events „ID 10016“

Es sind neue „Error“ Einträge mit dem ID=10016. Und der Text:

The application-specific permission Settings do not grant Local Activivation permission for the COM Server application with CLSID {….} and APPID {….} to the user ….. SID {….} from address localHost (Using LRPC) running in the application container Unavailable SID {….}. This security permission can be modified using the Component Services administrative tool.

Link: https://answers.microsoft.com/en-us/windows/forum/windows_8-performance/application-container-unavailable-sid-unavailable/4ec39b15-1f43-4d7a-bbf6-11706a685b7c

Nach dem Klären, dass es sich um die „COM Server application“ handelt „Microsoft.SQLServer.Dts.Server.DtsServer“ und in den „Component Services“ den „Microsoft SQL Server Integration Service 11.0“ ging ich davon es aus reichen sollte dem fraglichem „Agent-User“ die Rechte zu den Datenbanken „msdb“ und „SSISDB“ zu erteilen.

/*
Zugriff auf msdb und SSISDB
Link: https://docs.microsoft.com/en-us/sql/integration-services/security/integration-services-roles-ssis-service?view=sql-server-2017
Hinweis: Um SSIS-Jobs anzulegen, ist es meist notwendig weitere Einstellungen vorzunehmen, wie z.B. einen "Proxy".
*/
USE [SSISDB]
GO
CREATE USER [NT SERVICE\SQLAgent$SQL....] FOR LOGIN [NT SERVICE\SQLAgent$SQL....] WITH DEFAULT_SCHEMA=[dbo]
GO
EXEC sp_addrolemember @rolename = 'ssis_admin', @membername = 'NT SERVICE\SQLAgent$SQL....'
GO
USE [msdb]
GO
CREATE USER [NT SERVICE\SQLAgent$SQL....] FOR LOGIN [NT SERVICE\SQLAgent$SQL....] WITH DEFAULT_SCHEMA=[dbo]
GO
EXEC sp_addrolemember @rolename = 'db_ssisoperator', @membername = 'NT SERVICE\SQLAgent$SQL....'
GO

Weiterhin erschien die Fehlermeldungen und musste dem oberem Link folgen und die „Component Services“ anzupassen.
Wobei die Fehlermeldungen in der Ereignisanzeige nicht mehr auftraten.

E-Mail versenden per PowerShell

Emails können per PowerShell versendet werden, soweit der SMTP-Server bekannt ist:

Send-MailMessage -SmtpServer smtp.rdfo.org -From frank@rdfo.org -To Odenbreit@rdfo.de -Subject "Test E-Mail"

Hinweis/Warnung: Weder der Smtp-Server noch der eingetragene Empfänger sind benutzt noch eingerichtet.

Excel: Unterschiedliche Endungen / Dateiformat….

Jeder kennt sein Excel und die aktuellen Endungen:

  • xlsx
    Excel Formt ohne Macros
  • xlsm
    Excel Formt mit Macros
  • xlsb
    binäres Format, mit Macros

Speziell das xlsb ist spürbar schneller zu benutzten. Der Start des Excel, die Berechnungen im Excel (soweit Marcros vorhanden sind) und die Dateigröße ist wesentlich kleiner! Der Entscheidende Unterschied ist eben, dass es binäres Format also proprietär – und der Inhalt ist nicht wie eine ZIP-Datei aufgebaut- Man kann den Inhalt also nicht einfach an schauen.

Quelle/n:

http://www.office-loesung.de/ftopic308021_0_0_asc.php
http://www.dateiendung-liste.de/dateiendungen/xl

SQL: Deploy SSIS-Solution

Es gibt prinzipiell verschiedene Stellen, wohin man den Code ablegen kann, damit der SQL Server diesen aufruft.

  • Filesystem
  • SQL Server
  • SSIS Package Store
  • SSIS Catalog

Wobei ich derzeit diese letzte Variante „SSIS Catalog“ in aktuellen Datenbanken. Es wird in der Datenbank automatisch eine Datenbank „SSISDB“ und soweit die Service Integration auch installiert ist, gibt es auch einen „Integration Services Catalog“. Beim Erstem Aufruf muss ein Passwort hinterlegt werden (IMHO unveränderbar). Es wird dann der erste Ebene „SSISDB“ angelegt und darunter können/müssen für jede SSIS-Solution, die man hier ablegt gleich einen neuen Ordner anlegen. Daher bitte die Ordner die Ordnernamen sprechend festlegen (wieder IMHO kaum unveränderbar).

Hier meine Schritte:

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

SQL: Transaktionen Try/Catch?

Es gibt tatsächlich zwei völlig unterschiedliche Ansätze….

Ich nutze diese kürzere – vielleicht etwas älter – Variante:

 Begin Transaction
   Begin Try
   /*Insert/Update/…*/
   End Try
   Begin Catch
      IF @@TRANCOUNT > 0  
         ROLLBACK TRANSACTION;  
   End Catch
IF @@TRANCOUNT > 0  
    COMMIT TRANSACTION; 
/*Das Commit ist das "End Transaction"*/

Die zweite Variante benötigt das „XACT_STATE“ und liest sich noch komplizierter und werde ich nur nutzen, wenn ich mit dem o. g. T-SQL Code nicht weiter komme. Aber beschrieben sind beide Wege von Microsoft in dem u. g. Link

Link:

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/try-catch-transact-sql?view=sql-server-2017

SQL Server: Database Mail

Um das Einrichten von Database Mail-Account kann manuell diese Schritte vornehmen:
(Link: http://sqlcache.blogspot.com/2014/11/sql-server-database-mail.html )

Vermutlich ist diese Bestätigung notwendig:

Und nun dem „Profil“ ein Namen geben und einen SMTP-Account hinterlegen:

Und nun sind die Zugriffsdaten des Exchange Server notwendig…
Wir empfehlen dafür einen eigenen Exchange Account und dies mit dem IT-Administratoren abzusprechen – also eigentlich wie ein normaler Anwender.
Z.B. könnte dieser heißen wie „SQLServer“. 
Möglicherweise ist aber bei Ihnen bei allen anderen SQL Servern auch schon Database Mail eingerichtet und der gleiche Account benutzt ist. Dazu meist nur benutzt bei kritischen Fehlern an alle Admins versendet werden. Wir werden jedoch vermutlich regelmäßig mehr versenden als nur bei Fehlern.
Noch einmal: Dieser „Account“ wird nur E-Mail versenden und nie E-Mail „lesen“ – Also falls E-Mails eingehen, werden diese ewig in dem Postfach liegen bleiben.

Port, SSL-Häkchen und E-Mail Server sind den Adminstratoren bekannt
(„Reply e-mail“ bitte genauso eintragen, wie die „E-mail address“)
Links Information über E-Mail Server:
https://support.office.com/de-de/article/server-einstellungen-die-sie-von-ihrem-e-mail-anbieter-benötigen-c82de912-adcc-4787-8283-45a1161f3cc3

Nach dem „OK“ sind wir wieder zurück:

Und müssen „Next“ klicken und in diesem Schritt muss das Profil aktiviert werden…

In diesem nächstem Schritt müssen wir vermutlich die maximale Größe von E-Mails anpassen. Eine „0“ mehr, also 10 MB erlauben:

Dann wird das lediglich noch einmal zusammengefasst und man muss mit „Finish“beenden. Danach sollten alle fünf Aktionen mit „Success“ beendet sein.

Und der Versand von E-Mails kann jetzt getestet werden:

Falls die Test-Email nicht am Ziel angekommen ist, finden Sie den dort wo die „Send Test E-Mail…“ Popup war, auch das „View Database Mail Log“…

Typische Fehlerldung: „The SMTP Server Requires a Secure Connection or the Client was not Authenticated“
https://blog.sqlauthority.com/2018/06/30/sql-server-database-mail-error-the-smtp-server-requires-a-secure-connection-or-the-client-was-not-authenticated-the-server-response-sas-5-5-1/

Links:
Leider hilft die spezielle SQL Server 2017 – Site gar nicht:
https://docs.microsoft.com/de-de/sql/relational-databases/database-mail/configure-database-mail?view=sql-server-2017

Links:
https://docs.microsoft.com/de-de/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql?view=sql-server-2017

 

Fehlermeldungen:

Msg 22050, Level 16, State 1, Line 3
Failed to initialize sqlcmd library with error number -2147467259.

Hinweis: Die gleiche Fehlermeldung bekommt man auch, wenn das „QuerySQL“ nicht mit einer vollständigen „Select * FROM Datenbank.Schema.Tabelle“ Formalimus arbeitet. Diese Stored Procedure ruft die „QuerySQL“ in einer neuer Query Umgebung (IMHO: in Master)… Und die Fehlermeldung halte ich als irreführend!

 

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