Перечень статей   Терминология   Choose language


Запрос в несколько баз данных одновременно на DDL и DML


Префикс

Один запрос может обращаться в несколько баз данных одновременно, если расположение объекта указано с помощью префикса, который располагается перед именем объекта через двоеточие. Префикс может быть

Как следствие появляется новый вид системной информации - поле, ссылающееся с помощью внешнего ключа на другое поле, в действительности содержит два значения:

И как следствие при создании или изменении таблицы мы можем дать возможность внешнему ключу ссылаться во внешнюю базу данных, или не дать (отнять такую возможность) - это делается созданием (добавлением) или несозданием (удалением) поля, имя которого заканчивается на "#sys":
create/alter table ... (
  ...
  FieldFK      num3,
  FieldFK#sys  num2,
  ...
)
Также как следствие можно создавать хранимые процедуры, которые, будучи запущенными не автором, будут выполняться в удаленной базе данных:

Системная таблица прозвищ

Для выполнения хранимых процедур и таймеров каждая база данных в системной таблице 'sys-nicknames' хранит все прозвища, известные ее пользователям (некоторые из прозвищ могут именовать базу данных, в которой само перечисление прозвищ находится).

sys-nicknames
IdUser al an username password IdDb nickname datatime
101 database.remote.com   Smith pwds 31 db1  
101   123.123.123.123     33 db2  
105 data.storage.com 234.234.234.234 Tomson   34 db1  

Командой 'connect', в которой не указаны имя пользователя, пароль и адрес базы данных, можно изменить базу данных, в которой пользователь "находится" - имя пользователя, пароль и адрес базы данных будут взяты из таблицы 'sys-nicknames' (поcледующая команда 'connect' будет использовать таблицу 'sys-nicknames' новой базы данных, т.е. 'db2'):

connect nickname="db2";

Команда 'connect' воздействует на таблицу 'sys-nicknames' базы данных, в которой пользователь находится: она

connect
  ra="data.storage.com" username="Johnson" password="pwdj" nickname="db4";
update sys-nicknames set password=pwdj where
  ra="data.storage.com" username="Johnson"                 nickname="db4";
sys-nicknames
IdUser al an username password IdDb nickname datatime
101 data.storage.com 234.234.234.234 Johnson pwdj 38 db4  

Репликация

После всего сказанного репликация баз данных с помощью фирменных программ теряет всякий смысл - ее всегда можно выполнить с помощью расширения SQL, описанного выше.



Тюрин Дмитрий



Перечень статей   Терминология   Choose language


Сайт управляется системой uCoz