25.01.2012, 12:14 | #1 |
Участник
|
Репликация SQL на который смотрит АОС
Добрый день.
Ситуация следующая. Есть сервер приложений на котором установлен DAX 4, есть SQL сервер, на который смотрит АОС с сервера приложений. Задача заключается в том что бы поднять ещё один SQL сервер на который будет в реал тайме клонироваться информация с основного, для того что бы делать отчёты на резервном дабы разгрузить основной сервер. Из всех видов репликации я выбрал одноранговую репликацию транзакций. И наткнулся на пару грабель: первое, если одноранговая репликация включена не возможно что бы АОС работал с двух сторон, т.е. если я подключаю ещё один сервер приложений DAX 4 и настраиваю АОС на резервный SQL то он просто не ключается вываливая ошибку 100. но это не основная проблема. вторая и наиболее важная проблема в том что при добавлении новых столбцов в таблицы, через интерфейс DAX репликация рушиться, так как она не может реплицировать структуру таблиц, и продолжить репликацию возможно только после восстановления базы из резервной копии с учётом внесенных столбцов в таблицы.. В общем суть вопроса в том, как настроить репликацию что бы она реплицировала так же и структуру таблиц. Так как восстановление баз из резервной копии процесс довольно долгий, база порядка 50 гигов.. |
|
25.01.2012, 12:45 | #2 |
Участник
|
Действительно ли так критична актуальность данных для сервера отчётов?
У нас используется репликация моментальных снимков. Для изменения структуры таблицы приходится временно убирать её из подписки. Так и живём |
|
25.01.2012, 13:16 | #3 |
Участник
|
Если перед Вами поставлена такая задача, то кроме репликации транзакций, Вам нужна и репликация логики. Причем они друг с другом должны дружить.
В общей схеме это должно выглядеть так: 1)Копирование логики с основного сервера приложений на резервный. 2)Синхронизация логики(в Вашем случае таблиц) на резервном сервере приложений. 3)Репликация транзакций(данных) с основного SQL на резервный.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
25.01.2012, 13:39 | #4 |
Участник
|
Да, актуальность данных критична, так как отчёты делают постоянно. Я тоже исключал необходимые для внесения изменений таблицы из репликации, но дело в том что эти таблицы постоянно разные, и часто затрагивают данные которые используются в отчётах..
|
|
25.01.2012, 13:42 | #5 |
Участник
|
Цитата:
Сообщение от Pustik
Если перед Вами поставлена такая задача, то кроме репликации транзакций, Вам нужна и репликация логики. Причем они друг с другом должны дружить.
В общей схеме это должно выглядеть так: 1)Копирование логики с основного сервера приложений на резервный. 2)Синхронизация логики(в Вашем случае таблиц) на резервном сервере приложений. 3)Репликация транзакций(данных) с основного SQL на резервный. Одноранговая репликация работает всегда, и все изменения которые происходят в базе издателе, тут же реплицируются в базу подписчика, и на оборот. Т.е. мне необходимо что бы все изменения в логике таблиц происходили сразу же и на подписчике, тогда реплиция не будет останавливаться из за различий в таблицах, но как это реализовать?? |
|
25.01.2012, 14:58 | #6 |
Участник
|
Цитата:
Сообщение от Marik
А каким образом реализовать копирование логики, в моём случае структуры таблиц?
Одноранговая репликация работает всегда, и все изменения которые происходят в базе издателе, тут же реплицируются в базу подписчика, и на оборот. Т.е. мне необходимо что бы все изменения в логике таблиц происходили сразу же и на подписчике, тогда реплиция не будет останавливаться из за различий в таблицах, но как это реализовать?? То, что хотите Вы - синхронизацию логики и данных в режиме онлайн, сделать если как-то и можно, но видимо с таким количеством извращений, что на ум ничего умного не приходит. И даже если это удастся сделать, то не исключены возникновения ошибок, потеря информация и т.д..
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
25.01.2012, 15:03 | #7 |
Участник
|
Цитата:
По-моему на форуме когда-то обсуждалась такая возможность... |
|
25.01.2012, 15:03 | #8 |
Участник
|
Цитата:
Сообщение от Pustik
Можно настроить копирование и синхронизацию логики, например, ночью на каждый день в автоматическом режиме.(У нас это именно так и происходит). После завершения, средствами SQL отсинхронизировать транзакции, которые произошли за прошедший день.(Тут не уверен, но думаю, наверное можно это сделать).С утра у Вас и логика и данные на резервном сервере будут правдивы на это утро. Т.е. получите информацию в отчетах с погрешностью на сегодняшний день. Если только конечно ночью у Вас никто не работает. Но даже если это и так, то можно выделить необходимое время на проведение такой процедуры.
То, что хотите Вы - синхронизацию логики и данных в режиме онлайн, сделать если как-то и можно, но видимо с таким количеством извращений, что на ум ничего умного не приходит. И даже если это удастся сделать, то не исключены возникновения ошибок, потеря информация и т.д.. Меня интересует как именно востановить структуру таблиц на резервном сервере? |
|
25.01.2012, 15:21 | #9 |
Участник
|
Цитата:
Можно воспользоваться советом S.Kuskov : Цитата:
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
25.01.2012, 15:28 | #10 |
Участник
|
А не проще ли переписать отчеты через "прямые" SQL-запросы непосредственно из АХ, через SSRS или другой отчетник ? При грамотной реализации они будут выполнять значительно быстрее, нежели при варианте с копией.
Если уж очень хочется реплицировать, то определите список таблиц, требуемых для ваших отчетов и гоняйте только его. Если перетаскивать все таблицы, то можно нарваться на системные, которые изменяются даже при запуске и выполнении отчетов, например SysLastValue. Если в них просходит изменение структуры, то придется переливать полный бэкап, для 50Гб это должно занять в районе получаса на нормальном железе. PS. Синхронизация приложений на разных АОСах у меня вызывает очень большие сомнения из-за непонятного кэширования |
|
25.01.2012, 21:58 | #11 |
Участник
|
Цитата:
Цитата:
Цитата:
Сообщение от Alexius
Если уж очень хочется реплицировать, то определите список таблиц, требуемых для ваших отчетов и гоняйте только его. Если перетаскивать все таблицы, то можно нарваться на системные, которые изменяются даже при запуске и выполнении отчетов, например SysLastValue.
Если в них просходит изменение структуры, то придется переливать полный бэкап, для 50Гб это должно занять в районе получаса на нормальном железе. Живем уже много лет, единственное неудобство : попросить пользователя перезапустить аксапту, если изменения производились днем и они нужны прямо сейчас (достаточно редкая процедура, в разрезе одного пользователя).
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 25.01.2012 в 22:10. |
|
26.01.2012, 09:02 | #12 |
Участник
|
Цитата:
|
|
26.01.2012, 09:32 | #13 |
Участник
|
2 Marik:
Насколько важна актуальность данных и в каком режиме работает рабочее приложение (8х5 или 24х7)? Если актуальность онлайн не нужна, а достаточно за вчерашний день, проблема решается довольно просто - копированием базы и приложения. Но если нужно онлайн, то, ИМХО, лучше воспользоваться советом Alexius - обращаться к таблицам для отчетов не из АХ, а напрямую. Сильно сервер SQL это загрузить не должно - он умеет грамотно распараллеливать загрузку (если, конечно, правильно настроена база). |
|
26.01.2012, 10:44 | #14 |
Участник
|
Уважаемые участники форума, Спасибо за проявленную активность, если честно не ожидал. Очень приятно с Вами вести дискуссию.
А теперь по порядку. Для отчётов используется ODBC и отчёты делаются напрямую с SQL сервера, в экселевских файлах, используя DSN. Актуальность данных нужна максимум с отставанием в пол часа. База работает в основном 10х5 но бывает и 10х7 в зависимости от времени года и загруженности предприятия. Цитата:
Сервер приложений АХ + SQL сервер Резервный сервер приложений АХ + Резервный SQL сервер. На резервном сервере приложений если включена одноранговая репликация АОС не стартует (ошибка 100 ), только если отключить АОС на основном сервере, тогда запускается. Но это не особо принципиально. Так как задача состоит в том что бы был Зеркальный сервер SQL, и в случае падения основного сервера можно было бы переключить АОС сервера приложений на резервную базу SQL. поэтому предложение: Цитата:
Сообщение от Alexius
А не проще ли переписать отчеты через "прямые" SQL-запросы непосредственно из АХ, через SSRS или другой отчетник ? При грамотной реализации они будут выполнять значительно быстрее, нежели при варианте с копией.
Если уж очень хочется реплицировать, то определите список таблиц, требуемых для ваших отчетов и гоняйте только его. Если перетаскивать все таблицы, то можно нарваться на системные, которые изменяются даже при запуске и выполнении отчетов, например SysLastValue. Если в них просходит изменение структуры, то придется переливать полный бэкап, для 50Гб это должно занять в районе получаса на нормальном железе. Цитата:
Интересно а если на моём сервере приложений поднять ещё одни АОС который будет смотреть на Резервный сервер SQL, и вносить изменения столбцов сначала через один АОС, потом его останавливать, запускать второй АОС который смотрит на резервный SQL и дублировать изменения, а потом возвращаться обратно, то получается структура таблиц сначала изменится в основной базе, репликация отвалится, но будет повторят попытки, пока базы не будут соответствовать друг другу, потом структура таблиц меняется на резервном сервере, репликация должна подняться если они придут в соответствие. Но в этом способе явно задваивание работы, по внесению столбцов, и что более важно это нужно делать в не рабочее время, так как нужно отключать АОС основного сервера, что бы запустить АОС который будет смотреть на резервный SQL, а если пользователи будут продолжать работу, то может получиться лабуда, так как репликация уже работать не будет, пока структура таблиц разная, а отработает ли она, после того как таблицы будут приведены в соответствие большой вопрос, так как нагрузка на рабочую базу довольно большая, и за несколько часов работы в базе накапливается порядка полумиллиона транзакций, подлежащих репликации... В общем вопрос репликации структуры таблиц остаётся открытым. Последний раз редактировалось Marik; 26.01.2012 в 10:50. |
|
26.01.2012, 11:02 | #15 |
Участник
|
Дак я тоже не за репликацию в режиме онлайн. Я предлогал копирование логики и синхронизацию(она быстрее чем поднятие базы данных) ночью, с данными на вчерашний день.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
26.01.2012, 11:08 | #16 |
Участник
|
Цитата:
Сообщение от Marik
Для отчётов используется ODBC и отчёты делаются напрямую с SQL сервера, в экселевских файлах, используя DSN. ... Так как задача состоит в том что бы был Зеркальный сервер SQL, и в случае падения основного сервера можно было бы переключить АОС сервера приложений на резервную базу SQL.
|
|
26.01.2012, 11:25 | #17 |
Участник
|
Цитата:
Сообщение от Alexius
На основании вышеизложенного я не понимаю зачем нужно запускать АОС для копии при работающем основном. Если требуется перенести выполнение отчетов на другой сервер, то достаточно изменить настройки соединения. Для резервного восстановления работы при падении основного сервера БД, нужно просто отключить репликацию и перенастроить АОС либо выключить основной и поднять резервный. Все это проделывается руками или скриптами. В чем засада ?
Вопрос в том как поддерживать актуализированную копию БД при одноранговой репликации? т.к. в основную базу через интерфейс АХ вносятся новые столбцы в таблицы, а они то и не реплицируются. Репликация перестаёт функционировать, потому что структура таблиц не соответствуют друг другу. Последний раз редактировалось Marik; 26.01.2012 в 11:27. |
|
26.01.2012, 11:29 | #18 |
Участник
|
|
|
26.01.2012, 11:38 | #19 |
Участник
|
У Вас новые столбцы добавляются onLine на рабочем приложении? Если так, то проблема не техническая, а методологическая. Может, лучше 1 раз в сутки, когда никто не работает, переносить приложение и синхронизировать таблицы на резервном сервере (тем самым обеспечив одинаковую стрктуру данных), а в течение дня производить репликацию, не трогая структуру данных. Ну а добавление новых столбцов проводить в конце рабочего дня.
|
|
26.01.2012, 11:47 | #20 |
Участник
|
Цитата:
Но поскольку то этот вариант Вам не подойдет.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|