চাকরি বিভাগে কোনও কাজ ব্যর্থ হলে সতর্কতা অবলম্বন করুন


11

এসকিউএল সার্ভার ২০০৮ এ কি কোনও সতর্কতা স্থাপন করা সম্ভব যা কোনও নির্দিষ্ট বিভাগের কোনও কাজ ব্যর্থ হলে যে কোনও সময় কোনও ইমেল প্রেরণ করবে?

আমি ভাবছি কারণ আমি যখনই কোনও এসএসআরএস সাবস্ক্রিপশন ব্যর্থ হয় তখন কোনও ইমেল সেট আপ করতে চাই - এবং এই সাবস্ক্রিপশনগুলির মধ্যে সমস্তই রিপোর্ট সার্ভার বিভাগে কাজ করে ।

সম্পাদনা - এটি দেখা যাচ্ছে যে যখন কোনও এসএসআরএস সাবস্ক্রিপশন ব্যর্থ হয়, কাজ নিজেই ব্যর্থ হয় না , সুতরাং আমার প্রশ্নটি এসএসআরএস সাবস্ক্রিপশন পর্যবেক্ষণ ব্যবহারের জন্য প্রযোজ্য হবে না। তবে আমি এখনও আমাদের অন্যান্য পরিবেশের জন্য জানতে চাই যা আমরা আমাদের পরিবেশে চলে


একটি পদক্ষেপ কি কমপক্ষে ব্যর্থ হয়? নীচের আমার উত্তরটি 'রিপোর্ট সার্ভার' বিভাগের চাকরিগুলিকে দেখায় তবে আপনি যদি কেবল সমস্ত চাকরি চান তবে আপনি সেই পুরো AND EXISTSঅংশটি সরাতে পারবেন INSERT/SELECT। এবং সম্ভবত নামটি ReportServerJob_FailQueueআরও সাধারণ কিছুতে পরিবর্তন করুন । :-)
অ্যারন বারট্রান্ড

দুর্ভাগ্যক্রমে, কোনও পদক্ষেপ ব্যর্থ হয় না - তবে আমি আত্মবিশ্বাসী যে আমি আরও কিছু পর্যবেক্ষণ ব্যবস্থা নিয়ে আসতে পারি!
জেএইচএফবি

উত্তর:


10

আপনি এমন একটি কাজ তৈরি করতে পারেন যা প্রতি মিনিটে msdb.dbo.sysjobhistory টেবিলটি পরীক্ষা করে (বা তবে আপনি প্রায়শই চান)) আপনি একটি সারি সারণি বাস্তবায়ন করতে চাইতে পারেন তাই আপনি একবারে কেবল কোনও একক দোষে বার্তা প্রেরণ করেন।

USE msdb;
GO

CREATE TABLE dbo.ReportServerJob_FailQueue
(
  job_id UNIQUEIDENTIFIER,
  run_date INT,
  run_time INT, -- horrible schema, just matching sysjobhistory
  sql_message_id INT,
  sent BIT NOT NULL DEFAULT 0,
  PRIMARY KEY (job_id, run_date, run_time)
);

সুতরাং আপনার কোড, যে আপনি একটি কাজের সময় নির্ধারণ করতে পারেন, হয়ে যায়:

INSERT dbo.ReportServerJob_FailQueue
  (job_id, run_date, run_time, sql_message_id)
SELECT job_id, run_date, run_time, sql_message_id
FROM msdb.dbo.sysjobhistory AS h
WHERE step_id = 0 
AND run_status = 0
AND EXISTS 
(
  SELECT 1 FROM msdb.dbo.sysjobs AS j
    INNER JOIN msdb.dbo.syscategories AS c
    ON j.category_id = c.category_id
    WHERE j.job_id = h.job_id
   AND c.name = 'Report Server'
)
AND NOT EXISTS 
(
  SELECT 1 FROM dbo.ReportServerJob_FailQueue
    WHERE job_id = h.job_id
    AND run_date = h.run_date
    AND run_time = h.run_time
);

এখন আমি ধরে নিয়েছি যে প্রতিটি ব্যর্থতার জন্য আপনি একটি পৃথক ই-মেইল প্রেরণ করতে চান, সুতরাং এটিও চাকরীর অংশ হতে পারে (বা অন্য কোনও কাজের অংশ হতে পারে, যদিও এটি প্রয়োজনীয় জ্ঞানী নয়):

DECLARE 
  @subject NVARCHAR(4000),
  @body NVARCHAR(4000),
  @name SYSNAME,
  @id UNIQUEIDENTIFIER,
  @date INT,
  @time INT,
  @msg INT;

