2009-06-04 16 views
5

मेरे पास एक बड़ी SQL फ़ाइल है जो स्मृति में फिट नहीं होती है और इसे Microsoft SQL Server 2008 के विरुद्ध निष्पादित करने की आवश्यकता होती है। ऐसा लगता है कि sqlcmd.exe उपकरण हमेशा इसे स्मृति में लोड करता है जो इस मामले में असंभव है। कोई विचार?एक 3 जीबी एसक्यूएल फ़ाइल (माइक्रोसॉफ्ट एसक्यूएल सर्वर) निष्पादित करने के लिए कैसे?

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

+2

एसक्यूएल फाइल स्मृति में फिट नहीं है? वास्तव में??? – Rockcoder

+1

सही आकार क्या है? – NinethSense

+1

फ़ाइल कितनी बड़ी है?!?!?!?!?! – OneSHOT

उत्तर

1

एसक्यूएल स्क्रिप्ट किसने/किसने बनाया? लेन-देन या कथन द्वारा, स्क्रिप्ट को लॉजिक भागों में विभाजित करने के लिए फ़ाइल को जो कुछ भी बनाया गया है (फाइल को कैसे संरचित किया जाता है) के आधार पर प्राप्त करें। अगर स्रोत ऐसा नहीं कर सकता है, तो फ़ाइल को तर्कसंगत रूप से विभाजित करने के लिए एक स्क्रिप्ट को चाबुक करें।

1

यदि यह बड़ा है, तो स्क्रिप्ट या तो बहुत जटिल है या दोहराव है। किसी भी मामले में, जैसा कि अन्य ने सुझाव दिया है, केवल समझदार चीज इसे प्रबंधित करने योग्य हिस्सों में तोड़ना है।

क्या यह एकमात्र व्यायाम या नियमित घटना है?

1

मुझे इस समस्या का सामना करना पड़ा था जहां स्क्रिप्ट के पास एक विशाल XML स्ट्रिंग था जिसका उपयोग OpenXML के साथ किया जा रहा था। वास्तविक एसक्यूएल अपेक्षाकृत कम था, एक तालिका में कुछ मूल्यों को अद्यतन करना।

मैंने डेटा (भाग में) को एक अस्थायी तालिका में डालने तक समाप्त कर दिया जब तक कि XML में मौजूद सभी जानकारी संग्रहीत नहीं की गई थी। तब मैंने अपना अपडेट स्टेटमेंट चलाया।

जोड़ा बाद में के बाद और अधिक डेटा तैनात किया गया:

आप उपकरण में बड़े हिस्से का चयन करें और एसक्यूएल डाटा मात्रा में स्क्रिप्ट उत्पन्न तुलना करना चाहते हो सकता है। इस तरह आप लेनदेन प्राप्त करते हैं। आप सीमा को हाइलाइट करके और स्पेस बार पर क्लिक करके बड़े अनुभागों का चयन कर सकते हैं।

3

रेडगेट की एसक्यूएल तुलना में एसक्यूएल स्क्रिप्ट उत्पन्न करने और इसे बाद में निष्पादित करने के बजाय सीधे कथन निष्पादित करने का विकल्प होता है। क्या कोई कारण यह काम नहीं करेगा - दूसरे शब्दों में, क्या आपको एक कारण है कि आपको SQL स्क्रिप्ट की आवश्यकता है और एप्लिकेशन का "अब सिंक्रनाइज़ करें" कार्यक्षमता का उपयोग नहीं कर सकता है?

+0

यह एक अच्छा बिंदु है (रेडगेट कुछ भयानक उत्पाद बनाता है) लेकिन उसके पास अपने पर्यावरण में अद्यतन पहुंच नहीं हो सकती है। यही वह स्थिति है जिसमें मैं हूं। मुझे स्क्रिप्ट उत्पन्न करने और उन्हें चलाने के लिए डीबीए को पास करने की आवश्यकता है। – wcm

+0

