删除Management Data Warehouse (MDW) job失败
转:http://lzf328.blog.51cto.com/1196996/1349670
最近在清理一些不用的Job,发现几个跟MDW有关的。虽然Job已经被Disable, 但是没有被删除。尝试删除出现下面的错误:
The DELETE statement conflicted with the REFERENCE constraint "FK_syscollector_collection_sets_collection_sysjobs". The conflict occurred in database "msdb", table "dbo.syscollector_collection_sets_internal", column 'collection_job_id'.The statement has been terminated. (.Net SqlClient Data Provider)
查了一些文档发现这个问题在2008/2008 R2中都存在,只能Disable但是无法删除。找到了一篇文章Remove associated data collector jobs提供了代码去删除MDW的相关job和对象.虽然文章提到只能在测试环境中运行这个脚本,但是这个脚本不会对其他应用产生影响。
USE MSDB
GO
-- Disable constraints ALTER TABLE dbo.syscollector_collection_sets_internal NOCHECK CONSTRAINT FK_syscollector_collection_sets_collection_sysjobs
ALTER TABLE dbo.syscollector_collection_sets_internal NOCHECK CONSTRAINT FK_syscollector_collection_sets_upload_sysjobs -- Delete data collector jobs
DECLARE @job_id uniqueidentifier
DECLARE datacollector_jobs_cursor CURSOR LOCAL
FOR
SELECT collection_job_id AS job_id FROM syscollector_collection_sets
WHERE collection_job_id IS NOT NULL
UNION
SELECT upload_job_id AS job_id FROM syscollector_collection_sets
WHERE upload_job_id IS NOT NULL OPEN datacollector_jobs_cursor
FETCH NEXT FROM datacollector_jobs_cursor INTO @job_id
WHILE (@@fetch_status= 0)
BEGIN
IF EXISTS(SELECT COUNT(job_id)FROM sysjobs WHERE job_id = @job_id )
BEGIN
DECLARE @job_name sysname
SELECT @job_name = name from sysjobs WHERE job_id = @job_id
PRINT 'Removing job '+ @job_name
EXEC dbo.sp_delete_job @job_id = @job_id, @delete_unused_schedule=0
END
FETCH NEXT FROM datacollector_jobs_cursor INTO @job_id
END
CLOSE datacollector_jobs_cursor
DEALLOCATE datacollector_jobs_cursor -- Enable Constraints back
ALTER TABLE dbo.syscollector_collection_sets_internal CHECK CONSTRAINT FK_syscollector_collection_sets_collection_sysjobs
ALTER TABLE dbo.syscollector_collection_sets_internal CHECK CONSTRAINT FK_syscollector_collection_sets_upload_sysjobs -- Disable trigger on syscollector_collection_sets_internal
EXEC('DISABLE TRIGGER syscollector_collection_set_is_running_update_trigger ON syscollector_collection_sets_internal') -- Set collection sets as not running state
UPDATE syscollector_collection_sets_internal
SET is_running = 0 -- Update collect and upload jobs as null
UPDATE syscollector_collection_sets_internal
SET collection_job_id =NULL, upload_job_id =NULL -- Enable back trigger on syscollector_collection_sets_internal
EXEC('ENABLE TRIGGER syscollector_collection_set_is_running_update_trigger ON syscollector_collection_sets_internal') -- re-set collector config store
UPDATE syscollector_config_store_internal
SET parameter_value = 0
WHERE parameter_name IN('CollectorEnabled') UPDATE syscollector_config_store_internal
SET parameter_value =NULL
WHERE parameter_name IN('MDWDatabase','MDWInstance') -- Delete collection set logs
DELETE FROM syscollector_execution_log_internal GO
运行之后会看到下面的结果:
Removing job collection_set_3_collection
Removing job collection_set_2_upload
Removing job collection_set_1_noncached_collect_and_upload
Removing job collection_set_2_collection
Removing job collection_set_3_upload
可以看到跟MDW有关的job已经被移除。另外提一下在2012中微软提供了一个新的系统存储过程sp_syscollector_delete_collection_set,可以删除自定义的MDW job和对象,其实看下这个存储过程的代码跟上面的差不多。
CREATEPROC [dbo].[sp_syscollector_cleanup_collector]
@collection_set_id INT=NULL
AS
BEGIN
IF (@collection_set_id ISNOTNULL)
BEGIN
DECLARE @retVal int
EXEC @retVal = dbo.sp_syscollector_verify_collection_set@collection_set_id OUTPUT
IF (@retVal <> 0)
BEGIN
RETURN (1)
END
END DECLARE @TranCounter INT
SET @TranCounter =@@TRANCOUNT
IF (@TranCounter > 0)
SAVETRANSACTION tran_cleanup_collection_set
ELSE
BEGINTRANSACTION BEGINTRY
-- changing isolation level to repeatable to avoid any conflicts that may happen
-- while running this stored procedure and sp_syscollector_start_collection_set concurrently
SETTRANSACTIONISOLATIONLEVELREPEATABLEREAD -- Security check (role membership)
IF (NOT(ISNULL(IS_MEMBER(N'dc_admin'), 0)= 1)ANDNOT(ISNULL(IS_MEMBER(N'db_owner'), 0)= 1))
BEGIN
REVERT
RAISERROR(14677,-1,-1,'dc_admin')
RETURN (1)
END -- Disable constraints
-- this is done to make sure that constraint logic does not interfere with cleanup process
ALTERTABLE dbo.syscollector_collection_sets_internal NOCHECKCONSTRAINT FK_syscollector_collection_sets_collection_sysjobs
ALTERTABLE dbo.syscollector_collection_sets_internal NOCHECKCONSTRAINT FK_syscollector_collection_sets_upload_sysjobs -- Delete data collector jobs
DECLARE @job_id uniqueidentifier
DECLARE datacollector_jobs_cursor CURSORLOCAL
FOR
SELECT collection_job_id AS job_id FROMsyscollector_collection_sets
WHERE collection_job_id ISNOTNULL
AND( collection_set_id = @collection_set_id OR @collection_set_id ISNULL)
UNION
SELECT upload_job_id AS job_id FROMsyscollector_collection_sets
WHERE upload_job_id ISNOTNULL
AND( collection_set_id = @collection_set_id OR @collection_set_id ISNULL) OPEN datacollector_jobs_cursor
FETCHNEXTFROM datacollector_jobs_cursor INTO @job_id
WHILE (@@fetch_status= 0)
BEGIN
IFEXISTS(SELECTCOUNT(job_id)FROM sysjobs WHERE job_id = @job_id )
BEGIN
DECLARE @job_name sysname
SELECT @job_name = name from sysjobs WHERE job_id = @job_id
PRINT'Removing job '+ @job_name
EXEC dbo.sp_delete_job@job_id=@job_id, @delete_unused_schedule=0
END
FETCHNEXTFROM datacollector_jobs_cursor INTO @job_id
END
CLOSE datacollector_jobs_cursor
DEALLOCATE datacollector_jobs_cursor -- Enable Constraints back
ALTERTABLE dbo.syscollector_collection_sets_internal CHECKCONSTRAINT FK_syscollector_collection_sets_collection_sysjobs
ALTERTABLE dbo.syscollector_collection_sets_internal CHECKCONSTRAINT FK_syscollector_collection_sets_upload_sysjobs -- Disable trigger on syscollector_collection_sets_internal
-- this is done to make sure that trigger logic does not interfere with cleanup process
EXEC('DISABLE TRIGGER syscollector_collection_set_is_running_update_trigger ON syscollector_collection_sets_internal') -- Set collection sets as not running state and update collect and upload jobs as null
UPDATE syscollector_collection_sets_internal
SET is_running = 0,
collection_job_id =NULL,
upload_job_id =NULL
WHERE (collection_set_id = @collection_set_id OR @collection_set_id ISNULL) -- Enable back trigger on syscollector_collection_sets_internal
EXEC('ENABLE TRIGGER syscollector_collection_set_is_running_update_trigger ON syscollector_collection_sets_internal') -- re-set collector config store if there is no enabled collector
DECLARE @counter INT
SELECT @counter=COUNT(is_running)
FROM syscollector_collection_sets_internal
WHERE is_running = 1 IF (@counter = 0)
BEGIN
UPDATE syscollector_config_store_internal
SET parameter_value = 0
WHERE parameter_name IN('CollectorEnabled'); UPDATE syscollector_config_store_internal
SET parameter_value =NULL
WHERE parameter_name IN('MDWDatabase','MDWInstance')
END -- Delete collection set logs
DELETEFROM syscollector_execution_log_internal
WHERE (collection_set_id = @collection_set_id OR @collection_set_id ISNULL) IF (@TranCounter = 0)
BEGIN
COMMITTRANSACTION
END
RETURN(0)
ENDTRY
BEGINCATCH
IF (@TranCounter = 0 ORXACT_STATE()=-1)
ROLLBACKTRANSACTION
ELSEIF (XACT_STATE()= 1)
ROLLBACKTRANSACTION tran_cleanup_collection_set DECLARE @ErrorMessageNVARCHAR(4000);
DECLARE @ErrorSeverityINT;
DECLARE @ErrorStateINT;
DECLARE @ErrorNumberINT;
DECLARE @ErrorLineINT;
DECLARE @ErrorProcedure NVARCHAR(200);
SELECT @ErrorLine =ERROR_LINE(),
@ErrorSeverity =ERROR_SEVERITY(),
@ErrorState =ERROR_STATE(),
@ErrorNumber =ERROR_NUMBER(),
@ErrorMessage =ERROR_MESSAGE(),
@ErrorProcedure =ISNULL(ERROR_PROCEDURE(),'-');
RAISERROR (14684, @ErrorSeverity,-1 , @ErrorNumber, @ErrorSeverity, @ErrorState, @ErrorProcedure, @ErrorLine, @ErrorMessage);
RETURN (1)
ENDCATCH
END
删除Management Data Warehouse (MDW) job失败的更多相关文章
- 场景4 Data Warehouse Management 数据仓库
场景4 Data Warehouse Management 数据仓库 parallel 4 100% —> 必须获得指定的4个并行度,如果获得的进程个数小于设置的并行度个数,则操作失败 para ...
- 对数据集“dsArea”执行查询失败。 (rsErrorExecutingCommand),Query execution failed for dataset 'dsArea'. (rsErrorExecutingCommand),Manually process the TFS data warehouse and analysis services cube
错误提示: 处理报表时出错. (rsProcessingAborted)对数据集“dsArea”执行查询失败. (rsErrorExecutingCommand)Team System 多维数据集或者 ...
- Data Warehouse
Knowledge Discovery Process OLTP & OLAP 联机事务处理(OLTP, online transactional processing)系统:涵盖组织机构大部 ...
- Azure SQL 数据库仓库Data Warehouse (1) 入门
<Windows Azure Platform 系列文章目录> 在之前的项目中遇到了客户使用SQL数据仓库的场景,在这里记录一下 1.什么是SQL 数据库仓库 (SQL DW) SQL D ...
- Data Warehouse 简介
数据仓库定义 数据仓库之父Bill Inmon在1991年出版的“Building the Data Warehouse”一书中所提出的定义被广泛接受:数据仓库(Data Warehouse)是一个面 ...
- 混合 Data Warehouse 和 Big Data 倉庫的新架構
(讀書筆記)許多公司,儘管想導入 Big Data,仍必須繼續用 Data Warehouse 來管理結構化的營運數據.系統記錄.而 Big Data 的出現,為 Data Warehouse 提供了 ...
- Azure SQL Data Warehouse
Azure SQL Data Warehouse & AWS Redshift Amazon Redshift Amazon Redshift 是一种快速.完全托管的 PB 级数据仓库,可方便 ...
- Highgui.imwrite("/data/pic1111.png", mat)失败,且找不到报错
——> Highgui.imwrite("/data/pic1111.png", mat)失败,且找不到报错. ok -->直接使用以下代码,自己保存mat,从而可以跟 ...
- 浅析基于微软SQL Server 2012 Parallel Data Warehouse的大数据解决方案
作者 王枫发布于2014年2月19日 综述 随着越来越多的组织的数据从GB.TB级迈向PB级,标志着整个社会的信息化水平正在迈入新的时代 – 大数据时代.对海量数据的处理.分析能力,日益成为组织在这个 ...
随机推荐
- 20145205 《Java程序设计》实验报告五:Java网络编程及安全
20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...
- 使用 JSONP 实现简单的 SSO 单点登录
SSO 即 Single Sign On(单点登录). 一.二级域名之间的单点登录 不需要用到JSONP 或者 p3p 协议,直接使用 COOKIE 就行了,因为顶级域名相同就能实现 COOKIE ...
- uwsgi 安装配置
安装uwsgi# pip install uwsgi 配置uwsgi:首先要明确的是,如果你喜欢用命令行的方式(如shell)敲命令,那可以省去任何配置.但是,绝大多数人,还是不愿意记那么长的命令,反 ...
- find_elements后点击不了抓取的元素
1.莫名其妙抓不到元素,要去看句柄,是不是没有切换 h=driver.current_window_handle nh=driver.window_handles for i in nh: if i! ...
- 非常适用的Sourceinsight插件,提高效率事半功倍
一直使用sourceinsight编辑C/C++代码,sourceinsight是一个非常好用的编辑工具可以任意定位,跳转,回退,本人一直 使用该工具做C/C++开发,sourceinsight能够满 ...
- JS 数组去重复值
var arr1 = [90, 91, 92]; var arr2 = [80, 81]; var arr3 = [80, 71, 72, 73]; var arr = arr1.concat(50, ...
- AVAudioPlayer播放本地音频
AVAudioPlayer苹果官方上说一般用于播放本地音频,不能用于播放网络上的音频. 具体的代码:先导入 #import <AVFoundation/AVFoundation.h> // ...
- mysql小结
1.使用密码登录mysql mysql -u root -p 2.查看所有的数据库 show databases; 3.创建数据库 create database <数据库名>; 4.创建 ...
- WindowsService 安装 cmd
步骤: 1.运行--〉cmd:打开cmd命令框 2.在命令行里定位到InstallUtil.exe所在的位置 InstallUtil.exe 默认的安装位置是在C:/Windows/Microsoft ...
- sql存储过程中加引号
ALTER PROCEDURE [dbo].[SaveTerminaInfo] @TerminaNo NVARCHAR(50), @Name NVARCHAR(50), @Value NVARCHAR ...