MS SQL 7.0 SP4 Backup & Restore naar andere DB

Pagina: 1
Acties:
  • 241 views sinds 30-01-2008
  • Reageer

  • Firefox
  • Registratie: Juni 1999
  • Laatst online: 08-09-2024

Firefox

Een Vurig Vosje

Topicstarter
Situatie Schets:
Sinds jaar en dag draait men in deze organisatie met het roemruchte Exact voor Windows (momenteel versie 3.73.6 voor degenen die het interesseerd) vanaf een Novell Netware Server (B-Trieve versie dus)

Dagelijks wordt door de finance afdeling van de 2 actieve productie administraties 004 en 005 een backup naar file gemaakt binnen exact. Deze backup wordt vervolgens - eveneens binnen exact - terug gelezen in resp. de 400 en 500 administratie, zodat men dingen in deze adminitratie kan testen voor het op de productie uitgeprobeerd wordt (voorkomt dat er werk verloren gaat door de ietwat *kuch* brakke gedragingen van Exact), en laat een fixed point in time zien waardoor er financele bewerkingen en aansluitingen gerealiseerd worden terwijl de overige mensen weer verder kunnen werken.

Needless to say, die restore naar test administratie is van vitaal belang in onze financiele processen.


Probleemstelling
Met de komst van een Windows2003 Active Directory, en genoemde stabileiteits problemen van Exact-Btrieve heeft men besloten om te gaan migreren naar de SQL versie van Exact: Exact Globe voor Windows. (LET OP: dit is dus *NIET* Exact Globe 200x, maar de oude B-Trieve versie, maar dan gebaseerd op MS SQL 7.0.)

Middels "Enterprise Manager" kan je een backup maken van een database naar file, en deze vervolgens terug halen van die file - OOK naar een database met een aparte naam.

screenies:
Afbeeldingslocatie: http://www.strikerz.net/~reinder/plaatjes/exactrestore.gif

Dit lijkt vrij eenvoudig, het werkt ook, wanneer je dit handmatig doet.
Nu moet deze handeling echt *ELKE* dag gebeuren. En da's niet fijn als je het met het handje moet doen. vergeet je iets aan te passen... dan ben je pielemans, want dan overschrijf je in sommige gevallen de productie DB.

Het idee is dus een TSQL job in de server Agent te bouwen die dit doet.
Backup is geen probleem. Dat werkt in notime. Perslot van rekening is dat volledig gedocumenteerd.

Voorbeeld T-SQL Code:
DUMP DATABASE EfW_004 TO EGvW_004 WITH NOUNLOAD, NOINIT, NOSKIP

GO

DUMP TRANSACTION EfW_004 WITH TRUNCATE_ONLY

GO
Restore zou ook geen probleem moeten zijn, ware het niet dat alles wat ik zie ervan uitgaat dat je naar dezelfde DB een restore uitvoert.

Zover ik na kan gaan zou dit (ongeveer) de code moeten zijn om de restore te doen.
RESTORE DATABASE EfW_400
FROM EGvW_004
WITH FILE = 1, NORECOVERY, REPLACE,
MOVE 'EfW_004.mdf' TO 'D:\Exact\BESTW2\400\EfW_400.mdf',
MOVE 'EfW_004.ldf' TO 'D:\Exact\BESTW2\400\EfW_400.ldf'
GO

LOAD TRANSACTION EfW_400
FROM EGvW_004
GO
de uiteindelijke foutmelding die er uit komt is dan:


Msg 3234, Sev 16: File 'EfW_004.mdf' is not a database file for database 'EfW_400'. [SQLSTATE 42000]
Msg 3013, Sev 16: Backup or restore operation terminating abnormally. [SQLSTATE 42000]


Ik hoop dat er een SQL koning hier rond dwaalt die mij kan vertellen wat er mis gaat. Zelf ben ik eigenlijk niet zo'n SQL held, en de kennis die ik heb richt zich vooral op MySQL.

Better to have loved and lost then never loved at all... yeah right.


Verwijderd

als je nu gewoon je schedulevinkje aanzet en hem dagelijks scheduled, werkt het ook prima

  • Firefox
  • Registratie: Juni 1999
  • Laatst online: 08-09-2024

Firefox

Een Vurig Vosje

Topicstarter
Geweldig idee... ga ik meteen doen!

...


Maar.... uhhmmm.... waar kan ik eigenlijk het vinkje voor scheduling aanzetten bij de restore job? ;)

Don't take it hard, ik heb wel honderd keer moeten kijken omdat ik aan mezelf twijfelde, maar ik zie dus echt volstrekt *GEEN* schedule optie in de restore dialoog kaders. Is eigenlijk ook niet iets wat normaal nodig is.

Het Backuppen heb ik via T-SQL lang en breed werkend, dus dat is echt het probleem niet. Het gaat me puur om een scheduled restore naar een andere database. (met name dat *andere* is dus de ellende.)

Better to have loved and lost then never loved at all... yeah right.


Verwijderd

