Как из обычной базы сделать распределенную (SQL)?
Базу в которой уже работали необходимо сделать периферийной и включить в обмен?
Каким-то странным образом повредились/исчезли служебные таблицы?
Нет возможности сделать выгрузку-загрузку большой базы при создании периферийной РБД?
Эта статья поможет решить данные проблемы!
- Описание
- Подробнее
Описание
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

