কর্মসূচী সর্বদা সফল বলা সত্ত্বেও নির্ধারিত ব্যাকআপ টাস্ক সব ডেটাবেজে ব্যাকআপ রাখে না


9

আমার এসকিউএল ২০০৮ এ একটি চাকরি আছে যা সমস্ত ডাটাবেস ব্যাকআপ করতে একটি সঞ্চিত প্রোক চালায়। এটি স্কয়ার সার্ভার এজেন্ট কাজের মাধ্যমে প্রতিদিন চালিত হয়।

এটি প্রতিদিন সাফল্যের সাথে প্রস্থান করে তবে কিছু ডেটাবেস ব্যাক আপ করার পরে কিছু দিন এটি সাফল্যের সাথে প্রস্থান করে। এটি প্রতিবার বিভিন্ন সংখ্যক ডাটাবেস হতে পারে। বেশিরভাগ দিন এটি সফলভাবে সমস্ত ডাটাবেস ব্যাকআপ করে তবে কখনও কখনও 2 টি ব্যাকআপ সফলভাবে, কখনও কখনও 5 ইত্যাদি

আমি কাজের ইতিহাস, ইভেন্ট ভিউয়ার বা এসকিএল সার্ভার লগের কোনও ত্রুটি দেখতে পাচ্ছি না।

ব্যাকআপগুলি স্থানীয় ডিস্কে স্থান নিচ্ছে, যদিও ফোল্ডারটি একটি প্রসারণযোগ্য স্টোরেজ ভলিউমের কোনও ফোল্ডারে "জংশন"।

ওএস হ'ল উইন্ডোজ 2003 64 বিট চলমান এসকিএল সার্ভার 2008 ওয়েব সংস্করণ 64 বিট ভার্চুয়াল মেশিন হিসাবে ভিএমওয়্যার ইএসসিআই 5 হোস্টে চলছে।

সংরক্ষিত নীতিমালা:

ALTER PROCEDURE [dbo].[backup_all_databases] 
@path VARCHAR(255)='c:\backups\'

AS

DECLARE @name VARCHAR(50) -- database name  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name 
DECLARE @dbIsReadOnly sql_variant -- is database read_only?
DECLARE @dbIsOffline sql_variant -- is database offline?

DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('tempdb')
AND version > 0 AND version IS NOT NULL

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   

WHILE @@FETCH_STATUS = 0   
BEGIN   
SET @fileName = @path + @name + '.bak'

SET @dbIsReadOnly = (SELECT DATABASEPROPERTY(@name, 'IsReadOnly')) -- 1 = Read Only
SET @dbIsOffline = (SELECT DATABASEPROPERTY(@name, 'IsOffline')) -- 1 = Offline

IF (@dbIsReadOnly = 0 OR @dbIsReadOnly IS NULL) AND @dbIsOffline =0
BEGIN
    BACKUP DATABASE @name TO DISK = @fileName  WITH INIT
    WAITFOR DELAY '00:00:20'
END

FETCH NEXT FROM db_cursor INTO @name 
END   

CLOSE db_cursor   
DEALLOCATE db_cursor

কোন পরামর্শ দয়া করে?

উত্তর:


9

আমি ত্রুটিগুলি পরিচালনা করতে এবং সেগুলিতে লগ করার জন্য ট্রাই / ক্যাচ ব্লক যুক্ত করব। ডিবি পুনরুদ্ধার করা বা যা কিছু হোক, একক ব্যবহারকারীর মধ্যে থাকতে পারে।

এটি ছাড়া ত্রুটিগুলি এমনভাবে বাতিল করতে পারে যাতে কোনও ত্রুটি লগ হয় না (বিবৃতি, ব্যাচ, স্কোপ, সংযোগ ইত্যাদি)

ট্রাই / ক্যাচ দিয়ে কি তবে সংকলন বা সংযোগ বিলোপের ত্রুটি বাদে সমস্ত কিছু লগ হয়? তবে আমি সন্দেহ করি যে এটিই ঘটনাটি।

আমি সিস.ড্যাটাবেসগুলিও ব্যবহার করতাম যা সিসডাটাবেসগুলি প্রতিস্থাপন করে এবং আরও পতাকা পড়ত:

-- declares etc

BEGIN TRY

    DECLARE db_cursor CURSOR FOR  
    SELECT name, state, user_access
    FROM sys.databases 
    WHERE name NOT IN ('tempdb')

    OPEN db_cursor   
    FETCH NEXT FROM db_cursor INTO @name, @state, @user_access

    WHILE @@FETCH_STATUS = 0   
    BEGIN   

        SET @fileName = @path + @name + '.bak'
        IF @state = 0 AND user_access = 0
        BEGIN
            BEGIN TRY
                BACKUP DATABASE @name TO DISK = @fileName  WITH INIT
            END TRY
            BEGIN CATCH
                -- log but do not rethrow so loop continues
            END CATCH
            WAITFOR DELAY '00:00:20'
        END
        ELSE
           --log user and/or state issues

        FETCH NEXT FROM db_cursor INTO @name 
    END   

    CLOSE db_cursor   
    DEALLOCATE db_cursor

END TRY
BEGIN CATCH
  -- some useful stuff here
END CATCH

Sys.databases ব্যবহারের পরামর্শের জন্য +1
পিটার শোফিল্ড

2

