
Μου συμβαίνει συχνά να αντιμετωπίσετε το ακόλουθο πρόβλημα.


Δουλεύω σε ορισμένες αλλαγές σε ένα έργο που απαιτεί νέες πίνακες ή στήλες της βάσης δεδομένων. Κάνω τις τροποποιήσεις της βάσης δεδομένων και να συνεχίσει το έργο μου. Συνήθως, θυμάμαι να γράψετε τις αλλαγές έτσι ώστε να μπορούν να αναπαραχθούν στο live σύστημα. Ωστόσο, δεν είναι πάντα θυμάμαι τι έχω αλλάξει και δεν θυμάστε πάντα να το γράψετε.


Έτσι, κάνω μια ώθηση στο live σύστημα και να πάρει μια μεγάλη, προφανές σφάλμα ότι δεν υπάρχει `NewColumnX`, ugh.


Ανεξάρτητα από το γεγονός ότι αυτό δεν μπορεί να είναι η καλύτερη πρακτική για την κατάσταση αυτή, είναι ένα σύστημα ελέγχου εκδόσεων για τις βάσεις δεδομένων εκεί; Δεν με νοιάζει για τη συγκεκριμένη τεχνολογία βάσης δεδομένων. Απλά θέλω να ξέρω αν υπάρχει. Αν συμβαίνει να συνεργαστεί με το MS SQL Server, τότε μεγάλη.

 
Είναι ένα σύστημα ελέγχου εκδόσεων για αλλαγές δομή της βάσης δεδομένων εκεί;
=============================================================================



