记录到文件

Rou*_*und 1 sql-server maintenance-plans ola-hallengren

我正在使用 ola-hallengren 维护脚本。我正在登录到表和文件。我想更改文件日志的位置。我可以这样做吗?非常感谢

Ran*_*gen 5

在保持 Ola 的日志命名约定的同时按作业步骤更改它

您可以在作业步骤属性中更改位置,双击或按 Edit打开。

在此处输入图片说明

在此处输入图片说明

选择高级

在此处输入图片说明

并转到输出文件

在此处输入图片说明

您会注意到一个字符串,如:

$(ESCAPE_SQUOTE(SQLLOGDIR))\DatabaseIntegrityCheck_$(ESCAPE_SQUOTE(JOBID))_$(ESCAPE_SQUOTE(STEPID))_$(ESCAPE_SQUOTE(STRTDT))_$(ESCAPE_SQUOTE(STRTTM)).txt
Run Code Online (Sandbox Code Playgroud)

您可以在哪里将 更改$(ESCAPE_SQUOTE(SQLLOGDIR))为您的首选位置 如果说,您想获取日志C:\temp,然后将其更改为:

C:\temp\DatabaseIntegrityCheck_$(ESCAPE_SQUOTE(JOBID))_$(ESCAPE_SQUOTE(STEPID))_$(ESCAPE_SQUOTE(STRTDT))_$(ESCAPE_SQUOTE(STRTTM)).txt
Run Code Online (Sandbox Code Playgroud)

该字符串可能因作业步骤的目的和您的 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
Run Code Online (Sandbox Code Playgroud)

到:

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"
Run Code Online (Sandbox Code Playgroud)

或者简而言之,将$(ESCAPE_SQUOTE(SQLLOGDIR))零件更改为您指定的文件夹。


为维护解决方案创建的所有作业更改它

您可以通过将文件夹名称添加到脚本中@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.
Run Code Online (Sandbox Code Playgroud)

例如

SET @OutputFileDirectory = 'C:\temp'
Run Code Online (Sandbox Code Playgroud)

验证更改的文件夹:

在此处输入图片说明

如果作业已经存在,则您必须重新创建它们,如下所述。


如果 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'
Run Code Online (Sandbox Code Playgroud)

验证并重新运行维护解决方案

SET @CreateJobs = 'Y'