Sql-Server
記錄到文件
我正在使用 ola-hallengren 維護腳本。我正在登錄表和文件。我想更改文件日誌的位置。我可以這樣做嗎?非常感謝
在保持 Ola 的日誌命名約定的同時按作業步驟更改它
您可以更改作業步驟屬性中的位置,通過點兩下或按 Edit打開。
選擇高級
並轉到輸出文件
您會注意到如下字元串:
$(ESCAPE_SQUOTE(SQLLOGDIR))\DatabaseIntegrityCheck_$(ESCAPE_SQUOTE(JOBID))_$(ESCAPE_SQUOTE(STEPID))_$(ESCAPE_SQUOTE(STRTDT))_$(ESCAPE_SQUOTE(STRTTM)).txt
您可以在哪裡更改
$(ESCAPE_SQUOTE(SQLLOGDIR))
到您的首選位置如果說,您想登錄C:\temp
,然後將其更改為:C:\temp\DatabaseIntegrityCheck_$(ESCAPE_SQUOTE(JOBID))_$(ESCAPE_SQUOTE(STEPID))_$(ESCAPE_SQUOTE(STRTDT))_$(ESCAPE_SQUOTE(STRTTM)).txt
該字元串可能因作業步驟的目的和您的 SQL Server 版本而異。
(SQL Server 2012 及更高版本應該得到相同的結果)
因此,Ola 的命名約定保持不變,並且不會重複使用日誌文件。
你必須記住適應
OutputFileCleanup
工作從:
cmd /q /c "For /F "tokens=1 delims=" %v In ('ForFiles /P "$(ESCAPE_SQUOTE(SQLLOGDIR))" /m *_*_*_*.txt /d -30 2^>^&1') do if EXIST "$(ESCAPE_SQUOTE(SQLLOGDIR))"\%v echo del "$(ESCAPE_SQUOTE(SQLLOGDIR))"\%v& del "$(ESCAPE_SQUOTE(SQLLOGDIR))"\%v
到:
cmd /q /c "For /F "tokens=1 delims=" %v In ('ForFiles /P "C:\temp" /m *_*_*_*.txt /d -30 2^>^&1') do if EXIST "C:\temp"\%v echo del "C:\temp"\%v& del "C:\temp"\%v"
或者簡而言之,將
$(ESCAPE_SQUOTE(SQLLOGDIR))
元件更改為您指定的文件夾。為 MaintenanceSolution 創建的所有作業更改它
您可以通過將文件夾名稱添加到腳本
@OutputFileDirectory
中的參數來為整個維護解決方案執行此操作。MaintenanceSolution.SQL
SET @OutputFileDirectory = NULL -- Specify the output file directory. If no directory is specified, then the SQL Server error log directory is used.
例如
SET @OutputFileDirectory = 'C:\temp'
驗證更改的文件夾:
如果作業已經存在,那麼您必須重新創建它們,如下所述。
如果 MaintenanceSolution 作業已存在
如果您需要更改所有現有作業的日誌位置,則必須更新每個步驟,或者刪除作業並使用 Ola 的腳本重新創建它們。
(請記住,調度、作業狀態……在刪除和創建它們時將從作業中刪除)。
刪除作業的範例查詢:
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'DatabaseBackup - SYSTEM_DATABASES - FULL') EXEC msdb.dbo.sp_delete_job @job_name=N'DatabaseBackup - SYSTEM_DATABASES - FULL' IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs WHERE name = N'DatabaseBackup - USER_DATABASES - DIFF') EXEC msdb.dbo.sp_delete_job @job_name=N'DatabaseBackup - USER_DATABASES - DIFF' IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs WHERE name = N'DatabaseBackup - USER_DATABASES - FULL') EXEC msdb.dbo.sp_delete_job @job_name=N'DatabaseBackup - USER_DATABASES - FULL' IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs WHERE name = N'DatabaseBackup - USER_DATABASES - LOG') EXEC msdb.dbo.sp_delete_job @job_name=N'DatabaseBackup - USER_DATABASES - LOG' IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs WHERE name = N'DatabaseIntegrityCheck - SYSTEM_DATABASES') EXEC msdb.dbo.sp_delete_job @job_name=N'DatabaseIntegrityCheck - SYSTEM_DATABASES' IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs WHERE name = N'DatabaseIntegrityCheck - USER_DATABASES') EXEC msdb.dbo.sp_delete_job @job_name=N'DatabaseIntegrityCheck - USER_DATABASES' IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs WHERE name = N'IndexOptimize - USER_DATABASES') EXEC msdb.dbo.sp_delete_job @job_name=N'IndexOptimize - USER_DATABASES' IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'sp_purge_jobhistory') EXEC msdb.dbo.sp_delete_job @job_name=N'sp_purge_jobhistory' IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'sp_delete_backuphistory') EXEC msdb.dbo.sp_delete_job @job_name=N'sp_delete_backuphistory' IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'CommandLog Cleanup') EXEC msdb.dbo.sp_delete_job @job_name=N'CommandLog Cleanup' IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs_view WHERE name = N'Output File Cleanup') EXEC msdb.dbo.sp_delete_job @job_name=N'Output File Cleanup'
驗證並重新執行維護解決方案
SET @CreateJobs = 'Y'