टच। उस स्थिति में, क्या एक ही लेनदेन में प्रत्येक तालिका को अपडेट करना आवश्यक है? क्या आप इसके बजाय ऑपरेशन को 3-4 अलग-अलग स्क्रिप्ट में तोड़ सकते हैं, जिसका मतलब है कि हर बार आपकी टेबल के केवल 1/4 पर रेड गेट टूल चलाएं (टेबल चुनना ताकि आप प्रत्येक स्क्रिप्ट के आकार को संतुलित कर सकें)? हालांकि यह आपके पूरे अपडेट के लिए एक शुद्ध लेनदेन नहीं है, प्रत्येक टुकड़ा एक लेनदेन है, इसलिए यदि कोई स्क्रिप्ट विफल हो जाती है तो आपका डेटा "क्षतिग्रस्त" स्थिति में नहीं छोड़ा जाएगा, और आप यह भी अनुरोध कर सकते हैं कि डीबीए उन्हें एक साथ चलाएं रखरखाव खिड़की, तो उपयोगकर्ताओं को आंशिक रूप से अद्यतन डेटा नहीं देख पाएंगे। – SqlRyan

+0

आप तर्क दे सकते हैं कि डीबीए उसके लिए SQL डेटा तुलना चला सकता है। मेरे लिए सवाल यह है कि क्या एसक्यूएल डेटा तुलना एक ही मुद्दे पर चली जाएगी। मेरा मतलब है, रेडगेट सिर्फ आपके लिए स्क्रिप्ट नहीं चला रहा है उसी तरह प्रबंधन स्टूडियो स्क्रिप्ट चलाता है। मैं यह नहीं कह रहा हूं कि कोशिश मत करो।यह एक अच्छा विचार है – wcm

0

1-800-Redgate-समर्थन .....

या

  • ब्रेक अप छोटी फ़ाइलों में लेन-देन स्क्रिप्ट
  • सेट एकल उपयोगकर्ता मोड में डेटाबेस
  • डेटाबेस
  • की fullbackup
  • प्रत्येक छोटी स्क्रिप्ट फ़ाइल चलाएं; अगर वहाँ एक विफलता है: बैकअप बहाल, स्क्रिप्ट को ठीक,
  • वापस एकल उपयोगकर्ता मोड से बाहर फिर कोशिश करें, सब कर
1

मैं कुछ महीने पहले इस समस्या का सामना किया। मैं SQLDataCompare के साथ हमारे कई कैटलॉग डेटाबेस के लिए साप्ताहिक और मासिक आधार पर सिंक स्क्रिप्ट उत्पन्न करता हूं और वे नियमित रूप से 500 एमबी से बड़े होते हैं। मेरा समाधान एक वीबीस्क्रिप्ट लिख रहा था जो अद्यतन स्क्रिप्ट को 50 से 1000 कमांड बैचों में चॉप करता है। इस दृष्टिकोण के साथ समस्या आपके डेटाबेस अद्यतन में आधा रास्ते तोड़ने पर सभी परिवर्तनों को वापस रोल करने की क्षमता खो रही है।

0

उपयोग आदेश

sqlcmd

उदाहरण sqlcmd -S MyServer \ InstanceName मैं C: \ myScript.sql

0

तरह से मैं इसे समझ, SSMS है 32-बिट तो यह एक स्क्रिप्ट से अधिक लोड नहीं कर सकता 1.5-2 जीबी आप SQLCMD.exe में स्क्रिप्ट चला सकते हैं, लेकिन फिर आप लेनदेन के आकार की वजह से समस्याओं में भाग ले सकते हैं - SqlCmd स्मृति में एक संपूर्ण लेनदेन रखेगा। तो आप एसक्यूएल डेटा तुलना में क्या कर सकते हैं विकल्पों में जा सकते हैं और "विभाजित लेनदेन" का उपयोग कर सकते हैं, जो मदद कर सकता है।

एसक्यूएल डेटा तुलना बीएलओबी के आंशिक अपडेट भी करेगी, जो "विशाल बीएलओबी" मुद्दे को हल करेगी।

यह निश्चित रूप से डेटा तुलना के नवीनतम संस्करण के आधार पर है। कुछ संस्करणों में ये सुविधाएं नहीं हो सकती हैं।

एक और विकल्प SQL फ़ोल्डर का उपयोग किसी फ़ोल्डर में स्कीमा स्क्रिप्ट बनाने के लिए किया जा सकता है, फिर उस फ़ोल्डर में डेटा सिंक करने के लिए एसडीसी का उपयोग करें। फिर आपके पास एक विशाल फ़ाइल की बजाय प्रत्येक तालिका के लिए एक फ़ाइल है।

उम्मीद है कि इससे मदद मिलती है।