Перенос БД MSSQL на новый сервер

Администрирование баз данных (Pervasive.SQL, MS SQL, Oracle, утилита Support)

Модераторы: m0p3e, edward_K, Модераторы

maikl
Местный житель
Сообщения: 1503
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Тверь

Re: Перенос БД MSSQL на новый сервер

Сообщение maikl »

В саппорте, Правах доступа,открываешь пользователя, переименовываешь Идентификатор пользователя и т.д.
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Перенос БД MSSQL на новый сервер

Сообщение zna »

Здравствуйте, коллеги! Перенёс базу на другой сервер, выполняю скрипт по отключению журнала и протекта- получаю ошибку -
Изображение
На новом сервере база предварительно развёрнута инсталлятором ms_inst.exe- значит, все процедуры в master прописались.
Почему не находит??
MS SQL Server 2008 - 10.0.5500.0
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Перенос БД MSSQL на новый сервер

Сообщение Den »

zna писал(а): ...
На новом сервере база предварительно развёрнута инсталлятором ms_inst.exe- значит, все процедуры в master прописались.
....
т.е. Вы в Master-е смотрели и она действительно там есть...?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5185
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Перенос БД MSSQL на новый сервер

Сообщение edward_K »

базу мож и не надо ставить, а вот napsrv обязательно - в ms_inst есть галочка устанавливать вспомогательную службу - вы ее поставили? При этом в bin у вас с копируются несколько файлов(размер зависит от версии сервера). Кроме того версия napsrv должна соотв. версии атлантиса в галактике и в сапорте(и в патчманагере)
Вот параграф из доки

Код: Выделить всё

установить на новом сервере БД вспомогательную службу napsrv.exe системы Галактика ERP (см. п. Обновление вспомогательной службы Галактики ERP). При использовании NTLM авторизации в процессе настройки параметров вспомогательной службы с помощью Менеджера серверов и служб Галактики galconf.exe необходимо установить требуемые параметры авторизации (см. п.п. ИСПОЛЬЗОВАНИЕ СРЕДСТВ WINDOWS NT ДЛЯ АВТОРИЗАЦИИ ПОЛЬЗОВАТЕЛЕЙ ПРИ РАБОТЕ В ДВУХУРОВНЕВОЙ АРХИТЕКТУРЕ , Настройка вспомогательной службы napsrv.exe).

Для этого предварительно на новый сервер БД нужно скопировать каталог \DB_INST из серверной части системы.

Примечание: Установка вспомогательной службы является обязательным этапом, так как в процессе ее установки в базе данных master MS SQL Server формируются необходимые внешние хранимые процедуры.

zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Перенос БД MSSQL на новый сервер

Сообщение zna »

Сейчас посмотрел- да, процедура na_notifysettingschanged отсутствует в базе мастер. Странно, ведь ms_inst.exe был запущен от имени админа и без ошибок отработал..
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Перенос БД MSSQL на новый сервер

Сообщение zna »

Nap установлен Изображение
Почему тогда отсутствует эта процедура? :???:
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5185
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Перенос БД MSSQL на новый сервер

Сообщение edward_K »

похоже версия не той системы. У вас видимо стоит 5.4.17, а на дворе уже 43. Возможно в тригере используется новая процедура, которой не было в 17. Вообще что-то есть на na_? Проверьте DB_INST на обновления - его также нужно патчить. После этого переустановите napsrv.
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Перенос БД MSSQL на новый сервер

Сообщение Masygreen »

а случайно перенос не 2005-2008 был ?
Время ведет!
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Перенос БД MSSQL на новый сервер

Сообщение zna »

Обновил папку Db_inst, правда не до последней версии, а до 38. Результат тот же- процедурка не прописалась Изображение
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Перенос БД MSSQL на новый сервер

Сообщение zna »

Masygreen писал(а):а случайно перенос не 2005-2008 был ?
Да! Бэкап был взят с 2005, залил на 2008
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Перенос БД MSSQL на новый сервер

Сообщение Masygreen »

zna писал(а):
Masygreen писал(а):а случайно перенос не 2005-2008 был ?
Да! Бэкап был взят с 2005, залил на 2008
)) ну дак конечно она работать не будет

