একক ব্যবহারকারী মোড থেকে বহু ব্যবহারকারীতে ডাটাবেস সেট করুন


189

SINGLE_USERমোডে পুনরুদ্ধার করা একটি ডাটাবেস সেট করতে আমার সহায়তা দরকার MULTI_USER। প্রতিবারই আমি দৌড়ায়

ALTER DATABASE BARDABARD
SET MULTI_USER;
GO

আমি এই ত্রুটি পেয়েছি:

'বার্ডাবার্ড' ডাটাবেসের রাজ্যে বা বিকল্পগুলির জন্য এই মুহূর্তে পরিবর্তন করা যাবে না।

ডাটাবেসটি একক-ব্যবহারকারী মোডে রয়েছে এবং বর্তমানে একজন ব্যবহারকারী এটির সাথে সংযুক্ত আছেন।

SINGLE_USERএটিকে অন্য মোডে সেট করতে এটি অ- মোডে থাকা দরকার, তবে আমি মোড থাকাকালীন অন্য কোনও মোডে ডাটাবেস সেট করতে পারি না SINGLE_USER

উত্তর:


114

"ব্যবহারকারী বর্তমানে এটির সাথে সংযুক্ত আছেন" নিজেই এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও উইন্ডো হতে পারে। মাস্টার ডাটাবেস নির্বাচন করে ALTERআবার ক্যোয়ারী চালানোর চেষ্টা করুন ।


1
এতে যোগ করা হচ্ছে: ক্যোয়ারী উইন্ডোটি সক্রিয় থাকাকালীন উপলভ্য ডাটাবেস সরঞ্জামদণ্ডের ড্রপ-ডাউনে কিছু অন্যান্য ডাটাবেস (যেমন master) নির্বাচিত হওয়া সত্ত্বেও কোয়েরি উইন্ডোটি ডাটাবেসের সাথে সংযুক্ত থাকতে পারে । এটা, আপনি মাথাব্যাথা দান ঘনিষ্ঠ রাখে সব অন্যান্য ক্যোয়ারী উইন্ডোজ, এবং মত কিছু নির্দোষ সিস্টেম ডাটাবেসের নির্বাচন বা এক জানালা আপনি বাকি আছে ড্রপ-ডাউন হবে। mastertempdb
একটি সিভিএন

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

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

87

এই ত্রুটি বার্তাটির অর্থ সাধারণত ডিবিতে যুক্ত অন্যান্য প্রক্রিয়া রয়েছে। কোনটি সংযুক্ত রয়েছে তা দেখতে এটি চালানোর চেষ্টা করুন:

exec sp_who

এটি আপনাকে প্রক্রিয়াটি ফিরিয়ে দেবে এবং তারপরে আপনি চালাতে সক্ষম হবেন:

kill [XXX]

[Xxx] হ'ল spidপ্রক্রিয়াটি যেখানে আপনি হত্যার চেষ্টা করছেন।

তারপরে আপনি আপনার উপরের বিবৃতিটি চালাতে পারেন।

শুভকামনা।


কিল [এক্সএক্সএক্সএক্স] প্রক্রিয়া থেকে মুক্তি পেয়েছে, কিন্তু আমি যখন আমার আদেশ চালানোর চেষ্টা করি তখন তা ফিরে আসে!
কলমডে

74

আপনি অবিলম্বে আপনার পরিবর্তনটি রোলব্যাক করার বিকল্পটি যুক্ত করতে পারেন।

ALTER DATABASE BARDABARD
SET MULTI_USER
WITH ROLLBACK IMMEDIATE
GO

1
কী ROLLBACK IMMEDIATEঠিক হবে?
ডাকব

3
@ ডাকাব বিবৃতিটির লেনদেন শুরুর সাথে সাথে সমস্ত মুলতুবি লেনদেনকে তত্ক্ষণাত রোলব্যাক করতে বাধ্য করে, যার ALTER DATABASEবিপরীতে যে WITH ROLLBACK X SECONDSকোনও লেনদেন লেনদেন না হওয়া পর্যন্ত লেনদেনগুলি শেষ করার আগে বা অনির্দিষ্টকালের জন্য অপেক্ষা করতে অপেক্ষা করে (যা আমি বিশ্বাস করি ডিফল্ট তবে এই মুহুর্তে দস্তাবেজে খুঁজে পাওয়া যাবে না)। এটি "আপনি এখনই যা কিছু করছেন তা বন্ধ করুন এবং এটি করুন" এর সমতুল্য
বেকন বিটস

39

এসকিউএল সার্ভার ২০১২:

এ ক্লিক করুন DB > Properties > Options > [Scroll down] State > RestrictAccess > select Multi_userএবং ওকে ক্লিক করুন।

ভাল খবর!


5
সত্যিই নেই, এই যখন আপনার সমাধান চেষ্টা কি আমি পেয়েছিল; / "ডাটাবেজ 'XXX এর' ইতিমধ্যেই খোলা আছে এবং শুধুমাত্র একটি সময়ে এক ব্যবহারকারী আছে পারে (মাইক্রোসফট SQL সার্ভার, ত্রুটি: 924)।"
Krzysztof Wolny

1
এসকিউএল 2008 আর 2 এ অতিরিক্ত নিশ্চিত করা হয়েছে।
কোডো-স্যাপিয়েন

সেরা উত্তর, এমন মামলায়ও কাজ করা যেখানে আপনার খুনের বিবৃতি ব্যবহারের অনুমতি নেই
মার্কো মার্শালা

22

আমার একই সমস্যা ছিল এবং এটি নিম্নলিখিত পদক্ষেপগুলি দ্বারা ঠিক করা হয়েছে - রেফারেন্স: http://giladka8.blogspot.com.au/2011/11/datedia-is-in-single-user-mode-and.html

use master
GO

select 
    d.name, 
    d.dbid, 
    spid, 
    login_time, 
    nt_domain, 
    nt_username, 
    loginame
from sysprocesses p 
    inner join sysdatabases d 
        on p.dbid = d.dbid
where d.name = 'dbname'
GO

kill 56 --=> kill the number in spid field
GO

exec sp_dboption 'dbname', 'single user', 'FALSE'
GO

13

এটি আমার পক্ষে ভাল কাজ করেছে।

পদক্ষেপ 1. ডাটাবেস ইঞ্জিনে ডান ক্লিক করুন, ক্রিয়াকলাপ মনিটরে ক্লিক করুন এবং দেখুন যে প্রক্রিয়াটির সাথে সংযোগ রয়েছে। সেই নির্দিষ্ট ব্যবহারকারীকে হত্যা করুন এবং তাত্ক্ষণিকভাবে কোয়েরিটি কার্যকর করুন।

ধাপ ২.

USE [master];
GO
ALTER DATABASE [YourDatabaseNameHere] SET MULTI_USER WITH NO_WAIT;
GO  

এবং ডাটাবেস রিফ্রেশ


9

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

প্রথম দৌড়ে:

USE master
GO

DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), spid) + ';'
FROM master..sysprocesses 
WHERE dbid = db_id('<yourDbName>')

EXEC(@kill);

তারপরে তাত্ক্ষণিকভাবে (দ্বিতীয় ক্যোয়ারী উইন্ডোতে) এর পরে:

USE master ALTER DATABASE <yourDbName> SET OFFLINE WITH ROLLBACK IMMEDIATE

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


7

এসকিউএল ম্যানেজমেন্ট স্টুডিও ব্যবহার না করে সরাসরি সার্ভারে লগইন করা ভাল

আপনি যে অ্যাকাউন্টটি MULTI_USER এ সেট করতে চান সেই ডেটাবেসটির জন্য আপনি যে অ্যাকাউন্টটি লগইন করেছেন তা ডাব মালিক হিসাবে নিশ্চিত করুন। সা হিসাবে লগ ইন করুন (এসকিউএল সার্ভার প্রমাণীকরণ ব্যবহার করে) আপনি যদি পারেন তবে

