Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите востановить хранимую процедуру  [new]
schas
Member

Откуда:
Сообщений: 9
Случайно запорол сисикмные хранимые процедуры sp_changeobjectowner и sp_MSchangeobjectowner. Как их можно востановить? Есть исходный текст sp_changeobjectowner, а у sp_MSchangeobjectowner - нет. Создаю новую процедуру - выдает ошибку №259. Помогите
19 авг 04, 10:59    [892907]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
zass
Member

Откуда: Minsk
Сообщений: 1043
Раскажите как вы их запороли. Очень интересно.
19 авг 04, 11:03    [892933]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
schas
Member

Откуда:
Сообщений: 9
Взял, и вручную поменял исходный текст - думал, что нахожусь в другой БД где я их сам пытался создать сам. 8(((
19 авг 04, 11:08    [892964]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
Trong
Member

Откуда: Novosibirsk
Сообщений: 759
create procedure sp_changeobjectowner  
 @objname nvarchar(517),  -- may be "[owner].[object]"  
 @newowner sysname    -- must be entry from sysusers  
as  
 Set nocount      on  
 Set ansi_padding on  
 declare @objid  int,  
   @newuid  smallint  
  
 -- CHECK PERMISSIONS: Because changing owner changes both schema and  
 -- permissions, the caller must be one of:  
 -- (1) db_owner  
 -- (2) db_ddladmin AND db_securityadmin  
    if (is_member('db_owner') = 0) and  
  (is_member('db_securityadmin') = 0 OR is_member('db_ddladmin') = 0)  
    begin  
  raiserror(15247,-1,-1)  
  return (1)  
    end  
  
 -- RESOLVE OBJECT NAME (CANNOT BE A CHILD OBJECT: TRIGGER/CONSTRAINT) --  
 select @objid = object_id(@objname, 'local')  
 if (@objid is null) OR  
  (select parent_obj from sysobjects where id = @objid) <> 0 OR  
  ObjectProperty(@objid, 'IsMSShipped') = 1 OR  
  ObjectProperty(@objid, 'IsSystemTable') = 1 OR  
  ObjectProperty(@objid, 'ownerid') in (0,3,4) OR --public, INFORMATION_SCHEMA, system_function_schema  
  -- Check for Dependencies: No RENAME or CHANGEOWNER of OBJECT when exists:  
  EXISTS (SELECT * FROM sysdepends d WHERE  
   d.depid = @objid  -- A dependency on this object  
   AND d.deptype > 0  -- that is enforced  
   AND @objid <> d.id  -- that isn't a self-reference (self-references don't use object name)  
   AND @objid <>   -- And isn't a reference from a child object (also don't use object name)  
    (SELECT o.parent_obj FROM sysobjects o WHERE o.id = d.id)  
   )  
 begin  
  -- OBJECT NOT FOUND  
  raiserror(15001,-1,-1,@objname)  
  return 1  
 end  
  
 -- RESOLVE NEW OWNER NAME (ATTEMPT ADDING IMPLICIT ROW FOR NT NAME) --  
    --  Disallow aliases, and public cannot own objects --  
 select @newuid = uid from sysusers where name = @newowner  
                            and isaliased = 0  
       and uid not in (0,3,4) --public, INFORMATION_SCHEMA, system_function_schema  
    if @newuid is null  
    begin  
        execute sp_MSadduser_implicit_ntlogin @newowner  
        select @newuid = uid from sysusers where name = @newowner  
                            and isaliased = 0 and name <> 'public'  
    end  
    if @newuid is null  
    begin  
  raiserror(15410, -1, -1, @newowner)  
  return (1)  
    end  
  
 -- CHECK IF CHANGING OWNER OF OBJECT OR ITS CHILDREN WOULD PRODUCE A DUPLICATE  
 if exists (select * from sysobjects where uid = @newuid and name in  
  (select name from sysobjects where id = @objid OR parent_obj = @objid))  
 begin  
  raiserror(15505,-1,-1,@objname,@newowner)  
  return (1)  
 end  
  
  
 -- DO THE OWNER TRANSFER (WITH A WARNING) --  
 raiserror(15477,-1,-1)  
 begin transaction  
 -- Locks Object and increments schema_ver.  
 DBCC LockObjectSchema(@objname)  
 -- drop permissions (they'll be incorrect with new owner) --  
 delete syspermissions where id = @objid  
 update sysobjects set uid = @newuid where id = @objid  
 update sysobjects set uid = @newuid where parent_obj = @objid  
 commit transaction  
  
 return 0 -- sp_changeobjectowner  
19 авг 04, 11:15    [893015]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
Trong
Member

Откуда: Novosibirsk
Сообщений: 759
  
create procedure sp_MSchangeobjectowner(  
 @tablename sysname,  
 @dest_owner sysname  
)AS  
 declare @uid   smallint  
 declare @retcode int  
   
 select @uid=uid from sysobjects where name=@tablename  
  
 --do not bother to call sp_changeobjectowner the object is owned by the @dest_owner itself  
 if user_name(@uid)=@dest_owner  
  return(0)  
 exec @retcode=sp_changeobjectowner @tablename, @dest_owner  
 if @@ERROR<>0 or @retcode<>0  
 begin  
  raiserror(21346, 16, -1, @tablename, @dest_owner)  
  return (1)  
 end  
 return(0)   
19 авг 04, 11:15    [893018]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
Trong
Member

Откуда: Novosibirsk
Сообщений: 759
Испорченные удаляете, новые создаете.
19 авг 04, 11:16    [893024]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
zass
Member

Откуда: Minsk
Сообщений: 1043
Это мы говорим о MS SQL Server 7.0?
19 авг 04, 11:17    [893031]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
Trong
Member

Откуда: Novosibirsk
Сообщений: 759
Упс. Утите, то, что я выложил - от 2000 :)
19 авг 04, 11:22    [893070]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
schas
Member

Откуда:
Сообщений: 9
Старые удалил. При попытке создать новые вылезает шибка №259. Что делать?
19 авг 04, 11:23    [893074]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
Trong
Member

Откуда: Novosibirsk
Сообщений: 759
Текст ошибки приведите
19 авг 04, 11:24    [893088]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
zass
Member

Откуда: Minsk
Сообщений: 1043
В двухтоннике ничего не получится.
19 авг 04, 11:24    [893089]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
schas
Member

Откуда:
Сообщений: 9
У меня MS SQL Server 2000
19 авг 04, 11:25    [893094]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
schas
Member

Откуда:
Сообщений: 9
Error 259: Ad hoc updates to system catalogs are not enabled. The system administrator must reconfigure SQL Server to allow this
19 авг 04, 11:28    [893111]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
zass
Member

Откуда: Minsk
Сообщений: 1043
А БД master сможете переустановить из BAK - a?
19 авг 04, 11:28    [893116]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
поставить псису allow modification syscatalog... в свойствах сервера, а уж потом упражняться
19 авг 04, 11:30    [893137]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
Trong
Member

Откуда: Novosibirsk
Сообщений: 759
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go

удаляете, создаете

use master
go
sp_configure 'allow updates',0
go
reconfigure with override
go
19 авг 04, 11:30    [893138]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
schas
Member

Откуда:
Сообщений: 9
zass : наверно не получится 8(((

iSestrin: щас попробую если найду 8)) опыта еще мало
19 авг 04, 11:33    [893153]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
zass
Member

Откуда: Minsk
Сообщений: 1043
iSestrin
поставить псису allow modification syscatalog... в свойствах сервера, а уж потом упражняться


Это ему придется остановить и запустить службы. А "резаный" сервак даст это?
19 авг 04, 11:42    [893206]     Ответить | Цитировать Сообщить модератору
 Re: Помогите востановить хранимую процедуру  [new]
schas
Member

Откуда:
Сообщений: 9
Всем ограмное спасибо!!! Все получилось! УРА!!! 8)
19 авг 04, 11:44    [893216]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить