The meta data is from an SQL 2012 Server.
I have posted alot more, find the whole list here.
Goto Definition or MetaData
Definition:
sys.sp_MScdc_db_ddl_event(xml @EventData)MetaData:
create procedure sys.sp_MScdc_db_ddl_event ( @EventData xml ) as begin set nocount on declare @old_database_name sysname ,@new_database_name sysname ,@event_type sysname ,@proc nvarchar(1000) ,@retcode int -- If the table msdb.dbo.cdc_jobs doesn't exist, simply return. if ([sys].[fn_cdc_jobs]() = 0) return 0 select @event_type = event_instance.value('EventType[1]', 'nvarchar(100)') ,@old_database_name = event_instance.value('DatabaseName[1]', 'sysname') FROM @EventData.nodes('/EVENT_INSTANCE') as R(event_instance) -- for alter database, all we care is if database name has changed, skip everything else if (@event_type = N'ALTER_DATABASE') begin -- if no cdc enabled db, don't do anything if not exists (select * from sys.databases where is_cdc_enabled = 1) return 0 if db_id(@old_database_name) is not null return 0 else begin -- the only reliable way to find new database name is through our jobs select @new_database_name = [sys].[fn_cdc_db_name_from_job_entry](@old_database_name) -- if jobs don't exists for whatever reason, we don't really need to do any thing if @new_database_name is null return 0 set @proc = quotename(@new_database_name) + N'.sys.sp_MScdccheck_ddladmin' EXEC @retcode = @proc IF @@ERROR <> 0 or @retcode <> 0 BEGIN return 1 END end end -- only sa can drop cdc-enabled database, even if there's other way to grant non-sa right to do so, -- ddl trigger is after effect so db is gone therefore we won't have anyway to evaluate what right you have in the dropped db. if (@event_type = N'DROP_DATABASE') begin -- the whole purpose of hooking into DROP_DATABASE is to cleanup cdc jobs, if there is no job, no need to do anything if ([sys].[fn_cdc_jobs]() = 1) begin -- again, if the dropped db has no job to clean, why bother if ([sys].[fn_cdc_job_entry](@old_database_name) = 1) begin if (isnull(is_srvrolemember('sysadmin'),0) = 0) begin raiserror(22902, 16, -1) return 1 end end else return 0 end else return 0 end -- Remove obsolete entries from msdb jobs tables. This is handled as a best effort. -- Failure should not cause DROP or ALTER to fail. exec [sys].[sp_cdc_cleanup_job_entries] @event_type, @old_database_name, @new_database_name return 0 end
No comments:
Post a Comment