<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"	>
<channel>
	<title>Comments on: Tips for databasemigreringer</title>
	<atom:link href="http://johannesbrodwall.com/2009/11/24/tips-for-databasemigreringer/feed/" rel="self" type="application/rss+xml" />
	<link>http://johannesbrodwall.com/2009/11/24/tips-for-databasemigreringer/</link>
	<description>Johannes Brodwall&#039;s Musings on Software Architecture and Programming</description>
	<lastBuildDate>Fri, 12 Mar 2010 19:22:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Johannes Brodwall</title>
		<link>http://johannesbrodwall.com/2009/11/24/tips-for-databasemigreringer/comment-page-1/#comment-127577</link>
		<dc:creator>Johannes Brodwall</dc:creator>
		<pubDate>Mon, 30 Nov 2009 18:09:32 +0000</pubDate>
		<guid isPermaLink="false">http://johannesbrodwall.com/?p=486#comment-127577</guid>
		<description>Det stemmer at med denne løsningen vil v2 måtte være forberedt på at data ligger i gammelt format. Dette er mer automatisk med triggere, men også litt mer magisk. Jeg ville valgt løsning avhengig av hvor omfattende testing jeg hadde av databasefunksjonalitet.</description>
		<content:encoded><![CDATA[<p>Det stemmer at med denne løsningen vil v2 måtte være forberedt på at data ligger i gammelt format. Dette er mer automatisk med triggere, men også litt mer magisk. Jeg ville valgt løsning avhengig av hvor omfattende testing jeg hadde av databasefunksjonalitet.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: anderssv</title>
		<link>http://johannesbrodwall.com/2009/11/24/tips-for-databasemigreringer/comment-page-1/#comment-127576</link>
		<dc:creator>anderssv</dc:creator>
		<pubDate>Mon, 30 Nov 2009 12:28:43 +0000</pubDate>
		<guid isPermaLink="false">http://johannesbrodwall.com/?p=486#comment-127576</guid>
		<description>Da må V2 støtte begge kolonner da? Og holde de oppdatert, og lese begge? Hvis ikke vil jo V1 skrive til gammel kolonne som ikke blir vist/fanget opp i V2. Tror jeg ville gått for triggerløsningen i dette tilfellet, men løsning i kode kan være bedre for en annen situasjon.&lt;br&gt;&lt;br&gt;Som Ferris sier så må man ha regime på dette med disiplin. F.eks. 6 måneder etter at en kolonne blir deprecated så slettes den og det kommuniseres ut til alle.&lt;br&gt;&lt;br&gt;Fant stoff på denne bloggen og: &lt;a href=&quot;http://exortech.com/blog/2009/02/01/weekly-release-blog-11-zero-downtime-database-deployment/&quot; rel=&quot;nofollow&quot;&gt;http://exortech.com/blog/2009/02/01/weekly-rele...&lt;/a&gt; . De har et eget rammeverk med expansion/contraction skille. Virker nok best i tilfellene hvor du ikke har noen eksterne forbrukere du må vente lenge på.</description>
		<content:encoded><![CDATA[<p>Da må V2 støtte begge kolonner da? Og holde de oppdatert, og lese begge? Hvis ikke vil jo V1 skrive til gammel kolonne som ikke blir vist/fanget opp i V2. Tror jeg ville gått for triggerløsningen i dette tilfellet, men løsning i kode kan være bedre for en annen situasjon.</p>
<p>Som Ferris sier så må man ha regime på dette med disiplin. F.eks. 6 måneder etter at en kolonne blir deprecated så slettes den og det kommuniseres ut til alle.</p>
<p>Fant stoff på denne bloggen og: <a href="http://exortech.com/blog/2009/02/01/weekly-release-blog-11-zero-downtime-database-deployment/" rel="nofollow"></a><a href="http://exortech.com/blog/2009/02/01/weekly-rele.." rel="nofollow">http://exortech.com/blog/2009/02/01/weekly-rele..</a>. . De har et eget rammeverk med expansion/contraction skille. Virker nok best i tilfellene hvor du ikke har noen eksterne forbrukere du må vente lenge på.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Johannes Brodwall</title>
		<link>http://johannesbrodwall.com/2009/11/24/tips-for-databasemigreringer/comment-page-1/#comment-127395</link>
		<dc:creator>Johannes Brodwall</dc:creator>
		<pubDate>Mon, 30 Nov 2009 10:09:32 +0000</pubDate>
		<guid isPermaLink="false">http://johannesbrodwall.com/?p=486#comment-127395</guid>
		<description>Det stemmer at med denne løsningen vil v2 måtte være forberedt på at data ligger i gammelt format. Dette er mer automatisk med triggere, men også litt mer magisk. Jeg ville valgt løsning avhengig av hvor omfattende testing jeg hadde av databasefunksjonalitet.</description>
		<content:encoded><![CDATA[<p>Det stemmer at med denne løsningen vil v2 måtte være forberedt på at data ligger i gammelt format. Dette er mer automatisk med triggere, men også litt mer magisk. Jeg ville valgt løsning avhengig av hvor omfattende testing jeg hadde av databasefunksjonalitet.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: anderssv</title>
		<link>http://johannesbrodwall.com/2009/11/24/tips-for-databasemigreringer/comment-page-1/#comment-127394</link>
		<dc:creator>anderssv</dc:creator>
		<pubDate>Mon, 30 Nov 2009 04:28:43 +0000</pubDate>
		<guid isPermaLink="false">http://johannesbrodwall.com/?p=486#comment-127394</guid>
		<description>Da må V2 støtte begge kolonner da? Og holde de oppdatert, og lese begge? Hvis ikke vil jo V1 skrive til gammel kolonne som ikke blir vist/fanget opp i V2. Tror jeg ville gått for triggerløsningen i dette tilfellet, men løsning i kode kan være bedre for en annen situasjon.&lt;br&gt;&lt;br&gt;Som Ferris sier så må man ha regime på dette med disiplin. F.eks. 6 måneder etter at en kolonne blir deprecated så slettes den og det kommuniseres ut til alle.&lt;br&gt;&lt;br&gt;Fant stoff på denne bloggen og: &lt;a href=&quot;http://exortech.com/blog/2009/02/01/weekly-release-blog-11-zero-downtime-database-deployment/&quot; rel=&quot;nofollow&quot;&gt;http://exortech.com/blog/2009/02/01/weekly-rele...&lt;/a&gt; . De har et eget rammeverk med expansion/contraction skille. Virker nok best i tilfellene hvor du ikke har noen eksterne forbrukere du må vente lenge på.</description>
		<content:encoded><![CDATA[<p>Da må V2 støtte begge kolonner da? Og holde de oppdatert, og lese begge? Hvis ikke vil jo V1 skrive til gammel kolonne som ikke blir vist/fanget opp i V2. Tror jeg ville gått for triggerløsningen i dette tilfellet, men løsning i kode kan være bedre for en annen situasjon.</p>
<p>Som Ferris sier så må man ha regime på dette med disiplin. F.eks. 6 måneder etter at en kolonne blir deprecated så slettes den og det kommuniseres ut til alle.</p>
<p>Fant stoff på denne bloggen og: <a href="http://exortech.com/blog/2009/02/01/weekly-release-blog-11-zero-downtime-database-deployment/" rel="nofollow"></a><a href="http://exortech.com/blog/2009/02/01/weekly-rele.." rel="nofollow">http://exortech.com/blog/2009/02/01/weekly-rele..</a>. . De har et eget rammeverk med expansion/contraction skille. Virker nok best i tilfellene hvor du ikke har noen eksterne forbrukere du må vente lenge på.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Johannes Brodwall</title>
		<link>http://johannesbrodwall.com/2009/11/24/tips-for-databasemigreringer/comment-page-1/#comment-127388</link>
		<dc:creator>Johannes Brodwall</dc:creator>
		<pubDate>Thu, 26 Nov 2009 19:44:09 +0000</pubDate>
		<guid isPermaLink="false">http://johannesbrodwall.com/?p=486#comment-127388</guid>
		<description>Alternativ for rename/redefine column:&lt;br&gt;&lt;br&gt;1. Sett i produksjon en databaseendring med den nye kolonnen.&lt;br&gt;2. Kjør migreringsscript av selve data til den nye kolonnen (kan gjentas som ofte man vil)&lt;br&gt;3. Produksjonsett ny versjon (v2) av systemet parallelt med gammel versjon. Ny versjon må takle at kolonnen er NULL&lt;br&gt;4. Når man er helt sikker på at man vil gå videre, skru av gammel versjon (v1) og kjør migreringsscript for data en siste gang&lt;br&gt;5. Ny versjon av programmet (v3) som ignorerer gammel kolonne (kan kjøres i parallell med forrige versjon - v2)&lt;br&gt;6. Skru av v2&lt;br&gt;7. Dropp gammel kolonne&lt;br&gt;&lt;br&gt;Det krever litt oppfølgning. Men alle stegene er reverserbare. Jeg foretrekker en slik strategi dersom frykt for feil gjør at man ikke vil produksjonsette.</description>
		<content:encoded><![CDATA[<p>Alternativ for rename/redefine column:</p>
<p>1. Sett i produksjon en databaseendring med den nye kolonnen.<br />2. Kjør migreringsscript av selve data til den nye kolonnen (kan gjentas som ofte man vil)<br />3. Produksjonsett ny versjon (v2) av systemet parallelt med gammel versjon. Ny versjon må takle at kolonnen er NULL<br />4. Når man er helt sikker på at man vil gå videre, skru av gammel versjon (v1) og kjør migreringsscript for data en siste gang<br />5. Ny versjon av programmet (v3) som ignorerer gammel kolonne (kan kjøres i parallell med forrige versjon &#8211; v2)<br />6. Skru av v2<br />7. Dropp gammel kolonne</p>
<p>Det krever litt oppfølgning. Men alle stegene er reverserbare. Jeg foretrekker en slik strategi dersom frykt for feil gjør at man ikke vil produksjonsette.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Thomas Ferris Nicolaisen</title>
		<link>http://johannesbrodwall.com/2009/11/24/tips-for-databasemigreringer/comment-page-1/#comment-127387</link>
		<dc:creator>Thomas Ferris Nicolaisen</dc:creator>
		<pubDate>Thu, 26 Nov 2009 12:08:40 +0000</pubDate>
		<guid isPermaLink="false">http://johannesbrodwall.com/?p=486#comment-127387</guid>
		<description>Her er det lettest å peke på &quot;boken&quot; igjen. Jeg tror jo lenger uti du blar, jo vanskeligere blir det. Her er en fin oversikt forresten: &lt;a href=&quot;http://www.agiledata.org/essays/databaseRefactoringCatalog.html&quot; rel=&quot;nofollow&quot;&gt;http://www.agiledata.org/essays/databaseRefacto...&lt;/a&gt;&lt;br&gt;&lt;br&gt;Det å legge til nye tabeller og kolonner er temmelig rett frem, men det er typisk knyttet til nyutvikling. Når det gjelder refaktorering, så må man typisk gjøre ting i flere faser. F.eks Rename Column: (1) opprett ny kolonne, (2) lag trigger som oppdaterer gammel kolonne i en overgangsperioden, (3) rull ut nye applikasjoner som bruker ny kolonne, (4) fjern gammel kolonne.&lt;br&gt;&lt;br&gt;Hele roundtripen tar lang tid, krever tunga rett i munnen, og mye disiplin for spesielt å være sikker på at (3) og (4) blir fulgt opp. Overgangstiden kan være alt fra noen minutter (i et cluster som vi har), eller åresvis (klientapplikasjoner i andre team). &lt;br&gt;&lt;br&gt;Det er 60 teknikker i &quot;boka&quot;, og man må beherske databasen sin godt. Man må øve mye, og ha gode regresjonstester, som Anders sier. Mye jobb for mitt lille team, altså :)</description>
		<content:encoded><![CDATA[<p>Her er det lettest å peke på &#8220;boken&#8221; igjen. Jeg tror jo lenger uti du blar, jo vanskeligere blir det. Her er en fin oversikt forresten: <a href="http://www.agiledata.org/essays/databaseRefactoringCatalog.html" rel="nofollow"></a><a href="http://www.agiledata.org/essays/databaseRefacto.." rel="nofollow">http://www.agiledata.org/essays/databaseRefacto..</a>.</p>
<p>Det å legge til nye tabeller og kolonner er temmelig rett frem, men det er typisk knyttet til nyutvikling. Når det gjelder refaktorering, så må man typisk gjøre ting i flere faser. F.eks Rename Column: (1) opprett ny kolonne, (2) lag trigger som oppdaterer gammel kolonne i en overgangsperioden, (3) rull ut nye applikasjoner som bruker ny kolonne, (4) fjern gammel kolonne.</p>
<p>Hele roundtripen tar lang tid, krever tunga rett i munnen, og mye disiplin for spesielt å være sikker på at (3) og (4) blir fulgt opp. Overgangstiden kan være alt fra noen minutter (i et cluster som vi har), eller åresvis (klientapplikasjoner i andre team). </p>
<p>Det er 60 teknikker i &#8220;boka&#8221;, og man må beherske databasen sin godt. Man må øve mye, og ha gode regresjonstester, som Anders sier. Mye jobb for mitt lille team, altså :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jhannes</title>
		<link>http://johannesbrodwall.com/2009/11/24/tips-for-databasemigreringer/comment-page-1/#comment-127386</link>
		<dc:creator>jhannes</dc:creator>
		<pubDate>Thu, 26 Nov 2009 11:49:15 +0000</pubDate>
		<guid isPermaLink="false">http://johannesbrodwall.com/?p=486#comment-127386</guid>
		<description>Bakoverkompatible databaseendringer er jo et tema vi kunne diskutert mer.&lt;br&gt;&lt;br&gt;Som et trivielt eksempel: Det å legge til en ny tabell som er uavhengig av resten av skjema er alltid bakoverkompatibelt. Det å legge til en kolonne er nesten alltid kompatibelt.&lt;br&gt;&lt;br&gt;Hvilke databaseendringer er vanlige og vanskelig å gjøre bakoverkompatible? Eksempler, plz! :-)</description>
		<content:encoded><![CDATA[<p>Bakoverkompatible databaseendringer er jo et tema vi kunne diskutert mer.</p>
<p>Som et trivielt eksempel: Det å legge til en ny tabell som er uavhengig av resten av skjema er alltid bakoverkompatibelt. Det å legge til en kolonne er nesten alltid kompatibelt.</p>
<p>Hvilke databaseendringer er vanlige og vanskelig å gjøre bakoverkompatible? Eksempler, plz! :-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: tfnico</title>
		<link>http://johannesbrodwall.com/2009/11/24/tips-for-databasemigreringer/comment-page-1/#comment-127383</link>
		<dc:creator>tfnico</dc:creator>
		<pubDate>Thu, 26 Nov 2009 10:17:04 +0000</pubDate>
		<guid isPermaLink="false">http://johannesbrodwall.com/?p=486#comment-127383</guid>
		<description>Vi deployer applikasjon og databaseendring samtidig. Vi har mye live trafikk på databasen, så vi tør nesten ikke annet. Uansett, det er veldig kjedelig å ha nedetid, både for kunder og ansatte (man skal gjerne ha det utenfor primetime også). Hvis vi kunne ha mestret teknikkene i boka til Ambler så kunne vi oppgradert databasen først.. Det hadde vært gull. Men per i dag så virker det så komplisert (mye arbeid å være bakoverkompatibel!) at jeg ikke kommer noen vei når jeg tar det opp i teamet.</description>
		<content:encoded><![CDATA[<p>Vi deployer applikasjon og databaseendring samtidig. Vi har mye live trafikk på databasen, så vi tør nesten ikke annet. Uansett, det er veldig kjedelig å ha nedetid, både for kunder og ansatte (man skal gjerne ha det utenfor primetime også). Hvis vi kunne ha mestret teknikkene i boka til Ambler så kunne vi oppgradert databasen først.. Det hadde vært gull. Men per i dag så virker det så komplisert (mye arbeid å være bakoverkompatibel!) at jeg ikke kommer noen vei når jeg tar det opp i teamet.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: anderssv</title>
		<link>http://johannesbrodwall.com/2009/11/24/tips-for-databasemigreringer/comment-page-1/#comment-127381</link>
		<dc:creator>anderssv</dc:creator>
		<pubDate>Thu, 26 Nov 2009 06:00:15 +0000</pubDate>
		<guid isPermaLink="false">http://johannesbrodwall.com/?p=486#comment-127381</guid>
		<description>Galskap er det nok ikke, men besnærende. ;) Bare usikker på verdien, og at man må holde tunga rett i munnen. &lt;br&gt;&lt;br&gt;Men dette er spennende. Erfaringer burde samles, kanskje man kunne kjørt en XP Meetup rundt temaet?</description>
		<content:encoded><![CDATA[<p>Galskap er det nok ikke, men besnærende. ;) Bare usikker på verdien, og at man må holde tunga rett i munnen. </p>
<p>Men dette er spennende. Erfaringer burde samles, kanskje man kunne kjørt en XP Meetup rundt temaet?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: geirhedemark</title>
		<link>http://johannesbrodwall.com/2009/11/24/tips-for-databasemigreringer/comment-page-1/#comment-127379</link>
		<dc:creator>geirhedemark</dc:creator>
		<pubDate>Wed, 25 Nov 2009 17:27:13 +0000</pubDate>
		<guid isPermaLink="false">http://johannesbrodwall.com/?p=486#comment-127379</guid>
		<description>Mnah, kan bli littegrann bedre:&lt;br&gt;&lt;br&gt;&quot;Les database refactoring av Ambler, Sadalage&quot;&lt;br&gt;&quot;Skriv tester som tester mot databasen, ellers vet du ikke hva du gjør&quot;&lt;br&gt;&quot;Unngå mest mulig av triggere, prosedyrer, views. Bruk mest mulig tabeller med minst mulig features - det er enklest å teste.&quot;&lt;br&gt;&quot;Sørg for at applikasjonen tester at den kjører mot riktig versjon av skjemaet&quot;</description>
		<content:encoded><![CDATA[<p>Mnah, kan bli littegrann bedre:</p>
<p>&#8220;Les database refactoring av Ambler, Sadalage&#8221;<br />&#8220;Skriv tester som tester mot databasen, ellers vet du ikke hva du gjør&#8221;<br />&#8220;Unngå mest mulig av triggere, prosedyrer, views. Bruk mest mulig tabeller med minst mulig features &#8211; det er enklest å teste.&#8221;<br />&#8220;Sørg for at applikasjonen tester at den kjører mot riktig versjon av skjemaet&#8221;</p>
]]></content:encoded>
	</item>
</channel>
</rss>
