Jump to content

Transact SQL script Problem


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hi,

 

Ich habe hier ein kleines Problem mit einem TRANSACT SQL Script für die Datensicherung.

Das Script soll an die Sicherungsdateien einen Timestamp anhängen.

Beim Analysieren des Scripts wird folgender Fehler angezeigt:

 

Die folgenden Syntaxfehler wurden in dem Befehl festgestellt:

Fehler 170: Zeile 1: Falsche Syntax in der Nähe von ' '.

Die Varable '@BackupDirectory' muss deklariert werden.

Die Varable '@DBName' muss deklariert werden.

Die Varable '@DBName' muss deklariert werden.

 

 

Hier das Script:

 

DECLARE @DBName_ nvarchar(256)

DECLARE @FileName_ nvarchar(512)

DECLARE @BackupDirectory_ varchar(128)

SET NOCOUNT ON

SELECT @BackupDirectory = 'd::\dumps'

SELECT @DBName = DB_NAME(),

@FileName = @BackupDirectory + '\' + DB_NAME() +

REPLACE(REPLACE(CONVERT(CHAR(19), GETDATE(),120), ' ', '_'), ':', '-') + '.BAK'

BACKUP LOG @DBName TO DISK = @FileName WITH _ NOINIT, NOUNLOAD ,, AME = N'dbname Sicherung', NOSKIP, NOFORMAT

 

 

 

Danke für die Hilfe!!

Link zu diesem Kommentar


DECLARE @DBName_ nvarchar(256)
DECLARE @FileName_ nvarchar(512)
DECLARE @BackupDirectory_ varchar(128)
SET NOCOUNT ON
SELECT @BackupDirectory = 'd::\dumps'
SELECT @DBName = DB_NAME(),
@FileName = @BackupDirectory + '\' + DB_NAME() +
REPLACE(REPLACE(CONVERT(CHAR(19), GETDATE(),120), ' ', '_'), ':', '-') + '.BAK'
BACKUP LOG @DBName TO DISK = @FileName WITH _ NOINIT, NOUNLOAD ,, AME = N'dbname Sicherung', NOSKIP, NOFORMAT
[/Code]

 

Du solltest in der Deklaration der drei Variablen die

[Code]
_
[/Code]

am Ende wegnehmen.

 

Sieht dann so aus:

[Code]
DECLARE @DBName nvarchar(256)
DECLARE @FileName nvarchar(512)
DECLARE @BackupDirectory varchar(128)
SET NOCOUNT ON
SELECT @BackupDirectory = 'd::\dumps'
SELECT @DBName = DB_NAME(),
@FileName = @BackupDirectory + '\' + DB_NAME() +
REPLACE(REPLACE(CONVERT(CHAR(19), GETDATE(),120), ' ', '_'), ':', '-') + '.BAK'
BACKUP LOG @DBName TO DISK = @FileName WITH _ NOINIT, NOUNLOAD ,, AME = N'dbname Sicherung', NOSKIP, NOFORMAT
[/Code]

Ich denke mal das dir die _ das Genick gebrochen haben. Desweiteren: Ist es richtig das du sagst

[Code]
SELECT @BackupDirectory = 'd::\dumps'
[/Code]

 

und nicht nur

[Code]
SELECT @BackupDirectory = 'd:\dumps'
[/Code]

???

 

 

Gruss

Carsten

Link zu diesem Kommentar

ja genau, hast recht.

die _ wurden im editor aber gar nicht angezeigt. :suspect:

ich hab aber den rest soweit korrigiert.

 

jetzt sieht's so aus:

 

DECLARE @DBName nvarchar(256)

DECLARE @FileName nvarchar(512)

DECLARE @BackupDirectory varchar(128)

SET NOCOUNT ON

SELECT @BackupDirectory = 'd:\dumps'

SELECT @DBName = DB_NAME(),

@FileName = @BackupDirectory + '\' + DB_NAME() +

REPLACE(REPLACE(CONVERT(CHAR(19), GETDATE(),120), ' ', '_'), ':', '-') + '.BAK'

BACKUP LOG @DBName TO DISK = @FileName WITH NOINIT, NOUNLOAD , NAME = 'dbname Sicherung', NOSKIP, NOFORMAT

 

 

und im eventlog wird folgender fehler angezeigt:

 

3041 :

BACKUP-Fehler beim Abschluss des DECLARE @DBName nvarchar(256)

DECLARE @FileName nvarchar(512)

DECLARE @BackupDirectory varchar(128)

SET NOCOUNT ON

SELECT @BackupDirectory = 'd:\dumps'

