2011-08-08 14 views
5

तो मेरे पास एमएस एक्सेस (*। एमडीबी) में लगभग 7 मिलियन रिकॉर्ड हैं, जिसमें मैं इसे और अधिक काम करने योग्य MySQL प्रारूप में स्थानांतरित करना चाहता हूं, और स्टोर में यह विशाल तालिका है यह मेरे वेबसर्वर पर है। फ़ाइल का वजन 2 जीबी है।एमएस एक्सेस MySQL रूपांतरण सहायता (विशाल तालिका)

समस्या है, क्योंकि तालिका इतनी बड़ी है, यह मेरे लिए यह सामान्य रूप से निर्यात नहीं दूँगी (एक्सेस कहते सीमा 65,536 रिकॉर्ड है।)

मैं कुछ 3 पार्टी सॉफ्टवेयर की कोशिश की लेकिन कोई लाभ नहीं हुआ गया है ।

क्या कोई भी डेटा को नुकसान पहुंचाए बिना ऐसा करने का एक साफ तरीका सुझा सकता है?

किसी भी मदद के लिए अग्रिम धन्यवाद।

+0

शायद पहले एमएस एसक्यूएल सर्वर में माइग्रेट करने का प्रयास करें, और फिर MySQL पर? – Mchl

+0

मेरे पास सर्वर जैसे दुर्भाग्य से नहीं है ... –

+4

वहां आप जाते हैं: http://www.microsoft.com/sqlserver/en/us/editions/express.aspx – Mchl

उत्तर

8

MySQL के लिए एक ODBC ड्राइवर स्थापित करें, यदि आपके पास पहले से नहीं है। नवीनतम संस्करण यहां उपलब्ध है: Download Connector/ODBC

विंडोज ओडीबीसी डेटा स्रोत प्रशासक से अपने MySQL सर्वर के लिए एक डीएसएन (डेटा स्रोत नाम) बनाएं।

फिर एक्सेस 2003 से, डेटाबेस विंडो में अपनी तालिका का चयन करें, और फ़ाइल-> एक्सेस से मुख्य मेनू चुनें। "निर्यात तालिका" yourtablename 'करने के लिए ... "संवाद में," प्रकार के रूप में सहेजें "ड्रॉप-डाउन सूची (संवाद के नीचे)" ओडीबीसी डेटाबेस() "का चयन करें। अगला संवाद आपको निर्यात किए गए तालिका के लिए MySQL नाम का उपयोग करने की अनुमति देता है, और यह एक्सेस तालिका नाम पर डिफ़ॉल्ट है। ठीक क्लिक करने के बाद, आपको एक और संवाद मिलेगा, "डेटा स्रोत का चयन करें", जहां आप MySQL के लिए अपना डीएसएन चुन सकते हैं।उस संवाद पर ठीक क्लिक करने के बाद, आपको शायद उपयोगकर्ता नाम और पासवर्ड के लिए एक और पूछेगा। उन्हें आपूर्ति करें, और ठीक क्लिक करें।

उम्मीद है कि आपकी तालिका तब त्रुटियों के बिना स्थानांतरित करेगी। हालांकि, मैंने कभी भी MySQL के साथ उस ऑपरेशन को नहीं किया है। यह मेरे लिए ओडीबीसी स्थानान्तरण के साथ SQL सर्वर और PostGreSQL में काम किया है। इसलिए मुझे नहीं पता कि यह MySQL के साथ भी क्यों काम नहीं करेगा।

इसके अलावा मैंने कभी भी एक बार में 7 मिलियन रिकॉर्ड निर्यात करने का प्रयास नहीं किया है। अगर यह चकित होता है, तो हमें एक कार्य-आसपास पता लगाना होगा।

यदि आप 2003 के बजाय एक्सेस 2007 का उपयोग कर रहे हैं, तो रिबन के निर्यात खंड से शुरू होने वाला एक समान विकल्प देखें।

मैंने इस दृष्टिकोण का सुझाव दिया क्योंकि मेरी धारणा यह निर्यात एक बार का सौदा होगा, इसलिए मुझे लगता है कि एक्सेस यूआई निर्यात विधि सबसे आसान होगी। हालांकि, आप अपने ओडीबीसी डीएसएन के साथ DoCmd.TransferDatabase Method का उपयोग करके वीबीए कोड के साथ अनिवार्य रूप से एक ही ऑपरेशन कर सकते हैं।

फिर भी एक और विकल्प MySQL गंतव्य तालिका तक पहुंच में एक लिंक बनाने के MySQL में एक संगत तालिका संरचना बनाने के लिए हो सकता है, (फिर से अपने DSN का उपयोग कर), तो कोई पहुँच से "क्वेरी संलग्न" चलाएँ:

INSERT INTO link_to_mysql_table (field1, field2, field3, etc) 
SELECT field1, field2, field3, etc 
FROM access_table; 

7 मिलियन रिकॉर्ड पर निर्यात चोक के मामले में संलग्न क्वेरी दृष्टिकोण उपयोगी हो सकता है। आप चयन क्वेरी के आउटपुट रिकॉर्ड को एक प्रबंधित करने योग्य खंड आकार में सेट करने के लिए एक WHERE क्लॉज जोड़ सकते हैं, और फिर किसी अन्य हिस्से को निर्दिष्ट करने के लिए एक अलग WHERE के साथ दोहराएं।

