Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Репликация
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Создал свою первую БД на Sybase и пеперь пытаюсь настроить ее репликацию, но как то плохо получается :( Помогите пожалуйста разобратся (не ругайтесь пожалуйста за безграмотность, как то трудно мне понятие репликации дается :( ) Суть такова: Почти все таблицы реплицируются безусловно, но две таблицы (Orders и Cars) должны реплицировать по условию свои строки, в зависимости от того является ли этот офис офисом получателем в который в данный момент направляется машина (Cars) в которой находятся товар по накладным из таблицы Orders. По задумке это должно происходить так что смотрится какому подписчику сейчас будет происходить репликация и является ли этот подписчик офисом для которого разрешена публикация данной строки. В принципе если создать для каждого отдельно юзера отдельную публикацию то это было бы проще реализовать, но в BOL написано что не рекомендуется создавать много публикаций на одни и теже таблицы. Как же быть, как узнать для кого сейчас идет репликация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2005, 16:20 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
Привет. У репликации ASA есть 2 вида фильтрации информации по узлам: 1. По условию (WHERE) - это полезно, когда информация должна реплицироваться только при определенном состоянии. Например в таблице есть поле-флаг "Обработано" и в репликацию должны попадать только записи с выставленным флагом. Тогда мы указываем WHERE Обработано=1 и получаем нужную функциональность. 2. По подписчику (SUBSCRIBE) - это полезно, когда каждая точка в репликации обладает собственной информацией (называется областью видимости информации). Получается, что консолидировання БД содержит все записи, а удаленные только те, которые им полагаются. В ASA область видимости информации может разделяться между несколькими узлами или только одним. Организуется это дополнительным полем на такую информацию. Например в таблице Orders есть поле "КодУзла", который однозначно идентифицирует, какому офису была выписана накладная на товар. Указав в на Orders SUBSCRIBE BY КодУзла мы говорим ASA автоматически разделять информацию подписчикам - при подписке они указывают свой номер узла и автоматически при репликации информация распределяется по нужным узлам. Помимо указания поля в репликации мы можем указывать запрос для получения кода узла. Это полезно, чтобы на каждую таблицу не вешать такое поле. Например в таблице Orders есть ссылка на таблицу Cars (поле КодМашины), т.е. помимо накладной указано, какая машина будет доставлять груз и нам необходимо переслать информацию по машинам из таблицы Cars только по тем офисам, куда они едут. В таком случае мы вешаем SUBSCRIBE BY (SELECT КодУзла FROM Orders WHERE КодМашины = Cars.КодМашины). Для каждой реплицируемой записи по таблице Cars ASA будет вызывать этот запрос и таким образом получать искомый код узла, далее уже по обычной схеме смотреть, какие подписчики указали этот код узла и отправлять им информацию. Указанный запрос может возвращать более одной записи, таким образом если у нас одна машина "вдруг" указана в нескольких накладных для разных офисов, этим запросом будут возвращены все коды узлов, для которых должна реплицироваться запись. P.S. Рекомендую еще почитать перевод BOL SQLRemote, который взять можно с FAQ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2005, 17:08 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
Вставлю свои практические 5 копеек. Лучше реплицируйте все, что есть (если размер базы позволяет и ее логика), на клиенте определяйте, что можно видеть, что нельзя. Причина: базы иногда падают, гораздо проще и быстрее выгрузить новый вариант удаленной базы, нежели потом сидеть приводить в рабочее состояние упавшую. Минус - большее количество трафика на транспорт, Плюс - из любой точки можно зайти под нужным акаунтом и иметь одну и ту же картинку (например, у меня 9 баз в 5 странах, железнодорожные перевозки, большой нагрузки от такой схемы нет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2005, 21:59 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
Присоединяюсь к пожеланиям :) У меня примерно так же сделано - в консолидированной БД есть все, что в удаленных, кроме вспомогательной информации. Реализовано дерево подключений узлов (удаленных БД) и расширения прав доступа, где на логические режимы программы (помимо собственно разрешений по GRANT) расписаны группы прав с правами на действие (администрирование, просмотр, добавление, изменение, удаление, изм. и удал. только собств. записей). А на каждый узел для каждого пользователя указываются группа или группы прав. Соотвествующе такая схема позволяет решить 3 вещи: 1. Система одинаково работает в схеме "Консолидированная БД-репликация-Удаленная БД узла-Пользователи узла" и в схеме "Консолидированная БД-выделенный канал-Пользователи узла", причем в любой момент достаточно просто переключит режим работы узла и например перевести пользователей с репликации на прямую работу с консолидированной БД. 2. Пользователю не важно где он работает - имея расписанные права по узлам он в любой удаленной точке или консолидированной БД может продолжать свою работу. Таким образом разьезжающий по стране администратор централизованных справочников может спокойно прямо на местах их править, а пользователь удаленного узла, приехав в центр, подключится к консолидированной БД и увидеть/изменить информацию по своему узлу в пределах своих прав. 3. При подключении сессии по дереву узлов определяется самый верхний узел области видимости пользователя. Соответствующе имея права на доступ к информации подчиненных узлов, он может спокойно работать с информацией этих узлов, что можно красиво организовать на клиентской части - например у меня сделано так - если у пользователя в области видимости более одного узла, то у него присутствует на формах дерево узлов, двигаясь по которому он может работать с информацией каждого узла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2005, 06:37 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
Рыжий Кот, ASCRUS, спасибо, это действительно лишает меня глобального множества проблем, т.к. изначально я хотел реплицировать накладные анализируя таблицу маршрутов (накладная может двигатся транзитом из города в город) и слабо себе представляю как это красиво осуществить. А так действительно более удобно, тем более начальство всегда находясь в любом городе сможет просмотреть любую информацию. Осталось только грамотно продумать как реализовать это в клиенте. У меня сейчас есть таблица офисов, думаю при подключении будет возвращатся данные о юзере (кто он такой и откуда)на основе этого будут отображатся машины которые либо созданы в его городе, либо едут в его город, ну а с накладными вообще все просто, т.к. накладные это detail машин, т.е. при правильном отображении машин не отобразятся левые накладные. Только вот как можно проанализировать кто сейчас подключился и вернуть информацию о нем? Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2005, 08:28 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
авторУ меня сейчас есть таблица офисов, думаю при подключении будет возвращатся данные о юзере (кто он такой и откуда)на основе этого будут отображатся машины которые либо созданы в его городе, либо едут в его город, ну а с накладными вообще все просто, т.к. накладные это detail машин, т.е. при правильном отображении машин не отобразятся левые накладные. Только вот как можно проанализировать кто сейчас подключился и вернуть информацию о нем? Не нужно к пользователю привязывать показ информации. Лучше организовать, что есть табличка пользователей и дерево узлов (офисов), а так же табличка прав доступа пользователя к узлам (многие-ко-многим). Плюс в каждой БД где то хранить какой код узла она имеет. Можно написать ХП на логин, которая организует и инициализирует глобальные переменные @@КодтекущегоУзла и @@КодТекущегоПользователя, чтобы всем было удобнее работать внутри сессии. В итоге мы по коду текущего узла всегда будем знать, для какого офиса БД, а по коду текущего пользователя всегда сможем узнать, какие офисы ему доступны, а значит какую информацию по этим офисам он видит. То есть получится такой запрос на накладные: Код: plaintext 1. 2. 3. Далее в репликацию включаем подписку по коду офиса, соотвествующе пользователь даже если будет перемещаться между офисами или же работать в консолидированной БД всегда будет видеть только информацию тех узлов, на которые имеет права доступа. Причем, например если ему доступны 3 офиса, то в консолидированной он увидит все 3 офиса, а в каждой БД офиса естественно информацию только самого офиса, раз уж в ней только она и есть. Вот тут то кстати пригодится дерево узлов и код текущего узла - в триггерах необходимо проверять, что пользователь не имеет права добавлять в БД информацию с кодом узла, не являющимся текущим или дочерним по отношению к текущему коду узла, то есть если нарисовать на схеме: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 11:11 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
А как в ХП узнать кто сейчас приконектился, т.е. как например узнать что сейчас приконектился человек с логином Operator1 ? Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 11:33 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 12:06 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
Рыжий КотЛучше реплицируйте все, что есть (если размер базы позволяет и ее логика), на клиенте определяйте, что можно видеть, что нельзя. А если на удаленной БД криворукий админ удалит не "родные" данные и это уйдет по репликации? Вот будет сюрприз для реального владельца :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 12:24 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
А вот на удаленных БД, не должно быть админов. Пусть админит, что положено, а на модификацию не своих данных - рестрикт наложить. И вообще АСА админ, вещь достаточно ненужная. Лучше иметь простого ОС-админа, чтоб мог запустить/остановить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 12:46 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
а подсажите еще пожалуйста с какими более оптимальными настройками запускать сервис dbremote? Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 14:27 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
Делаю SET REMOTE FTP OPTION host = '217.65.80.86'; SET REMOTE FTP OPTION "user" = 'user'; SET REMOTE FTP OPTION password = 'pw'; SET REMOTE FTP OPTION root_directory = 'replication_dir'; SET REMOTE FTP OPTION MAIN.active_mode = 'YES'; а он мне Адрес задан неправильно. Адрес должен быть именем папки без разделителей пути. это что значит? Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 14:52 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
Dimyan пишет: > > Делаю > SET REMOTE FTP OPTION host = '217.65.80.86'; > SET REMOTE FTP OPTION "user" = 'user'; > SET REMOTE FTP OPTION password = 'pw'; > SET REMOTE FTP OPTION root_directory = 'replication_dir'; > SET REMOTE FTP OPTION MAIN.active_mode = 'YES'; > > а он мне > Адрес задан неправильно. > Адрес должен быть именем папки без разделителей пути. > > это что значит? > Все с этим разобрался вот так create remote message type FTP address 'nsk_sk'; SET REMOTE FTP OPTION nsk_sk.host = '217.65.80.86'; SET REMOTE FTP OPTION nsk_sk."user" = 'user'; SET REMOTE FTP OPTION nsk_sk.password = 'pw'; SET REMOTE FTP OPTION nsk_sk.root_directory = 'replication_dir'; SET REMOTE FTP OPTION nsk_sk.active_mode = 'YES'; но теперь окно Sybase SQL Remote Открывается и стоит ничего не выполняя, прогресс получение и применение сообщений недвигается, точнее он не бегает вообще :( Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 15:00 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
Dimyan пишет: > > Делаю > SET REMOTE FTP OPTION host = '217.65.80.86'; > SET REMOTE FTP OPTION "user" = 'user'; > SET REMOTE FTP OPTION password = 'pw'; > SET REMOTE FTP OPTION root_directory = 'replication_dir'; > SET REMOTE FTP OPTION MAIN.active_mode = 'YES'; > и с этим все так же :(( получаю удаленную базу, запускаю сервис dbremote, он открывает диалог, вношу туда данные FTP и он начинает Адрес задан неправильно. Адрес должен быть именем папки без разделителей пути. :(( Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 15:16 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
сделай так: create remote message type FTP address 'nsk_sk'; SET REMOTE FTP OPTION host = '217.65.80.86'; SET REMOTE FTP OPTION "user" = 'user'; SET REMOTE FTP OPTION password = 'pw'; SET REMOTE FTP OPTION root_directory = 'replication_dir'; на ftp сервере по адресу 217.65.80.86 ДОЛЖНА быть директория: \replication_dir\nsk_sk\ Для всех удаленые юзеров которые создаются через: grant remote to SomeUser type FTP address 'address1'; Уже должны быть созданы на ftp соотвествующие директории: \replication_dir\address1\ Каждый упомянутый в твоей базе удаленный юзер должен иметь соотвествующую директорию. Если хоть один из них собственной директории на ftp не имеет - ты получишь ошибку "неправильно задан адрес". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 18:33 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
Избавился вводом SET REMOTE FTP OPTION active_mode = 'YES'; Но проблема осталась, почемуто нет ни передачи не приема (хотя я незнаю есть ли прием т.к. никто ничего не хочет передовать) запускаю dbremote.exe -c "dbn=nsk_sk;uid=dba;pwd=sql" -v он мне выдает dbremoteI. 14/06 18:49:57. SQL Remote Message Link Версия 9.0.2.3044 I. 14/06 18:49:57. socket I. 14/06 18:49:57. connect ftp I. 14/06 18:49:57. Getting server response: I. 14/06 18:49:57. 220 matrix.nsk.su FTP server (Version 6.5/OpenBSD) ready. I. 14/06 18:49:57. USER user I. 14/06 18:49:57. Getting server response: I. 14/06 18:49:57. 331 Password required for user. I. 14/06 18:49:57. User accepted with a password needed. I. 14/06 18:49:57. PASS pw I. 14/06 18:49:57. Getting server response: I. 14/06 18:49:57. 230 User user logged in. I. 14/06 18:49:57. Password Accepted. I. 14/06 18:49:57. PWD I. 14/06 18:49:57. Getting server response: I. 14/06 18:49:57. 257 "/" is current directory. I. 14/06 18:49:57. TYPE A N I. 14/06 18:49:57. Getting server response: I. 14/06 18:49:57. 200 Type set to A. I. 14/06 18:49:57. Type set. I. 14/06 18:49:57. listen ok I. 14/06 18:49:57. PORT 192,168,0,37,18,205 I. 14/06 18:49:57. Getting server response: I. 14/06 18:49:57. 200 PORT command successful. I. 14/06 18:49:57. Port Set. I. 14/06 18:49:57. NLST replication_dir/nsk_sk/ Я так понимаю что соединение проходит без проблем, но на этом он останавливается и стоит, чего же ему надо? почему он не прередает никаких данных? :( Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2005, 15:52 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
dbremote I. 14/06 18:49:57. NLST replication_dir/nsk_sk/ Похоже, что проблема сейчас в ftp сервере. Вот эта последняя команда запрашивает список файлов в указаном каталоге. Почему серевер этот список не отдает? Скорее всего права на чтение каталога отсутствуют, это самая вероятная ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2005, 17:01 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
Рыжий Кот авторзапускаю dbremote.exe -c "dbn=nsk_sk;uid=dba;pwd=sql" а разве eng=my_asa не нужно указывать? Если в локалке есть сервер с именем совпадающим с именем базы (в данном случае nsk_sk) то не обязательно. Хотя по хорошему - стоило бы все же указывать имя сервера явно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2005, 17:03 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
Продолжу тему чтоб не плодить однотипных. Такую проблему заметил странную (раньше сервера включенные все время были поэтому не замечал этого): У меня база и dbremote запускаются автаматом как сервис, дак вот при загрузке компа dbremote есно загружается быстрее чем поднимается база после чего грозно ругается на меня матом и говорит что к базе не может подключится. Можно конечно как нибкдь с nnCron извратится но должен же быть какой то стандартный способ как запустить dbremote после загрузки базы? Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 06:58 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
Dimyan Продолжу тему чтоб не плодить однотипных. Такую проблему заметил странную (раньше сервера включенные все время были поэтому не замечал этого): У меня база и dbremote запускаются автаматом как сервис, дак вот при загрузке компа dbremote есно загружается быстрее чем поднимается база после чего грозно ругается на меня матом и говорит что к базе не может подключится. Можно конечно как нибкдь с nnCron извратится но должен же быть какой то стандартный способ как запустить dbremote после загрузки базы? Posted via ActualForum NNTP Server 1.2 Нужно создать сервис под репликацию через консольную утилиту DBSVC.EXE, указав в параметре -rs имя сервиса, который запускает сервер ASA. Правильные имена сервисов можно посмотреть в списке сервисов штатными средствами Windows. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 07:18 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
2 ASCRUS Как я понял, Dimyan-у надо вначале запустить базу, подождать до окончания запуска (сервер/база начинает отвечать на запросы), а затем уже запускать агента. Процесс запуска базы может затянуться до 30-40 сек. Все зависит от размера логов и причины предыдущего останова. Например: УПС сдох раньше, чем база смогла нормально опуститься. Я таких утилит не встречал, которые бы поднимали базу АСА, ждали окончания процесса старта, а затем поднимали бы агента (например). Пришлось писать свою программулину ... Правда, сервер и агент у меня запускаются обычным образом, т.е. не как сервисы. Тут много раз обсуждались проблемы связанные с работой агента, который запущен как сервис, а при нормальном запуске проблем никогда не возникало (по крайней мере у меня). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 11:29 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
PaulJB 2 ASCRUS Как я понял, Dimyan-у надо вначале запустить базу, подождать до окончания запуска (сервер/база начинает отвечать на запросы), а затем уже запускать агента. Процесс запуска базы может затянуться до 30-40 сек. Все зависит от размера логов и причины предыдущего останова. Например: УПС сдох раньше, чем база смогла нормально опуститься. Я таких утилит не встречал, которые бы поднимали базу АСА, ждали окончания процесса старта, а затем поднимали бы агента (например). Пришлось писать свою программулину ... Правда, сервер и агент у меня запускаются обычным образом, т.е. не как сервисы. Тут много раз обсуждались проблемы связанные с работой агента, который запущен как сервис, а при нормальном запуске проблем никогда не возникало (по крайней мере у меня). Указание зависимостей сервисов именно это и делает в Windows - сервис ожидает, пока его все родителькие сервисы полностью запустяться и только после этого стартует. Другое дело, когда ASA дает Windows понять, что сервис уже запущен - сразу как поднялся сервер или же как все БД перешли в онлайн, это нужно проверять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 11:31 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
ASCRUS PaulJB 2 ASCRUS Как я понял, Dimyan-у надо вначале запустить базу, подождать до окончания запуска (сервер/база начинает отвечать на запросы), а затем уже запускать агента. Процесс запуска базы может затянуться до 30-40 сек. Все зависит от размера логов и причины предыдущего останова. Например: УПС сдох раньше, чем база смогла нормально опуститься. Я таких утилит не встречал, которые бы поднимали базу АСА, ждали окончания процесса старта, а затем поднимали бы агента (например). Пришлось писать свою программулину ... Правда, сервер и агент у меня запускаются обычным образом, т.е. не как сервисы. Тут много раз обсуждались проблемы связанные с работой агента, который запущен как сервис, а при нормальном запуске проблем никогда не возникало (по крайней мере у меня). Указание зависимостей сервисов именно это и делает в Windows - сервис ожидает, пока его все родителькие сервисы полностью запустяться и только после этого стартует. Другое дело, когда ASA дает Windows понять, что сервис уже запущен - сразу как поднялся сервер или же как все БД перешли в онлайн, это нужно проверять. Я проверял если хоть одна база не запустится, сервис сервера не дает отмашку, что он стартовал. Кстати, под Windows Sybase Central позволяет кроме настройки сервисов указывать и порядок их запуска ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 20:07 |
|
||
|
Репликация
|
|||
|---|---|---|---|
|
#18+
Sergey Orlov пишет: > Кстати, под Windows Sybase Central позволяет > кроме настройки сервисов указывать и порядок их запуска Ага я уже нашел, это кстатии и есть ключ -rs в DBSVC.EXE которые советывал ASCRUS Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2005, 15:00 |
|
||
|
|

start [/forum/topic.php?fid=55&fpage=101&tid=2013553]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 246ms |
| total: | 391ms |

| 0 / 0 |
