Каталог решений - Как из обычной базы сделать распределенную (SQL)?

Как из обычной базы сделать распределенную (SQL)?

Как из обычной базы сделать распределенную (SQL)?

В наличии

Базу в которой уже работали необходимо сделать периферийной и включить в обмен?
Каким-то странным образом повредились/исчезли служебные таблицы?
Нет возможности сделать выгрузку-загрузку большой базы при создании периферийной РБД?

Эта статья поможет решить данные проблемы!

Категория:

Описание

Приведу просто скрипт с комментариями, который необходимо выполнить в QA

 

use MyFuckingBase 

——

название SQL базы

,

в которой создается РБД

if OBJECT_ID

(

'_1SUPDTS'

)

is not null drop table _1SUPDTS
go
if OBJECT_ID

(

'_1SDBSET'

)

is not null drop table _1SDBSET
go
if OBJECT_ID

(

'_1SDWNLDS'

)

is not null drop table _1SDWNLDS
go

Create table _1SUPDTS 

(

DBSIGN CHAR

( 3 ) NOT

NULL

,

TYPEID INTEGER 

NOT

NULL

,

OBJID CHAR

( 9 ) NOT

NULL

,

DELETED CHAR

( 1 ) NOT

NULL

,

DWNLDID CHAR

( 9 ) NOT

NULL 

)

go

If

not exists 

(

select 

*

from sysindexes where name

=

'PK__1SUPDTS' and id

=

object_id

(

'_1SUPDTS'

))

Alter table _1SUPDTS add constraint PK__1SUPDTS PRIMARY KEY CLUSTERED

(

DBSIGN

,

TYPEID

,

OBJID

)

go

If

not exists 

(

select 

*

from sysindexes where name

=

'DID' and id

=

object_id

(

'_1SUPDTS'

) )

Create UNIQUE index DID  on _1SUPDTS 

(

DWNLDID

,

DBSIGN

,

TYPEID

,

OBJID

)

go

Create table _1SDBSET 

(

DBSIGN CHAR

( 3 ) NOT

NULL

,

DBDESCR CHAR

( 40 ) NOT

NULL

,

DBSTATUS CHAR

( 1 ) NOT

NULL

,

DBUUID CHAR

( 36 ) NOT

NULL

,

DBFMODE TINYINT 

NOT

NULL

,

DBFNCP CHAR

( 64 ) NOT

NULL

,

DBFNPC CHAR

( 64 ) NOT

NULL

,

DBFAUTO TINYINT 

NOT

NULL

,

DBRECPT TINYINT 

NOT

NULL

,

EMAILFLGS TINYINT 

NOT

NULL

,

EMAIL CHAR

( 64 ) NOT

NULL

,

PSW CHAR

( 32 ) NOT

NULL 

)

go

If

not exists 

(

select 

*

from sysindexes where name

=

'PK__1SDBSET' and id

=

object_id

(

'_1SDBSET'

))

Alter table _1SDBSET add constraint PK__1SDBSET PRIMARY KEY CLUSTERED

(

DBSIGN

)

go

If

not exists 

(

select 

*

from sysindexes where name

=

'IDBSTATUS' and id

=

object_id

(

'_1SDBSET'

) )

Create UNIQUE index IDBSTATUS  on _1SDBSET 

(

DBSTATUS

,

DBSIGN

)

go

Create table _1SDWNLDS 

(

DWNLDID CHAR

( 9 ) NOT

NULL

,

DBSIGN CHAR

( 3 ) NOT

NULL

,

DIRECT CHAR

( 1 ) NOT

NULL

,

ACKNOWL CHAR

( 1 ) NOT

NULL 

)

go

If

not exists 

(

select 

*

from sysindexes where name

=

'PK__1SDWNLDS' and id

=

object_id

(

'_1SDWNLDS'

))

Alter table _1SDWNLDS add constraint PK__1SDWNLDS PRIMARY KEY CLUSTERED

(

DWNLDID

)

go

If

not exists 

(

select 

*

from sysindexes where name

=

'IDBSIGN' and id

=

object_id

(

'_1SDWNLDS'

) )

Create UNIQUE index IDBSIGN  on _1SDWNLDS 

(

DBSIGN

,

DWNLDID

)

go

If

exists 

(

select 

*

from sysobjects where id 

=

object_id

(

'_1sp_RegisterUpdate'

)

and sysstat 

& 0

xf 

= 4)

Drop procedure _1sp_RegisterUpdate
go
Create procedure _1sp_RegisterUpdate

(

@p1 CHAR

(3),

@p2 INTEGER

,

@p3 CHAR

(9),

@p4 CHAR

(1))

AS
set nocount on update _1SUPDTS set DELETED

=

@p4

,

DWNLDID

=

'         ' where DBSIGN

=

@p1 and TYPEID

=

@p2 and OBJID

=

@p3 if @@ROWCOUNT

=0

insert into _1SUPDTS values

(

@p1

,

@p2

,

@p3

,

@p4

,

'         '

)

go

If

exists 

(

select 

*

from sysobjects where id 

=

object_id

(

'_1sp__1SDBSET_TLock'

)

and sysstat 

& 0

xf 

= 4)

Drop procedure _1sp__1SDBSET_TLock
go
Create procedure _1sp__1SDBSET_TLock AS
set nocount on declare @i integer select @i

=1

from _1SDBSET

(

TABLOCK HOLDLOCK

)

where 

0=1

go

If

exists 

(

select 

*

from sysobjects where id 

=

object_id

(

'_1sp__1SUPDTS_TLock'

)

and sysstat 

& 0

xf 

= 4)

Drop procedure _1sp__1SUPDTS_TLock
go
Create procedure _1sp__1SUPDTS_TLock AS
set nocount on declare @i integer select @i

=1

from _1SUPDTS

(

TABLOCK HOLDLOCK

)

where 

0=1

go

If

exists 

(

select 

*

from sysobjects where id 

=

object_id

(

'_1sp__1SDWNLDS_TLock'

)

and sysstat 

& 0

xf 

= 4)

Drop procedure _1sp__1SDWNLDS_TLock
go
Create procedure _1sp__1SDWNLDS_TLock AS
set nocount on declare @i integer select @i

=1

from _1SDWNLDS

(

TABLOCK HOLDLOCK

)

where 

0=1

go

——

далее идет пример с данными 

НЕ

ДЛЯ ВАШЕЙ базы

,

в комментариях написано где их взять

——

пример составлен для периф

.

базы со статусом 

«не только получатель»

и автонумерацией пакетов

Update _1SSYSTEM
Set DBSIGN 

=

'П35'					

——

код базы

,

находится в списке баз центра

,

_1SDBSET поле DBSIGN

,

DBSETUUID 

=

'EDB286ED

—4

E93

—49

CD

—9

CF5

—

E5F8D1F6BE21'	

——

уид

,

находится в центральной базе

,

_1SSYSTEM поле DBSETUUID
go

Insert into _1SDBSET values 

(

'П35'

, ——

код периф

.

базы
'Магазин № 

35,

Минск

,

ул

.

Ленина

, 10

'

, ——

название периф

.

базы
'M'

, ——

статус
'A73535C6

—2

D44

—484

C

—

B64F

—048

A4779CB44'

, ——

уид периф

.

базы 

(

центральная база

,

_1SDBSET поле DBSETUUID соответсвующей базы

) 3, ——

режим
'P358

.

zip'

, ——

имя файла обмена 

(

посмотреть в настройках центра или в _1SDBSET

)

'P359

.

zip'

, ——

имя файла обмена

0, 0, 0,

''

,

''

)

go

Insert into _1SDBSET values 

(

'ЦБ1'

, ——

код центральной базы
'Центральная база'

, ——

название центральной базы
'P'

, ——

статус
'

0349

D130

—87

F6

—43

F0

—

A94D

—61

E46D176F5D'

, ——

уид центральной базы 

(

центральная база

,

_1SDBSET поле DBSETUUID центральной базы

) 0, ——

режим
''

,

''

, 0, 0, 0,

''

,

''

)

go

——

в случае если обмены уже производились

,

но данные потеряны

,

выполняем следующее:

Insert into _1SDWNLDS values 

(

'  

1

UBRП35'

, ——

открыть в последнем пакете

,

который ушел из периф

.

базы

,

файл 

1

cv77Dld

.

id 
		

——

и взять последнее значение файла 

(

число перед чертой

),

затем перевести  в строку функцией _IdToStr

(), ——

в данном случае 

85959

|П35

.

обязательны лидирурующие пробелы

,

общая длина 

9

символов 

(

!

) ——

посмотреть можно и в таблице _1SDWNLDS центральной базы 

(

select 

*

from _1SDWNLDS where dbsign 

=

'П35' and direct 

=

'I'

)

'ЦБ1'

, ——

код центральной базы
'O'

, ——

направление
''

)

go


 
has been added to your cart:
Оформление заказа