2013-06-12 2 views
0

Я унаследовал обслуживание SQL Server (2008), и я хочу изменить некоторые системные хранимые процедуры. Это пользовательские системные хранимые процедуры (например: sys.sp_customproc). Я могу только предположить, что они были созданы как системные процедуры, чтобы их можно было разделить на несколько баз данных? Но независимо от того, мне нужно их модифицировать.SQL Server 2008 изменить системную хранимую процедуру

Приведен пример одного из них.

USE [msdb] 
GO 
/****** Object: StoredProcedure [sys].[sp_dbmmonitorhelpmonitoring] Script Date: 06/12/2013 13:16:52 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER procedure [sys].[sp_dbmmonitorhelpmonitoring] 
as 
begin 
set nocount on 
if (is_srvrolemember(N'sysadmin') <> 1) 
    begin 
     raiserror(21089, 16, 1) 
     return (1) 
    end 

declare @freq_type    int, -- 4 = daily 
     @freq_interval   int, -- Every 1 days 
     @freq_subday_type  int, -- 4 = based on Minutes 
     @freq_subday_interval int, -- interval 
     @job_id     uniqueidentifier, 
     @schedule_id   int, 
     @retention_period  int, 
     @jobname    nvarchar(256) 

select @jobname = isnull(formatmessage(32047), N'Database Mirroring Monitor Job') 

select @job_id = job_id from msdb.dbo.sysjobs where name = @jobname 
if (@job_id is null) -- if the job does not exist, error out 
begin 
    raiserror(32049, 16, 1) 
    return 1 
end 

select @schedule_id = schedule_id from msdb.dbo.sysjobschedules where job_id = @job_id 
select @freq_type = freq_type, 
     @freq_interval = freq_interval, 
     @freq_subday_type = freq_subday_type, 
     @freq_subday_interval = freq_subday_interval 
    from msdb.dbo.sysschedules where schedule_id = @schedule_id 

-- If the frequency parameters are not what we expect then return an error 
-- Someone has changed the job schedule on us 
if (@freq_type <> 4) or (@freq_interval <> 1) or (@freq_subday_type <> 4) 
begin 
    raiserror(32037, 16, 1) 
    return 1 
end 

select @freq_subday_interval update_period 

return 0 
end 

Когда я пытаюсь выполнить его, я получаю сообщение об ошибке:

Msg 208, уровень 16, состояние 6, процедура sp_dbmmonitorhelpmonitoring, строка 46 Неверное имя объекта 'sys.sp_dbmmonitorhelpmonitoring'.

Мой логин - это «sa», я сопоставлен с пользовательским «dbo» в базе данных [msdb]. Как изменить эту хранимую процедуру?

+0

Ну, это просто: в базе данных нет хранимой процедуры с именем 'sys.sp_dbmmonitorhelpmonitoring' в базе данных, где вы ее выполняете. – phadaphunk

ответ

0

Вы не можете изменить SP после того, как вы отметили его как «хранимую процедуру системы». Вместо этого вам нужно отбросить его, воссоздать и снова пометить его как системную хранимую процедуру (используя sp_ms_marksystemobject). Я уверен, что вы уже понимаете, насколько опасно, что это беспорядок со всем, что было отмечено как «система». Я чувствую себя обязанным настоятельно рекомендую вам сделать много резервных копий, прежде чем вы попытаетесь выполнить любой из этих. А именно, резервное копирование: мастер, модель и MSDB.

Смежные вопросы