Передача МБД через ДДБ¶
Имеется задача переноса МБД с компьютера 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. Перенос файлов¶
можно вручную перенести все файлы из каталогов либо воспользоваться скриптом 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