Jump to content

Replikationsjob per t-sql starten


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

ich habe bereits einen erstellten Replikationsjob (Job für veröffentlichung und Job für Verteilung). Diese funktionieren auch soweit und kann Sie auch über das Managment Studio starten/durchführen. Ich möchte Diese nun von einem Batchfile aus starten können. Habe bisher noch nicht herausfinden können, wie ich das anstelle. Das Googeln für Dieses stellte sich als ziemlich zeh raus.

 

Über den Zeitplan von Managment Studio kann ich es nicht machen, weil die Replikation von anderen Faktoren außerhalb abhängig ist, weshalb ich es von extern über batch und z.B. xp_cmdshell machen möchte.

 

Man findet ziemlich viel darüber wie man neue Jobs erstellt usw....aber nicht das was ich suche.

 

Als veröffentlichung habe ich eine Momentaufnahme(dies soll auch so bleiben :-)) gewählt.

MSSQL-DB: 2008 R2

 

Kann mir hier jemand weiterhelfen? Vielen Dank!?

Link zu diesem Kommentar

Ich versuche mal das korrekt darzustellen. Du brauchst zuerst eine Ameldung mittels sqlcmd am SQL-Server, bzw. an der richtigen Instanz.

C:\>sqlcmd -U sa -P PASSWORT -S Instanz-Name_des_SQL-Server -d Name_der_Datenbank -i "C:\meintest.bat"

Achtung! Das mit der Instanz und dem Namen des SQL Servers sieht man nicht so richtig gut. Es ist wie folgt gemeint:

 

Instanz-NamedesSQLServer

 

Du mußt die Instanz angeben und den Namen des SQL Servers, getrennt durch einen Bindestrich.

 

Die korrekte Sytnx bitte aus dem schon gep. Artikel übernehmen und natürlich ausführlich testen. Mit der obigen Zeile meldest Du den Benutzer SA an der passenden DB an und startest in dessen Kontext die angegebene Batchdatei. Die kann folgendes beinhalten:

 

:Setvar DBName "Name_der_Datenbank"
:Setvar ScriptDir "C:\Pfad_zum_Script"
:On Error exit
:Error "C:\ScriptTestError.txt"
:Out "C:\ScriptTestOutput.txt"

USE $(DBName)
GO

CREATE TABLE ScriptTest
(
  id   INT         NOT NULL IDENTITY PRIMARY KEY,
  wert NVARCHAR(9) NOT NULL
)
INSERT INTO ScriptTest (wert) VALUES ('Script1a');
GO

:r $(ScriptDir)\EinSQL_Script_.sql

:r $(ScriptDir)\Ein_zweites_SQL_Script.sql

INSERT INTO ScriptTest (wert) VALUES ('Script1b');
GO
 
SELECT * FROM ScriptTest
GO

DROP TABLE ScriptTest
GO

Auf diese Art und Weise hatte ich vor ein paar Jahren eine sehr große Aktualisierung auf einer Datenbank ausführen lassen.

bearbeitet von Sunny61
Link zu diesem Kommentar

Vielen Dank!, doch das ist nicht das was ich gesucht habe! Vielleicht habe ich mich ja missverständlich ausgedrückt! Ich möchte wissen wie man eine Replikation die bereits definiert ist starten/durchführen kann. Erst den Job für die Veröffentlichung und dann den Job für die Verteilung! und das alles nicht mit der Maus im Management Studio oder mit einem Zeitplan sondern mit einem T-SQL-Statement. Weiß jemand wie das geht?

 

Link zu diesem Kommentar

Genau und ich wollte gerne wissen, wie ich diese Replikation mittels SQL-Script starten kann. Also ganz konkret: Wie würde der Befehl/das SQL Skript aussehen?

Achso, sorry, das habe so nicht aus deinem ersten Posting verstanden. Ich ging davon aus, Du hast das schon und willst es nur noch per Batch von extern starten lassen.

 

Wenn ich das richtig weiß, wird die Replikation von einem Agent aus gestartet, den müsstest Du also beenden und neu starten. Das ist ein normaler Windows Dienst. Aber schau dir diesen Artikel an, vielleicht kommst Du damit schon in die richtige Richtung:

http://msdn.microsoft.com/en-us/library/ms147855%28v=sql.105%29.aspx

http://msdn.microsoft.com/en-us/library/ms147364%28v=sql.105%29.aspx

http://stackoverflow.com/questions/220340/how-do-i-check-sql-replication-status-via-t-sql

Link zu diesem Kommentar

Danke, aber ich habe es mittlerweile selbst herausgefunden....

 

für das Asuführen einer Snapshotveröffentlichung:

EXEC sp_startpublication_snapshot @publication = 'publicationname';

 

Oder für das Ausführen eines Jobs(für Veröffentlichung oder Verteilung):

EXEC MSDB.dbo.sp_start_job @job_name = 'jobname';

 

Nun habe ich nur das Problem, dass beide jobs gleichzeit ausgeführt werden. Doch ich möchte den 2ten Job erst starten wenn der 1ste abgeschlossen ist. Gibt es hierfür eine einfache Methode ohne "Wait For" und komplizierte Schleifen?

bearbeitet von ho-lle
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...