vafk18
Goto Top

Problem bei Erstellung einer Replikation in MSSQL 2022 auf Ubuntu 20.04

Aufgabe:
Ich versuche, eine Replikation auf Microsoft SQL Server 2022 zu konfigurieren, der auf einem Ubuntu 20.04-Server läuft. Die Replikation soll zwischen zwei SQL Server-Instanzen eingerichtet werden.

Tools:
sqlcmd
Microsoft SQL Server Management Studio (MSSMS) 20.2
SQL Server 2022 auf Ubuntu 20.04

Nach der Konfiguration des Distributors erhalte ich beim Versuch eine Meldung:

Der Server sql1.mysite.com muss als Publisher aktiviert werden, bevor Sie eine Publikation erstellen können. Aktivieren Sie diesen Server als Publisher im folgenden Dialogfeld.

In dem nächsten Feld ist der Server bereits als Publisher aktiviert, mit dem Benutzer 'sa' und Password. Ich kann in diesem Fenster nichts weiteres einstellen und wenn ich es schließe, erhalte ich erneut die Meldung

Der Server sql1.mysite.com muss als Publisher aktiviert werden, bevor Sie eine Publikation erstellen können. Aktivieren Sie diesen Server als Publisher im folgenden Dialogfeld.

Was ich noch gemacht habe:

Sicherstellen, dass SQL Server Agent auf dem Ubuntu-Server läuft.
Das mssql Servicekonto zu Administratorrechten auf dem Server hinzugefügt.
Berechtigungen für die Replikationsdatenbanken und das Verzeichnis (/mnt/data/ReplData) überprüft und angepasst.
Der SQL Server-Dienst wurde neu gestartet, um Änderungen zu übernehmen.
Trotz dieser Maßnahmen bleibt das Problem bestehen. Es scheint, dass MSSMS das Ubuntu-Server-Setup und das mssql Servicekonto nicht richtig erkennt.

Weiter habe ich auf dieser Seite

learn.microsoft.com/en-us/sql/linux/sql-server-linux-replication-tutorial-tsql?view=sql-server-ver16

die Befehle über T-SQL ausgeführt, bin aber auch nicht weitergekommen. Auf einigen Foren habe ich dieses gleiche Problem gefunden, aber keine Antwort. Daher habe ich den Verdacht, daß das MSSMS nicht richtig mit dem MSSQL auf Linux kommuniziert.

Diese Aufgabe erledige ich im Rahmen eines Lehrgangs für Datenbanken und verwende den MSSQL in der Einstellung als Developer. Die beiden SQL-Server laufen auf VM (gehostet auf TrueNAS).

Für eine Hilfestellung wäre ich sehr danbkbar, selbst wenn es um die Klärung geht, daß das MSSMS nicht geeignet ist. Falls dies der Fall ist, würde es mich interessieren, ob wenigstens die SQL-Abfragen verläßlich sind, denn diese sind für mich einfacher zu bewältigen, als das Copy&Paste über die sqlcmd-Konsole.

Content-ID: 671713

Url: https://administrator.de/forum/problem-bei-erstellung-einer-replikation-in-mssql-2022-auf-ubuntu-20-04-671713.html

Ausgedruckt am: 15.04.2025 um 13:04 Uhr

kadde71
kadde71 03.03.2025 um 14:39:28 Uhr
Goto Top
Moinsen
MS SQL Replikation unter Linux ist etwas tricky, da Microsoft Dienste (MSDTC) oft RPC als Protokoll nutzen.
Ich hab z.B. eine Merger Repliaktion (lt. MS offiziell nicht möglich) mit drei MS SQL Server 2022 als Testsystem ebenfalls mit der DEV Edition am Laufen. Allerdings unter Ubuntu 22.04.5 (Proxmox VM - kein LXC!)
https://learn.microsoft.com/de-de/sql/linux/sql-server-linux-configure-m ...

hier mal meine mssql.conf unter /var/opt/mssql/

[sqlagent]
enabled = true

[licensing]
azurebilling = false

[EULA]
accepteula = Y

[language]
lcid = 1031

[filelocation]
defaultdatadir = /var/mssql/data

[network]
tcpport = 1433
rpcport = 13500

[distributedtransaction]
servertcpport = 51999
allowonlysecurerpccalls = 0
fallbacktounsecurerpcifnecessary = 0
turnoffrpcsecurity = 1

