2008-10-03 21 views
15

मैं एक एप्लिकेशन संस्करण अद्यतन करने के बाद उत्पादन डीबी पर SQL स्कीमा को सत्यापित करने का एक तरीका ढूंढ रहा हूं। यदि एप्लिकेशन डीबी स्कीमा संस्करण से मेल नहीं खाता है, तो उपयोगकर्ता को चेतावनी देने और आवश्यक परिवर्तनों को सूचीबद्ध करने का एक तरीका होना चाहिए।एसक्यूएल स्कीमा की तुलना/सत्यापन कैसे करें

क्या ऐसा करने के लिए अंतर्निहित सुविधाओं के साथ कोई उपकरण या ढांचा (प्रोग्रामेटिक रूप से उपयोग करने के लिए) है? या इस तुलना को चलाने के लिए कुछ सरल एल्गोरिदम है?

अपडेट: "$ 395 से" लाल गेट सूचियों। कुछ भी मुफ्त है? या संस्करण संख्या को रखने से अधिक मूर्खतापूर्ण?

+0

मैं इस को modded और यह सुझाव प्राप्त उत्तरों की प्रधानता के कारण एक 'Redgate' टैग जोड़ दिया है। – ConcernedOfTunbridgeWells

उत्तर

22

जरूरत इस एसक्यूएल का प्रयास करें।
- इसे प्रत्येक डेटाबेस के विरुद्ध चलाएं।
- आउटपुट को टेक्स्ट फ़ाइलों में सहेजें।
- टेक्स्ट फ़ाइलों को डिफ करें।

/* get list of objects in the database */ 
SELECT name, 
     type 
FROM sysobjects 
ORDER BY type, name 

/* get list of columns in each table/parameters for each stored procedure */ 
SELECT so.name, 
     so.type, 
     sc.name, 
     sc.number, 
     sc.colid, 
     sc.status, 
     sc.type, 
     sc.length, 
     sc.usertype , 
     sc.scale 
FROM sysobjects so , 
     syscolumns sc 
WHERE so.id = sc.id 
ORDER BY so.type, so.name, sc.name 

/* get definition of each stored procedure */ 
SELECT so.name, 
     so.type, 
     sc.number, 
     sc.text 
FROM sysobjects so , 
     syscomments sc 
WHERE so.id = sc.id 
ORDER BY so.type, so.name, sc.number 
+0

स्पष्ट रूप से एक व्यापक उपकरण बेहतर है, लेकिन यह एक अच्छी त्वरित और गंदे विधि है! – Rory

+1

सुंदर! स्रोत कोड अक्सर एक संकलित उपकरण से बेहतर होता है। यह मुझे घंटे बचाया! –

0

एक टेबल बनाएं और वहां अपना संस्करण नंबर स्टोर करें। बस सुनिश्चित करें कि आप इसे आवश्यकतानुसार अपडेट करें।

CREATE TABLE version (
    version VARCHAR(255) NOT NULL 
) 
INSERT INTO version VALUES ('v1.0'); 

फिर आप डेटाबेस में संग्रहीत संस्करण संख्या को अपने ऐप के सेटअप के दौरान एप्लिकेशन कोड से मेल खाते हैं या कहीं भी सुविधाजनक हो सकते हैं।

1