SELECT @DBName = DB_NAME(),

@FileName = @BackupDirectory + '\' + DB_NAME() +

REPLACE(REPLACE(CON-Befehls

 

 

:confused:

sorry bin eben sql newbie

Link zu diesem Kommentar

sorry, aber da steht wirklich nicht mehr drin.

das ist genau die fehlermeldung die im eventlog und auch im sql-server protokoll steht.

ich hab auch mehrmals versucht das script auszuführen, aber die fehlermeldung sieht eben immer genau so aus. :confused:

 

aber vielleicht bin ich generell auf dem falschen weg.....

ich versuche eben rauszufinden wie ich am besten die transaktionslogs sichere.

vielleicht kannst du auch mal einen blick hier rein werfen:

http://www.mcseboard.de/showthread.php?s=&threadid=39433

 

thx

Link zu diesem Kommentar

darum geht es mir eigentlich auch.

ich mache ja diese sicherungen mit dem enterprise-manager, jedoch bin ich mir nicht sicher ob ich auch alles richtig konfiguriert habe.

vollständige db sicherungen werden in der nacht erstellt. zuerst auf festplatte und anschließend werden diese dateien auf band geschrieben. diese db sicherungen kann ich ohne probleme einspielen. soweit alles ok.

die transaktionslog sicherungen werden stündlich erstellt. ebenfalls auf platte, jedoch werden diese nicht stündlich auf band geschrieben. und soweit ich das beobachte wird dann jede stunde die vorherige sicherung wieder überschrieben ?! :confused:

also kann ich die transaktionslog sicherungen gar nicht verwenden, oder sehe ich da was falsch ? ich weiss aber nicht wie man das richtig konfiguriert und daher dachte ich wäre es sinnvoll pro log einen eindeutigen dateinamen zu vergeben (script).

aber irgenwie muss das doch einfacher zu lösen sein.

kann man das nicht einstellen, dass die transaktionslog sicherung kumulativ geschrieben werden ? dann könnte ich z.b. in der nacht eine vollständige sicherung auf band schreiben und mittags die transaktionslogs...

Link zu diesem Kommentar

Hm, seh ich das richtig, das dein Vorgänger dir keinerlei Doku über die jetzigen Systeme hinterlassen hat?

 

Ich muss ehrlich sagen, das ich damit überfragt bin. Bin ja eigentlich kein Admin sondern Entwickler, aber solange ich Auskunft geben kann mach ich das. Ich will dich aber jetzt auch auf keinen falschen Weg bringen, indem ich irgendwelche Mutmassungen anstelle.

Link zu diesem Kommentar

hey ich hab's jetzt doch geschafft.

war wohl nur ein schreibfehler drin:

 

DECLARE @DBName nvarchar(256)

DECLARE @FileName nvarchar(512)

DECLARE @BackupDirectory varchar(128)

SET NOCOUNT ON

SELECT @BackupDirectory = 'd:\dumps'

SELECT @DBName = DB_NAME(),

@FileName = @BackupDirectory + '\' + DB_NAME() +

REPLACE(REPLACE(CONVERT(CHAR(19), GETDATE(),120), ' ', '_'), ':', '-') + '.TRN'

BACKUP LOG @DBName TO DISK = @FileName WITH NOINIT, NOUNLOAD , RETAINDAYS = 1, NAME = N'ASSIST Sicherung TRNLOG', NOSKIP, NOFORMAT

 

jedenfalls funktioniert jetzt alles.

trotzdem stellt sich nun die grundsätzliche frage ob man hiermit ein gutes desaster recovery durchführen kann. die sicherungen (transactionslogs und vollsicherungen) werd jedesmal in neue dateien geschrieben. ich benötige hierbei wohl viel mehr speicherplatz auf der festplatte, aber vielleicht funktioniert es ja damit.

 

sollte jemand noch generell einen tip oder eine anmerkung zur sicherung von sql datenbanken haben, so solle er biete posten oder für immer schweigen. :D

ich kann jeden sachdienlichen hinweise gebrauchen !!!

 

thx

Link zu diesem Kommentar

beim NAME = N'dbname.......

fehlte das N vor dem '

 

....nach langem hin und her und dummen fragen stellen, hab ich festgestellt, dass der sql-server agent im wartungsplan genau die funktion zur verfügung stellt, die ich mir in diesem ****en script selbst zusammengebaut hab.

hier wird für jede backupdatei ein eigener dateiname mit zeitstempel generiert und man kann je nach alter diese dateien auch wieder entfernen lassen.

tjo, warum einfach wenn s auch schwer geht !?!? :D

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...