Discussion:
Datenbank automatisch wiederherstellen SQL2000
(zu alt für eine Antwort)
Ulf Knochenhauer
2005-07-27 06:20:30 UTC
Permalink
Hallo NG,
ich habe 2 Datenbanken, eine "heiße" und eine zum Programme testen. Die
heiße Datenbank wird automatisch jeden Tag gesichert. Um die
Testdatenbank zu aktualisieren stelle ich manuell derzeit den
Sicherungssatz der heißen Datenbank in die Testdatenbank wieder her.
Kann man auch das Wiederherstellen automatisieren?
Ich sichere beispielsweise 4:30 Uhr und möchte 6:00 die Testdatenbank
mit den aktuellen Daten befüllen.
Vielen Dank für Tipps im voraus
Ulf
Jürgen Volke
2005-07-27 06:55:38 UTC
Permalink
Hallo Ulf
Post by Ulf Knochenhauer
ich habe 2 Datenbanken, eine "heiße" und eine zum Programme testen.
Die heiße Datenbank wird automatisch jeden Tag gesichert. Um die
Testdatenbank zu aktualisieren stelle ich manuell derzeit den
Sicherungssatz der heißen Datenbank in die Testdatenbank wieder her.
Kann man auch das Wiederherstellen automatisieren?
so eher nicht, da die Sicherungsdateien ja jeden Tag anders heißen.

Aber was spricht gegen einen Daten-Import?
Hier kannst du ein DTS-Package erstellen, welches die Tabellen aus der
Produktiv- in die Test-Datenbank kopiert. Dies kannst du dann so einstellen,
daß es täglich um 6:00 Uhr ausgeführt wird.

HTH Jürgen
Ulf Knochenhauer
2005-07-27 08:31:53 UTC
Permalink
Hallo Jürgen,
Post by Jürgen Volke
Aber was spricht gegen einen Daten-Import?
Hier kannst du ein DTS-Package erstellen, welches die Tabellen aus der
Produktiv- in die Test-Datenbank kopiert.
danke für den Tipp! Mit dem DTS-Paket habe ich noch Schwierigkeiten. Die
Tabellen werden offenbar nicht automatisch überschrieben und es kommt zu
Fehlern. Muss ich vor dem Datenimport erst alle Tabellen, Sichten, gesp.
Prozeduren löschen? Wenn ja, wie kann ich das anstellen?
Grüße
Ulf
Jürgen Volke
2005-07-27 09:30:55 UTC
Permalink
Hallo Ulf
Post by Ulf Knochenhauer
Post by Jürgen Volke
Aber was spricht gegen einen Daten-Import?
Hier kannst du ein DTS-Package erstellen, welches die Tabellen aus
der Produktiv- in die Test-Datenbank kopiert.
danke für den Tipp! Mit dem DTS-Paket habe ich noch Schwierigkeiten.
Die Tabellen werden offenbar nicht automatisch überschrieben und es
kommt zu Fehlern. Muss ich vor dem Datenimport erst alle Tabellen,
Sichten, gesp. Prozeduren löschen? Wenn ja, wie kann ich das
anstellen?
probier es mal mit der Option
Objekte und Daten zwischen den SQL Server-Datenbanken kopieren.

mußt halt bei den Optionen das auswählen, was du machen möchtest.

HTH Jürgen
Elmar Boye
2005-07-27 08:21:48 UTC
Permalink
Hallo Ulf,
Post by Ulf Knochenhauer
Hallo NG,
ich habe 2 Datenbanken, eine "heiße" und eine zum Programme testen.
Die heiße Datenbank wird automatisch jeden Tag gesichert. Um die
Testdatenbank zu aktualisieren stelle ich manuell derzeit den
Sicherungssatz der heißen Datenbank in die Testdatenbank wieder her.
Kann man auch das Wiederherstellen automatisieren?
Ich sichere beispielsweise 4:30 Uhr und möchte 6:00 die Testdatenbank
mit den aktuellen Daten befüllen.
Lege Dir entsprechende Aufträge im SQL Server Agenten an.
Und verwende etwas wie
BACKUP DATABASE ProduktivDB
TO DISK = 'X:\BACKUP\ProduktivDB.BAK'
WITH INIT

