Geri tüm sunucularıma iş sonuçları yazmak merkezi bir DB var. Bir SQL işinde powershell aracılığıyla 3 parametreyi, işin o sırada çalışması gerektiğini doğrulayan merkezi sunucudaki bir sp'ye geri geçiririm. Daha sonra bilgi, bir iş hatası / uzun süre çalışan iş / & Çalışmamış ancak olması gereken işler (veya birisi bir programla uğraştıysa)
Bunu yapmak için, her sunucuda her işe eklenmiş 2 iş adımı var ve her iş için sadece 1 adım ekledi betiği azaltmak istiyorum .. muhtemelen hatta bir ağ paylaşımından çağırmak ..
Ama benim sorunum geçtiğim 3 parametreden biri. Ben name parametresini sabit kodlamak zorunda değilim yürütme işi içinde yürütme jobid veya iş adı almak gerekiyor. Geçtiğim 3 parametre iş kimliği, durum (başarı / başarısız), errormsg. Yazdığım powershell betiği oldukça basit.
Invoke-sqlcmd -ServerInstance "MYRemoteSYSTEM" -Database remoteDB -Query "exec dbo.JOB_LOG 'JOBNAME / ID', 'Başarılı / BAŞARISIZ', 'KÖTÜ MESAJ BURADA'"
Bu tabloya ihtiyacım olan şeyi yazıyor. Ben msdb.dbo.sp_help_job / msdb.dbo.sp_get_composite_job_info / dbo.xp_sqlagent_enum_jobs / 'a baktım ama bunların hiçbiri, 1'den fazla işin yürütülmesi durumunda doğru yürütme işinin kimliğini veya adını alacağımı garanti etmeyecek Aynı zaman.
Ben bile sys.sysprocesses baktı denedim ama ajan işi bir powershell komut dosyası olduğundan, ".Net SqlClient veri sağlayıcı" olarak gösterir, bu yüzden "SQLAgent - olarak gösterilen işler kapalı ikili JOBID kesemezsiniz düşünüyorum TSQL JobStep (İş 0xF1800243164745429C30474FFD5C990C: Adım 1) "--- bu Denny kiraz'ın gönderisinden öğrendim - teşekkürler denny-
Yürütme iş kimliğini nasıl alacağınıza dair herhangi bir fikir çok takdir edilecektir.
Teşekkürler,
Chris