1) выполняйте скрипт

Код: Выделить всё

/****** Object:  StoredProcedure [dbo].[CheckAtlUserName]    Script Date: 03/31/2011 09:50:54 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create procedure [dbo].[CheckAtlUserName]
 @login sysname
as begin

if @login in ('bulkadmin',
               'db_accessadmin',
               'db_backupoperator',
               'db_datareader',
               'db_datawriter',
               'db_ddladmin',
               'db_denydatareader',
               'db_denydatawriter',
               'db_owner',
               'db_securityadmin',
               'dbcreator',
               'dbo',
               'diskadmin',
               'guest',
               'INFORMATION_SCHEMA',
               'processadmin',
               'public',
               'sa',
               'securityadmin',
               'serveradmin',
               'setupadmin',
               'sys',
               'sysadmin') begin
 raiserror ('Invalid user name ''%s'' - reserved',11,1,@login)
 return
end

return 1

end


GO

/****** Object:  StoredProcedure [dbo].[CheckError]    Script Date: 03/31/2011 09:50:55 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create procedure [dbo].[CheckError](@err int,@tcode int,@nrname varchar(20),@nrec binary(8)) as
if @err=255 begin
  raiserror(50007,11,-1)
  rollback transaction
end
if @err=254 begin
  raiserror(50008,11,-1)
  rollback transaction
end
if @err=253 begin
  raiserror(50009,11,-1,@tcode,@nrname,@nrec)
  rollback transaction
end
return 0
GO

/****** Object:  StoredProcedure [dbo].[CreateAtlUser]    Script Date: 03/31/2011 09:50:55 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create procedure [dbo].[CreateAtlUser]
 @login sysname,
 @pwd varchar(25) = null,
 @asadm bit = null,
 @grp sysname = null

as begin

if @login is null return

declare @type char(1) = case when charindex(char(92),@login)=0 then 'S' else 'U' end

-- проверка зарезервированных имён
if @type='S' begin
 declare @r int
 exec @r=CheckAtlUserName @login
 if @r=0 return
end

declare @sid varbinary(85),
        @ltype char(1),
        @dbname sysname,
        @pwdok int,
        @pid int,
        @uname sysname,
        @utype char(1),
        @uschm sysname,
        @ulogin sysname,
        @ubad bit,
        @rtype char(1)

exec GetAtlUserInfo @login, @pwd, @sid out, @ltype out, @dbname out, @pwdok out, @pid out, @uname out, @utype out, @uschm out, @ulogin out, @ubad out

-- проверка существующего логина
if @sid is not null and @ltype <> @type begin
 raiserror ('Existing login ''%s'' has another type ''%s''',11,1,@login,@ltype)
 return
end

-- проверка привязанного юзера
if @ubad=1 begin
 raiserror ('User for login ''%s'' has another name ''%s'' or another type ''%s'' or another scheme ''%s''',11,1,@login,@uname,@ltype,@uschm)
 return
end

-- проверка похожего юзера
if @sid is null and @uname is not null and (@utype <> @type or @uschm <> 'dbo' and @uschm <> @login or @ulogin is not null) begin
 raiserror ('User with name ''%s'' has another type ''%s'' or another scheme ''%s'' or linked with another login ''%s''',11,1,@uname,@ltype,@uschm,@ulogin)
 return
end

-- проверка группы
if @grp is not null begin
 select @rtype=r.type from sys.database_principals r where r.name=@grp
 if coalesce(@rtype,'R')<>'R' begin
  raiserror ('''%s'' has bad type. Cure this',11,1,@grp)
  return
 end
end

-- создание/модификация логина
exec ValidateAtlLogin @login, @dbname, @type, @pwdok, @pwd
if @@error > 0 return

-- создание/модификация юзера
if @pid is null begin
 exec ('create user ['+@login+'] for login ['+@login+'] with default_schema=dbo')
 if @@error > 0 return
end else if @ubad is null and @ulogin is null or @uschm<>'dbo' begin
 declare @austmt varchar(1000) = 'alter user ['+@login+'] with '
 if @ulogin is null begin
  set @austmt=@austmt+'login=['+@login+']'
  if @uschm<>'dbo' set @austmt=@austmt+','
 end
 if @uschm<>'dbo' set @austmt=@austmt+'default_schema=dbo'
 exec (@austmt)
 if @@error > 0 return
end

declare @newlogin bit = case when @sid is null then 1 else 0 end,
        @newuser bit = case when @pid is null then 1 else 0 end,
        @newgrp bit = case when @rtype is null then 1 else 0 end
exec ValidateAtlRoles @login, @asadm, @newlogin, @newuser, @grp, @newgrp
if @@error > 0 return

return 1

end


GO

/****** Object:  StoredProcedure [dbo].[DeleteAtlUser]    Script Date: 03/31/2011 09:50:55 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create procedure [dbo].[DeleteAtlUser]
 @login sysname,
 @droplogin bit,
 @grp sysname

as begin

if exists(select 1 from sys.database_principals where name=@login and type in ('S','U')) begin
 exec ('drop user ['+@login+']')
 if @@error > 0 return
end

if exists(select 1 from sys.database_principals where name=@grp and type='R') begin
 begin try
  exec ('drop role ['+@grp+']')
 end try
 begin catch
  if error_number()=15144 begin
   declare @rn varchar(20),@mc cursor
   set @mc =
    cursor fast_forward for
   		select u.name
   			from sys.database_principals u, sys.database_principals g, sys.database_role_members m
   			where g.name = @grp
   				and g.principal_id = m.role_principal_id
   				and u.principal_id = m.member_principal_id
   open @mc
   fetch next from @mc into @rn
   while @@fetch_status=0
   begin
    exec sp_droprolemember @grp, @rn
    if @@error > 0 return
    fetch next from @mc into @rn
   end
   close @mc
   deallocate @mc
   exec ('drop role ['+@grp+']')
   if @@error > 0 return
  end else begin
   declare
    @s int = error_severity(),
    @t int = error_state(),
    @m nvarchar(2048) = error_message()
   raiserror ( @m, @s, @t )
   return
  end
 end catch
end

if @droplogin=1 and exists(select 1 from sys.server_principals where name=@login and type in ('S','U')) begin
 exec ('drop login ['+@login+']')
 if @@error > 0 return
end

return 1

end

GO

/****** Object:  StoredProcedure [dbo].[DeleteMemoValues]    Script Date: 03/31/2011 09:50:55 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[DeleteMemoValues] (@MCode INT) AS
-- Check privileges here
DELETE FROM XX$Memo WHERE M#Code=@MCode
RETURN 0
GO

/****** Object:  StoredProcedure [dbo].[SetCorpoHeaderOnDelete]    Script Date: 03/31/2011 09:51:07 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[SetCorpoHeaderOnDelete](@LastDate INT, @LastTime INT, @LastUser BINARY(8), @OriginOffice INT )AS
IF EXISTS(SELECT * FROM XX$CorpoHeaderOnDelete WHERE SPID=@@SPID)
   UPDATE XX$CorpoHeaderOnDelete SET
      Atl_LastDate=@LastDate,
      Atl_LastTime=@LastTime,
      Atl_LastUser=@LastUser,
      Atl_OriginOffice=@OriginOffice
   WHERE SPID=@@SPID
ELSE
   INSERT INTO XX$CorpoHeaderOnDelete(
      SPID,
      Atl_LastDate,
      Atl_LastTime,
      Atl_LastUser,
      Atl_OriginOffice
   ) VALUES(@@SPID,@LastDate,@LastTime,@LastUser,@OriginOffice)
RETURN 0
GO

/****** Object:  StoredProcedure [dbo].[ValidateAtlLogin]    Script Date: 03/31/2011 09:51:07 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE procedure [dbo].[ValidateAtlLogin]
 @login sysname,
 @dbname sysname,
 @type char(1),
 @pwdok bit,
 @pwd varchar(25),
 @nlogin sysname = null
as

declare @db sysname = db_name()

if @pwdok is null begin
 if @type='U'
  exec ('create login ['+@login+'] from windows with default_database=['+@db+']')
 else
  exec ('create login ['+@login+'] with password='''+@pwd+''', default_database=['+@db+'], check_policy=off')
 if @@error > 0 return
end else if @nlogin is not null or @dbname is null or @pwdok=0 begin
 declare @alstmt varchar(1000) = 'alter login ['+@login+'] with ',
         @comma char = ''
 if @nlogin is not null begin
  set @alstmt=@alstmt+'name=['+@nlogin+']'
  set @comma=','
 end
 if @dbname is null begin
  set @alstmt=@alstmt+@comma+'default_database=['+@db+']'
  set @comma=','
 end
 if @pwdok=0 set @alstmt=@alstmt+@comma+'password='''+@pwd+''''
 exec (@alstmt)
 if @@error > 0 return
end

GO

/****** Object:  StoredProcedure [dbo].[ValidateAtlRoles]    Script Date: 03/31/2011 09:51:07 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create procedure [dbo].[ValidateAtlRoles]
 @login sysname,
 @asadm bit,
 @newlogin bit,
 @newuser bit,
 @grp sysname = null,
 @newgrp bit = 1

as

if @grp is not null begin
 -- создание группы
 if @newgrp=1 begin
  exec ('create role ['+@grp+'] authorization dbo')
  if @@error > 0 return
 end
 -- добавление в группу
 if @newgrp=1 or is_rolemember(@grp,@login) <> 1 begin
  exec sp_addrolemember @grp, @login
  if @@error > 0 return
 end
end

-- логин - админ
if @asadm=1 and (@newlogin=1 or is_srvrolemember('securityadmin',@login) <> 1) begin
 exec sp_addsrvrolemember @login, securityadmin
 if @@error > 0 return
end else if @asadm=0 and @newlogin=0 and is_srvrolemember('securityadmin',@login) = 1 begin
 exec sp_dropsrvrolemember @login, securityadmin
 if @@error > 0 return
end

-- юзер - админ
if @asadm=1 and (@newuser=1 or is_rolemember('db_owner',@login) <> 1) begin
 exec sp_addrolemember db_owner, @login
 if @@error > 0 return
end else if @asadm=0 and @newuser=0 and is_rolemember('db_owner',@login) = 1 begin
 exec sp_droprolemember db_owner, @login
 if @@error > 0 return
end

GO

/****** Object:  StoredProcedure [dbo].[ModifyAtlUser]    Script Date: 03/31/2011 09:54:14 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create procedure [dbo].[ModifyAtlUser]
 @login sysname,
 @nlogin sysname = null,
 @pwd varchar(25) = null,
 @asadm bit = null,
 @drop_unused_login bit = null,
 @grp sysname = null

as begin

if @login is null return

if @nlogin is null or @nlogin=@login begin
 declare @r int
 exec @r=CreateAtlUser @login, @pwd, @asadm, @grp
 return @r
end

declare @ntype char(1) = case when charindex(char(92),@nlogin)=0 then 'S' else 'U' end

if @ntype='S' begin
 exec CheckAtlUserName @nlogin
 if @@error > 0 return
end

if @drop_unused_login is null set @drop_unused_login=0

declare @nsid varbinary(85),
        @nltype char(1),
        @ndbname sysname,
        @npwdok int,
        @npid int,
        @nuname sysname,
        @nutype char(1),
        @nuschm sysname,
        @nulogin sysname,
        @nubad bit

exec GetAtlUserInfo @nlogin, @pwd, @nsid out, @nltype out, @ndbname out, @npwdok out, @npid out, @nuname out, @nutype out, @nuschm out, @nulogin out, @nubad out

declare @type char(1) = case when charindex(char(92),@login)=0 then 'S' else 'U' end,
        @sid varbinary(85),
        @ltype char(1),
        @dbname sysname,
        @pwdok int,
        @pid int,
        @uname sysname,
        @utype char(1),
        @uschm sysname,
        @ulogin sysname,
        @ubad bit

exec GetAtlUserInfo @login, @pwd, @sid out, @ltype out, @dbname out, @pwdok out, @pid out, @uname out, @utype out, @uschm out, @ulogin out, @ubad out

declare @use_nlogin bit = case when @drop_unused_login=0 or @type='U' or @ntype='U' or @sid is null /*or @ltype<>@type or @ubad=1*/ then 1 else 0 end