und im anderen etwas wie
RESTORE DATABASE TestDB
FROM DISK = 'X:\BACKUP\ProduktivDB.BAK'
WITH MOVE 'Produktiv_Data' TO 'X:\DATA\TestDB.MDF',
MOVE 'Produktiv_log' TO 'X:\DATA\TestDB.LDF'

wobei Du die logischen Dateinamen der Produktivdatenbank ermitteln
und die Pfade an Deine Gegebenheiten anpassen müsstest.
Wenn es getrennte Server sind, so müsstest Du eine gemeinsame
Freigabe und ein Sichern über UNC Pfade verwenden.

Gruss
Elmar
Ulf Knochenhauer
2005-07-27 12:02:14 UTC
Permalink
Hallo Elmar,
Post by Elmar Boye
Lege Dir entsprechende Aufträge im SQL Server Agenten an.
Und verwende etwas wie
BACKUP DATABASE ProduktivDB
TO DISK = 'X:\BACKUP\ProduktivDB.BAK'
WITH INIT
und im anderen etwas wie
RESTORE DATABASE TestDB
FROM DISK = 'X:\BACKUP\ProduktivDB.BAK'
WITH MOVE 'Produktiv_Data' TO 'X:\DATA\TestDB.MDF',
MOVE 'Produktiv_log' TO 'X:\DATA\TestDB.LDF'
wobei Du die logischen Dateinamen der Produktivdatenbank ermitteln
und die Pfade an Deine Gegebenheiten anpassen müsstest.
Wenn es getrennte Server sind, so müsstest Du eine gemeinsame
Freigabe und ein Sichern über UNC Pfade verwenden.
so habe ich es gemacht und es funktioniert einwandfrei :-)
Danke!
Grüße aus Dresden
Ulf
Ulf Knochenhauer
2005-07-28 05:34:51 UTC
Permalink
Hallo Elmar,
es läuft nicht doch nicht so wie gedacht.
das Backup der Produktivdatenbank funktioniert sowohl im Query Analyzer
als auch als Auftrag im Enterprise Manager.
Das Rücksichern:

restore database TestDB
from disk = 'D:\SicherungSQL\Sicherung.BAK'
with move 'DB_dat' to 'D:\SQLServer\MSSQL$IPCSQL\Data\TestDB.mdf',
move 'DB_log' to 'D:\SQLServer\MSSQL$IPCSQL\Data\TestDB_log.ldf'

geht nur im Query Analyzer. Der Enterprise Manager führt den Auftrag
nicht aus und bringt Fehler:
SQL Server Scheduled Job 'RueckSicherTestDB'
(0xE0B3996B5D729F4D92B279F64F2F09D8) - Status: Fehler - Invoked on:
2005-07-28 07:21:45 - Message: Auftragsfehler Der Auftrag wurde von
Benutzer bla\knochenhauer aufgerufen. Als Letztes wurde Schritt 1
(RueckSicherung) ausgeführt.

Damit kann ich erstmal nichts anfangen. Wie kann ich debuggen und die
Fehlerursache eingrenzen?

Viele Grüße
Ulf
Ulf Knochenhauer
2005-07-28 05:54:30 UTC
Permalink
Post by Ulf Knochenhauer
Hallo Elmar,
es läuft nicht doch nicht so wie gedacht.
das Backup der Produktivdatenbank funktioniert sowohl im Query Analyzer
als auch als Auftrag im Enterprise Manager.
restore database TestDB
from disk = 'D:\SicherungSQL\Sicherung.BAK'
with move 'DB_dat' to 'D:\SQLServer\MSSQL$IPCSQL\Data\TestDB.mdf',
move 'DB_log' to 'D:\SQLServer\MSSQL$IPCSQL\Data\TestDB_log.ldf'
geht nur im Query Analyzer. Der Enterprise Manager führt den Auftrag
SQL Server Scheduled Job 'RueckSicherTestDB'
2005-07-28 07:21:45 - Message: Auftragsfehler Der Auftrag wurde von
Benutzer bla\knochenhauer aufgerufen. Als Letztes wurde Schritt 1
(RueckSicherung) ausgeführt.
Damit kann ich erstmal nichts anfangen. Wie kann ich debuggen und die
Fehlerursache eingrenzen?
Viele Grüße
Ulf
Jetzt habe ich im Profiler die Fehlermeldung gefunden:

EXECUTE msdb.dbo.sp_sqlagent_log_jobhistory @job_id =
0xE0B3996B5D729F4D92B279F64F2F09D8, @step_id = 1, @sql_message_id =
3013, @sql_severity = 16, @run_status = 0, @run_date = 20050728,
@run_time = 74552, @run_duration = 0, @operator_id_emailed = 0,
@operator_id_netsent = 0, @operator_id_paged = 0, @retries_attempted =
0, @message = N'Ausführt als Benutzer: NT-AUTORITÄT\SYSTEM. Exklusiver
Zugriff auf die Datenbank ist nicht möglich, da die Datenbank gerade
verwendet wird. [SQLSTATE 42000] (Fehler 3101) RESTORE DATABASE wird
fehlerbedingt beendet. [SQLSTATE 42000] (Fehler 3013). Fehler bei Schritt'
Elmar Boye
2005-07-28 07:43:32 UTC
Permalink
Hallo Ulft,
Post by Ulf Knochenhauer
Post by Ulf Knochenhauer
das Backup der Produktivdatenbank funktioniert sowohl im Query
Analyzer als auch als Auftrag im Enterprise Manager.
restore database TestDB
from disk = 'D:\SicherungSQL\Sicherung.BAK'
with move 'DB_dat' to 'D:\SQLServer\MSSQL$IPCSQL\Data\TestDB.mdf',
move 'DB_log' to 'D:\SQLServer\MSSQL$IPCSQL\Data\TestDB_log.ldf'
geht nur im Query Analyzer. Der Enterprise Manager führt den Auftrag
SQL Server Scheduled Job 'RueckSicherTestDB'
2005-07-28 07:21:45 - Message: Auftragsfehler Der Auftrag wurde von
Benutzer bla\knochenhauer aufgerufen. Als Letztes wurde Schritt 1
(RueckSicherung) ausgeführt.
'Ausführt als Benutzer: NT-AUTORITÄT\SYSTEM. Exklusiver
Zugriff auf die Datenbank ist nicht möglich, da die Datenbank gerade
verwendet wird.
Beim RESTORE darf niemand auf der Datenbank angemeldet sein.
(Auch z. B. nicht \bla\knochenhauer, der die Test-Datenbank
als Standard-Datenbank verwendet ;-)
Am besten setzt Du vorher die Datenbank in den Einzelbenutzermodus via
ALTER DATABASE TestDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
was alle offnen Verbindungen trennt.
Und der Auftrag selbst sollte unter dem master Datenbank Kontext
laufen oder vors RESTORE ein "USE master" einfügen.

Gruss
Elmar
Ulf Knochenhauer
2005-07-28 09:38:00 UTC
Permalink
Hallo Elmar,
vielen herzlichen Dank!
Post by Elmar Boye
Beim RESTORE darf niemand auf der Datenbank angemeldet sein.
(Auch z. B. nicht \bla\knochenhauer, der die Test-Datenbank
als Standard-Datenbank verwendet ;-)
Am besten setzt Du vorher die Datenbank in den Einzelbenutzermodus via
ALTER DATABASE TestDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
Das war garnicht nötig.
Post by Elmar Boye
was alle offnen Verbindungen trennt.
Und der Auftrag selbst sollte unter dem master Datenbank Kontext
laufen oder vors RESTORE ein "USE master" einfügen.
Das hat schon gereicht. Jetzt geht es.
Grüße
Ulf

Loading...