যদি আপনার ডাটাবেসটি আইআইএস ব্যবহার করে তবে ওয়েবসাইটটি এবং এটি ব্যবহার করে এমন অ্যাপ পুল বন্ধ করুন - এটি এমন প্রক্রিয়া হতে পারে যা আপনাকে সংযুক্ত করে এবং আপনাকে MULTI_USER এ সেট করা থেকে আটকাচ্ছে be

USE MASTER
GO

-- see if any process are using *your* database specifically

SELECT * from master.sys.sysprocesses
WHERE spid > 50 -- process spids < 50 are reserved by SQL - we're not interested in these
AND dbid=DB_ID ('YourDbNameHere')

-- if so, kill the process:

KILL n -- where 'n' is the 'spid' of the connected process as identified using query above

-- setting database to read only isn't generally necessary, but may help:

ALTER DATABASE YourDbNameHere
SET READ_ONLY;
GO

-- should work now:

ALTER DATABASE Appswiz SET MULTI_USER WITH ROLLBACK IMMEDIATE

আপনার যদি এখনও সমস্যা হয় তবে এখানে উল্লেখ করুন:

http://www.sqlservercentral.com/blogs/pearlknows/2014/04/07/help-im-stuck-in-single-user-mode-and-can-t-get-out/

সর্বশেষ বিকল্প হিসাবে - যদি আপনি উপরের সব কিছু চেষ্টা করে থাকেন এবং মরিয়া হয়ে থাকেন তবে আপনি এসকিউএল সার্ভারটি বন্ধ করার চেষ্টা করতে পারেন এবং এটি আবার শুরু করতে পারেন


5

আমি নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করে ঠিক করেছি, এটি আপনাকে সহায়তা করতে পারে।

ধাপ 1

একক ব্যবহারকারী ডাটাবেসে ডান ক্লিক করুন


ধাপ ২

অফলাইন নিতে


ধাপ 3

সংযোগ ফেলে দিন এবং অফলাইনে যান


পদক্ষেপ: 4

অনলাইন নিন


পদক্ষেপ: 5

তারপরে কোয়েরিটি অনুসরণ করুন।

ALTER DATABASE YourDBName
SET MULTI_USER
WITH ROLLBACK IMMEDIATE
GO

উপভোগ করুন ...!


2

নীচের কোডটি আমার জন্য কাজ করেছে যখন আমি নির্দিষ্ট এসপিআইডিটি জানতাম না যা singleuserমোডে পরিবর্তনের জন্য ব্যবহৃত হয়েছিল ।

use master
GO

select 
    d.name, 
    d.dbid, 
    spid, 
    login_time, 
    nt_domain, 
    nt_username, 
    loginame
from sysprocesses p 
    inner join sysdatabases d 
        on p.dbid = d.dbid
where d.name = 'dbname'
GO

kill 52 -- kill the number in spid field
GO

exec sp_dboption 'dbname', 'single user', 'FALSE'
GO

1
  1. চেষ্টা করেছিলাম সব কিছুই কার্যকর হয়নি
  2. আমরা সমস্ত সংযোগ মেরে ফেলতে থাকায় সেই সার্ভারে দূরবর্তীভাবে লগইন করুন
  3. নীচের কোডটি একবারে একাধিকবার চালান যতক্ষণ না এটি শেষ হয় এবং কোনও "হত্যার প্রক্রিয়া" পরীক্ষা না করে
  4. নীচের কোডের নীচে কোডটি ব্যবহার করে এটি আবার সক্রিয় করুন

মাস্টার জিও @ এসকিউএলকে বারচর হিসাবে ঘোষণা করুন (20), @ স্পিড হিসাবে

মাস্টার..সিসপ্রসেসেস থেকে @ স্পিড = মিনিট (স্পাইড) নির্বাচন করুন যেখানে dbid = db_id ('DB_NAME') এবং স্পিড! = @@ স্পাইড

(@ স্পিড নাল নয়) মুদ্রণ শুরু করে 'কিলিং প্রক্রিয়া' + কাস্ট (@ স্পিকার হিসাবে বর্ণা) + '...' সেট @ এসকিউএল = 'কিল' + কাস্ট (@ স্পিকার হিসাবে বর্ণা) এক্সিকিউট (@ এসকিএল)

