ব্যাকআপ পুনরুদ্ধার করার সময়, আমি কীভাবে সমস্ত সক্রিয় সংযোগ বিচ্ছিন্ন করব?


166

সক্রিয় সংযোগের কারণে আমার এসকিউএল সার্ভার 2005 ব্যাকআপ পুনরুদ্ধার করে না। আমি কীভাবে এটি জোর করতে পারি?


আপনি যে ডাটাবেসটিতে "পুনরুদ্ধার করতে চান" তার সব সংযোগটি সর্বদা হত্যা করতে চান? বা এমন সময় আসবে যখন আপনি বিদ্যমান সংযোগগুলি হত্যা করতে চান না? এছাড়াও, আপনার কি সংযোগ পুলিং সম্পর্কে চিন্তা করতে হবে?
ফিলিপ কেলি

উত্তর:


177

এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও 2005

আপনি যখন কোনও ডাটাবেজে ডান ক্লিক করেন এবং ক্লিক করেন Tasksএবং তারপরে ক্লিক করেন Detach Database, এটি সক্রিয় সংযোগগুলির সাথে একটি ডায়ালগ উপস্থিত করে।

বিচ্ছিন্ন স্ক্রিন

"বার্তা" এর অধীনে হাইপারলিঙ্কে ক্লিক করে আপনি সক্রিয় সংযোগগুলি মেরে ফেলতে পারেন।

এরপরে আপনি এই সংযোগগুলি ডেটাবেস বিচ্ছিন্ন না করে হত্যা করতে পারেন।

আরও তথ্য এখানে

এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও 2008

ইন্টারফেসটি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও ২০০৮-এর পরিবর্তিত হয়েছে, এখানে পদক্ষেপগুলি রয়েছে (এর মাধ্যমে: টিম লেউং )

  1. অবজেক্ট এক্সপ্লোরারে সার্ভারকে ডান ক্লিক করুন এবং 'ক্রিয়াকলাপ মনিটর' নির্বাচন করুন।
  2. এটি যখন খোলে, প্রক্রিয়া গোষ্ঠীটি প্রসারিত করুন।
  3. এখন ডাটাবেসের নাম অনুসারে ফলাফলগুলি ফিল্টার করতে ড্রপ-ডাউন ব্যবহার করুন।
  4. 'কিল প্রসেস' অপশনটি ডান ক্লিক করে সার্ভার সংযোগগুলি বন্ধ করুন।

