द्वितीयक डेटा फ़ाइलों को हटाना। DBCC SHRINKFILE: पृष्ठ को स्थानांतरित नहीं किया जा सका क्योंकि यह एक कार्य तालिका पृष्ठ है


10

मेरे पास बहुत अधिक माध्यमिक डेटा फ़ाइलें (.ndf) के लिए बनाई गई हैं tempdb। अतिरिक्त फ़ाइलों को निकालने के लिए, मुझे फ़ाइल को खाली करना होगा (सामग्री को अन्य फ़ाइलों में ले जाया जाएगा):

DBCC SHRINKFILE('tempdbfile8', EMPTYFILE);

और फिर फ़ाइल को हटा दें:

ALTER DATABASE tempdb REMOVE FILE tempdbfile8;

लेकिन EMPTYFILEकमांड त्रुटि लौटाती है:

DBCC SHRINKFILE: Page 8:41920 could not be moved because it is a work table page.
Msg 2555, Level 16, State 1, Line 2
Cannot move all contents of file "tempdbfile8" to other places to complete the emptyfile operation.

चिंता करने की ज़रूरत नहीं है, मुझे बस उस वस्तु का पता लगाने की ज़रूरत है जो इस पृष्ठ का उपयोग इसके बारे में कुछ करने के लिए कर रही है:

DBCC TRACEON (3604)
DBCC PAGE(2,8,41920) --dbid=2, fileid=8, pageid=41920

कमांड बहुत सारी जानकारी देता है, उनमें से object_id। परंतु:

Metadata: ObjectId = 0 

मुझे नहीं पता कि इसके बारे में क्या करना है। क्या बिल्ली इस पृष्ठ को ले जाने से रोक रही है? उस वस्तु, प्रक्रिया, सत्र या जो कुछ भी है, उसका पता कैसे लगाएं? किसी भी मदद की सराहना की जाएगी, लेकिन कृपया ध्यान दें कि सब कुछ छोड़ देना जैसा कि वह है या इसके बजाय अन्य फ़ाइल को निकालना इस समस्या का एक वैध समाधान नहीं है।)

संपादित करें:

मैं फ़ाइलों को हटा रहा हूं, क्योंकि हम प्रति प्रोसेसर कोर (एक ही प्रारंभिक आकार, एक ही विकास दर) बनाने के लिए "सर्वोत्तम अभ्यास" का उपयोग करते थे। लेकिन जहां तक ​​मुझे पता है, जब तक आप विवाद की समस्याओं में भाग नहीं लेते हैं, तब तक एक ही डिवाइस पर अतिरिक्त tempdb फाइलें बनाने का कोई मतलब नहीं है। हमारे मामले में यह समझ में आता है, क्योंकि हमारे पास MPIO चालू है, और स्टोरेज डिवाइस 4 रास्तों को संभाल सकता है। लेकिन एक गलती थी, और हमने 6-कोर सीपीयू के साथ कुल 5 फाइलों को समाप्त कर दिया। यह MPIO पथों से अधिक है, CPU कोर से कम है, और यह एक समान संख्या भी नहीं है। यह किसी भी समस्या का कारण नहीं हो सकता है, लेकिन सिर्फ सही नहीं लगता है :)।

मैं आखिरकार डेटाटाउट में से एक को सेट करके सर्वर को पुनरारंभ किए बिना फ़ाइल को खाली करने और निकालने में सक्षम था (कि मुझे समस्या का कारण होने का संदेह था) एकल उपयोगकर्ता मोड (रोलबैक तत्काल)। इसने काम किया, लेकिन मैं भाग्यशाली रही। मैं वास्तव में क्या चाहता हूं, पेज को हमेशा नीचे ट्रैक करने में सक्षम होना चाहिए :)।


DBCC PAGE कमांड सही नहीं है यह dbcc पृष्ठ (2,41920,1) की तरह होना चाहिए। 1,2,3 इस पर निर्भर करता है कि आप आउटपुट में क्या चाहते हैं।
शांकी

यदि ऊपर काम नहीं करता है तो आपको फ़ाइलों को हटाकर हार्डवेयर में करना पड़ सकता है और फिर sql सर्वर को पुनरारंभ करना होगा ताकि यह केवल उन फ़ाइलों का उपयोग करे जो हटाए नहीं गए थे। क्या आप इस लिंक का उल्लेख कर सकते हैं daveturpin.com/2011/07/how-to-drop-a-tempdb-database-file
Shanky

2
@ शांकी सही है। 0..3 को 4 वें पैरामीटर के रूप में पारित किया जा सकता है: dbcc page ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])आपके समाधान के बारे में: यह काम करेगा, लेकिन मैं वास्तव में उदाहरण को नीचे लाए बिना ऐसा करना चाहूंगा।
एडम लुनवस्की 10

ओके..मैं आपको dbcc पेज का अधिक सरल रूप बता रहा था। कृपया ध्यान दें कि यह अनिर्दिष्ट कमांड है। क्या आपने लिंक पोस्ट किया था जिसे मैंने पोस्ट किया था
Shanky

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

