मैं डेटा को टुकड़ों में पढ़ने का सुझाव देता हूं:
संपूर्ण तालिका को लोड करने के बजाय, डेटा को विखंडू में विभाजित करने और उन्हें SQL सर्वर पर आयात करने का प्रयास करें। थोड़ी देर से, मैंने SQLite से संबंधित एक समान उत्तर का उत्तर दिया, मैं इसे Oracle सिंटैक्स में फिट करने के लिए पुन:पेश करने का प्रयास करूंगा:
चरण दर चरण मार्गदर्शिका
इस उदाहरण में प्रत्येक खंड में 10000 पंक्तियाँ हैं।
- 2 प्रकार के चर घोषित करें
Int32
(@[User::RowCount]
और@[User::IncrementValue]
) - एक
Execute SQL Task
जोड़ें जो एकselect Count(*)
execute को निष्पादित करता है परिणाम सेट को वेरिएबल@[User::RowCount]
. में कमांड और स्टोर करें
- निम्न प्राथमिकताओं के साथ एक फॉर लूप जोड़ें:
- लूप कंटेनर के अंदर एक
Data flow task
जोड़ें - डेटा प्रवाह कार्य के अंदर एक
ODBC Source
जोड़ें औरOLEDB Destination
- ओडीबीसी स्रोत में
SQL Command
चुनें विकल्प चुनें और एकSELECT * FROM TABLE
लिखें क्वेरी *(केवल मेटाडेटा पुनर्प्राप्त करने के लिए` - स्रोत और गंतव्य के बीच स्तंभों को मैप करें
- वापस जाएं
Control flow
औरData flow task
. पर क्लिक करें और F4 . दबाएं गुण विंडो देखने के लिए -
प्रॉपर्टीज विंडो में एक्सप्रेशन पर जाएं और निम्नलिखित एक्सप्रेशन को
[ODBC Source].[SQLCommand]
संपत्ति:(अधिक जानकारी के लिए देखें कि ओडीबीसी SQLCommand अभिव्यक्ति में एसएसआईएस चर कैसे पास करें?)"SELECT * FROM MYTABLE ORDER BY ID_COLUMN OFFSET " + (DT_WSTR,50)@[User::IncrementValue] + "FETCH NEXT 10000 ROWS ONLY;"
कहां MYTABLE
स्रोत तालिका का नाम है, और IDCOLUMN
आपकी प्राथमिक कुंजी या पहचान स्तंभ है।
फ्लो स्क्रीनशॉट नियंत्रित करें
संदर्भ
- ओडीबीसी स्रोत - एसक्यूएल सर्वर
- ODBC SQLCommand एक्सप्रेशन में SSIS वैरिएबल कैसे पास करें?
- OLE DB और ODBC के बीच SSIS ODBC स्रोत और अंतर का उपयोग कैसे करें?
- आदेश देने के बाद मैं Oracle क्वेरी द्वारा लौटाई गई पंक्तियों की संख्या को कैसे सीमित करूं?
- db2 से शीर्ष n से n पंक्तियाँ प्राप्त करना
अपडेट 1 - अन्य संभावित समाधान
इसी तरह के मुद्दों की खोज करते समय मुझे कुछ अतिरिक्त समाधान मिले जिन्हें आप आजमा सकते हैं:
(1) SQL सर्वर की अधिकतम मेमोरी बदलें
-
एसएसआईएस:बफर मैनेजर ने मेमोरी आवंटन कॉल विफल कर दिया
sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'max server memory', 4096; GO RECONFIGURE; GO
(2) नामांकित पाइप सक्षम करें
-
[फिक्स्ड] बफर मैनेजर ने पाया कि सिस्टम वर्चुअल मेमोरी पर कम था, लेकिन किसी भी बफर को स्वैप करने में असमर्थ था
- कंट्रोल पैनल पर जाएं -> एडमिनिस्ट्रेटिव टूल्स -> कंप्यूटर मैनेजमेंट
- एसक्यूएल इंस्टेंस के लिए प्रोटोकॉल पर -> नामित पाइप्स सेट करें =
Enabled
- SQL इंस्टेंस सेवा को पुनरारंभ करें
- उसके बाद डेटा आयात करने का प्रयास करें और यह डेटा को एक बार में लाने के बजाय अब टुकड़ों में लाएगा। आशा है कि यह आप लोगों के काम आएगा और आपका समय बचाएगा।
(3) यदि SQL Server 2008 का उपयोग कर रहे हैं तो हॉटफिक्स स्थापित करें
- SSIS 2008 रनटाइम प्रक्रिया क्रैश हो जाती है जब आप SSIS 2008 पैकेज को कम-मेमोरी की स्थिति में चलाते हैं
अपडेट 2 - त्रुटि को समझना
निम्नलिखित एमएसडीएन लिंक में, त्रुटि के कारण को निम्नानुसार वर्णित किया गया था:
<ब्लॉकक्वॉट>वर्चुअल मेमोरी भौतिक मेमोरी का सुपरसेट है। विंडोज़ में प्रक्रियाएं आमतौर पर निर्दिष्ट नहीं करती हैं कि उन्हें किसका उपयोग करना है, क्योंकि यह (बहुत) बाधित करेगा कि विंडोज़ मल्टीटास्क कैसे कर सकता है। SSIS वर्चुअल मेमोरी आवंटित करता है। यदि विंडोज सक्षम है, तो इन सभी आवंटन को भौतिक मेमोरी में रखा जाता है, जहां पहुंच तेज होती है। हालाँकि, यदि SSIS भौतिक रूप से उपलब्ध मेमोरी से अधिक मेमोरी का अनुरोध करता है, तो वह वर्चुअल मेमोरी डिस्क पर फैल जाती है, जिससे पैकेज परिमाण के क्रम को धीमा कर देता है। और सबसे खराब स्थिति में, यदि सिस्टम में पर्याप्त वर्चुअल मेमोरी नहीं है, तो पैकेज विफल हो जाएगा।