ummm ok, misschien als je je probleem wat duidelijk omschreven had :).

ik zal even kijken hoe ze het hier doen.

Verwijderd

het enige dat je bij een restore naar een andere database moet aanpassen is de "restore as" optie (deze pas je aan zodat hij gelijk is aan het pad en de naam van de nieuw aangemaakte database).

voor de rest is alles goed (dus ook het "force over existing database")

Wat wel makkelijker is, is om eerst een backup te maken van de database die je wilt kopieren, vervolgens terugleest via "from device" . Hierbij kan je refereren naar de .bak die je daarvoor hebt gemaakt met je database.

  • Firefox
  • Registratie: Juni 1999
  • Laatst online: 08-09-2024

Firefox

Een Vurig Vosje

Topicstarter
Kennelijk wordt de vraag niet goed gelezen of begrepen - mogelijk omdat mensen niet bekend zijn met het idee van TSQL.

De gestoonde schermpjes zijn GUI interfaces voor T-SQL queries in de achtergrond.
T-SQL queries kunnen binnen SQL gebruikt worden om een scheduled job tot in details te beschrijven, voorbij de standaard mogelijkheden die de GUI van de Enterprise Manager.

De "restore as" optie binnen de getoonde schermpjes is ingevuld zoals dat ik dat gescheduled zou willen zien.
Met andere woorden, ik wil dat

de originele Database EfW_004,
met de file "d:\exact\BestW2\004\EfW_004.mdf"
en het log "d:\exact\BestW2\004\EfW_004.ldf"

teruggezet wordt

als bestaande Database EfW_400,
met de file "d:\exact\BestW2\400\EfW_400.mdf"
en het log "d:\exact\BestW2\400\EfW_400.ldf"

binnen de GUI is dit te realiseren, maar NIET gescheduled.
alleen wanneer ik deze genoemde actie kan scripten in T-SQL query language valt dit te schedulen.


de T-SQL syntax zou moeten zijn:
RESTORE DATABASE <database>
FROM <deficename>
WITH FILE = <sessie op device>, NORECOVERY, REPLACE,

MOVE '<internal filename>' TO '<physical location>',
MOVE '<internal filename>' TO '<physical location>'
GO

LOAD TRANSACTION <database>
FROM <devicename>
GO
Omdat de 004 database is gebackupped naar het SQL device "EGvW_004", en op de tape is vermeld dat de SQL filename ''EfW_004.mdf" is, veronderstel ik dat de Query zou moeten zijn:
RESTORE DATABASE EfW_400
FROM EGvW_004
WITH FILE = 1, NORECOVERY, REPLACE,
MOVE 'EfW_004.mdf' TO 'D:\Exact\BESTW2\400\EfW_400.mdf',
MOVE 'EfW_004.ldf' TO 'D:\Exact\BESTW2\400\EfW_400.ldf'
GO

LOAD TRANSACTION EfW_400
FROM EGvW_004
GO
Kennelijk staat hier iets in fout. Ik weet alleen niet wat de redenatiefout.

Voor alle duidelijkheid, wat ik hier dus doe is dus feitelijk de stappen:

1 - Backup to EvW_004 to SQLdevice EGvW_004 (verwijzend naar file d:\Backup\Exact\004.bak)
2 - Restore fromSQLdevice EGvW_004 to EvW_400 (verwijzend naar die zelfde file)
Precies zoals Corylus hier voorstelt.

Nu kun je zeggen dat ik niet duidelijk ben in wat ik wil bereiken. Zoals ik al zei ben ik geen MS SQL-held, en ben dus al in een voor mijn doen zwaar gevorderd stadium aan het prutsen binnen SQL om het gaande te krijgen. Misschien is mijn naamkeuze voor het SQL backup device wat verwarrend doordat deze sterk lijkt op de originele database file. eea komt echter wel in de teskt en plaatjes naarvoren dat dit precies is wat ik doe: Middels "Enterprise Manager" kan je een backup maken van een database naar file, en deze vervolgens terug halen van die file - OOK naar een database met een aparte naam.


De plaatjes zijn puur als informatief erbij gezet zodat de SQL kenners weten welke opties ik precies aan heb gezet bij een handmatige backup en restore om dit proces handmatig iig voor elkaar te krijgen. Nu zoek ik nog hulp bij het vertalen van deze handmatige stappen naar een SQL query om dit dus in een query script te kunnen schedulen.

Better to have loved and lost then never loved at all... yeah right.


Verwijderd

Doe je handelingen via de gui, en laat de profiler meelopen.
Vergelijk daarna de code van de profiler, met die van jezelf.

Een soort van "ontdek de verschillen".

Verwijderd

met profiler kom je er idd ook ja.
op die manier zie je precies het TSQL statement dat gebruikt moet worden; vergelijken is dan niet eens nodig.

nb: als je dit met een Exact database doet, en je gebruikt daarvoor een nieuwe database, bekijk dan ook de HFS.ini even op juistheid ;)

