Qu'est-ce qu'un bon moyen de migrer les changements de DB du développement au QA aux environnements de production? Actuellement nous:
Le problème avec c'est que c'est très manuel. Il s'appuie sur le développeur se souvenir de joindre le SQL ou le réviseur de pair la capturer si le développeur oublie. Parfois, cela finit par être le testeur ou le déploiement QA qui découvre le problème.
Un problème secondaire est que vous avez parfois besoin de coordonner manuellement les modifications si deux tâches distinctes modifient le même objet de base de données. Cela peut être comme la façon dont il est, mais il semble toujours qu'il y ait une manière automatisée de "signaler" ces problèmes ou quelque chose comme ça.
Notre configuration: Notre boutique de développement est pleine de développeurs avec beaucoup d'expérience de la DB. Nos projets sont très orientés DB. Nous sommes principalement un magasin .NET et MS SQL. Nous utilisons actuellement des éléments de travail MS TFS pour suivre notre travail. Ceci est pratique pour les changements de code, car il relie les modifications apportées aux éléments de travail afin que je puisse savoir exactement quels changements dans lesquels je dois inclure lors de la migration vers QA et des environnements de production. Nous n'utilisons pas actuellement un projet de DB, mais que vous pouvez passer à cela à l'avenir (peut-être que cela fait partie de la réponse).
Je suis très habitué à mon système de contrôle source prenant soin de choses comme ceci pour moi et aimerais avoir la même chose pour mon SQL.
Dans un environnement VS, j'ai toujours utilisé des projets de base de données pour implémenter les scripts de mise à jour. J'ai tendance à utiliser des noms inimaginatifs tels que "base de donnéesUpdate17.sql" ou "PriceUpdatefebRubera2010.sql" pour mes scripts. Les avoir en tant que projets de base de données me permettent de les attacher aux tâches de serveur d'équipe, à des bugs (et si nous avons fait des critiques de codes, à eux aussi). J'inclus également dans chaque base de données (que j'ai autorité sur) une table spécifiquement pour la collecte des modifications apportées au schéma.
CREATE TABLE [dbo].[AuditDDL](
[EventID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[EventData] [xml] NULL, -- what did they do
[EventUser] varchar(100) NOT NULL, -- who did it
[EventTime] [datetime] DEFAULT (getdate()) -- when did they do it
)
GO
Eh bien, cela prend soin de 3 du 6 WS .
CREATE TRIGGER [trgAuditDDL]
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
INSERT INTO AuditDDL(EventData, EventUser)
SELECT EVENTDATA(), original_login()
GO
J'inclus une instruction insertion pour enregistrer le début d'un patch ainsi que la fin d'un patch. Les événements se produisent en dehors des patchs sont des choses à examiner.
Par exemple, un insert "Begn Patch" pour "Patch 17" ressemblerait à:
INSERT INTO [dbo].[AuditDDL]
([EventData]
,[EventUser])
VALUES
('<EVENT_INSTANCE><EventType>BEGIN PATCH 17</EventType></EVENT_INSTANCE>'
,ORIGINAL_LOGIN())
GO
Puisqu'il attrape également lorsque des indices sont reconstruits, vous devrez exécuter ce qui suit chaque mois ou pour effacer ces événements:
DELETE FROM AuditDDL
WHERE [EventData].exist('/EVENT_INSTANCE/EventType/text()[fn:contains(.,"ALTER_INDEX")]') =1
GO
DELETE FROM AuditDDL
WHERE [EventData].exist('/EVENT_INSTANCE/EventType/text()[fn:contains(.,"UPDATE_STATISTICS")]') =1
GO
version antérieure précédemment affichée sur défaut de serveur .
Dans un environnement conforme au SOX et PCI-DSS, vous n'aurez jamais accès aux serveurs de production. Par conséquent, les scripts doivent être clairs et exercés au préalable. Les commentaires au sommet des scripts de mise à jour incluent des listes de nouvelles tables, des Procs stockés, des fonctions, etc. ainsi que des listes de tableaux modifiés, des PROC stockés, des fonctions, etc. Si les données sont modifiées, expliquent ce qui est modifié et pourquoi.
Un problème secondaire est que vous avez parfois besoin de coordonner manuellement les modifications si deux tâches distinctes modifient le même objet de base de données. Cela peut être comme la façon dont c'est, mais il semble toujours qu'il y ait une manière automatisée de "signaler" ces problèmes ou quelque chose.
Je n'ai jamais rencontré un outil qui nous permet de la suivre automatiquement. Les employeurs précédents ont utilisé un principe de "propriétaire de la base de données" - une seule personne qui est personnellement responsable de la base de données. Cette personne ne sera pas le seul développeur qui travaille contre cette base de données, mais tous les changements doivent les passer à travers. Cela a bien fonctionné pour maintenir les changements de collision et d'endommagement des autres.
Avez-vous regardé SQL Source Control? Vous pouvez l'utiliser pour connecter votre serveur SQL à TFS/SVN/Vault ou VSS - - http://www.red-gate.com/products/sql-development/sql-source-control/
ne autre solution consiste à utiliser quelque chose comme PowerDesigner, Erwin, etc. pour concevoir et gérer les modifications apportées à votre base de données.
Nous commençons à transmettre vers une stratégie où les bases de données sont modélisées dans PowerDesigner. Toutes les modifications apportées à la structure/code de base de données sont effectuées dans le modèle, vérifiée dans le contrôle de la source, puis modifier les scripts sont générés à partir des modèles pour implémenter les modifications de la base de données. Ces scripts de changement sont également vérifiés pour contrôler la source. Les gros changements sont examinés par des pairs et PowerDesigner rend cette très facile à utiliser des fonctionnalités intégrées.
PowerDesigner est un outil de modélisation générique qui supporte plus que des bases de données, nous commençons donc à l'utiliser pour gérer les exigences, créer des diagrammes conceptuels, physiques et d'architecture (OUM'S TOO), etc. Fondamentalement, nous l'utilisons pour fournir à la colonne vertébrale Processus d'ingénierie logicielle.
(Je ne suis en aucun cas affilié à Sybase, qui a développé PowerDesigner - il suffit de penser que je jetais ça là).
DB Ghost est mon outil préféré pour la gestion de bases de données.
[4] est particulièrement pratique pour faire des changements locaux ou créer des instances séparées pour différents environnements. En fait, il est si facile que je crée une base de données séparée pour chaque fonctionnalité ou bogue que je travaille sur cet impact sur une base de données.
Le principal avantage de l'utiliser sur la maintenance des changements explicites ou des scripts de migration est que vous surtout Vous n'avez pas besoin de maintenir des changements explicites ou des scripts de migration - vous pouvez surtout entretenir la "version actuelle" de votre base de données. Un aspect gênant de la gestion des scripts de migration est qu'il n'y a pas de moyen facile de voir, par exemple. une liste de colonnes dans une table (basée sur les scripts de migration). Bien sûr, certains changements doivent être faits sous forme de migrations explicites, mais ils sont suffisamment faciles à gérer comme scripts distincts.
Une conséquence particulièrement agréable de pouvoir gérer des bases de données comme (un ensemble) de scripts et de pouvoir créer rapidement de nouvelles instances est que le test de base de données important est très facile (et assez amusant). J'utilise TSQLT pour tester unitaire.
Je souhaite seulement qu'il y ait un outil similaire pour les autres DBMS-S.
Je sais que cela semble survenir à la plupart des DBA:
Avez-vous envisagé d'utiliser Ruby sur Rails pour suivre les modifications de la base de données (et uniquement les modifications de base de données). Vous n'avez pas besoin d'exécuter une application ou d'écrire Ruby code, etc. Mais j'ai trouvé le style des migrations (c'est comme ça qu'ils l'appellent) est assez utile: http://guides.rubyonrails.org/migrations.html Englisons
SQL Server est également pris en charge, vous devrez peut-être utiliser Jruby + JDBC.