Microsoft SQL सर्वर से एक्सेस - SSIS का उपयोग करके बड़े डेटासेट आयात करें
एक्सेस इंसर्ट क्वेरी के साथ मरना
यदि आपने कभी एक्सेस इंसर्ट क्वेरी, (15,000 रिकॉर्ड या अधिक) का उपयोग करके SQL सर्वर में बड़ी मात्रा में रिकॉर्ड डालने का प्रयास किया है, तो आप लंबे इंतजार में हैं, यहां कॉफी ब्रेक टाइम की बात कर रहे थे, (कुछ मिनटों से) से 15)। यदि डेटासेट बहुत बड़ा है तो यह आपके डेटाबेस को हैंग कर सकता है। तो आपके पास क्या विकल्प हैं?
XML एक बेहतरीन पहला प्रयास है
हमारे कोड में आम तौर पर उपयोग की जाने वाली विधियों में से एक एक्सएमएल डेटा के साथ काम करना है, मैं यहां इसके बारे में बहुत अधिक विवरण में नहीं जाऊंगा, लेकिन यहां एक लिंक है जिसे मेरे एक सहयोगी ने लिखा था। इसमें एक 2 भाग श्रृंखला शामिल है जो SQL सर्वर बैकएंड के साथ XML डेटा के साथ काम करने पर चर्चा करती है।
एक्सएमएल कोशिश करने के लिए एक महान उपकरण है, लेकिन यह भी इतना तेज़ नहीं हो सकता है कि 10,000 में डेटासेट की संख्या हो। हालांकि एसएसआईएस नौकरी पर एक्सएमएल का लाभ यह होगा कि एसएसआईएस नौकरी के लिए एक नेटवर्क फ़ोल्डर की आवश्यकता होती है जहां सभी एक्सेस उपयोगकर्ता और सर्वर पहुंच सकते हैं। यह इंटरनेट पर अच्छी तरह से काम नहीं करेगा (परिदृश्य मूल रूप से XML पद्धति के लिए बनाया गया था)।
एसएसआईएस सुपर क्विक है
मैं यहां आपके साथ जो साझा करना चाहता हूं वह SQL सर्वर एकीकरण सेवाओं के साथ काम करने के अपने अनुभव के बारे में है। हमारे पास एक क्लाइंट था जिसका डेटाबेस पहले से ही SQL सर्वर पर डेटा अपलोड करने के लिए XML पद्धति का उपयोग कर रहा था, लेकिन क्योंकि वे जो डेटा आयात कर रहे थे, उसमें डेटा की 700,000 से अधिक पंक्तियाँ थीं, इस प्रक्रिया को पूरा करने में 20 मिनट लग रहे थे। यह स्पष्ट रूप से एक व्यस्त कंपनी के लिए बहुत अधिक समय ले रहा था जिसे इस पद्धति का दैनिक उपयोग करने की आवश्यकता थी। हमारा समाधान एक ऐसा कार्य बनाकर अपलोड प्रक्रिया से एक्सेस को हटाना था जो सीधे फ़ाइल स्थान से CSV फ़ाइल को पढ़ेगा और साधारण T-SQL स्क्रिप्ट का उपयोग करके डेटा को SQL सर्वर तालिका में आयात करेगा।
पहुंच केवल प्रक्रिया को प्रारंभ करता है
उपयोगकर्ता एक्सेस में अपनी डेटा फ़ाइल का चयन करेंगे और किसी अन्य आवश्यक जानकारी को इनपुट करेंगे, जैसे कि एक तिथि और प्रक्रिया बटन पर क्लिक करें। VBA कोड का पहला चरण SQL सर्वर में फ़ाइल नाम और तालिका के पथ को संग्रहीत करना होगा।
'Add import file name to Application
ExecuteMyCommand "UPDATE Application SET SSISDataImportFile = " & PrepareSQLString(Me.txtFileInput)
यहां एसएसआईएस कार्य को निष्पादित करने के लिए उपयोग किया जाने वाला वीबीए कोड है।
Public Function ImportData()
On Error GoTo ImportData_Err
Dim rs As ADODB.Recordset
Dim strSQL As String
'एसएसआईएस पैकेज को सक्रिय करने के लिए कोड जोड़ें
strSQL ="EXEC dbo.uspSSISFileDataImport"
OpenMyRecordset rs, strSQL, rrOpenForwardOnly, rrLockReadOnly, True
'निम्नलिखित लूप यह जांचने के लिए एक प्रक्रिया है कि क्या कार्य पूरा हो गया है।
strSQL ="EXEC dbo.uspSSISFileDataImportProcess"
OpenMyRecordset rs, strSQL, rrOpenForwardOnly, rrLockReadOnly, True
rs.Fields(0) =4 और IsNull(rs.Fields(3))
strSQL ="EXEC dbo.uspSSISFileDataImportProcess" तक करें
OpenMyRecordset rs, strSQL, rrOpenForwardOnly, rrLockReadOnly, True
लूप
ImportData_Exit:
rs =कुछ भी नहीं सेट करें
फ़ंक्शन से बाहर निकलें
ImportData_Err:
MsgBox Err.Description
फिर से शुरू करें ImportData_Exit
'डिबगिंग के लिए' फिर से शुरू करें
अंतिम कार्य
CREATE PROCEDURE [dbo].[uspFileDataImport]
AS
BEGIN
SET NOCOUNT ON;
msdb.dbo.sp_start_job @Job_name =N'SSISDataImport' निष्पादित करें;
END;
CREATE PROCEDURE [dbo].[uspSSISFileDataImportProcess]
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@execution_id INT,
@JobStatusID INT,
@JobStatus Varchar(250),
@StartTime DATETIME2,
@EndTime DATETIME2;
प्रतीक्षा विलंब '00:00:03′;
[SSISDB] से @execution_id=MAX ([execution_id])
चुनें।[आंतरिक]।[निष्पादन];
SSISDB से
@JobStatusID =e.executable_id,
@JobStatus =e.executable_name,
@StartTime =s.start_time,
@EndTime =s.end_time
चुनें .internal.executables के रूप में e
SSISDB.internal.executable_statistics के रूप में बाएं शामिल हों
e.executable_id =s.executable_id और s.execution_id =@execution_id;
चुनें @JobStatusID, @JobStatus, @StartTime, @EndTime;
END;
यह संग्रहीत कार्यविधि निम्नलिखित डिज़ाइन के साथ एक साधारण कार्य चलाएगी।
पैरामीटर प्राप्त करें - यह एक साधारण टी-एसक्यूएल स्क्रिप्ट है जो एसक्यूएल टेबल से फ़ाइल नाम और पथ का चयन करती है और संबंधित पैरामीटर को मान निर्दिष्ट करती है। TblApplication सेटिंग्स से SSISDataImportFile का चयन करें; फ़ाइल का नाम दिन-प्रतिदिन भिन्न होगा इसलिए पैरामीटर का उपयोग करने का तरीका था, फ़ाइल का नाम एक्सेस फॉर्म पर एक अनबाउंड ऑब्जेक्ट में दर्ज किया गया है, फिर वीबीए कोडिंग को SQL तालिका में सहेजा जाता है, जिससे पैकेज इसे पढ़ने की इजाजत देता है एक SQL तालिका (ऊपर कोड देखें)।
आज के इनपुट को छोटा करें - अस्थायी आयात तालिका में किसी भी मौजूदा डेटा को हटाने के लिए एक साधारण टी-एसक्यूएल स्क्रिप्ट, परिवर्तन या अपडेट करने के लिए रिकॉर्ड्स के माध्यम से चलती है। यदि आपको डेटा को सत्यापित करने या स्थायी तालिका में संग्रहीत करने से पहले डेटा में और परिवर्तन करने की आवश्यकता है, तो आपको पहले डेटा को एक अस्थायी तालिका में आयात करने की आवश्यकता हो सकती है।
डेटा प्रवाह कार्य - निम्नलिखित अनुभाग में समझाया गया है।
फ्लैट फ़ाइल स्रोत - पहले चरण से पैरामीटर का उपयोग करके नौकरी टेक्स्ट फ़ाइल तक पहुंचने में सक्षम है।
फ़ाइल को नेटवर्क ड्राइव या एक फ़ोल्डर में संग्रहीत करने की आवश्यकता है जो सर्वर द्वारा पहुंच योग्य है।
OLE DB गंतव्य - कार्य का यह अंतिम चरण वह प्रक्रिया है जो SQL सर्वर तालिका में डेटा आयात करती है। यहां आप डेटाबेस कनेक्शन और टेबल नाम की पहचान करते हैं। यह वह जगह भी है जहां आप तालिका में टेक्स्ट फ़ाइल से गंतव्य फ़ील्ड में फ़ील्ड को मैप करेंगे।
अंत में मैंने निष्पादन आईडी वापस करने के लिए संग्रहीत प्रक्रिया बनाई। यहाँ उद्देश्य यह है कि संग्रहीत कार्यविधि तब तक बाहर नहीं निकलेगी जब तक कि कार्य पूरा नहीं हो जाता, Microsoft Access VBA कोड को कार्य पूर्ण होने तक जारी रहने से रोकता है। कार्य का विचार केवल SQL सर्वर तालिका में डेटा प्राप्त करना है और एक बार वहां आप एक्सेस के माध्यम से डेटा में कोई भी संशोधन कर सकते हैं और अंत में डेटा को स्थायी तालिका में संग्रहीत कर सकते हैं।
20 मिनट से नीचे 3 तक!
हमारे क्लाइंट परिणामों से बहुत खुश थे, एक्सेस के संयोजन के साथ SQL सर्वर की भयानक तकनीक का लाभ उठाने में सक्षम होने से मुझे अपने काम में दक्षता में काफी प्रगति करने की इजाजत मिल रही है, जल्द ही इसे फिर से प्रयास करने के लिए इंतजार नहीं कर सकता!
अगले मंगलवार फरवरी 12th में सुसान पाइन से जुड़ें क्योंकि वह चर्चा करती है कि SQL सर्वर में कॉलम कैसे एन्क्रिप्ट करें जैसे कि क्रेडिट कार्ड और सामाजिक सुरक्षा नंबर, और एक्सेस में प्रदर्शन के लिए उन्हें डिक्रिप्ट कैसे करें, मूल्यवान डेटा की सुरक्षा के लिए बहुत अच्छा है! अधिक जानने के लिए कृपया देखें https://buff.ly/2I7BPii #MSAccess @MSAccess #Encryption