কার্য সম্পাদনকারীদের মধ্যে থেকেই কাজের আইডি বা কাজের নাম পান


12

আমার একটি কেন্দ্রীয় ডিবি রয়েছে যা আমি আমার সমস্ত সার্ভারগুলিতে কাজের ফলাফল লিখি। আমি এসকিউএল জবটিতে পাওয়ারশেলের মাধ্যমে 3 টি প্যারামিটারগুলি পাসওয়ার্ড দিয়ে আবার কেন্দ্রীয় সার্ভারে এমন একটি এসপিতে ফিরে যাই যা যাচাই করে যে সেই সময়ে চাকরীটি চালানো উচিত, ইত্যাদি SS & এমন চাকরিগুলি যা চালিত হয়নি তবে তাদের উচিত (বা যদি কোনও সময়সূচী নিয়ে গোলমাল হয়)।

এটি করার জন্য, প্রতিটি সার্ভারে প্রতিটি কাজের সাথে আমার কাছে 2 টি কাজের পদক্ষেপ যুক্ত হয়েছে এবং আমি স্ক্রিপ্টটি হ্রাস করতে চাই প্রতিটি কাজের সাথে মাত্র 1 টি পদক্ষেপ যুক্ত করতে পারি .. সম্ভবত এটি কোনও নেটওয়ার্ক শেয়ার থেকে কলও করতে পারে ..

তবে আমার ইস্যুটি আমি পাস হওয়া 3 টি প্যারামিটারগুলির মধ্যে একটি। এক্সিকিউটিভ কাজের মধ্য থেকে আমাকে এক্সিকিউটিভ জোবিড বা কাজের নাম নেওয়া দরকার যাতে নাম প্যারামিটারটি হার্ডকোড না করতে হয়। আমি পাস করা 3 টি প্যারামিটার হ'ল জোবিড, স্ট্যাটাস (সাফল্য / ব্যর্থ), ত্রুটিমুক্তি। আমি যে পাওয়ারশেল লিপিটি লিখেছি তা বেশ সোজা।

ইনভোক-এসকিউএলসিএমডি-সার্ভারআইনস্ট্যান্স "এমওয়াইরোমেটসাইস্টেম" - ডেটাবেসেস রিমোটডিবি -কিউইরি "এক্সিকিউটিভ ডিবিও। জবব_লগ 'জোবনেম / আইডি', 'সাফল্য / ব্যর্থ', 'খারাপ বার্তা এখানে'"

এটি টেবিলে আমার যা প্রয়োজন তা লিখেছেন। আমি msdb.dbo.sp_help_job / msdb.dbo.sp_get_composite_job_info / dbo.xp_sqlagent_enum_jobs / এ দেখেছি তবে এগুলির কোনওটিই গ্যারান্টি দিবে না যে 1 টিরও বেশি কর্মী নিযুক্ত হওয়ার ইভেন্টে আমি সঠিক নির্বাহী কাজের আইডি বা নাম পাব একই সময়.

এমনকি আমি সিস.সাইস প্রসেসিসগুলিতেও দেখার চেষ্টা করেছি কিন্তু আমি মনে করি যেহেতু এজেন্টের কাজটি পাওয়ারশেল স্ক্রিপ্ট, তাই এটি "। নেট স্ক্যালক্লায়েন্ট ডেটা সরবরাহকারী" হিসাবে দেখায় তাই আমি বাইনারি জোবিডকে যে চাকরিগুলি "এসকিউএলজেন্ট -" হিসাবে দেখায় তা ছাঁটাইতে পারি না টিএসকিউএল জবস্টেপ (কাজ 0xF1800243164745429C30474FFD5C990C: পদক্ষেপ 1) "--- এটি আমি ডেনি চেরির পোস্ট থেকে শিখেছি - ধন্যবাদ ড্যানি-

এক্সিকিউটিভ জোবিডকে কীভাবে দখল করা যায় সে সম্পর্কে কোনও ধারণা প্রশংসিত হবে।

ধন্যবাদ,

ক্রিস

উত্তর:


19

আপনার নিজের কাজের আইডি পেতে আপনার কাজের পদক্ষেপগুলিতে টোকেন ব্যবহার করতে হবে। বিশদ এখানে: চাকরি পদক্ষেপে টোকেন ব্যবহার

নিবন্ধের শেষে চাকরীর সাথে একটি উদাহরণ রয়েছে:

SELECT * FROM msdb.dbo.sysjobs
WHERE @JobID = CONVERT(uniqueidentifier, $(ESCAPE_NONE(JOBID))) ; 

আমি আগে টোকেনের সাথে কাজ করছিলাম, তবে এগুলি ত্যাগ করেছি কারণ আমি পাওয়ারশেলের সাহায্যে তাদের সঠিকভাবে কাজ করতে না পারায়। আমি এখন ডিবাগ করছি। তোমাদের দুজনকেই অনেক ধন্যবাদ।
ক্লিনফিল

1

এটি কাজ করতে, আমি invoke-sqlcmdস্কয়ার এজেন্ট যদিও পাওয়ারশেলে সেমিডলেট ব্যবহার করছিলাম। উপরে প্রাপ্ত তথ্যগুলি ব্যবহার করে, আমি যা কাজ করেছি তার সাথে এটিই:

$var = Invoke-sqlcmd -Server "Server\Instance" -Query "select name from msdb.dbo.sysjobs WHERE job_id = CONVERT(uniqueidentifier, $(ESCAPE_SQUOTE(JOBID)))" -- This gives me the job name at runtime

$varname = $var.name -- here i have to put just the name into a variable

Invoke-sqlcmd -Server "server\instance" -Database "remote database" -Query "exec dbo.JOB_LOG $varname,'JOB STATUS HERE','LOG MESSAGE HERE';" 
--here I pass that to the remote system

যে অংশটি আমাকে পেয়েছিল তা হ'ল আমাকে এই লাইনটি যুক্ত করতে হয়েছিল

$varname = $var.name

কারণ যদি আমি এটি যুক্ত না করি তবে প্রাথমিক পরিবর্তনশীল $ varটি কাজের কলামের নামের সাথে system.data.datatable শিরোনামের মধ্যে দীর্ঘ দিয়ে দেবে, সুতরাং এটি চলকটি ক্যারিয়ারের রান-টাইমে বিশৃঙ্খলা সৃষ্টি করেছিল।

আশা করি এটি অন্য কাউকে রাস্তায় নামতে সহায়তা করতে পারে।



-2
DECLARE @jobname sysname, @jobid uniqueidentifier

SELECT @jobname=b.name,@jobid=b.job_id  
FROM sys.dm_exec_sessions a,msdb.dbo.sysjobs b
WHERE a.session_id=@@spid
AND 
(SUBSTRING(MASTER.dbo.FN_VARBINTOHEXSTR(CONVERT(VARBINARY(16), b.JOB_ID)),1,10)) = SUBSTRING(a.PROGRAM_NAME,30,10)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.