+0

मैं एक्सेस 2010 का उपयोग कर रहा हूं, मैं उस पर अपना समाधान लागू करने का प्रयास करूंगा, अगर आपको कोई रास्ता मिल जाए तो कृपया बताएं। –

+0

ठीक है, यह निर्यात करना शुरू कर दिया है और अभी तक कोई त्रुटि नहीं है! तो मैं आशावादी हूँ! यह सिर्फ यह हो सकता है !! यह ठीक से दबाया गया, लेकिन बिल्ली, इसे पूरी रात चलने दो, मैं यह एक बार कर रहा हूं और यह –

+0

एए यह असफल रहा। डिस्क पर बहुत बड़ी या पर्याप्त अस्थायी जगह नहीं (2 जीबी अधिकतम)। आपकी दूसरी विधि –

1

क्या यह कॉम्पैक्ट + मरम्मत के बाद 7 मिलियन मूल्य है? मेरा मतलब है, अगर प्रत्येक रिकॉर्ड लगभग 120 वर्ण लंबाई में है, तो आप 2 गीगा में 32 मिलियन रिकॉर्ड फिट कर सकते हैं।

इसके अलावा, मुझे 65,000 रिकॉर्ड निर्यात करने की सीमा के बारे में पता नहीं है, लेकिन केवल एक्सेल के संबंध में।

तो, आप एक सीएसवी को डेटा निर्यात करने में सक्षम/सक्षम होना चाहिए, और उसके बाद उस डेटा को खींचने के लिए mySql में एक थोक टेक्स्ट आयात का उपयोग करें। इसलिए, तालिका को csv के रूप में निर्यात करने का प्रयास करें। यह काम करना चाहिए।

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

आप टैब को सीमित करने पर भी विचार कर सकते हैं क्योंकि mySql भी उन्हें आयात कर सकता है, लेकिन एक साधारण टेक्स्ट फ़ाइल को ठीक काम करना चाहिए।

+0

मेरे पास लगभग 20 कॉलम हैं जो प्रत्येक रिकॉर्ड का वर्णन करते हैं। हालांकि मैं नहीं कह सकता कि तालिका 100% कुशल है (यह वह नहीं था जिसने इसे बनाया)। साथ ही, सर्वर स्थानीय है, मैं सीएसवी रास्ता आज़माउंगा और फिर वापस आऊंगा। –

+0

सीएसवी की समान 65k सीमा है। –

+0

सीएसवी की कोई सीमा नहीं है। –

1

मैं से http://python.org/ डाउनलोड

http://en.wikibooks.org/wiki/Python_Programming/Database_Programming

डाउनलोड अजगर 2.7 में वर्णित के रूप pyodbc का प्रयोग करेंगे http://code.google.com/p/pyodbc/

अपने तालिका के अनुसार myfile.mdb और MyTable स्थापित करने के लिए निम्न coede को संशोधित करने और फ़ाइल

एक फ़ाइल में कोड को बचाने के लिए translate.py

import csv 
mycsv = csv.writer(open('result.csv', 'wb'), delimiter=',', 
        quotechar='"', quoting=csv.QUOTE_MINIMAL) 
import pyodbc 

DBfile = 'myfile.mdb' 
conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ='+DBfile) 
cursor = conn.cursor() 

SQL = 'SELECT * FROM MyTable;' 
for row in cursor.execute(SQL): # cursors are iterable 
    mycsv.writerow(row) 

cursor.close() 
conn.close() 

रन python translate.py

+0

मुझे डर है कि मैं अजगर में प्रोग्राम नहीं करता हूं, मुझे नहीं पता कि मुझे कौन से टूल्स चाहिए और मैं सीखना शुरू नहीं करना चाहता हूं (अभी तक)। –

+0

विस्तृत निर्देश जोड़ा –

+0

जैसा मैंने कहा, मैं इस नौकरी के लिए पायथन का उपयोग करने का इरादा नहीं रखता हूं। यदि आपके पास PHP समाधान है, तो मैं खुशी से इसका परीक्षण करूंगा। –

0

अपने सिस्टम पर MySQL इंस्टॉल करें और अपने स्थानीय सर्वर का उपयोग करने की कोशिश करने के बजाय इसे अपसाइज़ करें। फिर अपने MySQL से सर्वर इंस्टेंस में एक संलग्न क्वेरी चलाएं।

+0

मेरे पास पहले से ही मेरी स्थानीय मशीन पर MySQL स्थापित है, मैं इसे ACCESS से कैसे स्थानांतरित कर सकता हूं? –

+0

MySQL, आदि के लिए ओडीबीसी ड्राइवर के बारे में उत्तर देखें। हालांकि मैं संभवतः MySQL की स्थानीय प्रतिलिपि में तालिका बना सकता हूं और अंदरूनी पहुंच से लिंक कर सकता हूं। सुनिश्चित करें कि MySQL तालिका पर कोई अनुक्रमणिका नहीं है, इसलिए यह जितनी जल्दी हो सके। फिर एक्सेस से MySQL तालिका तक एक एपेंड क्वेरी चलाएं। –

संबंधित मुद्दे