जवाबों:


5

सर्वर को पुनरारंभ करना पर्याप्त होना चाहिए - उन वर्कटेबल्स को स्पष्ट करना चाहिए। लेकिन मैं शायद इसे एकल उपयोगकर्ता मोड (-m) में शुरू कर दूंगा ताकि आप उन फ़ाइलों को सफलतापूर्वक हटाने से पहले अन्य प्रक्रियाओं को कार्यबल बनाने से रोक सकें। फिर के लिए आवश्यक फ़ाइलों को फिर से परिभाषित करें tempdb; शायद अनावश्यक फ़ाइलों को हटाना, आकार बदलना आदि, आपको यह भी सुनिश्चित करना चाहिए कि आपके पास फ़ाइलों की एक समान संख्या है, कि वे सभी एक ही आकार में सेट हैं, और वे सभी एक ही ऑटोग्रॉथ सेटिंग्स (एमबी में,% नहीं) हैं। और यह TF 1117 और TF 1118 के रूप में अच्छी तरह से ( प्रारंभिक बिंदु ) पर विचार करने के लिए एक अच्छा समय हो सकता है ।

मैं एसक्यूएल सर्वर को फिर से शुरू करने से पहले फाइल सिस्टम से सिर्फ फाइलों को हटाने के सुझाव के बारे में बहुत सावधान रहूंगा - यह बिल्कुल भी शुरू नहीं हो सकता है।

(मैं वास्तविक समस्या के बारे में उत्सुक हूं, हालांकि, बहुत अधिक फाइलें होने से आपको वास्तव में चोट नहीं लगी है।)


@@ आरकॉनकोर्स आपको इसे खाली करने के बारे में सतर्क रहने की आवश्यकता है, लेकिन यह यहाँ msdn.microsoft.com/en-gb/library/ms175574.aspx पर प्रलेखित है । यह कोशिश की है और SQl सर्वर tempdb ऑनलाइन आता है।
शंकी १

5
@ शैंकी मैंने एक बार एक बार में 138 मील की दूरी पर ड्राइविंग की कोशिश की, और मुझे खींच नहीं पाया। क्या इसका मतलब है कि मुझे इसे करते रहना चाहिए, और यह कोई मौका नहीं है कि मैं कल खींच लूंगा? जोखिम भरा तरीका सुझाने से पहले, पहले उचित तरीके से प्रयास करना अधिक सुरक्षित है । IMHO। खासकर जब से वह अब फाइल को खाली नहीं कर सकता है - क्या आपको लगता है कि संभव है कि इसके अलावा इसमें कुछ और भी हो जिससे त्रुटि संदेश की शिकायत हो? त्रुटि सभी वस्तुओं की एक विस्तृत सूची का उत्पादन नहीं करती है, यह केवल पहली वस्तु का उत्पादन करती है।
हारून बर्ट्रेंड

कुछ ऐसा है जो वास्तव में tempdb का उपयोग कर रहा है इसलिए यह अनुमान लगाने के लिए अपनी फ़ाइल को खाली करने की अनुमति नहीं दे रहा है। हो सकता है कि उन्होंने छांटे गए ऑपरेटर का इस्तेमाल कुछ क्वेरी के लिए किया है जो अभी भी tempdb की आवश्यकता है। DMV मदद कर सकता है कि sysinos_db_task_space_usage sysinos_db_session_space_usage sysinos_db_file_space_usage
Shanky

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

1
@ शांकी उन सभी प्रकार की चीज़ों के लिए हजारों पंक्तियों को लौटा सकती है, जिनका प्रश्न में फाइल से कोई लेना-देना नहीं है - तो आप इसे कैसे कम कर सकते हैं? इसके अलावा अपनी विधि के साथ भी आपको पुनरारंभ करना होगा, बस पहले सरल तरीके से प्रयास क्यों न करें? मैं आपसे केवल इस बात से सहमत नहीं हूं कि "कठिन रास्ता" पहला सुझाव होना चाहिए, क्षमा करें।
हारून बर्ट्रेंड

2

https://social.msdn.microsoft.com/Forums/en-US/2a00c314-f35e-4900-babb-f42dcde1944b/dbcc-shrinkfile-page-411283400-could-not-be-moved-because-it-is- एक-काम-टेबल पेज? मंच = sqldatabaseengine

जैसा कि एमएसडीएन फोरम में माइक द्वारा प्रस्तावित किया गया है, वर्क टेबल ज्यादातर प्लान कैश के साथ जुड़े हुए हैं। उन्हें साफ़ करने से काम की मेज भी हट जाएगी और फिर आप Tempdb को सिकोड़ सकते हैं। इसने मेरे लिए काम किया। और यह आपको एक सर्वर रीस्टार्ट होने से भी बचाता है। कुछ ओवरहेड हो जाएगा क्योंकि SQL सर्वर को निष्पादन योजनाओं को फिर से बनाना होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.