অল্টার ডেটাবেস ব্যর্থ হয়েছে কারণ ডেটাবেসে একটি লক স্থাপন করা যায়নি


124

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

আমি এসকিএল সার্ভার ম্যানেজমেন্ট স্টুডিও 2008 এ এটি করার চেষ্টা করছি:

use master;
go
alter database qcvalues
set single_user
with rollback immediate;
alter database qcvalues
set multi_user;
go

আমি এই ত্রুটিগুলি পাচ্ছি:

Msg 5061, Level 16, State 1, Line 1
ALTER DATABASE failed because a lock could not be placed on database 'qcvalues'. Try again later.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
Msg 5061, Level 16, State 1, Line 4
ALTER DATABASE failed because a lock could not be placed on database 'qcvalues'. Try again later.
Msg 5069, Level 16, State 1, Line 4
ALTER DATABASE statement failed.

আমি কি ভুল করছি?


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

1
@ মার্টিন - যথেষ্ট ন্যায্য। আমার অবশ্যই অন্য কিছু নিয়ে ভাবতে হবে বা আমার মন হারাতে হবে। যে কোনও একটিই বেশ সম্ভব
কোডিংবাজার

আপনাকে ধন্যবাদ সবাইকে, আমি এসএসএমএস পুনরায় চালু করেছি এবং সবাইকে মেরে ফেলতে পেরেছি
JOE SKEET

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

উত্তর:


293

ত্রুটিটি পাওয়ার পরে, চালান

EXEC sp_who2

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

KILL <SPID>

যেখানে <SPID>সেশন যে ডাটাবেসের সাথে যুক্ত হয় জন্য SPID হয়।

ডাটাবেসের সমস্ত সংযোগ অপসারণের পরে আপনার স্ক্রিপ্টটি ব্যবহার করে দেখুন।

দুর্ভাগ্যক্রমে, আপনি সমস্যাটি দেখছেন বলে আমার কাছে কোনও কারণ নেই তবে এখানে একটি লিঙ্ক রয়েছে যা দেখায় যে সমস্যাটি অন্য কোথাও ঘটেছে।

http://www.geakeit.co.uk/2010/12/11/sql-take-offline-fails-alter-database-failed-because-a-lock-could-not-error-5061/


কমান্ড দ্বারা কেন কোনও সংযোগ বন্ধ হবে না সে সম্পর্কে আপনি কোনও ব্যাখ্যা দিতে পারেন? কেবলমাত্র আমি ভাবতে পারি যে এটি এখনও পিছিয়ে যাওয়ার প্রক্রিয়াতে রয়েছে বা এটি এমন একটি set single_userপ্রচেষ্টা যা এখনও মুলতুবি রয়েছে।
মার্টিন স্মিথ

@ মার্টিন, আমি ভয় করি যে এর কারণ নিয়ে আমার কোনও কারণ নেই। তবে, আমি একটি লিঙ্ক যুক্ত করব যা ইঙ্গিত দেয় যে অন্যরা সমস্যাটি দেখেছেন। আমি সম্মত হই যে একটি লেনদেন রোলব্যাক সমস্যা হতে পারে তবে KILLএটি সমাধানও করে না।
ববগুলি

কেন এমন হয় তা বুঝতে পেরে আপনার লিঙ্কের মন্তব্যগুলি মনে হয় যা এটি কার্যকর হবে! (+1)
মার্টিন স্মিথ

KILL (87)Msg 102, Level 15, State 1, Line 1 Incorrect syntax near '('.এরমে ফলাফল ....
টিম

2
@ মার্টিনস্মিথ আমি মনে করি আমি জানি কারণ: আমার ঠিক একই সমস্যা ছিল, এসপি_ওএইচও 2 এর আওতায় একটি অলস সংযোগ দেখা যাচ্ছে, যা অফলাইনে স্টল নেবে causing এটি এসএমএসে একটি ওপেন সম্পাদনা সারি উইন্ডোতে পরিণত হয়েছে। আমি বিশ্বাস করি যে এখানে কী হয় তা হ'ল সম্পাদনা সারি উইন্ডোটি এমন একটি কোয়েরি যা সম্পাদনযোগ্য ফলাফল সেট সহ খোলা রাখা হয়। স্টেটমেন্ট আপডেট করার বিকল্প হিসাবে এসকিউএল সার্ভারের এমন বৈশিষ্ট্য রয়েছে। এই বিশেষ এসএমএস উইন্ডোটি বন্ধ করার সাথে সাথে হ্যাঙ্গিংটি অফলাইনে নেওয়া অবিলম্বে শেষ হয়েছে।
জন

5

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

সংযোগ 1 (কয়েক মিনিটের জন্য চলমান ছেড়ে দিন)

CREATE DATABASE TESTING123
GO

USE TESTING123;

SELECT NEWID() AS X INTO FOO
FROM sys.objects s1,sys.objects s2,sys.objects s3,sys.objects s4 ,sys.objects s5 ,sys.objects s6

সংযোগ 2 এবং 3

set lock_timeout 5;

ALTER DATABASE TESTING123 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

2

এটি "উত্তরণে" থাকলে এটি চেষ্টা করুন ...

http://learnmysql.blogspot.com/2012/05/database-is-in-transition-try-statement.html

USE master
GO

ALTER DATABASE <db_name>

SET OFFLINE WITH ROLLBACK IMMEDIATE
...
...
ALTER DATABASE <db_name> SET ONLINE

