Forum » Programiranje » SQL backup import
SQL backup import
meh ::
Pozdravljeni,
Na MsSQL bazi, je pred cca mesecem dni prišlo do spremembe podatkov v nekaterih tabelah. Najverjetneje update, ki je povozil celotno zgodovino.
Danes sem opazil, da imajo vsi zapisi v tabeli nastavljeno isto ceno. Te cene žal ni mogoče izračunati s podatki iz drugih polj. Na takšen način so "popravljene vsaj 3 tabele vse skupaj približno 100.000 zapisov.
Da bi povrnil stanje, kot je bilo pred sprememo, je en način, da si izvozim Backup, ki je bil narejen pred manipulacijo podatkov, ter z nekaj update stavki povoziti ta polja, kjer so bile narejene spremembe.
Ker pa trenutno še ne vem točno, kolikšen je obseg spremenjenih podatkov, me zanima, če bi lahko uvozil stari backup, ki je bil narejen (1.3.2018), da povozi vse podatke do 1.3.2018 na trenutni bazi. Noveješi podatki od 2.3.2018 pa ostanejo? Obstaja takšna možnost?
Oz. kako bi vi rešili tak problem?
Hvala in Lp,
Meh
Na MsSQL bazi, je pred cca mesecem dni prišlo do spremembe podatkov v nekaterih tabelah. Najverjetneje update, ki je povozil celotno zgodovino.
Danes sem opazil, da imajo vsi zapisi v tabeli nastavljeno isto ceno. Te cene žal ni mogoče izračunati s podatki iz drugih polj. Na takšen način so "popravljene vsaj 3 tabele vse skupaj približno 100.000 zapisov.
Da bi povrnil stanje, kot je bilo pred sprememo, je en način, da si izvozim Backup, ki je bil narejen pred manipulacijo podatkov, ter z nekaj update stavki povoziti ta polja, kjer so bile narejene spremembe.
Ker pa trenutno še ne vem točno, kolikšen je obseg spremenjenih podatkov, me zanima, če bi lahko uvozil stari backup, ki je bil narejen (1.3.2018), da povozi vse podatke do 1.3.2018 na trenutni bazi. Noveješi podatki od 2.3.2018 pa ostanejo? Obstaja takšna možnost?
Oz. kako bi vi rešili tak problem?
Hvala in Lp,
Meh
Iluvatar ::
Pozdravljen.
Jaz ponavadi tako težavo rešim z RedGate Data Compare. Restoram bazo iz backupa v neko drugo bazo, zaženem RedGate Data Compare in povem naj poišče vse kar je različno med obema bazama. Potem lahko za vsak zapis izbereš, ali ga boš prepisal ali ohranil ipd..
Data Compare mi je že dostikrat prišel prav, močno priporočam.
Jaz ponavadi tako težavo rešim z RedGate Data Compare. Restoram bazo iz backupa v neko drugo bazo, zaženem RedGate Data Compare in povem naj poišče vse kar je različno med obema bazama. Potem lahko za vsak zapis izbereš, ali ga boš prepisal ali ohranil ipd..
Data Compare mi je že dostikrat prišel prav, močno priporočam.
meh ::
Verjameš ali ne, ravno prenašam to orodje.
Koliko sem si uspel prebrati, bi z njim lahko rešil težavo.
Hvala za predlog.
Drugače pa ni možno v SSMS-ju uvoziti celoten backup v trenutno bazo (da prepiše vse podatke), vendar tisti podatki, ki so bili vnešeni po datumu backupa, pa pusti nespemenjene?
Ker kolikor sem gledal, lahko restoraš backup, vendar v takem primeru ne bi imel podatkov po 1.3....
Koliko sem si uspel prebrati, bi z njim lahko rešil težavo.
Hvala za predlog.
Drugače pa ni možno v SSMS-ju uvoziti celoten backup v trenutno bazo (da prepiše vse podatke), vendar tisti podatki, ki so bili vnešeni po datumu backupa, pa pusti nespemenjene?
Ker kolikor sem gledal, lahko restoraš backup, vendar v takem primeru ne bi imel podatkov po 1.3....
GupeM ::
Kaj pa, če restoraš backup na ločeno bazo, nato narediš export podatkov v takšen format, da lahko iz original baze deletaš vnose, ki se "ponovijo" v novi bazi, nato pa narediš insert teh novih.
Primer:
Narediš export tabele iz backupa, ki ti generira delete statement: "Izbriši vse ID-je, ki so v backup tabeli"
Narediš "import" tabele z inserti. Lahko s preprosto skripto, ali pa celo z enim SQL stavkom.: "Vstavi vse vrstice iz backup tabele"
Seveda moraš za ta čas verjetno onemogočiti (nekatere) constrainte, drugače ti lahko briše še kakšne druge podatke, ki jih nočeš izbrisati.
Primer:
-- Original baza: tabela1: id |xyz |cena ----+----------+-------- 1 |xyz1 |100 2 |xyz2 |100 3 |xyz3 |100 4 |xyz4 |50 -- Ta je bil vnešen po kritičnem datumu backup_tabela: id |xyz |cena ----+----------+-------- 1 |xyz1 |12 2 |xyz2 |14 3 |xyz3 |76
Narediš export tabele iz backupa, ki ti generira delete statement: "Izbriši vse ID-je, ki so v backup tabeli"
DELETE FROM tabela1 WHERE id IN (1,2,3);
Narediš "import" tabele z inserti. Lahko s preprosto skripto, ali pa celo z enim SQL stavkom.: "Vstavi vse vrstice iz backup tabele"
INSERT INTO tabela1 select id,xyz,cena from backup_tabela
Seveda moraš za ta čas verjetno onemogočiti (nekatere) constrainte, drugače ti lahko briše še kakšne druge podatke, ki jih nočeš izbrisati.
win64 ::
Če imaš na bazi vklopljen full transactional log lahko dobiš zgodovino vseh sprememb v računalniku prijazni obliki.
S programom kot je "SQL Server Transaction Log Reader" pa tudi v obliki SQL stavkov.
S programom kot je "SQL Server Transaction Log Reader" pa tudi v obliki SQL stavkov.
frudi ::
Ne rabiš nobenih posebnih orodij, če gre samo za tri tabele in so podatki, ki jih želiš popraviti, res lepo ločeni po datumu od tistih, ki jih ne želiš tikati.
Naredi restore backupa v neko drugo, začasno bazo. Potem pa na roke spiši update stavek, ki vse zapise, starejše od 1.3., popravi s podatki iz backup baze. Nekaj v stilu:
Naredi restore backupa v neko drugo, začasno bazo. Potem pa na roke spiši update stavek, ki vse zapise, starejše od 1.3., popravi s podatki iz backup baze. Nekaj v stilu:
update t set Cena = s.Cena from original_baza.dbo.Tabela1 as t inner join backup_baza.dbo.Tabela1 as s on t.Id = s.Id where t.DatumZapisa <= '2018-03-01'
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)
meh ::
Pozdravljeni,
Sem rešil zadevo z updati, ker se je izkazalo, da je bilo spremenjenih samo 6 polj v 3 tabelah.
Sem pa namestil program Data compare in je res uporaben, sploh na koncu, ko sem končal z updati, sem preveril ponovno preveril tabele z data compare-om, ki je lepo pokazal še tiste vrstice, ki so izvisele (kjer so manjkali podatki, ki so bili kot pogoj v updatu).
Tako, da hvala lepa za vaše predloge in pomoč.
Sem rešil zadevo z updati, ker se je izkazalo, da je bilo spremenjenih samo 6 polj v 3 tabelah.
Sem pa namestil program Data compare in je res uporaben, sploh na koncu, ko sem končal z updati, sem preveril ponovno preveril tabele z data compare-om, ki je lepo pokazal še tiste vrstice, ki so izvisele (kjer so manjkali podatki, ki so bili kot pogoj v updatu).
Tako, da hvala lepa za vaše predloge in pomoč.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | MSSQL na LinuxuOddelek: Programska oprema | 809 (587) | Iluvatar |
» | SQL vprasanje (strani: 1 2 )Oddelek: Programiranje | 8424 (5103) | BivšiUser2 |
» | Izračun normale v C++ in povezava z ExcelomOddelek: Programiranje | 1635 (1285) | primoz4p |
» | mysql poizvedbaOddelek: Izdelava spletišč | 840 (659) | sebavet |
» | [SQL] Unikatni izpisiOddelek: Programiranje | 2242 (1629) | 111111111111 |