
Αναρωτιέμαι πώς εσείς διαχειρίζεστε την ανάπτυξη μιας βάσης δεδομένων μεταξύ 2 SQL Servers, ειδικά SQL Server 2005. Τώρα, υπάρχει μια εξέλιξη και ένα ζωντανό ένα. Δεδομένου ότι αυτό θα πρέπει να είναι μέρος μιας buildscript (παρτίδα πρότυπο τα παράθυρα, ακόμα και να κάνει με την τρέχουσα πολυπλοκότητα αυτών των σεναρίων, θα μπορούσα να στραφούν σε PowerShell περίπου αργότερα), Enterprise Manager / Management Studio Express δεν μετράνε.


Θα μπορείτε απλά να αντιγράψετε το .mdf αρχείου και να το επισυνάψετε; Είμαι πάντα λίγο προσεκτικοί όταν ασχολούνται με δυαδικά δεδομένα, όπως αυτό φαίνεται να είναι ένα θέμα συμβατότητα (ακόμα κι αν ανάπτυξης και να ζήσουν πρέπει να εκτελέσετε την ίδια έκδοση του διακομιστή ανά πάσα στιγμή).


Ή - με δεδομένη την έλλειψη «εξηγήσει CREATE TABLE» σε T-SQL - κάνεις κάτι που εξάγει μια υπάρχουσα βάση δεδομένων σε SQL-Scripts που μπορείτε να εκτελέσετε στο διακομιστή-στόχο; Αν ναι, υπάρχει ένα εργαλείο που μπορεί να πετάξει αυτόματα μια συγκεκριμένη βάση δεδομένων σε SQL ερωτήματα και ότι τρέχει από τη γραμμή εντολών; (Και πάλι, Enterprise Manager / Management Studio Express δεν μετράνε).


Και τέλος - με δεδομένο το γεγονός ότι η ζωντανή βάση δεδομένων περιέχει ήδη δεδομένα, η ανάπτυξη δεν μπορεί να αφορά τη δημιουργία όλων των πινάκων, αλλά μάλλον τον έλεγχο της διαφοράς ως προς τη δομή και το ALTER TABLE τα ζωντανά αυτά αντ 'αυτού, το οποίο μπορεί επίσης να χρειαστεί τα δεδομένα επαλήθευσης / μετατροπής όταν αλλάζουν τα υπάρχοντα πεδία.