[uncmapping]
//mssql-biz/repldata = /var/opt/mssql/ReplData
ukulele-7
ukulele-7 03.03.2025 um 15:23:25 Uhr
Goto Top
Grundsätzlich wird MSSQL auf Linux zwar mittlerweile unterstützt, aber die erste Frage muss eigentlich lauten warum?
Dani
Dani 03.03.2025 um 20:03:04 Uhr
Goto Top
Moin,
aber die erste Frage muss eigentlich lauten warum?
... warum er ein OS einsetzt, welches am 31.05.2025 Eos? face-big-smile


Gruß,
Dani
vafk18
vafk18 03.03.2025 um 20:49:57 Uhr
Goto Top
@kadde71
Danke für die Config!!! Gut zu sehen, daß Du den 22.04 ans Laufen gebraucht hast. Ich habe es ebenfalls versucht, bin jedoch mit den SSL's nicht weitergekommen und bin, da ich diese nicht benötige, wieder auf 20.04 ausgewichen. Und ja @Dani ich werde zu gegebener Zeit auf 22.04 umsteigen, wenn 20.04 EOL sein wird.

@ukulele-7
Du fragst sicher, weshalb ich MSSQL auf Ubuntu teste? Weil ich die Software JTL-Wawi einsetzen will und die Entwickler haben sich damals leider für MS-Produkte entschieden und ich mußte mir irgendwann beweisen, daß die ERP-Software auch unter Linux läuft, allerdings nur auf MSSQL.
vafk18
vafk18 03.03.2025 aktualisiert um 21:08:03 Uhr
Goto Top
Ich habe die Angaben gem. der mssql.conf von @kadde71 ausprobiert. Ich kann den Distributor erstellen, auch das Konfigurationsskript

/****** Scripting replication configuration. Script Date: 03/03/2025 20:55:50 ******/
/****** Please Note: For security reasons, all password parameters were scripted with either NULL or an empty string. ******/

/****** Installing the server as a Distributor. Script Date: 03/03/2025 20:55:50 ******/
use master
exec sp_adddistributor @distributor = N'sql1', @password = N''  
GO
exec sp_adddistributiondb @database = N'distribution', @data_folder = N'/mnt/data/ReplData', @log_folder = N'/mnt/data/ReplData', @log_file_size = 2, @min_distretention = 0, @max_distretention = 72, @history_retention = 48, @deletebatchsize_xact = 5000, @deletebatchsize_cmd = 2000, @security_mode = 1  
GO

use [distribution] 
if (not exists (select * from sysobjects where name = 'UIProperties' and type = 'U '))   
	create table UIProperties(id int) 
if (exists (select * from ::fn_listextendedproperty('SnapshotFolder', 'user', 'dbo', 'table', 'UIProperties', null, null)))   
	EXEC sp_updateextendedproperty N'SnapshotFolder', N'/mnt/data/ReplData', 'user', dbo, 'table', 'UIProperties'   
else 
	EXEC sp_addextendedproperty N'SnapshotFolder', N'/mnt/data/ReplData', 'user', dbo, 'table', 'UIProperties'  
GO

exec sp_adddistpublisher @publisher = N'sql1.mysite.com', @distribution_db = N'distribution', @security_mode = 0, @login = N'sa', @password = N'', @working_directory = N'/mnt/data/ReplData', @trusted = N'false', @thirdparty_flag = 0, @publisher_type = N'MSSQLSERVER'  
GO

Den Publisher kann ich immer noch nicht erstellen, denn nach wie vor:

sql1.mysite.com must be enabled as a Publisher before you can create a publication. In the following dialog box, enable this server as a Publisher.

wobei in der nächsten Box nichts einzustellen ist, es sei denn ich habe Tomaten auf den Augen face-smile
ukulele-7
ukulele-7 04.03.2025 um 10:04:49 Uhr
Goto Top
Also ich habe schon des Öfteren gelesen das MSSQL auf Linux eher ein nettes Gimmick ist, als eine ernstzunehmende Alternative. Vermutlich setzt nicht mal MS das ein, es wird also immer Einschränkungen geben und wenig Priorität genießen.

Das Warum bezog sich daher auf die Frage, warum die DB nicht einfach auf Windows liegt. Wenn du sagst, weil ich kein Windows Server habe, dann okay, das kann ich nachvollziehen. Ich weiß ja auch nicht wie viel davon abhängt aber ich würde davon absehen es einfach zu machen weil man es kann.