select 
    @spid = min(spid)  
from 
    master..sysprocesses  
where 
    dbid = db_id('DB_NAME') 
    and spid != @@spid end

তারপরে এটিকে জীবিত ফিরিয়ে আনতে হবে

ALL DATABASE DB_NAME SET MULTI_USER; যাওয়া


1

এটি আমার পক্ষে ভাল কাজ করেছে

  1. ব্যাকআপ নিন Take
  2. নতুন ডাটাবেস তৈরি করুন এবং এতে ব্যাকআপ পুনরুদ্ধার করুন
  3. তারপরে বৈশিষ্ট্য> বিকল্পগুলি> [স্ক্রোল ডাউন] স্থিতি> সীমাবদ্ধএকসেস> মাল্টি_উজার নির্বাচন করুন এবং ঠিক আছে ক্লিক করুন
  4. পুরানো ডাটাবেস মুছুন

সবার জন্য এই কাজ আশা করি রমেশ কুমার আপনাকে ধন্যবাদ


1

যদি উপরের কাজ না করে তবে স্পিডের লগইন নামটি সন্ধান করুন এবং এটি সুরক্ষা - লগইনগুলিতে অক্ষম করুন


1

আপনি একক মোডে এই বেকোস ডাটাবেসটি করতে পারেন নি। সর্বোপরি তবে আপনার এটি জানা উচিত: আপনি যখন এসকিএল পরিচালন স্টুডিওটি খোলেন তখন এটি ডাটাবেসের কোনও ব্যবহারকারীকে জানে না তবে আপনি যখন ডাটাবেসটিতে ক্লিক করেন তখন এটি আপনাকে একক ব্যবহারকারী এবং আপনার কমান্ড কাজ করছে না বলে বিবেচনা করে। কেবল এটি করুন: ম্যানেজমেন্ট স্টুডিও বন্ধ করুন এবং এটি আবার খুলুন। নতুন কোয়েরি উইন্ডো কোনও ডাটাবেস না করে কমান্ড স্ক্রিপ্ট লিখুন

USE [master];
GO
ALTER DATABASE [tuncayoto] SET MULTI_USER WITH NO_WAIT;
GO 

F5 ওয়ালা সবকিছু ঠিক আছে!


0

আমি সহজেই সমস্যার সমাধান করেছি

  1. ডাটাবেসের নামের উপর ডান ক্লিক করুন এটির নাম পরিবর্তন করুন

  2. পরিবর্তনের পরে, ডাটাবেসের নাম -> বৈশিষ্ট্যসমূহ -> বিকল্পসমূহ -> স্ক্রোলিংয়ের নীচে যান সীমাবদ্ধকরণ (SINGLE_USER থেকে MULTI_USER) এ ডান ক্লিক করুন

  3. এখন আবার আপনি নিজের পুরানো নাম হিসাবে ডাটাবেসটির নাম পরিবর্তন করতে পারেন।


0

এসকিউএল সার্ভার ২০১৪ এর সাথে কাজ করা প্রায় 3 টিরও বেশি সময়ে, আমার কোনও পরিবর্তন না করেই আমি একটি ডাটাবেসকে সিঙ্গল ইউজার মোডে রূপান্তর করেছি। এটি অবশ্যই কোনওভাবে ডাটাবেস তৈরির সময় ঘটেছে। উপরের সমস্ত পদ্ধতি কখনই কার্যকর হয়নি কারণ আমি সর্বদা একটি ত্রুটি পেয়েছি যে ডাটাবেসটি একক ব্যবহারকারী মোডে ছিল এবং এর সাথে সংযুক্ত হতে পারে না।

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


0

কেবল ডাটাবেস বৈশিষ্ট্যগুলিতে যান এবং একক ব্যবহারকারী মোডটি মাল্টির ব্যবহারকারীতে পরিবর্তন করুন

এখানে চিত্র বর্ণনা লিখুন