Τώρα, ακούω πολλά μεγάλα πράγματα για τα [Red Gate](http://www.red-gate.com/products/index.htm) προϊόντα, αλλά και για έργα χόμπι, η τιμή είναι μια απότομη λίγο.


Έτσι, αυτό που χρησιμοποιείτε για την ανάπτυξη αυτόματα βάσεων δεδομένων SQL Server από τεστ για να ζήσει;

 
Η ανάπτυξη βάσεων δεδομένων SQL Server από τεστ για να ζήσει
============================================================



Έχω πάρει στο χέρι-κωδικοποίηση όλων των DDL μου (δημιουργεί / αλλάξει / διαγραφή) καταστάσεων, προσθέτοντάς τα στο .sln μου ως αρχεία κειμένου, και χρησιμοποιώντας την κανονική εκδόσεων (με ανατροπή, αλλά κάθε έλεγχο αναθεώρηση θα πρέπει να εργαστεί). Με αυτό τον τρόπο, εγώ δεν πάρει μόνο το όφελος των εκδόσεων, αλλά και τεχνικής ενημερώσεως που ζουν από dev / στάδιο είναι η ίδια διαδικασία για τον κωδικό και βάσεων δεδομένων - ετικέτες, καταστήματα και ούτω καθεξής εργασία όλοι το ίδιο.


Σε αντίθετη περίπτωση, συμφωνώ Redgate είναι ακριβό, αν δεν έχετε μια εταιρεία αγοράζει για εσάς. Εάν μπορείτε να πάρετε μια επιχείρηση για να το αγοράσει για σας όμως, είναι πραγματικά αξίζει τον κόπο!

 

Για τα έργα μου εναλλάσσονται μεταξύ SQL Συγκρίνετε από Red Gate και τη βάση δεδομένων δημοσίευσης Οδηγού από τη Microsoft το οποίο μπορείτε να κατεβάσετε δωρεάν
 [εδώ](http://www.microsoft.com/downloads/details.aspx?familyid=56E5B1C5-BF17-42E0-A410-371A838E570A&displaylang=en) .


Ο Οδηγός δεν είναι τόσο λείο και SQL συγκρίνετε Δεδομένων SQL Συγκρίνετε αλλά κάνει το κόλπο. Ένα ζήτημα είναι ότι τα σενάρια που παράγει μπορεί να χρειαστεί κάποια αναδιάταξη ή / και επεξεργασία να ρέει σε έναν πυροβολισμό.


Από την επάνω πλευρά, μπορεί να κινηθεί σχήμα και τα δεδομένα σας, η οποία δεν είναι κακό για ένα δωρεάν εργαλείο.

 

Εάν έχετε μια επιχείρηση την αγορά αυτή, Toad από την Quest Software έχει αυτό το είδος της λειτουργικότητας διαχείρισης χτίστηκε. Είναι βασικά μια διαδικασία δύο κλικ για να συγκρίνετε δύο σχήματα και να δημιουργήσει ένα σενάριο συγχρονισμού από το ένα στο άλλο.


Έχουν εκδόσεις για τις περισσότερες από τις δημοφιλείς βάσεις δεδομένων, συμπεριλαμβανομένου φυσικά και του SQL Server.

 

Δουλεύω με τον ίδιο τρόπο Karl κάνει, διατηρώντας όλα τα SQL scripts μου για τη δημιουργία και την αλλαγή τους πίνακες σε ένα αρχείο κειμένου που θα κρατήσει τον έλεγχο πηγή. Στην πραγματικότητα, για να αποφευχθεί το πρόβλημα του να πρέπει να έχει ένα σενάριο εξετάζει τη ζωντανή βάση δεδομένων για να καθορίσει τι πρέπει να τρέξει αλλάζει, συνήθως λειτουργούν σαν αυτό:


* Από την πρώτη εκδοχή, μπορώ να τοποθετήσω τα πάντα κατά τη διάρκεια της δοκιμής σε ένα SQL script, και τη θεραπεία όλους τους πίνακες ως ΔΗΜΙΟΥΡΓΙΑ. Αυτό σημαίνει ότι καταλήγουν πτώση και readding πίνακες πολλά κατά τη διάρκεια της δοκιμής, αλλά αυτό δεν είναι μια μεγάλη υπόθεση νωρίς στο έργο (δεδομένου ότι είμαι συνήθως hacking τα δεδομένα είμαι με τη χρήση σε εκείνο το σημείο έτσι κι αλλιώς).
* Σε όλες τις επόμενες εκδόσεις, να κάνω δύο πράγματα: να κάνω ένα νέο αρχείο κειμένου για να κρατήσει τις δέσμες ενεργειών SQL αναβάθμισης, που περιέχουν μόνο τα αλλάζει για αυτήν την έκδοση. Και κάνω τις αλλαγές στο αρχικό, δημιουργήστε ένα νέο σενάριο βάσης δεδομένων, καθώς και. Με αυτό τον τρόπο μια αναβάθμιση τρέχει μόνο το σενάριο αναβάθμισης, αλλά αν πρέπει να αναδημιουργήσει την DB δεν χρειάζεται να τρέξει 100 σενάρια για να φτάσει εκεί.
* Ανάλογα με το πώς είμαι ανάπτυξη των αλλαγών DB, θα, επίσης, συνήθως κάνει ένα τραπέζι έκδοση του ΣΠ που κρατά την έκδοση της DB. Στη συνέχεια, αντί να προβεί σε ανθρώπινο αποφάσεις σχετικά με το ποια σενάρια για την εκτέλεση, ό, τι κώδικα έχω τρέχουν να δημιουργήσει / αναβάθμιση σενάρια χρησιμοποιεί την έκδοση για να καθορίσει τι πρέπει να τρέξει.


Το ένα πράγμα που δεν θα κάνουμε είναι να σας βοηθήσει αν μέρος αυτού που κινείστε από το τεστ με την παραγωγή είναι δεδομένα, αλλά αν θέλετε να διαχειριστείτε τη δομή και να μην πληρώσει για ένα ωραίο, αλλά ακριβό πακέτο διαχείρισης DB, δεν είναι πραγματικά πολύ δύσκολη. Έχω επίσης βρεθεί ότι είναι ένας πολύ καλός τρόπος για τη διατήρηση της ψυχικής κομμάτι της DB σας.

 

Συμφωνώ ότι scripting ό, τι είναι ο καλύτερος τρόπος για να πάει και να είναι αυτό που υποστηρίζουμε στο χώρο εργασίας. Θα πρέπει σενάριο πάντα, από την DB και τη δημιουργία αντικειμένων με τη συμπλήρωση πίνακες αναζήτησης σας.


Ό, τι κάνουμε στο UI μόνο δεν θα μεταφράσει (ειδικά για τις αλλαγές ... όχι τόσο για την πρώτη αναπτύξεις) και θα καταλήξετε να απαιτείται ένα εργαλεία όπως αυτό που προσφέρει Redgate.

 

Χρησιμοποιώντας ΠΕΑ / DMO, δεν είναι πάρα πολύ δύσκολο να δημιουργήσει ένα σενάριο του σχήματος σας. Τα δεδομένα είναι λίγο πιο διασκεδαστικό, αλλά και πάλι εφικτό.


Σε γενικές γραμμές, παίρνω προσέγγιση «Σενάριο It», αλλά ίσως να θέλετε να εξετάσει το ενδεχόμενο κάτι προς αυτή την κατεύθυνση:


* Διάκριση μεταξύ ανάπτυξης και ανασυγκρότησης, έτσι ώστε να μπορείτε να αναπτύξετε με ένα υποσύνολο των δεδομένων ... αυτό θα δημιουργήσει ένα εργαλείο για να τραβήξει απλά κάτω κάποια δεδομένα παραγωγής, ή παράγουν πλαστά στοιχεία όσον αφορά την ασφάλεια.
* Για την ανάπτυξη της ομάδας, κάθε αλλαγή στη βάση δεδομένων θα πρέπει να συντονίζονται μεταξύ των μελών της ομάδας σας. Σχήματος και δεδομένων αλλαγές μπορεί να αναμιχθεί, αλλά μια ενιαία δέσμη ενεργειών θα πρέπει να επιτρέψει ένα συγκεκριμένο χαρακτηριστικό. Όταν όλα τα χαρακτηριστικά σας είναι έτοιμο, θα πακέτο αυτά σε ένα ενιαίο αρχείο SQL και να εκτελέσετε ότι κατά την αποκατάσταση της παραγωγής.
* Μόλις στάσης σας έχει καθαρίσει την αποδοχή, μπορείτε να εκτελέσετε το αρχείο SQL και πάλι στο μηχάνημα παραγωγής.


Έχω χρησιμοποιήσει τα εργαλεία Red Gate και είναι **μεγάλη** εργαλεία, αλλά αν δεν μπορείτε να το αντέξουν οικονομικά, με βάση τα εργαλεία και λειτουργεί με αυτόν τον τρόπο δεν είναι πολύ μακριά από το ιδανικό.

 

Όπως Rob Allen, μπορώ να χρησιμοποιήσω τον SQL Συγκρίνετε / Δεδομένων Συγκρίνετε με Redgate. Χρησιμοποιώ επίσης τον οδηγό βάσης δεδομένων εκδόσεων από τη Microsoft. Έχω επίσης μια εφαρμογή κονσόλας που έγραψα σε C # που παίρνει μια δέσμη ενεργειών SQL και τρέχει σε ένα διακομιστή. Με αυτό τον τρόπο μπορείτε να εκτελέσετε μεγάλες δέσμες ενεργειών με τις εντολές «GO» σε αυτό από μια γραμμή εντολών ή σε ένα σενάριο παρτίδα.


Χρησιμοποιώ Microsoft.SqlServer.BatchParser.dll και Microsoft.SqlServer.ConnectionInfo.dll βιβλιοθήκες στην εφαρμογή κονσόλας.

 

Συμφωνώ με κρατώντας πάντα τον έλεγχο πηγή και scripting χειροκίνητα όλες τις αλλαγές. Αλλαγές στο σχήμα για μία μόνο απελευθέρωση πάει σε ένα αρχείο δέσμης ενεργειών που δημιουργήθηκε ειδικά για το συγκεκριμένο δελτίο. Όλα τα αποθηκευμένα procs, προβολές, κλπ θα πρέπει να πάει σε μεμονωμένα αρχεία και να αντιμετωπίζονται ακριβώς όπως .cs ή .aspx όσο τον έλεγχο πηγή πηγαίνει. Χρησιμοποιώ ένα PowerShell script για τη δημιουργία ενός μεγάλου αρχείου .sql για την ενημέρωση του πράγματα προγραμματισμού.


Δεν μου αρέσει αυτοματοποίηση της εφαρμογής των αλλαγών στο σχήμα, όπως το νέο πίνακες, νέες στήλες, κ.λπ. Όταν κάνετε μια έκδοση παραγωγής, μου αρέσει να πηγαίνω με την εντολή αλλαγής σενάριο με την εντολή για να βεβαιωθείτε ότι ο καθένας λειτουργεί όπως αναμένεται. Δεν υπάρχει τίποτα χειρότερο από ό, τι τρέχει ένα μεγάλο σενάριο αλλαγής στην παραγωγή και να πάρει τα λάθη, επειδή έχετε ξεχάσει κάποια μικρή λεπτομέρεια που δεν παρουσιαστεί στην ανάπτυξη.


Έχω μάθει επίσης ότι οι δείκτες θα πρέπει να αντιμετωπίζονται όπως και τα αρχεία κώδικα και να τεθούν σε έλεγχο πηγή.


Και θα πρέπει να έχετε σίγουρα περισσότερο από 2 βάσεις δεδομένων - dev και να ζήσουν. Θα πρέπει να έχετε μια βάση δεδομένων dev που ο καθένας χρησιμοποιεί για τις καθημερινές εργασίες dev. Στη συνέχεια, μια βάση δεδομένων στάσης που μιμείται την παραγωγή και χρησιμοποιείται για να κάνει δοκιμές ολοκλήρωσης σας. Τότε ίσως ένα πλήρες πρόσφατο αντίγραφο της παραγωγής (επαναφορά από ένα πλήρες αντίγραφο ασφαλείας), αν αυτό είναι εφικτό, οπότε τελευταίο γύρο σας των δοκιμών εγκατάστασης έρχεται σε αντίθεση με κάτι που είναι όσο πιο κοντά στο πραγματικό πράγμα το δυνατόν περισσότερο.

 

Μην ξεχνάτε λύση της Microsoft για το πρόβλημα: [Visual Studio 2008 Database Edition](http://msdn.microsoft.com/en-gb/vsts2008/products/bb933747.aspx) . Περιλαμβάνει εργαλεία για την ανάπτυξη αλλαγές σε βάσεις δεδομένων, παράγοντας ένα diff μεταξύ των βάσεων δεδομένων για σχήματος ή / και αλλαγές των δεδομένων, δοκιμές μονάδα, παραγωγή δεδομένων δοκιμής.


Είναι αρκετά ακριβό, αλλά χρησιμοποίησα την δοκιμαστική έκδοση για λίγο και σκέφτηκα ότι ήταν λαμπρή. Κάνει η βάση δεδομένων τόσο εύκολο να συνεργαστεί με οποιοδήποτε άλλο κομμάτι του κώδικα.

 

Κάνω όλη η δημιουργία βάσης δεδομένων μου ως DDL και στη συνέχεια τυλίξτε ότι DDL σε μια τάξη σχήμα συντήρηση όλου. Μπορώ να κάνω διάφορα πράγματα για να δημιουργήσει το DDL στην πρώτη θέση, αλλά ουσιαστικά να κάνω όλη τη Συντήρηση σχήμα στον κώδικα. Αυτό σημαίνει επίσης ότι αν κάποιος πρέπει να κάνει μη DDL πράγματα που δεν χάρτη και σε SQL μπορείτε να γράψετε διαδικαστική λογική και τρέχει μεταξύ κομμάτια του DDL / DML.


DBS μου τότε έχετε έναν πίνακα που καθορίζει την τρέχουσα έκδοση και έτσι μπορεί κανείς να κωδικοποιήσει μια σχετικά απλή σειρά δοκιμών:


1. Μήπως υπάρχει η DB; Αν δεν το δημιουργούν.
2. Είναι το DB η τρέχουσα έκδοση; Αν όχι, τότε εκτελέστε τις μεθόδους, με τη σειρά, που φέρει το σχήμα μέχρι σήμερα (μπορεί να θέλετε να ζητήσει από το χρήστη να επιβεβαιώσει και - ιδανικά - να κάνετε αντίγραφα ασφαλείας σε αυτό το σημείο).


Για ένα και μόνο app χρήστη Απλά τρέχει αυτό το μέρος, για ένα web app μας σήμερα για να κλειδώσετε το χρήστη αν οι εκδόσεις δεν ταιριάζουν και να έχουν ένα και μόνο στάση σχήμα Συντήρηση εφαρμογών που τρέχουν. Για πολλαπλών χρηστών που θα εξαρτώνται από το συγκεκριμένο περιβάλλον.


Το πλεονέκτημα? Λοιπόν έχω ένα πολύ υψηλό επίπεδο εμπιστοσύνης ότι το σχήμα για τις εφαρμογές που χρησιμοποιούν αυτή τη μεθοδολογία είναι συνεπής σε όλες τις περιπτώσεις των εν λόγω αιτήσεων. Της δεν είναι τέλεια, υπάρχουν ζητήματα, αλλά λειτουργεί ...


Υπάρχουν ορισμένα θέματα κατά την ανάπτυξη σε ένα περιβάλλον ομάδας, αλλά αυτό είναι περισσότερο ή λιγότερο μια δεδομένη ούτως ή άλλως!


Murph

 

Είμαι με τη χρήση μηχανισμού μεταναστεύσεις υποηχητικά έτσι έχω μόνο ένα αρχείο DLL με μαθήματα squential σειρά που έχει 2 μεθόδους, πάνω και κάτω. Υπάρχει μια συνεχής ενσωμάτωση / build γάντζο σενάριο σε Nant, έτσι ώστε να μπορώ να αυτοματοποιήσει την αναβάθμιση της βάσης δεδομένων μου.


δεν είναι η καλύτερη thign της στον κόσμο, αλλά αυτό κτυπά το γράψιμο DDL.

 

[Redgate SqlCompare](http://www.red-gate.com/products/SQL_Compare/index.htm) είναι ένας τρόπος για να πάει κατά τη γνώμη μου. Κάνουμε την ανάπτυξη της DB σε τακτική βάση και από τότε που άρχισε να χρησιμοποιεί αυτό το εργαλείο δεν έχω κοίταξε πίσω. Πολύ έξυπνο περιβάλλον και εξοικονομεί πολύ χρόνο στο τέλος.


Η έκδοση Pro θα φροντίσει scripting για την ενοποίηση ελέγχου προέλευσης, καθώς και.

 

Είμαι σήμερα εργάζονται το ίδιο πράγμα για σας. Όχι μόνο την ανάπτυξη βάσεων δεδομένων SQL Server από τεστ για να ζήσει, αλλά περιλαμβάνει επίσης την όλη διαδικασία από το Τοπικό -> Ένταξη -> Test -> Παραγωγή. Έτσι, αυτό που μπορεί να με κάνει εύκολα μέρα είναι να κάνω [Nant εργασία με κόκκινο-Gate SQL Συγκρίνετε](http://tech.wowkhmer.com/post/2008/11/11/NAnt-task-with-Red-Gate-SQL-Compare.aspx) . Δεν δουλεύω για Redgate, αλλά έχω να πω ότι είναι καλή επιλογή.

 

Θα διατηρήσει επίσης σενάρια για όλα τα αντικείμενα και τα δεδομένα μου. Για την ανάπτυξη έγραψα αυτό το δωρεάν εργαλείο - <http://www.sqldart.com> . Αυτό θα σας επιτρέψει να αλλάξετε τη σειρά των αρχείων script σας και θα τρέξει το σωρό μέσα σε μια συναλλαγή.

 