0

Grundsätzlich habe ich eine Batch-Datei, die eine gespeicherte SQL Server 2008 R2-Prozedur aufruft, die diese DB für fragmentierte Tabellen über 5% fragmentiert und den Bericht in eine Textdatei ausgibt.Warum wird diese Stapeldatei nicht automatisch ausgeführt?

Die Stapeldatei wird als Taskplanerjob über Nacht eingestellt.

In Taskplaner Wenn ich mit der rechten Maustaste auf die Aufgabe und wählen Sie sofort ausführen, es funktioniert gut, das Skript wird wiederum auf SQL Server ausgeführt und die Ausgabe wird an eine Textdatei umgeleitet, alles funktioniert wie gewünscht an dieser Stelle Problem ist, wenn ich es automatisiere, um über Nacht auszulösen.

set local 
REM Preparing Timestamp Information 
set year=%date:~6,4% 
set month=%date:~3,2% 
set day=%date:~0,2% 
set hour=%time:~0,2% 
REM Replace leading space with zero 
if “%hour:~0,1%” ==” ” set hour=0%hour:~1,1% 
set minute=%time:~3,2% 
set seconds=%time:~6,2% 
set FILENAMEANDPATH= c:\DBMaintenanceLogs\SP_InspectorLog_%day%-%month%-%year%_%hour%-%minute%-%seconds%.log 

sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_DBIndexFragmentationInspector @IndexFragmentationPercentage=5" -d MyDBName -o %FILENAMEANDPATH% 

Das Problem ist, dass, wenn allein der Job Scheduler Task links wird nicht ausgeführt, und die Aufgabe sagt erfolgreich mit dem Returncode 255 abgeschlossen?

Die Aufgabe wird mit dem Systemadministratorkonto ausgeführt.

P.S. Die gespeicherte Prozedur ist:

USE [MyDBName] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[sp_DBIndexFragmentationInspector] 
@IndexFragmentationPercentage INT 
AS 
BEGIN 
SELECT 
    OBJECT_NAME(A.[object_id]) as 'TableName', 
    B.[name] as 'IndexName', 
    A.[index_type_desc], 
    A.[avg_fragmentation_in_percent] 
FROM 
    sys.dm_db_index_physical_stats(db_id(),NULL,NULL,NULL,'LIMITED') A 
INNER JOIN 
    sys.indexes B ON A.[object_id] = B.[object_id] and A.index_id = B.index_id 
where [avg_fragmentation_in_percent] > @IndexFragmentationPercentage 
order by TableName 
END 
+1

Sind die typografischen doppelten Anführungszeichen in Ihrem Code '"% hour: ~ 0,1% "==" "' das heißt '' '' statt '' '' wirklich vorhanden oder es ist nur eine Kopie/Problem einfügen? –

+0

@MCND In der Batch-Datei in dieser Zeile sind nur die doppelten Anführungszeichen "" und nicht "", ich denke, das ist ein Hangover, von dem ich diesen Teil des Skripts kopiert habe. Denken Sie, dass das ein Problem sein könnte? Wie gesagt, es funktioniert gut, wenn ich die Aufgabe manuell ausführe. –

+0

Ihr Problem ist '. \ SQLEXPRESS'. Geplante Aufgaben werden in einem anderen Ordner ausgeführt ('% systemroot% \ system32'). Verwenden Sie 'cd/d"% ~ dp0 ", um zu dem Ordner zu wechseln, in dem Ihre Batchdatei gespeichert ist. – Stephan

Antwort

0

Ich wurde mit genau dem gleichen Fehler konfrontiert. Für mich bestand die Lösung darin, am Ende des Skripts exit 0 hinzuzufügen. Ich verstehe nicht warum, aber es hat funktioniert.

+0

Oo ... am Ende der Batchdatei oder gespeicherten Prozedur? –

+0

@PaulZahra Ich habe beide versucht, nicht sicher, welche funktionierte.Es war vor ungefähr fünf Jahren, also kann ich mich nicht erinnern. – MichaelS

+0

'exit' ist ein Stapelbefehl. Das SQL-Skript wird mit "END" beendet. Aber ich kann nicht sehen, wie das hier möglicherweise helfen könnte. – Stephan

Verwandte Themen