Strādājot pie izmaiņām ierastais proces ir apmēram tāds- viens vai vairāki cilvēki viec izmaiņas testēšanas vides serverī, tiek laisti daudzi skripti, datu mainīšanas vaicājumi. Vēlāk datu struktūras maiņas skripti tiek apvienoti vienā lielākā, vēlreiz pārbaudīti uz citas testēšanas vides un galu galā tiek laisti produkcijas vidē.
Problēma:
Pēc neveiksmīgas vaicājumu izpildes nepieciešams atjaunot vidi tādu, kāda tā bija- to var darīt ar vaicājumu palīdzību, kas atsauc veiktās izmaiņas (piemēram- nepareizi pievienojam kolonnu, tad nu to pēc tam dzēšam). Tāpat to var darīt ar rezerves kopiju (BackUp) palīdzību. Ja pirmais veids ir ātrs (bet ne vienmēr izpildāms, jo piemēram, netīši izmetot kolonnu atjaunot to ar iepriekšējiem datiem ar vaicājumu palīdzību parasti nav iespējams), tad otrs jau ir lēns un samērā piņķerīgs process.
Risinājums (sākot ar SQL Server 2005):
Izmantot datu bāzes SnapShot (SnapShot pēc idejas ir datu bāzes ‘momentuzņēmums’ tā izveides brīdī- SnapShot’ā datus mainīt nav atļauts).
Tātad izveide:
CREATE DATABASE TDatuBaze_SnapShot ONKur TDatuBaze_SnapShot- veidojamā ‘momentuzņēmuma’ nosaukums,
(
NAME = TDatuBaze,
FILENAME = 'C:\SQL\TDatuBaze.ss'
)
AS SNAPSHOT OF TDatuBaze;
„TDatuBaze”- fiziskais faila nosaukums, no kā veido ‘momentuzņēmumu’:
FileName-jaunā SnapShot faila fiziskā atrašanās vieta (kā nu paši izdomājam).
„As SnapShot OF TDatuBaze” – kurai datu bāzei tiek veidots ‘momentuzņēmums’.
Pēc skripta izpildes pie Databases Snapshots varēs atrast jaunizveidoto snapšotu. To var pavisam droši izmantot select vaicājumu izsaukšanai vai datu bāzes iepriekšējās struktūras apskatīšanai.
Atjaunošana:
Use MasterŠajā skriptā:
ALTER DATABASE TDatuBaze SET SINGLE_USER WITH ROLLBACK IMMEDIATE
RESTORE DATABASE TDatuBaze from DATABASE_SNAPSHOT = 'TDatuBaze_SnapShot'
ALTER DATABASE TDatuBaze SET MULTI_USER WITH ROLLBACK IMMEDIATE
· No sākuma pārslēdzam konekciju uz Master datu bāzi (datu bāzei nedrīkst lietot brīdī, kad to atjauno no SnapShot).
· Nežēlīgi atsitam visus citus lietotājus, kas šobrīd varētu lietot datu bāzi.
· Atjaunojam.
· Atļaujam citiem lietotājiem slēgties klāt datu bāzei.
Pēc skripta izpildes datu bāzi ir tieši tāda, kāda tā bija SnapShot izveides brīdī. Galvenā atšķirība no BackUp:
· Strādā stipri ātri (pie izveides dati netiek kopēti- tikai tad, kad pamata datu bāzē tiek veiktas izmaiņas) un ērti
· Var salīdzināt snapshot ar aktuālo datu bāzi
Ierobežojumi:
· SnapShot nevarēs izveidot uz SQL Server Express (vajag Enterprise Edition)
· Vienai datu bāzei šādā scenārijā nevar būt vairāk kā viens SnapShot (nu- principā būt var, tikai atjaunot datu bāzi varēs tikai tad, kad paliks tikai viens snapshot).
· Ja datu bāze, kurai ir izveidots SnapShot atjauno no rezerves kopijas- tad SnapShot vairs nav derīgs.
· Būtu jārēķinās ar papildus slodzi serverim, jo mainot datus jārūpējas arī par SnapShot.
Nav komentāru:
Ierakstīt komentāru