आप एक उपकरण है जो दो डेटाबेस तुलना और आपको बताएंगे कि अंतर लाल गेट प्रोग्राम के (sys.objects, sys.columns आदि डाटा डिक्शनरी में देख कर SQL Compare

8

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

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

जहां तक ​​मुझे पता है कि वहां कुछ भी मुफ्त नहीं है, जब तक कि आप स्वयं को लिखना पसंद न करें। Redgate इतना सस्ता है कि यह भी मुफ्त हो सकता है। एक क्यूए उपकरण के रूप में साबित करने के लिए कि उत्पादन डीबी कॉन्फ़िगरेशन में नहीं है, इसका मतलब यह था कि यह एक घटना के बाद आपको इसकी खरीद मूल्य बचाएगा।

+0

हम एसक्यूएल तुलना पसंद करते हैं। यह चीजों को वास्तव में आसान बना दिया है। –

0

कौन सा आरडीबीएमएस यह है, और संभावित परिवर्तन कितने जटिल हैं?

हो सकता है कि यह सिर्फ हर तालिका के लिए पंक्ति में गिना जाता है और सूचकांक में गिना जाता है की तुलना की बात है - अगर आप के बारे में चिंता करने के लिए ट्रिगर और संग्रहित प्रक्रिया संस्करण है भी तो आप कुछ और अधिक औद्योगिक

1

जो RDMBS आप उपयोग कर रहे आप का उल्लेख नहीं था: यदि जानकारी SCHEMA दृश्य आपके आरडीबीएमएस में उपलब्ध हैं, और आप एक ही मेजबान से दोनों स्कीमास के संदर्भ कर सकते हैं, आप के लिए जानकारी SCHEMA विचारों क्वेरी कर सकता है इसमें अंतर की पहचान करें: -टेबल्स -columns -column प्रकार -constraints (उदा।प्राथमिक कुंजी, अद्वितीय की कमी, विदेशी कुंजी, आदि)

मैं एक अतीत नौकरी के लिए SQL सर्वर पर वास्तव में इस उद्देश्य के लिए क्वेरी के एक सेट में लिखा है - यह अच्छी तरह से काम मतभेद की पहचान। प्रश्नों में से कई लोग इस्तेमाल कर रहे थे छोड़ दिया है शून्य के साथ जुड़ जाता उम्मीद वस्तुओं के अभाव के लिए जाँच करने के लिए, दूसरों के स्तंभ प्रकार या बाधा के नाम जैसी चीजों की तुलना कर रहे थे।

यह थोड़ा कठिन है, लेकिन यह संभव है।

0

dbForge Data Compare for SQL Server की कोशिश करो। यह किसी भी डेटाबेस की तुलना और सिंक कर सकता है, यहां तक ​​कि बहुत बड़े। त्वरित, आसान, हमेशा एक सही परिणाम प्रदान करता है। अपने डेटाबेस पर यह कोशिश करो और उत्पाद पर टिप्पणी।

हम आपको एक विश्वसनीय एसक्यूएल तुलना उपकरण है जो की पेशकश अपने एसक्यूएल सर्वर डेटाबेस में 3 समय के लिए तेजी से तुलना और तालिका डेटा के तुल्यकालन सिफारिश कर सकते हैं। यह SQL सर्वर के लिए dbForge डेटा तुलना है।

मुख्य फायदे:

  • त्वरित तुलना और बड़े डेटाबेस के तुल्यकालन
  • देशी SQL सर्वर के
  • समर्थन बैकअप टेबल, स्तंभ, और धुन अपनी तुलना करने के लिए
  • एकाधिक विकल्प स्कीमा में से
  • कस्टम मानचित्रण और तुल्यकालन
  • उत्पन्न तुलना और तुल्यकालन रिपोर्ट

प्लस मुक्त 30 दिन परीक्षण और जोखिम मुक्त 30 दिन पैसे वापस गारंटी के साथ खरीद।

4

अब आप एक स्कीमा, डाटा की तुलना करें चलाने के लिए मुक्त करने के लिए मेरी एसक्यूएल व्यवस्थापक स्टूडियो उपयोग कर सकते हैं और सिंक परिवर्तन की तुलना करें। अब यहां से एक लाइसेंस कुंजी डाउनलोड http://www.simego.com/Products/SQL-Admin-Studio

इसके अलावा एसक्यूएल Azure के खिलाफ काम करता है की आवश्यकता है।

[अद्यतन: हाँ मैं, उपरोक्त कार्यक्रम के लेखक हूँ के रूप में यह अब नि: शुल्क मैं सिर्फ समुदाय के साथ साझा करने के लिए चाहता था]

1

मुझे लगता है कि मेरी जरूरतों के सबसे फिट बैठता है इस छोटे और नि: शुल्क उपकरण मिल गया। http://www.wintestgear.com/products/MSSQLSchemaDiff/MSSQLSchemaDiff.html

यह बहुत बुनियादी है लेकिन यह आपको दो डेटाबेस के स्कीमा मतभेद दिखाता है। यह ऑटो की तरह मतभेद दूर जाना और यह किसी भी डेटा की तुलना नहीं करता है बनाने के लिए स्क्रिप्ट उत्पन्न किसी भी फैंसी सामान नहीं है।

Compare SQL Server database schemas automatically

यह बताती है आप कैसे कर सकते हैं: -

यह सिर्फ एक छोटा, मुफ्त उपयोगिता है कि आपको दिखाता है कि मतभेद :)

9

मुझे आशा है कि मैं मदद कर सकते हैं स्कीमा है इस लेख मेरा सुझाव पढ़ने है टी-एसक्यूएल, एसएसएमएस या किसी तृतीय पक्ष टूल का उपयोग कर SQL सर्वर स्कीमा तुलना और सिंक्रनाइज़ेशन प्रक्रिया स्वचालित करें।