nb2: is dit niet allemaal terug te vinden in de books online ? :?

  • Firefox
  • Registratie: Juni 1999
  • Laatst online: 08-09-2024

Firefox

Een Vurig Vosje

Topicstarter
Profiler.... het zegt me niets, maar daar kan ik dan weer op verder zoeken.
als ik daarmee de info op weet te poppen zou dat mooi zijn. Overigens misschien niet nodig om te vergelijken, maar uiteindelijk toch wel leerzaam om te kijken WAT er nou fout ging.

MSDN, Technet, Exact KB, Google... ze hebben het allemaal wel over restore mogelijkheden, maar alleen naar dezelfde database naam. (in het kader van disaster recovery)

HFS.ini is mij bekend. Dat was al een geintje waar ik tegenaan viel. Maar sloop je de GUID uit de .ini file, en je hebt nergens last van. Misschien ranzig, maar aan de andere kant, wanneer je een import van B-Trieve naar SQL draait maakt ie ook een HFS.ini zonder GUID aan. Dus ruk maar op met dat ding. :P

Ik ga eens proberen.

Better to have loved and lost then never loved at all... yeah right.


  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 21:57
Hoort die 'replace' er wel in ?

want ik doe net:

code:
1
backup database model to test with init

(Er bestaat een backupdevice met de naam 'test') en daarna doe ik:
code:
1
2
3
4
restore database nieuwmodel from test
with recovery,
move 'modeldev' to 'c:\modeldev.mdf',
move 'modellog' to 'c:\modellog.ldf'

en dat werkt vlekkeloos.

hm.. met die replace erin werkt het ook allemaal goed.

Ik zie het al.

Doe eerst eens een:
code:
1
restore filelistonly from EGvW_004

En kijk hoe de logische namen van de databasebestanden zijn, je moet namelijk in het move-statement niet de naam van de file, maar de logische naam zoals 'ie in de backup heet gebruiken.

[ Voor 93% gewijzigd door StevenK op 31-03-2004 11:09 ]

Was advocaat maar vindt het juridische nog steeds leuk


  • Firefox
  • Registratie: Juni 1999
  • Laatst online: 08-09-2024

Firefox

Een Vurig Vosje

Topicstarter
Die Replace is absoluut nodig, aangezien de betreffende database in SQL al bestaat (deze moet eerst aangemaakt worden in Exact, omdat exact anders de testaministratie niet herkent.)

Step 3 = Backup 004
BACKUP DATABASE [EfW_004] TO [EGvW_004]
WITH INIT ,
NOUNLOAD ,
NAME = N'EfW_004 backup',
SKIP ,
STATS = 10,
FORMAT ,
MEDIANAME = N'BV1',
MEDIADESCRIPTION = N'Administratie 004'
GO
Step 4 = Verify 004
select position from msdb..backupset
where database_name='EfW_004'and
type!='F' and
backup_set_id=(select max(backup_set_id) from msdb..backupset
where database_name='EfW_004')
set noexec off
set parseonly off

RESTORE VERIFYONLY FROM [EGvW_004]
WITH FILE = 1 ,
NOUNLOAD
GO
Step 5 = Restore 004 to 400
RESTORE DATABASE [EfW_400] FROM DISK = N'D:\Exact\BCKPW2\EGvW_004.BAK'
WITH FILE = 1,
NOUNLOAD ,
STATS = 10,
MEDIANAME = N'BV1',
RECOVERY ,
REPLACE ,
MOVE N'Efw_004_Data' TO N'd:\exact\Bestw2\400\EfW_400.mdf',
MOVE N'Efw_004_Log' TO N'd:\exact\Bestw2\400\EfW_400.ldf'
GO
In iedergeval is eea zover ik nu na kan gaan werkend. Heb alleen nog geen gelegenheid gehad om uit te zoeken waar het op spaak liep. Profiler heeft me hierbij idd heel ver op weg geholpen. Nog even alles verder testen om zeker te weten of ook de uiteindelijke resultaten in exact zijn wat ik er van verwacht, maar ik denk dat ik er nu wel weer verder bij kom.

Bedankt voor de 'profiler' tip!

Better to have loved and lost then never loved at all... yeah right.


  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 21:57
Firefox schreef op 31 maart 2004 @ 14:08:
Heb alleen nog geen gelegenheid gehad om uit te zoeken waar het op spaak liep.
Zie boven. Het liep fout op het move 'xxxxx.mdf' ipf move 'xxxxxx'.

Als ik dat doe krijg ik namelijk precies dezelfde melding.

Was advocaat maar vindt het juridische nog steeds leuk


  • Firefox
  • Registratie: Juni 1999
  • Laatst online: 08-09-2024

Firefox

Een Vurig Vosje

Topicstarter
Ach ruk en daar staar je je een paar uur op stuk.

_/-\o_

altijd het zelfde met dat script kloppen... je zoekt je leip, en uiteindelijk is het zo iets kinderlijk simpels... Thnx

Better to have loved and lost then never loved at all... yeah right.

Pagina: 1