ডাটাবেস ট্রানজিশন করার সময় কাজ করবে না, আপনি SET OFFLINEওপি দ্বারা উল্লিখিত বিবৃতিতে একই ত্রুটি পাবেন (সম্ভবত এটি যেখানে কাজ করে এমন দৃশ্যপট রয়েছে তবে এটি আমার পক্ষে হয়নি)
আবেল

1

আমার মতো কেউ ভাগ্যবান হলে আমি এটিকে এখানে যুক্ত করব।

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

মাস্টার ডাটাবেসের জন্য আপনার কেআইএলএল / রোলব্যাকের রাজ্যে কোনও প্রক্রিয়া আছে কিনা তা পরীক্ষা করে দেখুন

SELECT *
FROM sys.sysprocesses
WHERE cmd = 'KILLED/ROLLBACK'

আপনার যদি একই সমস্যা থাকে তবে কেবল KILL কমান্ড সম্ভবত সাহায্য করবে না help আপনি এসকিউএল সার্ভারটি পুনরায় চালু করতে পারেন, বা আরও ভাল উপায় হ'ল এসকিউএল সার্ভার ওএসে উইন্ডোজ প্রসেসের অধীনে cmd.exe সন্ধান করা এবং এটি হত্যা করা।


0

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

আমার ক্ষেত্রে, আমি সেই অধিকার ছাড়াই কোনও অ্যাকাউন্টে লগ ইন করেছি।

আছে HTH!


1
মূল প্রশ্নে ত্রুটিটি তখন ঘটে যখন আপনি এসএ হন, এটির আপনার অধিকারের সাথে কোনও সম্পর্ক নেই। আপনার যদি পর্যাপ্ত অধিকার না থাকে তবে আপনি অফলাইন আদেশটি কার্যকর করতে সক্ষম হবেন না।
আবেল

0

প্রক্রিয়া আইডি হত্যা আমার জন্য দুর্দান্ত কাজ করেছে। "এক্সইসিপি এসপো_হো 2" একটি নতুন ক্যোয়ারী উইন্ডোতে কমান্ড চালানোর সময় ... এবং "ব্যস্ত" ডাটাবেসের জন্য ফলাফলগুলি ফিল্টার করে "কিল" কমান্ড দিয়ে প্রক্রিয়াগুলিকে হত্যা করা কৌশলটি পরিচালনা করতে সক্ষম হয়েছিল। এরপরে সবাই আবার কাজ করলেন।


0

শুধু আমার দুটি সেন্ট যোগ করতে। সফলভাবে বিবৃতি চালানোর জন্য একটি ডিবি লগইনের ন্যূনতম প্রয়োজনীয় সুবিধাগুলি অনুসন্ধান করার সময় আমি নিজেকে একই পরিস্থিতিতে ফেলেছি:

ALTER DATABASE ... SET SINGLE_USER WITH ROLLBACK IMMEDIATE

দেখে মনে হচ্ছে যে অ্যাস্টার স্টেটমেন্টটি সফলভাবে সম্পূর্ণ হয় , যখন সিসাদমিন লগইন দিয়ে মৃত্যুদন্ড কার্যকর করা হয় , তবে এর জন্য সংযোগগুলি ক্লিনআপ অংশের প্রয়োজন হয়, যখন লগইনের অধীনে মৃত্যুদন্ড কার্যকর করা হয় যার মতো "কেবল" সীমাবদ্ধ অনুমতি রয়েছে:

ALTER ANY DATABASE

পিএস আমি dbcretor ভূমিকা আছে যে একটি লগইন অধীনে মৃত্যুদন্ড কার্যকর করা হয় কেন "ALTATATAA .. .." কাজ করে না তা জানার চেষ্টা করে ঘন্টা সময় ব্যয় করেছি + কোনও ডাটাবেস সুবিধাগুলি পরিবর্তিত । এখানে আমার এমএসডিএন থ্রেড !


0

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


0

বিরল ক্ষেত্রে (উদাহরণস্বরূপ, ভারী লেনদেন করার পরে) একটি চলমান CHECKPOINT সিস্টেম প্রক্রিয়া ডাটাবেস ফাইলটিতে একটি ফাইল লক ধারণ করে MULTI_USER মোডে স্থানান্তরকে বাধা দেয়।


0

আমার দৃশ্যে, sp_Wo2 এর অধীনে ডাটাবেসটিকে ব্লক করার কোনও প্রক্রিয়া ছিল না। তবে, আমরা আবিষ্কার করেছি কারণ আমাদের অন্যান্য ডাটাবেসের তুলনায় ডাটাবেসগুলি অনেক বড় যে বিচারাধীন প্রক্রিয়াগুলি এখনও চলছে, এজন্য প্রাপ্যতা গ্রুপের অধীনে থাকা ডাটাবেসটি এখনও থামানো ডাটাবেসটির ডানদিকে ক্লিক করে 'পুনঃসূচনা' করার চেষ্টা করার পরেও লাল / অফলাইন হিসাবে প্রদর্শিত হয়।

আপনার এখনও প্রক্রিয়া চলছে কি না তা পরীক্ষা করতে কেবল এই কমান্ডটি কার্যকর করুন: sys.dm_exec_requests যেখানে শতাংশ_পূরণ> 0 থেকে সম্পূর্ণ সম্পূর্ণ নির্বাচন করুন

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