मुझे लगता है कि बेहतर सवाल यह है:SQL सर्वर से Oracle में डेटा स्थानांतरित करने का सबसे अच्छा तरीका क्या है जो MSSS से हर सफलतापूर्वक वितरित पंक्ति को हटा देता है?
आप यह सुनिश्चित करने के लिए एक लूप में करते हैं कि जब आप एक में जोड़ते हैं, तो आप दूसरे से हटा देते हैं।
अगर इंसर्ट में कोई अनजान यादृच्छिक चीज़ त्रुटि हो जाती है, तो आप स्रोत रिकॉर्ड को हटाने से बचेंगे।
यही सार है, है ना?
इस तरह के डेटा आंदोलन को संभालने के लिए बहुत बेहतर तरीके हैं, फिर प्रत्येक वितरित लेनदेन लूप को सम्मिलित/हटाने के बाद करना।
लूप के बीच में एक कमिट बंद करना सबसे पहले खराब है। Oracle में यह अन्य सत्रों को ORA-01555 त्रुटियाँ प्राप्त करने का एक अच्छा तरीका है। इसलिए यदि संभव हो तो मैं इससे बचूंगा।
दूसरा आपको पूरी तरह से पता होना चाहिए कि डालने पर उचित त्रुटियों के संभावित कारण क्या हैं। आप एक कॉलम लंबाई, एक एफके, यूके का उल्लंघन करते हैं ... डालने पर क्या टूट सकता है इसकी एक सीमित सूची है। बड़े बालों वाले खराब ब्रेक जैसे टेबलस्पेस का विस्तार करने में असमर्थ सिस्टम को रुकने का कारण बनना चाहिए। इसके लिए फंसाने की जरूरत नहीं है। लेकिन आवेदन संबंधी समस्याएं जैसे कि मैंने उल्लेख किया है, को प्रबंधित करना आसान है।
अगर मैं इसे लिख रहा होता, तो मैं Oracle के LOG का उपयोग करके सभी पंक्तियों को बल्क में सम्मिलित करता हूं। त्रुटियाँ केवल एक/कुछ पंक्तियों के विफल होने पर पूर्ण रोलबैक से बचने के लिए।
अब आपके पास एक तालिका है जिसमें प्रत्येक विफल पंक्ति और इसके विफल होने का कारण है। अब आप SQL सर्वर की तरफ से सभी पंक्तियों को हटा सकते हैं जो विफल आईडी की सूची में नहीं हैं।
आपने वही काम पूरा किया है, लेकिन धीमी-दर-धीमी के बजाय सेट आधारित संचालन के साथ, ओह, मेरा मतलब पंक्ति दर पंक्ति है।