দ্রষ্টব্য: এটি যদি আপনার পক্ষে কাজ না করে তবে ডিবি ব্যাকআপ নিয়ে আবার পুনরুদ্ধার করুন এবং উপরের পদ্ধতিটি আবার করুন

* একক = SINGLE_USER

একাধিক = MULTI_USER

সীমাবদ্ধ = RESTRICTED_USER


ওপি যে কোয়েরি ব্যবহার করছে তা থেকে এটি কীভাবে আলাদা?
স্কোয়াজ

হ্যাঁ উভয়ই একই কাজ করবে, এটি সারণী তৈরির জন্য তৈরি সারণী ক্যোয়ারী ব্যবহার করার পরিবর্তে আমরা সারণী তৈরির জন্য এসকিউএল সার্ভার জিইউআই টেবিল ডিজাইনার ব্যবহার করেছি, বিটিএস উভয়ই একই কাজ করবে, একটি হল কোয়েরি পদ্ধতি এবং অন্যটি জিইউআই পদ্ধতি method আপনি যা চান কখনও ব্যবহার করুন।
হাসান

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

0

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

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

এটি সমাধান করার জন্য আমাকে killবিবৃতি, বিবৃতি পরিবর্তন User-Modeএবং Restoreক্রিয়াকলাপগুলি একটি ক্যোয়ারী উইন্ডোতে লিখতে হয়েছিল এবং আমি যখন সমস্তগুলি এক সাথে চালাতাম, ভয়েলা !!! এটা কাজ করেছে.

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


0

স্থানীয় একটি ডিবি নিয়ে আমার সমস্যা হচ্ছে।

আমি এসকিউএল সার্ভারটি বন্ধ করে এবং তারপরে এসকিউএল সার্ভার শুরু করে এবং তারপরে এসএসএমএস ইউআই ব্যবহার করে ডিবি বৈশিষ্ট্যগুলিকে মাল্টি_উসারে পরিবর্তন করে এই সমস্যার সমাধান করতে সক্ষম হয়েছি।

আমি যখন একটি ব্যাকআপ পুনরুদ্ধার করার চেষ্টা করছিলাম তখন ডিবি "একক ব্যবহারকারী" মোডে চলে গেল। পুনরুদ্ধার করার চেষ্টা করার আগে আমি লক্ষ্য ডাটাবেসের একটি ব্যাকআপ তৈরি করি নি (এসকিউএল 2017)। এটি প্রতিবার আপনি পাবেন।

এসকিউএল সার্ভার বন্ধ করুন, এসকিউএল সার্ভার শুরু করুন, তারপরে উপরের স্ক্রিপ্টগুলি চালনা করুন বা ইউআই ব্যবহার করুন।


0

আমি কিছুক্ষণের জন্য সমাধানের জন্য গুগল করেছিলাম এবং অবশেষে নীচের সমাধানটি নিয়ে এসেছি,

এসএসএমএস সাধারণভাবে পর্দার আড়ালে থাকা ডাটাবেসে বেশ কয়েকটি সংযোগ ব্যবহার করে।

অ্যাক্সেস মোড পরিবর্তন করার আগে আপনাকে এই সংযোগগুলি মারতে হবে। (আমি এটি এক্সইসি (@ কিল) দিয়ে করেছি; নীচের কোড টেমপ্লেটে))

তারপর,

MULTI_USER মোডে ডাটাবেস সেট করতে নিম্নলিখিত এসকিউএল চালান

USE master
GO
DECLARE @kill varchar(max) = '';
SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(10), spid) + '; '
FROM master..sysprocesses 
WHERE spid > 50 AND dbid = DB_ID('<Your_DB_Name>')
EXEC(@kill);

GO
SET DEADLOCK_PRIORITY HIGH
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO

একক ব্যবহারকারী মোডে ফিরে যেতে, আপনি ব্যবহার করতে পারেন:

ALTER DATABASE [<Your_DB_Name>] SET SINGLE_USER

এই কাজ করা উচিত. শুভ কোডিং !!

ধন্যবাদ !!

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