declare @use_nuser bit = case when @pid is null or @ubad=1 or @type<>@ntype then 1 else 0 end

if @use_nlogin=1 and @nubad=1 begin
 raiserror ('В БД к логину %s привязан некорректный юзер',11,1,@nlogin)
 return
end

declare @rtype char(1)

if @grp is not null begin
 select @rtype=r.type from sys.database_principals r where r.name=@grp
 if coalesce(@rtype,'R')<>'R' begin
  raiserror ('''%s'' has bad type. Cure this',11,1,@grp)
  return
 end
end

if @use_nlogin=1 begin

 if @drop_unused_login=1 and @sid is not null and @ltype=@type and @ubad<>1
  begin try
   exec ('drop login ['+@login+']')
  end try
  begin catch
  end catch

 exec ValidateAtlLogin @nlogin, @dbname, @ntype, @npwdok, @pwd
 if @@error > 0 return

end else begin

 if @nsid is not null begin
  exec ('drop login ['+@login+']')
  if @@error>0 return
 end

 exec ValidateAtlLogin @login, @dbname, @type, @pwdok, @pwd, @nlogin
 if @@error > 0 return
end

if @use_nuser=1 begin

 if @pid is not null
  begin try
   exec ('drop user ['+@uname+']')
  end try
  begin catch
  end catch

 if @npid is null begin
  exec ('create user ['+@nlogin+'] for login ['+@nlogin+'] with default_schema=dbo')
  if @@error > 0 return
 end else if @nuschm<>'dbo' begin
  exec ('alter user ['+@nlogin+'] with default_schema=dbo')
  if @@error > 0 return
 end
end else begin

 if @nuname=@nlogin begin
  exec ('drop user ['+@nuname+']')
  if @@error > 0 return
 end

 exec ('alter user ['+@login+'] with name=['+@nlogin+'],login=['+@nlogin+'],default_schema=dbo')
 if @@error > 0 return
end

declare @newlogin bit = case when @use_nlogin=1 and @nsid is null then 1 else 0 end,
        @newuser bit = case when @use_nuser=1 and @npid is null then 1 else 0 end,
        @newgrp bit = case when @rtype is null then 1 else 0 end
exec ValidateAtlRoles @login, @asadm, @newlogin, @newuser, @grp, @newgrp
if @@error > 0 return

return 1
end


GO

/****** Object:  StoredProcedure [dbo].[GetAtlUserInfo]    Script Date: 03/31/2011 09:55:04 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create procedure [dbo].[GetAtlUserInfo]
 @login sysname,
 @pwd varchar(25),
 @sid binary(85) out,
 @ltype char(1) out,
 @dbname sysname out,
 @pwdok bit out,
 @pid int out,
 @uname sysname out,
 @utype char(1) out,
 @uschm sysname out,
 @ulogin sysname out,
 @bad_linked_user bit out
as begin

select @sid=l.sid, 
       @ltype=l.type,
       @dbname=d.name,
       @pwdok=case when @pwd is null or l.type<>'S' then 1 else pwdcompare(@pwd, convert(varbinary(256),loginproperty(@login,'PasswordHash'))) end,
       @pid=u.principal_id,
       @uname=u.name,
       @utype=u.type,
       @uschm=u.default_schema_name
 from sys.server_principals l
  left join sys.databases d on l.default_database_name=d.name
  left join sys.database_principals u on l.sid=u.sid
 where l.name=@login

set @bad_linked_user=case when @pid is null then null else case when @uname<>@login or @utype<>@ltype then 1 else 0 end end

if @pid is null or @uname<>@login
 select @pid=u.principal_id,
        @uname=u.name,
        @utype=u.type,
        @uschm=u.default_schema_name,
        @ulogin=l.name
  from sys.database_principals u left join sys.server_principals l on u.sid=l.sid where u.name=@login

end

GO

/****** Object:  StoredProcedure [dbo].[GetCurrOffice]    Script Date: 03/31/2011 09:55:04 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[GetCurrOffice] (@Office INT OUTPUT) AS
SELECT @Office=OfficeNo FROM X$JournalConfig
IF @Office IS NULL
   SELECT @Office=0
RETURN 0
GO

/****** Object:  StoredProcedure [dbo].[GetDBUserName]    Script Date: 03/31/2011 09:55:04 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create procedure [dbo].[GetDBUserName](@spid smallint)
as
select user_name(uid) from master..sysprocesses where spid=@spid
return 0
GO

/****** Object:  StoredProcedure [dbo].[GetHeader]    Script Date: 03/31/2011 09:55:04 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[GetHeader] (@OfficeNo INT OUTPUT,@UserNRec BINARY(8) OUTPUT) AS
DECLARE @UserLogin  VARCHAR(32),@UserOffice INT,@StrPos INT,@StartPos INT,@PrevPos INT
EXEC GetCurrOffice @OfficeNo OUTPUT
DECLARE @SkipUpdateFields INT
EXEC @SkipUpdateFields=master..na_skipupdatefields @@SPID
IF @SkipUpdateFields<>1
   SELECT @UserLogin=SUser_SName()
ELSE
   EXEC master..na_getcurruser @@spid, @UserLogin output
SELECT @StartPos=1,@PrevPos=1
WHILE 1=1 BEGIN
  SELECT @StrPos=CHARINDEX('#',SUBSTRING(@UserLogin,@StartPos,33))
  IF @StrPos=0 BREAK
  SELECT @PrevPos=@StartPos,@StartPos=@StrPos+@StartPos
  CONTINUE
END
IF SUBSTRING(@UserLogin,@StartPos,1) BETWEEN '0' AND '9' BEGIN
   SELECT @UserOffice=CONVERT(INT,SUBSTRING(@UserLogin,@StartPos,33))
   SELECT @UserLogin=SUBSTRING(@UserLogin,@PrevPos,@StartPos-@PrevPos-1)
END ELSE BEGIN
   SELECT @UserOffice=@OfficeNo
   SELECT @UserLogin=SUBSTRING(@UserLogin,@StartPos,33)
END
SELECT @UserNRec=Atl_NRec FROM X$Users WHERE XU$LoginName=@UserLogin AND XU$UserOffice=@UserOffice
IF @UserNRec IS NULL
   SELECT @UserNRec=0x8000000000000000
RETURN 0
GO

/****** Object:  StoredProcedure [dbo].[GetJournalKey]    Script Date: 03/31/2011 09:55:04 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create procedure [dbo].[GetJournalKey]( @JNRec binary(8) output ) as
declare @db_name varchar(30),@needmax int
select @db_name=upper(db_name()),@needmax=0
declare @OriginOffice int
exec GetCurrOffice @OriginOffice output
if @JNRec is null select @JNRec=0x8000000000000000
exec master..na_getnextnrec @db_name,15,@JNRec output,@needmax output
if @needmax=1 begin
  declare @max#JNRec binary(8)
  select @max#JNRec=max(NREC) from X$JOURNAL
  where convert(int,substring(NREC,1,2))=(@OriginOffice|0x8000)
  if @max#JNRec is null select @max#JNRec=0x8000000000000000
  exec master..na_getnextnrecbymax @db_name,15,@JNRec output,@needmax output,@max#JNRec
end
exec CheckError @needmax,15,'NREC',@JNRec
select @JNRec=convert(binary(2),@OriginOffice|0x8000)+substring(@JNRec,3,6)return 0
GO

/****** Object:  StoredProcedure [dbo].[GetJournalMode]    Script Date: 03/31/2011 09:55:04 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[GetJournalMode](@Mode TINYINT OUTPUT) AS
   SELECT @Mode=TypeJournal FROM X$JournalConfig
   IF @Mode IS NULL
      SELECT @Mode=0
RETURN 0
GO

/****** Object:  StoredProcedure [dbo].[GetJournalModeForTable]    Script Date: 03/31/2011 09:55:04 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[GetJournalModeForTable](@TableCode INT,@Mode TINYINT OUTPUT) AS
DECLARE @ForCorpo TINYINT,@ForPersons TINYINT,@ForRepair TINYINT
SELECT @ForCorpo=ForCorpo,@ForPersons=ForPersons,@ForRepair=ForRepair
   FROM X$RegisterTables WHERE TableCode=@TableCode
IF (@ForCorpo IS NULL) OR (@ForCorpo=0 AND @ForPersons&~17=0 AND @ForRepair=0)
   SELECT @Mode=0
ELSE
   SELECT @Mode=1
RETURN 0
GO

/****** Object:  StoredProcedure [dbo].[GetJournalStatusForTable]    Script Date: 03/31/2011 09:55:04 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[GetJournalStatusForTable](@TableCode INT,@Status TINYINT OUTPUT) AS
SELECT @Status=ForCorpo FROM X$RegisterTables WHERE TableCode=@TableCode
IF @Status IS NOT NULL BEGIN
   IF @Status=1
      SELECT @Status=0
   ELSE
      SELECT @Status=1
END ELSE
RETURN 0
GO

/****** Object:  StoredProcedure [dbo].[GetMemoValue]    Script Date: 03/31/2011 09:55:04 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[GetMemoValue] (@MCode INT, @MNRec BINARY(8)) AS
-- Check privileges here
SELECT M#Data FROM XX$Memo
   WHERE M#Code=@MCode AND M#NRec=@MNRec AND M#Flag=0
RETURN 0
GO

/****** Object:  StoredProcedure [dbo].[GetProcName]    Script Date: 03/31/2011 09:55:04 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[GetProcName](@infosize integer,@hashvalue binary(16),@info varbinary(7971)) as
select procname,memoinfo
from xx$hashvalues
where infosize=@infosize and hashvalue=@hashvalue and info=@info
return 0
GO



2) потом очистку
3) потом чекSQL
Время ведет!
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Перенос БД MSSQL на новый сервер

Сообщение zna »

Уф-ф..В очередной раз запустил ms_inst, перегрузил сервер, подержал кукиш у экрана- появились процедурки, этот шаг пройден. :-)
Благодарю ответивших!
Denver82
Посетитель
Сообщения: 36
Зарегистрирован: 27 июл 2010, 20:00

Re: Перенос БД MSSQL на новый сервер

Сообщение Denver82 »

Всем доброго времени суток!
Проблема!
Win server 2003 sp2 Виртуальная
SQL server2005 standart sp2
Перехожу с SQL 2000 на 2005…
Поставил SQL2005, сделал restore… далее, как написано в инструкции нужно отключить protect, выполнить команду «update x$journalconfig set typejournal=0 update abonents set protecton=0 from x$journalconfig where abonents.officeno=x$journalconfig.officeno»
Запускаю данный запрос , SQL пишет что все удачно, но никаких действий не производит. ТО есть, запускаю саппорт, он как спрашивал пароль, так и спрашивает. В таблицах в SQL ни каких изменений. И при самостоятельном изменении в таблицах не дает менять значение.
Подскажите, может что упускаю…
Denver82
Посетитель
Сообщения: 36
Зарегистрирован: 27 июл 2010, 20:00

Re: Перенос БД MSSQL на новый сервер

Сообщение Denver82 »

теперь выдает ошибку.
запрос: update x$journalconfig set typejournal=0
update abonents set protecton=0 from x$journalconfig where abonents.officeno=x$journalconfig.officeno
При нажатии выполнить.
Msg 50002, Level 11, State 1, Procedure X$JOURNALCONFIG_U, Line 37
Record is locked ! (TableCode=13,ATL_NREC=1)
Msg 3609, Level 16, State 1, Line 1
The transaction ended in the trigger. The batch has been aborted.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5185
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Перенос БД MSSQL на новый сервер

Сообщение edward_K »

там где то было написано, что тригеры нужно отключать.
Если вы внимательно почитаете весь топик, то увидите, что я сие не делаю. Делов то - создать руками зверя и дать ему нужные права(ну да - нужно подсмотреть роли на старом серваке) - в базе прибил, в сервере создал с тем же паролем как был в галке, роли назначил на базу и все.
Ответить