Jump to content
Sign in to follow this  
biot3ch

Transact SQL script Problem

Recommended Posts

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!!

Share this post


Link to post


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

Share this post


Link to post

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

Share this post


Link to post

da gibt's noch einen 2ten eintrag:

 

SQL Server Scheduled Job 'test' (0x16ADEE51E83B11439B6777ABD74B0EBC) - Status: Fehler - Invoked on: 2004-09-15 13:52:58 - Message: Auftragsfehler Der Auftrag wurde von Benutzer xxxxxx aufgerufen. Als Letztes wurde Schritt 1 (schritt1) ausgeführt.

 

 

mehr steht da aber nicht

Share this post


Link to post

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

Share this post


Link to post

Warum machst du das Backup der DB's nicht über den Enterprise Manager des SQL-Servers?

Dann wird die DB zusammen mit ihrem jeweiligen Log gesichert und das ganze kannst du dann per Backupsoftware / Dienst auf Band oder einen andren Server sichern. Damit umgehst du die meisten Probleme und dafür ist das ganze ja auch da.

Share this post


Link to post

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...

Share this post


Link to post

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.

Share this post


Link to post

also mein "vorgänger" hat recht plötzlich das unternehmen verlassen und dokus gibt es keine.

nun soll ich das system überarbeiten, qualifizieren und auch dokumentieren und dabei hab ich keine sql erfahrung :cry:

 

naja trotzdem thx.

 

vielleicht hat ja noch jemand anders ne idee ?!

Share this post


Link to post

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

Share this post


Link to post

Glückwunsch das du es alleine noch hinbekommen hast.

 

Für deine letzte Frage würde ich dir raten einen eigenen Thread aufzumachen, dann wird das ganze übersichtlicher und lässt sich besser diskutieren.

 

Gruss

Carsten

 

PS: Wo lag denn der Schreibfehler?

Share this post


Link to post

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

Share this post


Link to post
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...