Στο Ruby on Rails, υπάρχει μια έννοια της [μετανάστευσης](http://wiki.rubyonrails.org/rails/pages/UnderstandingMigrations) - ένα γρήγορο σενάριο για να αλλάξει τη βάση δεδομένων.


Μπορείτε να δημιουργήσετε ένα αρχείο μετανάστευση, η οποία έχει τους κανόνες για να αυξηθεί η έκδοση db (όπως η προσθήκη μιας στήλης) και τους κανόνες για να υποβαθμίσει την έκδοση (όπως η αφαίρεση μιας στήλης). Κάθε μετανάστευση είναι αριθμημένο, και ένας πίνακας παρακολουθεί την τρέχουσα έκδοση db σας.


Για να *μεταναστεύσουν μέχρι* , μπορείτε να εκτελέσετε μια εντολή που ονομάζεται «db: μεταναστεύσουν», η οποία εξετάζει την έκδοση σας και εφαρμόζει τις απαραίτητες δέσμες ενεργειών. Μπορείτε να μεταναστεύουν προς τα κάτω με τον ίδιο τρόπο.


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

 

Είμαι λίγο παλιό σχολείο, το γεγονός ότι μπορώ να χρησιμοποιήσω τα αρχεία πηγή για τη δημιουργία της βάσης δεδομένων. Στην πραγματικότητα υπάρχουν 2 αρχεία - έργο database.sql και το έργο-updates.sql - η πρώτη για το σχήμα και επίμονη δεδομένα, και το δεύτερο για τροποποιήσεις. Φυσικά, και οι δύο είναι υπό έλεγχο πηγή.


Όταν οι αλλαγές της βάσης δεδομένων, για πρώτη φορά ενημερώσετε το κύριο σχήμα στο έργο-database.sql, στη συνέχεια, αντιγράψτε το σχετικό πληροφορίες για το έργο-updates.sql, για παράδειγμα ALTER δηλώσεις ΠΙΝΑΚΑΣ. Στη συνέχεια μπορεί να εφαρμόσει τις ενημερώσεις της βάσης δεδομένων ανάπτυξη, δοκιμή, επαναλάβει μέχρι να γίνει καλά. Στη συνέχεια, ελέγξτε σε αρχεία, δοκιμή και πάλι, και ισχύουν για την παραγωγή.


Επίσης, συνήθως έχουν ένα τραπέζι στο db - Config - όπως:


**SQL**



```
CREATE TABLE Config
(
    cfg_tag VARCHAR(50),
    cfg_value VARCHAR(100)
);

INSERT IGNORE  INTO Config(cfg_tag, cfg_value) VALUES
( 'db_version', '$Revision: $'),
( 'db_revision', '$Revision: $');

```

Στη συνέχεια, μπορώ να προσθέσω τα εξής στην ενότητα ενημέρωση:



```
UPDATE Config SET cfg_value='$Revision: $' WHERE cfg_tag='db_revision';

```

Το `db_version`παίρνει μόνο άλλαξε όταν η βάση δεδομένων αναδημιουργείται, και το `db_revision`μου δίνει μια ένδειξη για το πόσο μακριά η db είναι από τη γραμμή βάσης.


Θα μπορούσε να κρατήσει τις ενημερώσεις στο δικό τους ξεχωριστό αρχεία, αλλά επέλεξα για να τα πολτοποιούμε μαζί και να χρησιμοποιούν cut & paste για να εξαγάγετε τις σχετικές ενότητες. Λίγο πιο καθαριότητα είναι εντάξει, δηλαδή, αφαίρεση «:» από $ Αναθεώρηση 1.1 $ για να τα παγώσει.

 

Redgate έχει ένα προϊόν που ονομάζεται [SQL Πηγή Ελέγχου](http://www.red-gate.com/products/sql-development/sql-source-control/) . Ενσωματώνει με TFS, SVN, SourceGear Vault, Vault Pro, Mercurial, Perforce, και Git.

 

[MyBatis](http://mybatis.org/) (πρώην iBatis) έχει [τη μετανάστευση σχήμα](http://mybatis.org/java.html) , εργαλείο για χρήση στη γραμμή εντολών. Είναι γραμμένο σε Java αν και μπορεί να χρησιμοποιηθεί με οποιοδήποτε έργο.



> 
> Για να επιτευχθεί μια καλή πρακτική διαχείρισης της αλλαγής της βάσης δεδομένων, θα πρέπει να προσδιορίσει μερικούς βασικούς στόχους. Έτσι, η MyBatis Schema Συστήματος Μετανάστευσης (ή MyBatis Μεταναστεύσεις για συντομία) επιδιώκει να:
> 
> 
> 


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

 

Αναρωτιέμαι ότι κανείς δεν αναφέρουν το εργαλείο ανοικτού κώδικα [liquibase](http://www.liquibase.org/) που είναι βασίζεται σε Java και θα πρέπει να εργαστεί για σχεδόν κάθε βάση δεδομένων που υποστηρίζει JDBC. Σε σύγκριση με ράγες χρησιμοποιεί xml αντί ρουμπίνι για να εκτελέσει τις αλλαγές σχήματος. Αν και μου αρέσει xml για τον τομέα συγκεκριμένες γλώσσες το πολύ δροσερό πλεονέκτημα της XML είναι ότι liquibase ξέρει πώς να επαναφέρετε ορισμένες εργασίες, όπως



```
<createTable tableName="USER"> 
   <column name="firstname" type="varchar(255)"/>
</createTable>

```

Έτσι, δεν χρειάζεται να χειριστεί το θέμα της δικής σας


Καθαρό δηλώσεις SQL ή εισαγωγή δεδομένων υποστηρίζεται επίσης.

 

Συστήνω ιδιαίτερα [SQL Δέλτα](http://www.sqldelta.com/deltasqlserver.html) . Απλά το χρησιμοποιούν για να δημιουργήσουν τα σενάρια διαφορά όταν είμαι γίνει κωδικοποίηση χαρακτηριστικό μου και να ελέγξει αυτά τα σενάρια σε εργαλείο μου τον έλεγχο πηγή (Mercurial :))


Έχουν και οι δύο σε ένα διακομιστή SQL & έκδοση της Oracle.

 

Οι περισσότερες μηχανές της βάσης δεδομένων θα πρέπει να στηρίξει ντάμπινγκ βάση δεδομένων σας σε ένα αρχείο. Ξέρω MySQL κάνει, ούτως ή άλλως. Αυτό θα είναι απλά ένα αρχείο κειμένου, ώστε να μπορείτε να υποστηρίζουν ότι για να Subversion, ή οτιδήποτε άλλο που χρησιμοποιείτε. Θα ήθελα να είναι εύκολο να εκτελέσετε μια διαφορά στα αρχεία πάρα πολύ.

 

Εάν χρησιμοποιείτε SQL Server θα ήταν δύσκολο να νικήσει δεδομένων Dude (γνωστός και ως βάση δεδομένων έκδοση του Visual Studio). Μόλις πάρετε κρεμάστε από το, κάνει ένα σχήμα σύγκρισης μεταξύ της πηγής ελέγχονται σας έκδοση της βάσης δεδομένων και την έκδοση παραγωγής είναι ένα αεράκι. Και με ένα κλικ μπορείτε να δημιουργήσετε διαφορά DDL σας.


Υπάρχει ένα εκπαιδευτικό [βίντεο](http://msdn.microsoft.com/en-us/vsts2008/cc659682.aspx) στο MSDN που είναι πολύ χρήσιμη.


Ξέρω για DBMS\_METADATA και Toad, αλλά αν κάποιος θα μπορούσε να καταλήξει σε μια Φίλε δεδομένων για την Oracle τότε η ζωή θα ήταν πολύ γλυκιά.

 

Ρίξτε μια ματιά στο DBMS\_METADATA πακέτο μαντείο. 


Ειδικότερα, οι ακόλουθες μέθοδοι είναι ιδιαίτερα χρήσιμες: 


* `DBMS_METADATA.GET_DDL`
* `DBMS_METADATA.SET_TRANSFORM_PARAM`
* `DBMS_METADATA.GET_GRANTED_DDL`


Μόλις είστε εξοικειωμένοι με τον τρόπο λειτουργίας τους (αρκετά αυτονόητα) μπορείτε να γράψετε ένα απλό σενάριο για να πετάξει τα αποτελέσματα αυτών των μεθόδων σε αρχεία κειμένου που μπορεί να τεθεί υπό έλεγχο πηγή. Καλή τύχη!


Δεν είμαι σίγουρος αν υπάρχει κάτι αυτή η απλή για MSSQL.

 

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


Το πιο ανθεκτικά μέρος που μπορώ να δω, είναι η παρακολούθηση των εξαρτήσεων, π.χ., για μια συγκεκριμένη εγκατάσταση πίνακα Β μπορεί να χρειαστεί να ενημερωθεί πριν πίνακα A.

 

Για Oracle, μπορώ να χρησιμοποιήσω [Toad](http://www.toadsoft.com/) , το οποίο μπορεί να πετάξει ένα σχήμα σε μια σειρά διακριτών αρχείων (π.χ., ένα αρχείο ανά πίνακα). Έχω κάποια σενάρια που διαχειρίζονται αυτή τη συλλογή σε Perforce, αλλά νομίζω ότι θα πρέπει να είναι εύκολα εφικτό σε σχεδόν οποιοδήποτε σύστημα ελέγχου αναθεώρησης.

 

PLSQL Developer, ένα εργαλείο από Όλες Arround Αυτοματισμοί, έχει ένα plugin για αποθετήρια που λειτουργεί ΟΚ (αλλά όχι μεγάλη) με τη Visual Source Safe.



> 
> Από την ιστοσελίδα: 
> 
> 
> 
> > 
> > Η έκδοση ελέγχου Plug-In παρέχει μια σφιχτή ολοκλήρωση μεταξύ της PL / SQL οποιοδήποτε σύστημα Έλεγχος έκδοσης που υποστηρίζει το SCC προδιαγραφές διεπαφής Microsoft Developer IDE >> και. >> Αυτό περιλαμβάνει τα πιο δημοφιλή συστήματα ελέγχου εκδόσεων, όπως το Microsoft Visual SourceSafe, >> Merant PVC και MKS Πηγή Ακεραιότητα.
> > 
> > 
> > 
> 
> 
> 


<http://www.allroundautomations.com/plsvcs.html>

 

Έχω κάνει αυτό μακριά και για χρόνια - διαχείριση (ή προσπαθούν να διαχειριστούν) εκδόσεις σχήματος. Οι καλύτερες προσεγγίσεις εξαρτώνται από τα εργαλεία που έχουμε. Εάν μπορείτε να πάρετε το εργαλείο Quest Software «Schema Manager» θα είναι σε καλή κατάσταση. Η Oracle έχει τη δική του, κατώτερη εργαλείο της, που ονομάζεται επίσης «Διαχείριση σχήματος» (σύγχυση πολύ;) που δεν συστήνω.


Χωρίς ένα αυτοματοποιημένο εργαλείο (δείτε άλλα σχόλια εδώ σχετικά στοιχεία Dude), τότε θα πρέπει να χρησιμοποιείτε scripts και τα αρχεία DDL άμεσα. Διαλέξτε μια προσέγγιση, το έγγραφο αυτό, και να ακολουθήσουν αυστηρά. Μου αρέσει που έχουν τη δυνατότητα να δημιουργήσετε ξανά τη βάση δεδομένων ανά πάσα στιγμή, γι 'αυτό προτιμούν να έχουν μια πλήρη DDL εξαγωγή ολόκληρης της βάσης δεδομένων (αν είμαι το DBA), ή του σχήματος του έργου (αν είμαι στο προϊόν -ανάπτυξη λειτουργία).

 

Γράφω σενάρια απελευθέρωσης db μου παράλληλα με την κωδικοποίηση, και να κρατήσει τα σενάρια απελευθέρωσης σε ένα συγκεκριμένο έργο ενότητα στο SS. Αν κάνω μια αλλαγή στον κώδικα που απαιτεί αλλαγή db, τότε μπορώ να ενημερώσω το σενάριο απελευθέρωση ταυτόχρονα. Πριν από την απελευθέρωση, τρέχω το σενάριο απελευθέρωσης σε μια καθαρή db dev (αντιγραφή δομή σοφή από την παραγωγή) και να κάνει τις τελικές δοκιμές μου σε αυτό.

 

[ER Studio](http://www.embarcadero.com/products/erstudio/) σας επιτρέπει να αντιστρέψει το σχήμα της βάσης δεδομένων σας στο εργαλείο και μπορείτε στη συνέχεια να το συγκρίνουμε να ζουν βάσεις δεδομένων. 


Παράδειγμα: Αντίστροφη ανάπτυξη σας σχήμα στο ER Studio - σύγκρισή της με την παραγωγή και θα απαριθμήσει όλες τις διαφορές. Μπορεί το σενάριο οι αλλαγές ή απλά να τους περάσει αυτόματα.


Μόλις έχετε ένα σχήμα στο ER Studio, μπορείτε είτε να αποθηκεύσετε το σενάριο δημιουργίας ή να το αποθηκεύσετε ως ένα ιδιόκτητο δυαδικό και να το αποθηκεύσετε στον έλεγχο έκδοσης. Αν ποτέ θέλετε να επιστρέψετε σε μια προηγούμενη έκδοση του συστήματος, απλά να το ελέγξουμε και σπρώξτε στην πλατφόρμα db σας.

 

Υπάρχει μια PHP5 «πλαίσιο μετανάστευσης βάσεων δεδομένων» που ονομάζεται Ruckusing. Δεν έχω χρησιμοποιήσει, αλλά τα [παραδείγματα που](http://code.google.com/p/ruckusing/wiki/CompleteExamples) δείχνουν την ιδέα, αν χρησιμοποιείτε τη γλώσσα για τη δημιουργία της βάσης δεδομένων, όπως και όταν χρειάζεται, το μόνο που πρέπει να παρακολουθείτε αρχεία προέλευσης.

 

Μπορείτε να χρησιμοποιήσετε [Εργαλεία δεδομένων του Microsoft SQL Server](http://msdn.microsoft.com/en-gb/data/tools.aspx) στο Visual Studio για να δημιουργήσει σενάρια για τα αντικείμενα βάσης δεδομένων ως μέρος ενός έργου του SQL Server. Στη συνέχεια μπορείτε να προσθέσετε τα σενάρια για τον έλεγχο της πηγής χρησιμοποιώντας την ενσωμάτωση ελέγχου πηγή που είναι ενσωματωμένη στο Visual Studio. Επίσης, SQL Server έργα σας επιτρέπουν να επαληθεύουν τα αντικείμενα βάσης δεδομένων χρησιμοποιώντας ένα μεταγλωττιστή και να δημιουργήσει σενάρια ανάπτυξης για να ενημερώσετε μια υπάρχουσα βάση δεδομένων ή να δημιουργήσετε ένα νέο.

 

Σύγκριση σχημάτων για την Oracle είναι ένα εργαλείο ειδικά σχεδιασμένο για να μεταναστεύσουν αλλαγές από την βάση δεδομένων μας Oracle στο άλλο. Παρακαλώ επισκεφθείτε την παρακάτω διεύθυνση URL για το σύνδεσμο λήψης, όπου θα είναι σε θέση να χρησιμοποιήσει το λογισμικό για ένα πλήρως λειτουργικό δίκη.


<http://www.red-gate.com/Products/schema_compare_for_oracle/index.htm>

 

Έχουμε χρησιμοποιήσει [MS Σύστημα ομάδας Database Edition](http://msdn.microsoft.com/en-us/vsts2008/products/bb933747.aspx) με πολύ καλή επιτυχία. Ενσωματώνει με TFS ελέγχου εκδόσεων και Visual Studio περισσότερο ή λιγότερο ομαλά και μας επιτρέπει να διαχειρίζεται αποθηκεύονται procs, προβολές, κλπ, εύκολα. Επίλυση των συγκρούσεων μπορεί να είναι ένας πόνος, αλλά η ιστορία έκδοση είναι πλήρης τη στιγμή που θα γίνει. Στη συνέχεια, μεταναστεύσεις προς QA και της παραγωγής είναι εξαιρετικά απλή.


Είναι δίκαιο να πούμε ότι είναι ένα προϊόν έκδοση 1.0, αν και δεν είναι χωρίς μερικά ζητήματα.

 

Θα ήθελα να συστήσει μία από τις δύο προσεγγίσεις. Πρώτον, επενδύουν σε [PowerDesigner](http://www.sybase.com/products/modelingdevelopment/powerdesigner) από την Sybase. Enterprise Edition. Σας επιτρέπει να σχεδιάσετε Φυσική datamodels, και ένα σωρό άλλα. Αλλά αυτό έρχεται με ένα αποθετήριο που σας επιτρέπει να κάνετε check-in μοντέλα σας. Κάθε νέα υπό έλεγχο μπορεί να είναι μια νέα έκδοση, που μπορεί να συγκριθεί οποιαδήποτε έκδοση σε οποιαδήποτε άλλη έκδοση, ακόμη και σε ό, τι είναι στη βάση δεδομένων σας εκείνη τη στιγμή. Θα παρουσιάσει στη συνέχεια μια λίστα με κάθε διαφορά και να ζητήσει τα οποία πρέπει να μεταφερθούν ... και στη συνέχεια να χτίζει το σενάριο για να το κάνει. Δεν είναι φθηνό, αλλά είναι μια συμφωνία σε διπλάσια τιμή και είναι ROI είναι περίπου 6 μήνες.


Η άλλη ιδέα είναι να ενεργοποιήσετε DDL λογιστικού ελέγχου (λειτουργεί σε Oracle). Αυτό θα δημιουργήσει ένα τραπέζι με κάθε αλλαγή που κάνετε. Εάν το ερώτημα τις αλλαγές από την χρονική σήμανση την τελευταία φορά που μεταφέρθηκε αλλαγές της βάσης δεδομένων σας για να prod για τώρα, θα έχετε μια ταξινομημένη λίστα με όλα όσα έχετε κάνει. Λίγα όπου ρήτρες για την εξάλειψη μηδενικού αθροίσματος αλλάζει όπως δημιουργία πίνακα foo? ακολουθούμενη από πίνακα σταγόνα foo? και μπορείτε εύκολα να οικοδομήσουμε ένα mod σενάριο. Γιατί να κρατήσει τις αλλαγές σε ένα wiki, το οποίο είναι διπλάσιο από το έργο. Αφήστε τη βάση δεδομένων τους εντοπίσουμε για εσάς.

 

Δύο συστάσεις του βιβλίου: «Βάσεις Δεδομένων Refactoring» από Ambler και Sadalage και «Agile Τεχνικές βάση δεδομένων» από Ambler.


Κάποιος ανέφερε Rails μεταναστεύσεις. Νομίζω ότι λειτουργούν μεγάλο, ακόμη και εκτός των εφαρμογών Rails. Τους χρησιμοποιείται σε μια εφαρμογή ASP με τον SQL Server που ήμασταν στη διαδικασία μετάβασης σε ράγες. Μπορείτε να ελέγξετε τα σενάρια της μετανάστευσης τον εαυτό τους μέσα στο VCS. Εδώ είναι [ένα μήνυμα από Ρεαλιστικό τον Dave Thomas](http://pragdave.blogs.pragprog.com/pragdave/2006/07/migrations_outs.html) σχετικά με το θέμα.

 

Σε περίπτωση απουσίας ενός VCS για αλλαγές στον πίνακα έχω να συνδεθείτε σε ένα wiki. Τουλάχιστον τότε μπορώ να δω πότε και για ποιο λόγο άλλαξε. Είναι πολύ από το τέλειο, όπως δεν είναι όλοι το κάνουμε και έχουμε πολλές εκδόσεις του προϊόντος σε χρήση, αλλά καλύτερα από το τίποτα.

 