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

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“

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/

Erkennen ob ein Agent Job noch läuft und diesen ggf. auch abbrechen….

Link: https://www.sqlservercentral.com/Forums/Topic1156549-391-1.aspx

/*
Erkennen ob ein Agent Job noch läuft und diesen ggf. auch abbrechen....

Link: https://www.sqlservercentral.com/Forums/Topic1156549-391-1.aspx

*/
SELECT [sjv].[name], [sjv].[description], [sja].[run_requested_date], [sja].[last_executed_step_id]
FROM [msdb].[dbo].[sysjobs_view] sjv
JOIN [msdb].[dbo].[sysjobactivity] sja
ON [sjv].[job_id] = [sja].[job_id]
WHERE [sja].[run_requested_date] is not null
AND [sja].[stop_execution_date] is null




USE msdb
GO
--EXEC dbo.sp_stop_job N'....hier den namen des Jobs...'