"ব্যাকআপ" কমান্ডের পরে ত্রুটিগুলি পরীক্ষা করুন, কোনও ত্রুটি সনাক্ত হওয়ার জন্য আপনার নিজের ইমেলটি প্রেরণ করুন।

এটি আপনাকে কী চলছে তা দেখার জন্য একটি প্রাথমিক পয়েন্ট দেবে এবং আপনার কাজের সমস্যা সমাধান না হওয়া অবধি কোনও সমস্যা সম্পর্কে আপনাকে সতর্ক করার গ্যারান্টি দেয়।


2

কার্সার দিয়ে একটি অর্ডার দিন। আমি এসএসকিউএলকে ডেটা ফেরতের ক্রমটি নির্বাচন করার অনুমতি দিলে সিস্টেমে ডেটাবেসগুলিতে কার্সারগুলির "সমস্যা" রয়েছে। নাম দিয়ে অর্ডার করা যথেষ্ট হওয়া উচিত।


2

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


আমার এরকম কিছু জানা নেই. ব্যাকআপ স্থানীয়ভাবে করা হয় তারপরে আর কয়েক ঘন্টা পরে আরএসসিএন-এডি অফসাইট করা হয়।
অ্যান্ডি ডেভিস 21

0

এসকিউএল সার্ভার ২০০৩-এর প্রবর্তনের সাথে সাথে, সিসডাটাবেসস এমনকি সিস.ড্যাব ডাটাবেসগুলির মাধ্যমে কার্সার লুপটি পরিবর্তিত হয়েছিল যাতে এটি নির্ভরযোগ্য নয় - এবং আচরণের এই পরিবর্তনটিও sp_foreachdb এর সাথে দেখা যেতে পারে।

আমি কার্সারের প্রকারের সাহায্যের পরিবর্তনের সাহায্য পেয়েছি (আমি মনে করি এটি দ্রুত এগিয়ে ছিল) তবে শেষ পর্যন্ত আমি ওলা হ্যালেনগ্রেনের ব্যাকআপ এবং রক্ষণাবেক্ষণ সমাধানের মতো সমাধানগুলিতে স্যুইচ করেছি। ব্যাকআপগুলির মতো সমালোচনামূলক বেশিরভাগ জিনিসের মতো, আপনার এখনও এই সমস্ত সম্ভাব্য সমাধানগুলি সহ ব্যাক আপ করা হয়েছে তা নিশ্চিত করার জন্য আপনাকে সমস্ত ডাটাবেস ক্রস-চেক করতে হবে - এবং আপনি স্পষ্টতই করেছেন, এত ভাল!

কার্সারের প্রকারগুলি: http://msdn.microsoft.com/en-us/library/ms378405(v=SQL.90).aspx

ওলার রক্ষণাবেক্ষণ সমাধান: http://ola.hallengren.com/


0

আমার একই সমস্যা ছিল, বিশেষত বড় ডিবিগুলিকে ব্যাক আপ করার সময়।

@@fetch_statusএকটি বিশ্বব্যাপী পরিবর্তনশীল, তাই এটি আপনার চেয়ে অন্য কার্সার দ্বারা পরিবর্তিত হতে পারে (0 তে সেট করা)। আমি নিম্নলিখিতটি ব্যবহার করে এটি সমাধান করেছি (সিউডোকোডে):

create a temp table with dbNames
select top 1 in a variable (use order by)
while variable is null
do your thing

set variable = null
delete top 1(use order by)
select top 1 in a variable (use order by)
loop

-1

আমি এই সমস্যাটি সনাক্ত করার চেষ্টা করেছি এবং মনে হয় বহুবার ব্যবহারকারীরা সমাধান পোস্ট করেছেন যে আপনি যদি কার্সার ঘোষণাকে সংবেদনশীল করেন তবে এটি কাজ শুরু করে। সুতরাং আমি এটি পরীক্ষা করেছি এবং হ্যাঁ এটি নিশ্চিত করে যে আপনার কার্সারটি অচল এবং এটি কাজ শুরু করে declare

যার জন্য এটি ব্যর্থ হয় - হ'ল আপনার সার্ভার স্তরের কার্সার থ্রেশহোল্ড সেটিংসটি পরীক্ষা করুন - যদি এটি -1 হিসাবে কনফিগার করা থাকে তবে এর অর্থ হ'ল কার্সার কী সেট ডেটা পড়ার চেষ্টা করার সময় সমস্ত কার্সার সিঙ্ক্রোনালিভাবে অন্য শব্দের সাথে পপুলেটে চলেছে এবং সবগুলি চেষ্টা করার চেষ্টা করা হয় একই সাথে পড়ুন। যদি আমরা এই মানটি 0 তে পরিবর্তন করি যা এসকিউএল সার্ভারকে সাধারণ শব্দগুলিতে অ্যাসিক্রোনাস জনসংখ্যা করতে বলে তবে কার্সার রেকর্ডগুলি আনতে পারে যখন কী সেটটি পপুলেটিং হবে এবং আপনি দেখতে পাবেন যে সার্ভার স্তরে এই পরিবর্তনটি করার পরে আপনি কখনই কোনও ডাটাবেস মিস করবেন না এক্সিকিউটেবল-এর পাথ।

সমাধান: হয় কার্সার স্ট্যাটিক ঘোষণা করুন বা সার্ভার স্তর পরিবর্তনটি "কার্সার থ্রেশহোল্ড" -1 থেকে 0 এ করুন।

ধন্যবাদ, গৌরব মিশ্র | সিনিয়র ডিবিএ

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