Von JTL habe ich übrigens noch eine viel schlechtere Meinung face-wink Das würde ich gar nicht einsetzen wollen, das ist so gruselig. Ich habe mal versucht, aus JTL Buchungen (gruppiert nach steuerlichen Sachverhalten) und Rohdaten + zugehörige Daten von Vorsystemen zu verstehen, wie die Summen zustande kommen. Das war nicht möglich, das sollte es in einer Buchführung aber irgendwie sein. Rund um das Thema habe ich dann viel schlechten Support und schlechtes Produktdesign erlebt. Außerdem kam kurze Zeit später das mit den hart kodierten Passwörtern in den Medien...
kadde71
kadde71 04.03.2025 um 10:30:57 Uhr
Goto Top
kann den der SQL Server "sql1.mysite.com" auflösen bzw. als MS SQL Server Instanz erkennen? Mal mit IP oder Instanz\Name ggf. Port probieren
vafk18
vafk18 04.03.2025 um 13:46:10 Uhr
Goto Top
@kadde71

Ich kann mich über FQDN und IP verbinden

sqlcmd -S sql1.mysite.com -U SA -P 'pass' -C
sqlcmd -S sql1 -U SA -P 'pass' -C
sqlcmd -S 192.168.1.101 -U SA -P 'pass' -C

mit "Instanz\Name" geht es nicht, denn laut AI wird auf Linux anders als bei Windows der mssql immer in der Standardinstanz eingerichten und es gibt beim Einrichten auch keine Möglichkeit, eine benannte Instanz, z.B. sql1 einzurichten.

Zudem muss ich bei meiner Installation ein "-C" anfügen, ansonsten erhalte ich die Fehlermeldung wegen des selbstsignierten SSL:

Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : SSL Provider: [error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed:self signed certificate].
Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : Client unable to establish connection. For solutions related to encryption errors, see https://go.microsoft.com/fwlink/?linkid=2226722.

Liegt vielleicht darin das Problem?
kadde71
Lösung kadde71 04.03.2025 um 14:29:24 Uhr
Goto Top
solang die SQL Server nicht über eine öffentliche Verbindung kommunizieren würde ich immer die Optionen Trust Server Certificate und optionale Encryption nutzen - auch im SSMS
Prinzipiell ist aber keine gute Idee, Datenbanken in ein öffentliches Netz zu stellen.
Du kannst Dir am besten im SSMS beide Server verbinden und die Replikation auch per GUI zusammenklicken
vafk18
Lösung vafk18 04.03.2025 aktualisiert um 20:30:54 Uhr
Goto Top
Das Problem mit der Installation des MSSQL 2022 auf Unbutu 2022 wurde dank der Tios von @kadde71 gelöst. Es liegt an der VM, die auf einer TrueNAS Core läuft. Den Beweis habe ich durch Installation auf XCP-NG.

Nach der Installation des mssql und Erstkonfiguration kommt folgende Fehlermeldung:

Ubuntu 22.04.5 LTS
Capturing core dump and information to /var/opt/mssql/log...
dmesg: read kernel buffer failed: Operation not permitted
Hint: You are currently not seeing messages from other users and the system.
      Users in groups 'adm', 'systemd-journal' can see all messages.  
      Pass -q to turn off this notice.
No journal files were opened due to insufficient permissions.
Hint: You are currently not seeing messages from other users and the system.
      Users in groups 'adm', 'systemd-journal' can see all messages.  
      Pass -q to turn off this notice.
No journal files were opened due to insufficient permissions.
tail: cannot open '/var/log/syslog' for reading: Permission denied  
Tue Mar  4 07:26:03 PM UTC 2025 Capturing program information
Dump already generated: /var/opt/mssql/log/core.sqlservr.3_4_2025_19_25_50.19175, moving to /var/opt/mssql/log/core.sqlservr.19175.temp/core.sqlservr.19175.gdmp
Moving logs to /var/opt/mssql/log/core.sqlservr.19175.temp/log/paldumper-debug.log
Tue Mar  4 07:26:03 PM UTC 2025 Capturing program binaries
Tue Mar  4 07:26:09 PM UTC 2025 Compressing the dump files
Core dump and information are being compressed in the background. When
complete, they can be found in the following location:
  /var/opt/mssql/log/core.sqlservr.03_04_2025_19_25_59.19175.tbz2
Initial setup of Microsoft SQL Server failed. Please consult the ERRORLOG
in /var/opt/mssql/log for more information.

Mann oh Mann, wiviele Stunden habe ich das Internet durchforstet, weil ich dachte, daß ich einen Fehler gemacht habe. Es liegt offebaar an dem Filesystem, das TrueNAS Core auf ZFS zur Verfügung stellt.

Sobald mein neuer Server steht, installiere ich das XCP-NG und versuche dann die Replikation auf zwei mssql-Servern einzurichten.