Saya memiliki pusat DB yang saya tulis hasil pekerjaan di semua server saya kembali ke. Saya melewati 3 parameter melalui PowerShell dalam pekerjaan SQL kembali ke sp di server pusat yang memverifikasi pekerjaan harus berjalan pada waktu itu, dll. Info ini kemudian diekspos melalui SSR sehingga kita dapat melihat kegagalan pekerjaan / pekerjaan yang berjalan lama / & pekerjaan yang belum berjalan tetapi seharusnya (atau jika seseorang mengacaukan jadwal).
Untuk melakukan ini, saya memiliki 2 langkah kerja yang ditambahkan ke setiap pekerjaan di setiap server dan saya ingin mengurangi skrip menjadi hanya 1 langkah yang ditambahkan ke setiap pekerjaan .. bahkan mungkin menyebutnya dari jaringan berbagi ..
Tetapi masalah saya adalah salah satu dari 3 parameter yang saya berikan. Saya perlu mendapatkan jobid pelaksana atau nama pekerjaan dari dalam pekerjaan pelaksana jadi saya tidak perlu mengubah kode parameter nama. 3 parameter yang saya lewati adalah jobid, status (berhasil / gagal), errormsg. Skrip PowerShell yang saya tulis cukup mudah.
Invoke-sqlcmd -ServerInstance "MYRemoteSYSTEM" -Database remoteDB -Query "exec dbo.JOB_LOG 'JOBNAME / ID', 'Sukses / GAGAL', 'PESAN BURUK DI SINI'
Ini menulis apa yang saya butuhkan di atas meja. Saya telah melihat msdb.dbo.sp_help_job / msdb.dbo.sp_get_composite_job_info / dbo.xp_sqlagent_enum_jobs / tetapi tidak satupun dari ini akan menjamin saya mendapatkan ID atau nama pekerjaan pelaksana yang benar jika ada lebih dari 1 pekerjaan yang dieksekusi di waktu yang sama.
Saya bahkan sudah mencoba melihat proses sys.sys tapi saya pikir karena pekerjaan agen adalah skrip PowerShell, ini menunjukkan sebagai ". Penyedia Data SqlClient Bersih" jadi saya tidak dapat memangkas biner JOBID dari pekerjaan yang menunjukkan "SQLAgent - TSQL JobStep (Job 0xF1800243164745429C30474FFD5C990C: Langkah 1) "--- ini saya pelajari dari pos Denny cherry - terima kasih denny-
Setiap ide tentang cara mengambil jobid pelaksana akan sangat dihargai.
Terima kasih,
Chris
sumber
Untuk mendapatkan ini berfungsi, saya menggunakan
invoke-sqlcmd
cmdlet di PowerShell meskipun agen sql. Dengan menggunakan informasi yang saya terima di atas, inilah yang saya temukan yang berfungsi:Satu bagian yang membuat saya adalah saya harus menambahkan baris ini
karena jika saya tidak menambahkan ini, variabel awal $ var akan melewati header system.data.datatable lama dengan nama kolom pekerjaan, sehingga menyebabkan variabel untuk mengacaukan kueri pada saat run time.
Semoga ini bisa membantu orang lain di jalan.
sumber
Periksa ini:
sumber
sumber