2010-02-10 20 views
15

मेरे Sql सर्वर लॉग निम्न तरह त्रुटि संदेश के साथ एक तेजी से दर से भरने कर रहे हैं:।त्रुटियाँ Sql सर्वर लॉग भरा

सक्रिय proc '[dbo] [SqlQueryNotificationStoredProcedure-b65a194e-e29f -4ba0-8f5a-79f0875bd609] ' कतार पर चल रहे' MyDatabase.dbo.SqlQueryNotificationService-b65a194e-e29f-4ba0-8f5a-79f0875bd609 'आउटपुट निम्नलिखित:' डेटाबेस प्रिंसिपल के रूप में पर अमल नहीं कर सकता क्योंकि प्रिंसिपल "dbo" करता है अस्तित्व में नहीं है, यह प्रिंसिपल का प्रकार प्रतिरूपित नहीं हो सकता है, या आपके पास अनुमति नहीं है। '

इन संदेशों द्वारा संदर्भित संग्रहीत प्रक्रियाओं में से कोई भी मौजूद नहीं है।

समस्या here वर्णित है। लेख में उल्लेख किया गया है कि यह मुद्दा 2008 एसपी 1 में तय किया जाना चाहिए था लेकिन मैं पहले ही एसपी 1 चला रहा हूं।

अगर मैं निम्न आदेश चला ...

select * from sys.service_queues 

... मैं जैसे SqlQueryNotificationService-f944d750-8530-4762-adcf-6948e8da991f पंक्तिबद्ध मदों की एक बहुत देखते हैं कि ध्यान दें।

लेकिन अगर मैं कोशिश करते हैं और निम्न आदेश के साथ इन मारने ...

drop queue [SqlQueryNotificationService-78f5b757-45f0-4a4d-83f5-91e1d7e46294] 

... मैं एक त्रुटि संदेश प्राप्त: कतार 'SqlQueryNotificationService-78f5b757-45f0-4a4d-83f5-91e1d7e46294' गिराया नहीं जा सकता क्योंकि यह एक या एक से अधिक सेवा के लिए बाध्य है।

उत्तर

24

डेटाबेस के रूप में नहीं चलाया जा सकता प्रिंसिपल क्योंकि प्रिंसिपल "dbo" मौजूद नहीं है, प्राचार्य के इस प्रकार प्रतिरूपित नहीं किया जा सकता है, या आप की अनुमति नहीं है। यदि आप को पता है क्या होता है चाहता हूँ अब

ALTER AUTHORIZATION ON DATABASE::<dbname> TO [sa]; 

, मैं अपने ब्लॉग पर कुछ लेख की सिफारिश::

आप इस समस्या का समाधान करना चाहिए The Mysterious Notification और When it rains, it pours। आपके मामले में समस्या दो गुना है:

  • एक प्रशासनिक गलती जिसके परिणामस्वरूप अनाथ डबो के साथ डेटाबेस हुआ। यह आम तौर पर एक असंबंधित प्राधिकारी (यानी एक अलग कंप्यूटर पर एक स्थानीय खाता) से विंडोज एसआईडी द्वारा बनाए गए डेटाबेस के अनुलग्नक/पुनर्स्थापना का परिणाम होता है।
  • एसक्लड पर निर्भरता के उपयोग में एक कोडिंग गलती है कि कोड स्टॉप() को कॉल करने के लिए छोड़ने के लिए छोड़ देता है, इस प्रकार एसक्लड परस्पर अस्थायी आधारभूत संरचना को फाड़ने में विफल रहता है।

आम तौर पर SqlDependency अस्थायी बुनियादी ढांचे के सक्रिय प्रक्रिया अस्थायी कतार/सेवा/प्रक्रियाओं, लेकिन आपके मामले में तथ्य यह है कि सक्रियण नहीं चल सकता अनाथ dbo का सब कुछ खंडहर क्योंकि हटाना होगा।

एक बार जब आप अनाथ डीबीओ (मेरी पोस्ट की शुरुआत में ALTER चलाकर) को ठीक कर लेंगे तो सक्रिय प्रक्रियाएं चलने में सक्षम होंगी और वे सभी अस्थायी कतार, सेवाओं और प्रक्रियाओं को साफ़ कर देंगे।

+0

+1 यह मैं वास्तव में क्या जरूरत है! –

5

मैं अंतर्निहित सेवा छोड़ने के द्वारा भरने से त्रुटि लॉग बंद कर दिया:

select * from sys.services 

-- do this for every service: 
drop service [SqlQueryNotificationService-7d871b6d-3868-452c-b75b-d5c5b13d0301] 

तो मैं वापस जाने के लिए और कतारों को हटा सकता है।

अब सवाल यह है कि भविष्य में होने वाली इसे कैसे रोकें।

2

मुझे SQL 2008 R2 पर एक समान समस्या थी। एक बार डेटाबेस मालिक की चीज़ को सही करने के बाद, मैंने लॉग में समान संदेश देखना जारी रखा लेकिन मूल रूप से उन्होंने कहा कि SqlQueryNotificationService स्वयं को नहीं ढूंढ सका। http://www.neolisk.com/techblog/MS-SQL-Server-2008-R2-Error-Log-Growing-Rapidly

ALTER DATABASE <DBNAME> SET DISABLE_BROKER 
ALTER DATABASE <DBNAME> SET NEW_BROKER 
ALTER DATABASE <DBNAME> SET ENABLE_BROKER 
2

ड्रॉप केवल SqlQueryNotificationStoredProcedure एस.पी.:

अंतिम समाधान ड्रॉप और के रूप में यहां पर निर्देशित दलाल पुन: बनाने, के लिए गया था

use <your DB name>; 
declare @procName varchar(500) 
declare cur cursor 

for select [name] from sys.objects WHERE type in (N'P', N'PC') and name like 'SqlQueryNotificationStoredProcedure%' 
open cur 
fetch next from cur into @procName 
while @@fetch_status = 0 
begin 
exec ('drop procedure [' + @procName+']') 
fetch next from cur into @procName 
end 
close cur 
deallocate cur 
संबंधित मुद्दे