2009-11-12 17 views
5

तुलना करने के लिए मैं हाल ही में एसक्यूएल सर्वर 2005उपयोग Tablediff सभी तालिकाओं

की tablediff उपयोगिता की खोज की है मैं एक ही डेटाबेस के 2 उदाहरणों प्रत्येक एक अलग सर्वर पर।

क्या टेबिलिफ़ का उपयोग करके सभी टेबलों की तुलना करना संभव है, बिना तालिका के नाम को बदलने के दौरान एक ही कमांड को दोहराने के बिना?

उदाहरण के लिए, सर्वर 1 पर table1 के साथ Server1 पर table1 की तुलना करें और सर्वर 2 पर table2 के साथ Server2 पर तालिका 2 की तुलना करें, जब तक कि सभी तालिकाओं की तुलना नहीं की जाती।

उत्तर

7

यह पहली बार सर्वर पर tablediff उपयोगिता की -sourceserver विकल्प और दूसरे सर्वर से -destinationserver विकल्प सेट करने के द्वारा किया जा सकता है। आप sys.Tables का उपयोग डेटाबेस में प्रत्येक तालिका के माध्यम से पुनरावृत्त करने के लिए कर सकते हैं ताकि आप इस प्रक्रिया को स्वचालित कर सकें।

मैं भी this article जो T-SQL कोड का एक चालाक टुकड़ा है कि आप tablediff

अपनी टिप्पणी प्रति की जटिलताओं के बिना बेहतर सेवा कर सकता है है का कहना है चाहता था संपादित, यहाँ एक उदाहरण है । यह उत्पादन वृद्धि में ऐसा करने का एक इष्टतम तरीका नहीं है, लेकिन इसे आपके लिए नौकरी मिलनी चाहिए। यदि आपको अधिक उत्पादन योग्य विकल्प की आवश्यकता है तो आप शायद एसएसआईएस में इसे लागू करने से बेहतर होंगे।

SET QUOTED_IDENTIFIER ON 

DECLARE @TableNames as table (
    id int identity(1,1), 
    tableName varchar(100)) 

DECLARE @sTableDiff nvarchar(1000) 
DECLARE @tableName varchar(100) 
DECLARE @counter int 
DECLARE @maxCount int 

INSERT INTo @TableNames 
SELECT name 
FROM sysobjects WHERE type = 'U' 

SET @counter = 1 

SELECT @maxCount = COUNT(name) 
FROM sysobjects WHERE type = 'U' 

WHILE @counter < @maxCount 
    Begin 
     SELECT @tableName = tableName 
     FROM @TableNames 
     WHERE id = @counter 

     SET @sTableDiff= ' "C:\Program Files\Microsoft SQL Server\90\COM\tablediff" -sourceserver Server1 
      -sourceuser sa -sourcepassword password -sourcedatabase YourDatabase -sourcetable ' + @tableName + ' 
      -destinationserver Server2 -destinationuser sa -destinationpassword password -destinationdatabase 
      YourDatabase -destinationtable ' + @tableName + ' -f c:\Diff'  

     EXEC XP_CMDSHELL @sTableDiff 

     Set @counter = @counter + 1 
    End 
+0

क्या आप एक उदाहरण प्रदान कर सकते हैं? धन्यवाद! – Davie

+0

जब मैं इस एसक्यूएल स्क्रिप्ट को चलाता हूं तो एक त्रुटि होती है जहां टेडेडिफ़ कहता है कि यह डेटाबेस से कनेक्ट नहीं हो सकता है। हालांकि, जब मैं एक डॉस प्रॉम्प्ट में एक ही क्वेरी को चलाता हूं तो यह किसी भी समस्या के बिना काम करता है i.e tablediff रिपोर्ट करता है कि 2 टेबल समान हैं! कोई विचार? – Davie

+0

मुझे यकीन नहीं है, यह एक ऐसी स्क्रिप्ट है जिसे मैंने कई बार उपयोग किया है, इसलिए मुझे पता है कि यह काम करता है। यदि आप स्क्रिप्ट में प्रिंट @sTableDiff जोड़ते हैं और फिर कमांड प्रॉम्प्ट में आउटपुट निष्पादित करते हैं, तो क्या यह काम करता है? –

0

क्या आप स्क्रिप्ट फ़ाइल में एसक्यूएल स्टेटमेंट चलाने और तुलना करने के लिए इस विकल्प का उपयोग कर सकते हैं? मैं सिर्फ एक विचार गलत हो सकता है।

-bf number_of_statements

1

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

इसे अपने डेटाबेस पर चलाएं!

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