Sql-Server

記錄到文件

  • March 20, 2019

我正在使用 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'

引用自:https://dba.stackexchange.com/questions/232612