DECLARE c CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY
FOR SELECT q.job_id, q.run_date, q.run_time, q.sql_message_id, j.name
  FROM dbo.ReportServerJob_FailQueue AS q
  INNER JOIN msdb.dbo.sysjobs AS j
  ON q.job_id = j.job_id
  WHERE q.sent = 0;

OPEN c;

FETCH NEXT FROM c INTO @id, @date, @time, @msg, @name;

WHILE @@FETCH_STATUS = 0
BEGIN

  SET @subject = 'Report Server job ' + @name + ' failed.';
  SET @body = 'Error number: ' + RTRIM(@msg);

  BEGIN TRY
    EXEC msdb.dbo.sp_send_dbmail 
      @profile_name = 'default',     -- you may need to change this
      @recipients   = 'foo@bar.com', -- you will need to change this
      @subject      = @subject,
      @body         = @body;

    UPDATE dbo.ReportServerJob_FailQueue
      SET sent = 1 
      WHERE job_id = @id
      AND run_date = @date
      AND run_time = @time;
  END TRY
  BEGIN CATCH
    PRINT 'Will have to try that one again later.';
  END

  FETCH NEXT FROM c INTO @id, @date, @time, @msg, @name;
END

CLOSE c; DEALLOCATE c;

এছাড়াও কিছু অন্যান্য বিকল্প আছে:

  • sysjobhistory.message এ টানুন
  • ব্যর্থ হওয়া পৃথক পদক্ষেপগুলি দেখুন
  • একাধিক ব্যর্থতা থাকলেও কেবলমাত্র n মিনিট / ঘন্টা একবারে যে কোনও কাজের জন্য একটি বার্তা প্রেরণ করুন
  • প্রতিটি ব্যর্থতার জন্য একটি ই-মেইলের পরিবর্তে ব্যর্থ হয়েছে এমন সমস্ত কাজের তালিকার একটি একক ইমেল প্রেরণ করুন
  • আপনি বার্তায় রান_ডেট এবং রান_টাইম অন্তর্ভুক্ত করতে চাইতে পারেন, যেহেতু ই-মেইলটি প্রেরণ বা কাজটি আসলে ব্যর্থ হওয়ার সঠিক পরিমাপ হওয়ার জন্য দ্রুত পাওয়া যায় না (আমি এটি এখানে অন্তর্ভুক্ত করিনি কারণ তাদের ভয়াবহ ডেটা টাইপ পছন্দগুলি যে জিনিসটি একটি রাজকীয় পিআইটিএ ফর্ম্যাটিং করা)
  • আপনি সম্ভবত কিছু সময়ের পরে পুরানো সারিগুলি পরিষ্কার করতে চাইবেন, তাই খাঁটি কমান্ডটিও পছন্দ করা যেতে পারে

যদি ডেটাবেস মেল ইতিমধ্যে সেট আপ করা না থাকে, দয়া করে এই টিউটোরিয়ালটি দেখুন

আপনি তৃতীয় পক্ষের সরঞ্জামগুলিও ব্যবহার করতে পারেন (যেমন এসকিউএল সেন্ট্রি ইভেন্ট ম্যানেজার ) যা এইটিকে অনেক সহজ করে তুলবে। সম্পূর্ণ প্রকাশ: আমি এসকিউএল সেন্ট্রি এর জন্য কাজ করি।


0

আপনার সম্পাদনার উপর ভিত্তি করে, এটি এসএসআরএস সাবস্ক্রিপশন ব্যর্থতা (কেবল এসকিউএল এজেন্ট কাজ নয়) সম্পর্কিত হারুনের উত্তরের কেবলমাত্র একটি এক্সটেনশন হবে। আমি জব মনিটরিং জবটিতে কেবল একটি পদক্ষেপে যুক্ত করার পরামর্শ দেব বা আপনি এটি সম্পূর্ণ আলাদা কাজ হিসাবে করতে পারেন।

সদস্যতা স্থিতি পেতে আপনি শুধু পরীক্ষা হবে ReportServer.dbo.ExecutionLog3 দৃশ্যStatusকলাম কিছুই কিন্তু প্রদর্শন করা হবে rsSuccessব্যর্থতা উপর। শুধু জন্য ফিল্টার RequestType = 'Subscription'। আপনি কিছু সময় চেক অন্তর্ভুক্ত করতে চাইবেন, যাতে আপনি প্রতিবার সমস্ত রেকর্ড পরীক্ষা করেন না। আপনি যদি প্রতি 15 মিনিটে কাজটি চালান তবে কেবল TimeStartগত 15 মিনিটের জন্য পরীক্ষা করুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.