সিঙ্গল_ইউজার মোডে কীভাবে ডাটাবেস ড্রপ করবেন


12

আমি কীভাবে একটি ডেটাবেস ড্রপ করব যা DatabaseName (Single User)এর নাম হিসাবে দেখায় ?

আমি যখন এটি মুছতে চেষ্টা করি তখন আমি নিম্নলিখিত ত্রুটিটি পাই:

ডাটাবেস 'ডাটাবেসনাম' এর জন্য অল্টার ব্যর্থ। (Microsoft.SqlServer.Smo)

ALL DATABASE বিবৃতি ব্যর্থ হয়েছে। (মাইক্রোসফ্ট এসকিউএল সার্ভার, ত্রুটি: 5064)

আমি ALTERনীচে কার্যকর করার চেষ্টা করেছি এবং এখনও একই সমস্যা আছে।

ALTER DATABASE [DatabaseName] SET MULTI_USER WITH NO_WAIT

উত্তর:


23

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

যৌক্তিকভাবে আপনাকে আবার ডাটাবেসটিকে মাল্টি_উজার মোডে রাখতে হবে যাতে আপনি এটি আবার একক_ ব্যবহারকারী মোডে রাখতে পারেন (তবে এবার আপনি সেই একক সংযোগের নিয়ন্ত্রণে থাকবেন এবং অন্য কিছু সংযোগের আগে ডাটাবেসটি ফেলে দেবেন) এবং তারপরে আপনার ডাটাবেসটি হবে চলে যাও

কোড এখানে কিভাবে আপনি এই কাজ করতে প্রয়োজন ( কিন্তু প্রথম ঘনিষ্ঠ আপনার প্রশ্নের জানালা যে ডাটাবেসের পুনরারম্ভ SSMS সংযুক্ত আছেন এবং আপনি বস্তুর ব্রাউজারে এই ডাটাবেসের নির্বাচন না নিশ্চিত করুন। ):

-- Then attempt to take your database to multi_user mode, do this from master
USE MASTER 
GO

ALTER DATABASE myDatabaseName 
SET multi_user WITH ROLLBACK IMMEDIATE
GO

-- Now put it into single_user mode and drop it. Use Rollback Immediate to disconnect any sessions and rollback their transactions. Safe since you are about to drop the DB.
ALTER DATABASE myDatabaseName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

DROP DATABASE myDatabaseName
GO

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

4
এটাই সঠিক ম্যাক্সিম - সে কারণেই আমি বলেছি যে প্রদত্ত তথ্যের উপর ভিত্তি করে এখানে আমার অনুমান এবং ওপিএসের নিজের উত্তরটি সম্ভবত অবজেক্ট এক্সপ্লোরার বা কোয়েরি উইন্ডোর মাধ্যমে মুক্ত সংযোগের সাথে এক ... এটি যদি অন্য কোনওভাবে খোলা থাকে তবে অন্য ব্যবহারকারী, তারপরে আপনাকে খুঁজে পেতে হবে যে একটি সংযোগ যা একক সংযোগটি চুরি করে তা অনুমতি দেয় এবং তারপরে একটি সংযোগের অধিবেশনটিকে হত্যা করে এবং উপরে বর্ণিত পদক্ষেপগুলি অনুসরণ করে ..
মাইক ওয়ালশ

13

আপনি যদি ইতিমধ্যে সিঙ্গল-ইউজার মোডে থাকা ডাটাবেসটি অ্যাক্সেস করার চেষ্টা করেন তবে আপনাকে প্রথমে ডাটাবেসে সমস্ত সংযোগ বন্ধ করতে হবে, অন্যথায় আপনি একটি ত্রুটি বার্তা পাবেন:

এমএসজি 5064, স্তর 16, রাজ্য 1, লাইন 1 রাজ্যে পরিবর্তন বা ডাটাবেস 'ডাটাবেসনাম' বিকল্পগুলি এই মুহুর্তে করা যাবে না। ডাটাবেসটি একক-ব্যবহারকারী মোডে রয়েছে এবং বর্তমানে একজন ব্যবহারকারী এটির সাথে সংযুক্ত আছেন। এমএসজি 5069, স্তর 16, রাজ্য 1, লাইন 1 ALL DATABASE বিবৃতি ব্যর্থ হয়েছে।

নিম্নলিখিত প্রশ্নের সাথে ডাটাবেসের অ্যাক্সেস প্রসেস নিহত:

-- Create the sql to kill the active database connections  
declare @execSql varchar(1000), @databaseName varchar(100)  
-- Set the database name for which to kill the connections  
set @databaseName = 'DatabaseName'  

set @execSql = ''   
select  @execSql = @execSql + 'kill ' + convert(char(10), spid) + ' '  
from    master.dbo.sysprocesses  
where   db_name(dbid) = @databaseName  
     and  
     DBID <> 0  
     and  
     spid <> @@spid  
exec(@execSql)
GO

তারপরে আপনার যথারীতি ডাটাবেসটিকে মাল্টি-ইউজার মোডে ফিরিয়ে আনতে সক্ষম হওয়া উচিত:

ALTER DATABASE 'DatabaseName' SET MULTI_USER

2
এটি একটি খুব, খুব জটিল সমাধান এবং একটি ব্যস্ত সিস্টেমে ফ্যাক-এ-মোলের হতাশার সমান। সমস্ত ব্যবহারকারীদের লাথি মেরে ফেলা, ALTER DATABASE SET SINGLE_USER WITH ROLLBACK IMMEDIATEমাইকের উত্তর হিসাবে দেখানো আরও সহজ ।
অ্যারন বারট্র্যান্ড

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

2
ঠিক আছে, যদি এটি হয় তবে আপনার রূপরেখা অনুযায়ী সেশনগুলি সন্ধান করতে হবে। তবে, যদি সংযোগটি সিঙ্গল_ইউসারে ডাটাবেস সেট করে থাকে তবে তার নিজস্ব ...
অ্যারন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.