21
আপনার যদি @ রায়ানর মতো একই সমস্যা হয় তবে এটি সম্ভবত আপনি ম্যানেজমেন্ট স্টুডিও ২০০ 2005 এর পরিবর্তে ম্যানেজমেন্ট স্টুডিও ২০০ ((বা তারপরে) ব্যবহার করছেন। এক্সপ্লোরার এবং 'ক্রিয়াকলাপ মনিটর' নির্বাচন করুন। এটি যখন খোলে, প্রক্রিয়া গোষ্ঠীটি প্রসারিত করুন। এখন ডাটাবেসের নাম অনুসারে ফলাফলগুলি ফিল্টার করতে ড্রপ-ডাউন ব্যবহার করুন। ডান ক্লিকের 'কিল প্রসেস' বিকল্পটি নির্বাচন করে আপনি এখন আপনার সংযোগগুলি বন্ধ করতে পারেন।
টিম লেইং

195

আপনি আপনার ডিবিটিকে একক ব্যবহারকারী মোডে সেট করতে চান, পুনরুদ্ধারটি করুন, তারপরে আবার মাল্টিউজারে সেট করুন:

ALTER DATABASE YourDB
SET SINGLE_USER WITH
ROLLBACK AFTER 60 --this will give your current connections 60 seconds to complete

--Do Actual Restore
RESTORE DATABASE YourDB
FROM DISK = 'D:\BackUp\YourBaackUpFile.bak'
WITH MOVE 'YourMDFLogicalName' TO 'D:\Data\YourMDFFile.mdf',
MOVE 'YourLDFLogicalName' TO 'D:\Data\YourLDFFile.ldf'

/*If there is no error in statement before database will be in multiuser
mode.  If error occurs please execute following command it will convert
database in multi user.*/
ALTER DATABASE YourDB SET MULTI_USER
GO

তথ্যসূত্র: পিনাল ডেভ ( http://blog.SQLAuthority.com )

অফিসিয়াল রেফারেন্স: https://msdn.microsoft.com/en-us/library/ms345598.aspx


11
একটি তাত্ক্ষণিক রোলব্যাক ইস্যু করার পরিবর্তে এটি নির্দিষ্ট রোলের পরে কেবল রোলব্যাকের ক্ষেত্রেই উপযুক্ত।
জন স্যানসম 16

2
গুড পয়েন্ট, বর্তমান প্রশ্নগুলি সম্পূর্ণ করার অনুমতি দেওয়ার জন্য
আফটার

হাই @ ব্রেন্ডন, যদি রোলব্যাক 60 সেকেন্ডের বেশি নেয়? ধন্যবাদ
user3583912

11
আপনি যদি একটি ডেটাবেস পুনরুদ্ধার করেন তবে আপনি ROLLBACK IMMEDIATEবা না থাকায় উন্মুক্ত লেনদেনগুলি হারাবে ROLLBACK AFTER 60। সেই তথ্যটি সংরক্ষণ করার একমাত্র উপায় হ'ল রোলব্যাকের পরে আর একটি ব্যাকআপ করা। তবে আপনি একটি ভিন্ন ব্যাকআপ থেকে পুনরুদ্ধার করছেন। তো, অপেক্ষা করার বিষয় কী? আমি কিছু অনুপস্থিত করছি?
ডেভ ম্যাসন

@ ডিমনসন, আমিও এই প্রশ্নটি সম্পর্কে আগ্রহী। রোলব্যাক মোড সহ সিঙ্গল_উজার ব্যবহার করা কি অপেক্ষা সময়ের মধ্যে নতুন সংযোগগুলি আটকাতে পারে? যদি তা হয়, তবে আমি অবাক হই যে এটি অন্ততপক্ষে কেবল পঠনযোগ্য ক্রিয়াকলাপগুলি সম্পূর্ণ করার পরিবর্তে হঠাৎ তাদের শেষ করার কোনও পরিষ্কার / সুন্দর উপায়?
জেসন

43

এই কোডটি আমার পক্ষে কাজ করেছিল, এটি একটি ডাটাবেসের সমস্ত বিদ্যমান সংযোগকে হত্যা করে। আপনাকে যা করতে হবে তা হ'ল @dbname = 'databaseName' লাইনটি পরিবর্তন করতে হবে যাতে এতে আপনার ডাটাবেসের নাম থাকে।

Use Master
Go

Declare @dbname sysname

Set @dbname = 'databaseName'

Declare @spid int
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname)
While @spid Is Not Null
Begin
        Execute ('Kill ' + @spid)
        Select @spid = min(spid) from master.dbo.sysprocesses
        where dbid = db_id(@dbname) and spid > @spid
End

এর পরে আমি এটি পুনরুদ্ধার করতে সক্ষম হয়েছি


1
এটি ছিল দ্রুততম পন্থা (একক ইউজারমোড * 20 = 60s, * 20 = 5s কে হত্যা করুন)।
কারসন

এটা আমার জন্য কাজ করে নি। ডাটাবেস এখনও ব্যবহৃত হয়। আমি এসকিউএল সার্ভার 2008 ব্যবহার করি।
মেরেক বার

আমি এই কোডটি বেশ কয়েকবার চালিয়ে দেখতে পেয়েছি, একের পর এক ডানে, অনিবার্যভাবে কৌশলটি চালিয়ে যাবে। কখনও কখনও আপনার কিল এবং পুনরুদ্ধার মধ্যে কিছু sneaks। এবং কখনও কখনও আপনাকে কিলটি চালাতে হয় তখন একের পর এক পুনরুদ্ধার করুন।
জন ওয়াক্লাওস্কি

পুনরায় সংযোগ করার চেষ্টা করার অ্যাপ্লিকেশনটির আগ্রাসনে পুরোপুরি নির্ভর করে। অলস ব্যবহারকারীদের দম্পতি? দুর্দান্ত কাজ করে। উচ্চ-ভলিউম অ্যাপ্লিকেশন সার্ভার যা এক সেকেন্ডের মধ্যে পুনরায় সংযোগ স্থাপন করে? তেমন বেশি না.
ব্র্যাডিসি

5

এটা চেষ্টা কর:

DECLARE UserCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT
    spid
FROM
    master.dbo.sysprocesses
WHERE DB_NAME(dbid) = 'dbname'--replace the dbname with your database
DECLARE @spid SMALLINT
DECLARE @SQLCommand VARCHAR(300)
OPEN UserCursor
FETCH NEXT FROM UserCursor INTO
    @spid
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SQLCommand = 'KILL ' + CAST(@spid AS VARCHAR)
    EXECUTE(@SQLCommand)
    FETCH NEXT FROM UserCursor INTO
        @spid
END
CLOSE UserCursor
DEALLOCATE UserCursor
GO

4

এসকিউএল সার্ভার পুনরায় চালু করা ব্যবহারকারীদের সংযোগ বিচ্ছিন্ন করবে। সবচেয়ে সহজ উপায় আমি খুঁজে পেয়েছি - আপনি যদি সার্ভারটি অফলাইনে নিতে চান তবে ভাল।

তবে কিছু অতি বিতর্কিত কারণে 'টেক অফলাইন' বিকল্পটি নির্ভরযোগ্যভাবে এটি করে না এবং পরিচালনা কনসোলটিকে স্তব্ধ বা বিভ্রান্ত করতে পারে। পুনরায় আরম্ভ হচ্ছে তারপরে অফলাইন কাজগুলি গ্রহণ করা

কখনও কখনও এটি একটি বিকল্প - উদাহরণস্বরূপ যদি আপনি কোনও ওয়েবসারভার বন্ধ করে দেন যা সংযোগগুলির উত্স।


+1 টি। গৃহীত উত্তর এসকিউএল এক্সপ্রেসের জন্য কাজ করবে না (যেমন কোনও দেব পরিবেশে) কারণ এসকিউএল এক্সপ্রেসে ক্রিয়াকলাপের
নজরদারি নেই

1
@ ম্যাটফ্রেয়ার: এটি সত্য নয়! কমপক্ষে ২০০৮ সালে আর 2 এক্সপ্রেসে আমি একটি সরঞ্জামদণ্ডের বোতাম এবং সার্ভার নোডে একটি প্রসঙ্গ মেনু এন্ট্রি দেখতে পাই।
স্টিফান

4
একটি সম্পূর্ণ এসকিউএল সার্ভার পুনরায় চালু করা সমস্ত ডেটাবেজে সংযোগ নষ্ট করবে। একটি সার্ভার হয়ত অনেকগুলি ডাটাবেস সমর্থন করছে তবে কেবলমাত্র এখন একটি পুনরুদ্ধার করা দরকার।
রস প্রেসার

3
এটি 1 ডেটাবেসের সংযোগগুলি হারাতে একেবারে সবচেয়ে খারাপ উপায়। বিশেষত আপনার যদি এখনও অন্য অনেক ডেটাবেস অন্য ব্যবহারকারীরা ব্যবহার করেন। আমি অত্যন্ত এই পদ্ধতিটি ব্যবহার করে আবার পরামর্শ দিই। এটি 100%, মোট ওভারকিল !!
জন ওয়াকালাউস্কি

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

3

এসকিউএল সার্ভার ২০০৮-এ পুনরুদ্ধার প্রসেসটি স্বয়ংক্রিয় করতে গিয়ে আমি এই সমস্যাটি ছড়িয়ে দিয়েছিলাম My

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

DECLARE @SPID int = (SELECT TOP 1 SPID FROM sys.sysprocess WHERE dbid = db_id('dbName'))
While @spid Is Not Null
Begin
        Execute ('Kill ' + @spid)
        Select @spid = top 1 spid from master.dbo.sysprocesses
        where dbid = db_id('dbName')
End

তারপরে, আমি একটি একক_ ব্যবহারকারী মোডে ডাটাবেস সেট করেছি

ALTER DATABASE dbName SET SINGLE_USER

তারপরে, আমি পুনরুদ্ধার চালাচ্ছি ...

RESTORE DATABASE and whatnot

সংযোগগুলি আবার মেরে ফেলুন

(same query as above)

এবং ডাটাবেসটিকে মাল্টি_উজারে ফিরিয়ে দিন।

ALTER DATABASE dbName SET MULTI_USER

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


2

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


2

ইতিমধ্যে প্রদত্ত পরামর্শগুলিতে যুক্ত করতে, আপনার যদি আইআইএস-এর মাধ্যমে ডিবি ব্যবহার করে এমন একটি ওয়েব অ্যাপ্লিকেশন চালু থাকে তবে আপনাকে পুনরুদ্ধার করার সময় অ্যাপটির জন্য অ্যাপ পুলটি (পুনর্ব্যবহার না করা) বন্ধ করতে হবে , তারপরে পুনরায় শুরু করতে হবে। অ্যাপ পুলটি থামানো সক্রিয় HTTP সংযোগগুলি বন্ধ করে দেয় এবং আর কোনও অনুমতি দেয় না, যা অন্যথায় প্রসেসগুলি ট্রিগার করার অনুমতি দেয় এবং এর ফলে ডাটাবেস লক হয়ে যায়। এটি একটি পরিচিত সমস্যা উদাহরণস্বরূপ উম্ব্রাকো কন্টেন্ট ম্যানেজমেন্ট সিস্টেমের সাথে এটির ডাটাবেস পুনরুদ্ধার করার সময়


1

উপরের কেউই আমার পক্ষে কাজ করেনি। আমার ডেটাবেস ক্রিয়াকলাপ মনিটর বা এসপি_ও ব্যবহার করে কোনও সক্রিয় সংযোগ দেখায় না। আমার শেষ পর্যন্ত ছিল:

  • ডাটাবেস নোডে রাইট ক্লিক করুন
  • "বিচ্ছিন্ন ..." নির্বাচন করুন
  • "ড্রপ সংযোগগুলি" বাক্সটি পরীক্ষা করুন
  • পুনরায় সংযুক্ত

সর্বাধিক মার্জিত সমাধান নয় তবে এটি কাজ করে এবং এসকিউএল সার্ভার পুনরায় আরম্ভের প্রয়োজন নেই (আমার পক্ষে কোনও বিকল্প নয়, যেহেতু ডিবি সার্ভার অন্যান্য ডাটাবেসের একগুচ্ছ হোস্ট করেছিল)


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

আমি যে ডেটাবেসটির সাথে কাজ করছিলাম তা সব হত্যার পক্ষে নয় - তবে এটি তাদের সেটআপের ক্ষেত্রে সমস্যা হতে পারে। আমি সাধারণভাবে এটি অনেক সহজ agree
ব্রেন্ট ওয়াগনার 17

0

আমি এই মত করতে পছন্দ করি,

তাত্ক্ষণিকভাবে রোলব্যাক সহ অফলাইনে সেট ডাটাবেস পরিবর্তন করুন

এবং তারপরে আপনার ডাটাবেসটি পুনরুদ্ধার করুন। তারপর,

তাত্ক্ষণিকভাবে রোলব্যাকের সাথে অনলাইনে সেট ডাটাবেস পরিবর্তন করুন

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