Создание пользователя PPUPDATE на сервере MS SQL

Пользователь PPUPDATE используется для хранения дистрибутива Prognoz Platform 8 на сервере БД. Дистрибутив сохраняется в базу этого пользователя и берется от туда при обновлении Prognoz Platform 8 на компьютерах пользователей. В зависимости от версии СУБД MS SQL скрипты для создания пользователя PPUPDATE имеют небольшие различия:

Создание пользователя

Создать пользователя можно с помощью следующего скрипта:

execute sp_addlogin @loginame = 'PPUPDATE', @passwd = 'PPUPDATE', @defdb = 'master'

go

где

Для выполнения скрипта можно использовать приложение «Query Analyzer», которое входит в стандартный пакет клиентской и серверной частей СУБД Microsoft SQL Server.

Процедура создания пользователя должна производиться администратором СУБД.

Создание базы данных

Создание базы данных можно произвести с помощью следующего скрипта:

use master;

go

create database PPUPDATE;

go

где

Раздача прав

Следует выполнить скрип для раздачи прав пользователю ppupdate на созданную базу данных:

use PPUPDATE

go

exec sp_changedbowner PPUPDATE

go

где:

Создание служебных таблиц

Необходимо последовательно выполнить Скрипт1 и Скрипт2 для создания таблиц в базе данных.

Скрипт1:

create table B_UPD (

LNAME                varchar(127)         not null,

UPD                  numeric(8,0)         not null,

STAMP                datetime             not null,

FNAME                varchar(127)         not null,

DNAME                varchar(127)         null,

FSIZE                numeric(24,4)        null

)

go

alter table B_UPD

   add constraint PK_B_UPD primary key (LNAME, UPD)

go

create   index IX_B_UPD on B_UPD (

LNAME

)

go

create table B_UPDD (

LNAME                varchar(127)         not null,

UPD                  numeric(8,0)         not null,

DAT                  image                null

)

go

alter table B_UPDD

   add constraint PK_B_UPDD primary key (LNAME, UPD)

go

 

Скрипт2:

if exists (select 1

          from sysobjects

          where id = object_id('tu_b_upd')

          and type = 'TR')

   drop trigger tu_b_upd

go

if exists (select 1

          from sysobjects

          where id = object_id('td_b_upd')

          and type = 'TR')

   drop trigger td_b_upd

go

if exists (select 1

          from sysobjects

          where id = object_id('ti_b_updd')

          and type = 'TR')

   drop trigger ti_b_updd

go

if exists (select 1

          from sysobjects

          where id = object_id('tu_b_updd')

          and type = 'TR')

   drop trigger tu_b_updd

go

/*  Update trigger "tu_b_upd" for table "B_UPD"  */

create trigger tu_b_upd on B_UPD for update as

begin

   declare

      @numrows  int,

      @numnull  int,

      @errno    int,

      @errmsg   varchar(255)       

      select  @numrows = @@rowcount

      if @numrows = 0

         return

      /*  Cannot modify parent code in "B_UPD" if children still exist in "B_UPDD"  */

      if update(LNAME) or

         update(UPD)

      begin

         if exists (select 1

                    from   B_UPDD t2, inserted i1, deleted d1

                    where  t2.LNAME = d1.LNAME

                     and   t2.UPD = d1.UPD

                     and  (i1.LNAME != d1.LNAME

                      or   i1.UPD != d1.UPD))

          begin

             select @errno  = 50005,

                    @errmsg = 'Children still exist in "B_UPDD". Cannot modify parent code in "B_UPD".'

             goto error

          end

      end

      return

/*  Errors handling  */

error:

    raiserror (N'%d: %s', 10, 1, @errno, @errmsg)

    rollback  transaction

end

go

/*  Delete trigger "td_b_upd" for table "B_UPD"  */

create trigger td_b_upd on B_UPD for delete as

begin

    declare

       @numrows  int,

       @errno    int,

       @errmsg   varchar(255)

    select  @numrows = @@rowcount

    if @numrows = 0

       return

    /*  Delete all children in "B_UPDD"  */

    delete B_UPDD

    from   B_UPDD t2, deleted t1

    where  t2.LNAME = t1.LNAME

     and   t2.UPD = t1.UPD

    return

/*  Errors handling  */

error:

    raiserror (N'%d: %s', 10, 1, @errno, @errmsg)

    rollback  transaction

end

go

/*  Insert trigger "ti_b_updd" for table "B_UPDD"  */

create trigger ti_b_updd on B_UPDD for insert as

begin

    declare

       @numrows  int,

       @numnull  int,

       @errno    int,

       @errmsg   varchar(255)

    select  @numrows = @@rowcount

    if @numrows = 0

       return

    /*  Parent "B_UPD" must exist when inserting a child in "B_UPDD"  */

    if update(LNAME) or

       update(UPD)

    begin

       if (select count(*)

           from   B_UPD t1, inserted t2

           where  t1.LNAME = t2.LNAME

            and   t1.UPD = t2.UPD) != @numrows

        begin

           select @errno  = 50002,

                  @errmsg = 'Parent does not exist in "B_UPD". Cannot create child in "B_UPDD".'

           goto error

        end

    end

    return

/*  Errors handling  */

error:

    raiserror (N'%d: %s', 10, 1, @errno, @errmsg)

    rollback  transaction

end

go

/*  Update trigger "tu_b_updd" for table "B_UPDD"  */

create trigger tu_b_updd on B_UPDD for update as

begin

   declare

      @numrows  int,

      @numnull  int,

      @errno    int,

      @errmsg   varchar(255)

      select  @numrows = @@rowcount

      if @numrows = 0

         return

      /*  Parent "B_UPD" must exist when updating a child in "B_UPDD"  */

      if update(LNAME) or

         update(UPD)

      begin

         if (select count(*)

             from   B_UPD t1, inserted t2

             where  t1.LNAME = t2.LNAME

              and   t1.UPD = t2.UPD) != @numrows

          begin

             select @errno  = 50003,

                    @errmsg = 'B_UPD" does not exist. Cannot modify child in "B_UPDD".'

             goto error

          end

      end

      return

/*  Errors handling  */

error:

    raiserror (N'%d: %s', 10, 1, @errno, @errmsg)

    rollback  transaction

end

go

 

После успешного выполнения всех шагов можно использовать пользователя PPUPDATE при создании копии версии Prognoz Platform 8 для обновления на сервере БД.

См. также:

Копирование MSI-версии дистрибутива на сервер БД