如何从Ola的IndexOptimize存储过程中排除指定表DWProd.dbo.Exclude_Tbl
没问题,这事儿分两步就能轻松搞定,我给你详细拆解:
1. 修改现有IndexOptimize作业,排除DWProd.dbo.Exclude_Tbl
Ola的IndexOptimize存储过程本身就支持排除指定表的参数,你只需要修改现有调用这个存储过程的作业步骤,加上@ExcludeTables参数就行。
假设你原来的作业步骤里调用语句是这样的:
EXECUTE dbo.IndexOptimize @Databases = 'ALL_USER_DATABASES', @FragmentationLow = 'INDEX_REORGANIZE', @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE', @FragmentationHigh = 'INDEX_REBUILD_ONLINE';
现在把它改成下面这样,添加排除表的参数:
EXECUTE dbo.IndexOptimize @Databases = 'ALL_USER_DATABASES', @ExcludeTables = 'DWProd.dbo.Exclude_Tbl', -- 就是这行,指定要排除的表 @FragmentationLow = 'INDEX_REORGANIZE', @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE', @FragmentationHigh = 'INDEX_REBUILD_ONLINE';
如果之后还要排除其他表,只需要用逗号分隔就行,比如@ExcludeTables = 'DWProd.dbo.Exclude_Tbl,DB2.dbo.Another_Tbl'。
2. 为DWProd.dbo.Exclude_Tbl创建独立维护作业
接下来给这个表单独做个作业,最简单的方式还是复用Ola的IndexOptimize(毕竟它的逻辑已经很成熟了),只是这次只指定这个表来执行维护:
操作步骤:
- 打开SQL Server Agent,右键「作业」→「新建作业」,给作业起个好认的名字,比如「维护 - DWProd.dbo.Exclude_Tbl 索引优化」
- 切换到「步骤」标签,点击「新建」,步骤名称随便填(比如「执行索引优化」),类型选「Transact-SQL脚本(TSQL)」,数据库选
DWProd(或者master,只要能访问到IndexOptimize所在库就行) - 在命令框里输入下面的SQL:
-- 只针对DWProd.dbo.Exclude_Tbl执行索引优化,参数可以根据你的需求调整 EXECUTE dbo.IndexOptimize @Databases = 'DWProd', @Tables = 'dbo.Exclude_Tbl', @FragmentationLow = 'INDEX_REORGANIZE', @FragmentationMedium = 'INDEX_REORGANIZE,INDEX_REBUILD_ONLINE', @FragmentationHigh = 'INDEX_REBUILD_ONLINE';
- 切换到「调度」标签,设置适合的执行时间(比如避开业务高峰,或者和原维护作业错开时段)
- 保存作业即可
如果你想要更简单的直接操作(比如固定只重组或重建所有索引),也可以直接写TSQL语句,比如:
-- 重组所有索引(适合碎片率低的情况) ALTER INDEX ALL ON DWProd.dbo.Exclude_Tbl REORGANIZE; -- 或者重建所有索引(如果碎片率很高,且允许离线操作的话) ALTER INDEX ALL ON DWProd.dbo.Exclude_Tbl REBUILD;
小提醒:
- 记得测试修改后的原作业,确认它确实不会再处理
DWProd.dbo.Exclude_Tbl - 单独作业的权限要确保足够(和原维护作业权限一致就行)
- 根据表的大小和业务情况,调整索引维护的参数(比如要不要在线重建,要不要更新统计信息等)
内容的提问来源于stack exchange,提问作者SDb
相关产品推荐
相关产品推荐

