Project

General

Profile

Передача МБД через ДДБ

Имеется задача переноса МБД с компьютера Server1 на компьютер Server2. Самое простое решение - копирование и разворачивание бэкапа БД, физическое копирование файлов, правка путей в базе. Есть и второй способ - через программу Агент РБД.

Для этого нужно создать серверное и клиентское соединения на обеих сторонах с уникальным названием, например forcopy.

После полной прокачки материала (о завершении операции можно судить из очереди закачки) эти соединения следует удалить.

При условии, что рут на исходном сервере располагается на \\Server1\djinroot , а хранение музыки в структуре по умолчанию в каталоге \\Server1\djinroot\snd , рут на втором сервере в каталоге \\Server2\djinroot и хранилище в \\Server2\djinroot\snd , соответственно, то исходный рекламный элемент с названием файла REKLAMA.WAV, изначально расположенный в \\Server1\djinroot\snd\COMM\REKLAMA.WAV окажется на втором компьютере в \\Server2\djinroot\snd\COMM\forcopy\Server1\djinroot1\snd\COMM\REKLAMA.WAV .

Таким образом, чтобы привести МБД в нормальный вид нужно сделать следующее:

  1. Перенести файлы физически в папку на несколько уровней выше
  2. Убрать лишнюю часть пути в каждом элементе БД
  3. Отвязать все элементы и категории от ДДБ, соединения, чтобы их можно было редактировать как и элементы, добавленные вручную.

1. Перенос файлов

можно вручную перенести все файлы из каталогов либо воспользоваться скриптом movefiles.bat, где следует поправить параметры:

@echo off

set connection=forcopy
set src=Server1\djinroot\snd
set dst=\Server2\djinroot\snd

for %%f in ("%dst%\COMM\%connection%\%src%\COMM\*") do (
    move "%%f" "%dst%\COMM____preserved_1____quot;
)

for %%f in ("%dst%\JNGL\%connection%\%src%\JNGL\*") do (
    move "%%f" "%dst%\JNGL____preserved_1____quot;
)

for %%f in ("%dst%\MUSIC\%connection%\%src%\MUSIC\*") do (
    move "%%f" "%dst%\MUSIC____preserved_1____quot;
)

for %%f in ("%dst%\BCST\%connection%\%src%\BCST\*") do (
    move "%%f" "%dst%\BCST____preserved_1____quot;
)

for %%f in ("%dst%\NEWS\%connection%\%src%\NEWS\*") do (
    move "%%f" "%dst%\NEWS____preserved_1____quot;
)

mkdir "%dst%\ARC\COMM____preserved_1____quot;
mkdir "%dst%\ARC\JNGL____preserved_1____quot;
mkdir "%dst%\ARC\MUSIC____preserved_1____quot;
mkdir "%dst%\ARC\BCST____preserved_1____quot;
mkdir "%dst%\ARC\NEWS____preserved_1____quot;

for %%f in ("%dst%\COMM\%connection%\%src%\ARC\COMM\*") do (
    move "%%f" "%dst%\ARC\COMM____preserved_1____quot;
)

for %%f in ("%dst%\JNGL\%connection%\%src%\ARC\JNGL\*") do (
    move "%%f" "%dst%\ARC\JNGL____preserved_1____quot;
)

for %%f in ("%dst%\MUSIC\%connection%\%src%\ARC\MUSIC\*") do (
    move "%%f" "%dst%\ARC\MUSIC____preserved_1____quot;
)

for %%f in ("%dst%\BCST\%connection%\%src%\ARC\BCST\*") do (
    move "%%f" "%dst%\ARC\BCST____preserved_1____quot;
)

for %%f in ("%dst%\NEWS\%connection%\%src%\ARC\NEWS\*") do (
    move "%%f" "%dst%\ARC\NEWS____preserved_1____quot;
)

2. Правка путей
3. Удаление признака элемента, переданного через ДДБ

В базе нужно выполнить скрипт fixmdb.sql . Здесь так же необходимо поправить параметры.

declare @connection varchar(255)
declare @src varchar(255)
declare @dst varchar(255)

set @connection='forcopy'
set @src='Server1\djinroot\snd'

update ph set filename=replace(filename, @connection + '____preserved_2____#39; + @src + '\COMM____preserved_2____#39;, '') where ddb_owner = @connection and type = 1 and archive = 0
update ph set filename=replace(filename, @connection + '____preserved_2____#39; + @src + '\JNGL____preserved_2____#39;, '') where ddb_owner = @connection and type = 2 and archive = 0
update ph set filename=replace(filename, @connection + '____preserved_2____#39; + @src + '\MUSIC____preserved_2____#39;, '') where ddb_owner = @connection and type = 3 and archive = 0
update ph set filename=replace(filename, @connection + '____preserved_2____#39; + @src + '\BCST____preserved_2____#39;, '') where ddb_owner = @connection and type = 4 and archive = 0
update ph set filename=replace(filename, @connection + '____preserved_2____#39; + @src + '\NEWS____preserved_2____#39;, '') where ddb_owner = @connection and type = 5 and archive = 0
update ph set filename=replace(filename, @connection + '____preserved_2____#39; + @src + '\ARC\COMM____preserved_2____#39;, '') where ddb_owner = @connection and type = 1 and archive = 1
update ph set filename=replace(filename, @connection + '____preserved_2____#39; + @src + '\ARC\JNGL____preserved_2____#39;, '') where ddb_owner = @connection and type = 2 and archive = 1
update ph set filename=replace(filename, @connection + '____preserved_2____#39; + @src + '\ARC\MUSIC____preserved_2____#39;, '') where ddb_owner = @connection and type = 3 and archive = 1
update ph set filename=replace(filename, @connection + '____preserved_2____#39; + @src + '\ARC\BCST____preserved_2____#39;, '') where ddb_owner = @connection and type = 4 and archive = 1
update ph set filename=replace(filename, @connection + '____preserved_2____#39; + @src + '\ARC\NEWS____preserved_2____#39;, '') where ddb_owner = @connection and type = 5 and archive = 1

update ph set ddb_owner = null, ddb_id = 0 where ddb_owner = @connection

update attrib_vals set ddb_owner = null where ddb_owner = @connection

Add picture from clipboard (Maximum size: 742 MB)