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
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? –
@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. –
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