Rou*_*und 1 sql-server maintenance-plans ola-hallengren
我正在使用 ola-hallengren 维护脚本。我正在登录到表和文件。我想更改文件日志的位置。我可以这样做吗?非常感谢
在保持 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'
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |