Облік, бази даних і віддалена робота

Як перенести базу BAS на сервер у Європі з мінімальним простоєм

Зміст статті

Для адміністратора або керівника, який переносить базу BAS із сервера в офісі чи в українському дата-центрі на виділений сервер у Європі. У підсумку — план, за яким користувачі зупиняють роботу лише на коротке вечірнє вікно, а шлях назад залишається відкритим.

Чесно про назву: зовсім без простою робочу базу перенести неможливо — поки робиться остаточна копія, вхід користувачам доведеться закрити. Ліцензії на BAS, M.E.Doc і СУБД у статті не розглядаємо.

Що знадобиться#

  • Новий сервер із запасом потужності процесора, пам’яті й місця на дисках — див. Сервер під BAS на 5, 10, 20 і 50 користувачів. Сервери з наявності ми видаємо до 12 або до 72 годин після оплати (термін указано в каталозі серверів) — врахуйте це в плані.
  • VPN між старим майданчиком і новим сервером, наприклад WireGuard: для передавання копій і для входу користувачів по RDP.
  • Узгоджене вікно робіт: вечір або вихідний, але не дні подання звітності чи виплати зарплати.

Крок 1 Інвентаризація#

Що з’ясуватиНавіщо
Версії платформи BAS і конфігураціїНа новому сервері потрібна та сама версія платформи: оновлення і переїзд не поєднуйте.
Файлова чи клієнт-серверна базаВід цього залежить спосіб копіювання. Для клієнт-серверної з’ясуйте ще СУБД, її версію й редакцію.
Розмір базиВід нього залежать час передавання й тривалість простою. Для файлової бази це розмір її каталогу, для MS SQL Server розмір покаже EXEC sp_helpdb.
Файли поза базоюТоми приєднаних файлів, каталоги обміну, зовнішні обробки й друковані форми треба копіювати окремо; шляхи до них доведеться виправити.
Обміни та інтеграціїM.E.Doc, клієнт-банк, обміни з іншими базами, сайтом, поштою: адреси, каталоги, облікові записи, розклад.
Принтери, сканери, торговельне обладнання, ключі підписуДо чого вони під’єднані і як працюватимуть із віддаленим сервером; де зберігається ключ — у файлі чи на токені.

Крок 2 Підготовка нового сервера#

  1. Зробіть базові налаштування (перша година на Windows Server) і закрийте RDP для доступу з інтернету: вхід лише через VPN — див. Безпечний RDP. Створіть каталог для передавання копій (у прикладах — D:\Transfer, спільний ресурс Transfer); SMB (порт 445) теж має бути доступний лише через VPN.
  2. Установіть ту саму версію платформи BAS, а для клієнт-серверної бази — ще й сервер BAS і СУБД тієї версії, яку підтримує ваша платформа. Версія MS SQL Server має бути не нижчою, ніж на старому сервері: копію з новішої версії на старішій відновити неможливо. Каталоги з прикладів (D:\SQLData, D:\SQLLog) створіть заздалегідь і надайте службі SQL Server права на них і на каталог для передавання.
  3. Створіть облікові записи користувачів із правом входу по RDP; для файлової бази надайте їм ще й права на її каталог.

Крок 3 Пробне перенесення з вимірюванням часу#

Пробне перенесення показує, скільки триватиме остаточне і що не працює на новому місці; записуйте час кожного етапу. Час передавання легко оцінити: 20 ГБ за швидкості вивантаження 50 Мбіт/с передаються близько години. Копію файлової бази робіть, коли в ній ніхто не працює, інакше вона може виявитися пошкодженою.

Файлова база#

Скопіюйте весь каталог бази через VPN командою robocopy (10.66.0.1 — приклад адреси нового сервера у VPN; каталог для журналу має існувати):

robocopy "D:\Bases\Buh" "\\10.66.0.1\Transfer\Buh" /E /Z /R:5 /W:15 /NP /TEE /LOG:C:\Temp\buh-copy.log

/E копіює підкаталоги; /Z вмикає режим відновлення після обриву: копіювання файлу продовжується з місця зупинки; /R:5 /W:15 — п’ять повторних спроб із паузою 15 секунд. Код завершення, менший за 8, означає, що помилок не було. Далі перемістіть каталог туди, де база працюватиме, і додайте її до списку інформаційних баз.

Якщо канал повільний, спершу запакуйте каталог в архів (файл бази добре стискається), передайте його тією самою командою robocopy, а перед розпакуванням перевірте (7z t).

Клієнт-серверна база на MS SQL Server#

На старому сервері зробіть повну резервну копію (bas_buh — приклад імені бази, каталог D:\Backup має існувати). Редакція Express не підтримує стиснення копій — у ній приберіть COMPRESSION. Якщо на старому сервері є планові різницеві копії, додайте COPY_ONLY, щоб не порушити їхній ланцюжок.

BACKUP DATABASE [bas_buh]
TO DISK = N'D:\Backup\bas_buh_full.bak'
WITH INIT, CHECKSUM, COMPRESSION, STATS = 10;

Передайте файл на новий сервер (robocopy з /Z), подивіться логічні імена файлів (стовпець LogicalName), підставте їх у MOVE замість bas_buh і bas_buh_log та відновіть базу з новими шляхами:

RESTORE FILELISTONLY FROM DISK = N'D:\Transfer\bas_buh_full.bak';

RESTORE DATABASE [bas_buh]
FROM DISK = N'D:\Transfer\bas_buh_full.bak'
WITH MOVE N'bas_buh' TO N'D:\SQLData\bas_buh.mdf',
     MOVE N'bas_buh_log' TO N'D:\SQLLog\bas_buh_log.ldf',
     RECOVERY, STATS = 10;

Потім зареєструйте базу в кластері сервера BAS, указавши вже наявну базу даних; для пробної копії одразу ввімкніть у властивостях бази блокування регламентних завдань.

Клієнт-серверна база на PostgreSQL#

pg_dump різницевих копій не робить, тому і пробне, і остаточне перенесення — це повний дамп (pg_dump -Fc), передавання й відновлення (pg_restore); команди — у статті Резервні копії баз даних.

Крок 4 Перевірка ключовими користувачами#

Пробна копія — повноцінна база: якщо в ній увімкнено обміни й регламентні завдання, вона може вдруге надіслати документи чи листи. Сучасні типові конфігурації самі запитують, копія це чи переміщена база: відповідайте, що копія, — і роботу із зовнішніми ресурсами буде заблоковано. Якщо запитання не з’явилося, вимкніть обміни вручну. Далі кожен ключовий користувач проводить документ, формує звіт і друкує форму.

  • Друк і обладнання. Принтери користувача доступні в сеансі RDP, якщо в параметрах підключення на вкладці «Локальні ресурси» позначено «Принтери»; надрукуйте реальні форми на принтері кожного типу. Сканер штрихкодів, що працює як клавіатура, зазвичай не потребує налаштувань; сканери документів, ваги й касове обладнання перевірте заздалегідь разом із постачальником.
  • Ключі електронного підпису. Токен, вставлений у старий сервер, до сервера в європейському дата-центрі не під’єднаєш. Перевірте, чи працює в сеансі RDP токен, під’єднаний до комп’ютера користувача: це залежить від моделі токена й програмного забезпечення. Якщо ні — запитайте про варіанти в надавача, який видав ключ.
  • M.E.Doc. Переносьте за інструкцією розробника: зберегти треба не лише базу, а й налаштування програми, доступи користувачів і ключі.

Повторюйте пробне перенесення, доки все не запрацює, і лише тоді призначайте дату переїзду.

Крок 5 Остаточне перенесення#

Увага. Нижче для MS SQL Server використано параметр REPLACE: він перезаписує наявну базу з таким самим іменем, тож виконуйте цю команду лише на новому сервері. Різницева копія спирається на останню повну: якщо між ними планове завдання зробить на старому сервері ще одну повну копію, різницева на новому сервері не відновиться. На ці дні додайте до планових повних копій COPY_ONLY або візьміть за основу саму планову копію.

Для MS SQL Server більшу частину роботи виконайте напередодні: зробіть повну копію тією самою командою BACKUP (без COPY_ONLY), передайте її на новий сервер, видаліть пробну базу з кластера сервера BAS і відновіть копію поверх неї тією самою командою RESTORE, замінивши RECOVERY на REPLACE, NORECOVERY. База залишиться в стані відновлення (Restoring), тож у вікні перенесення залишиться застосувати лише невелику різницеву копію.

  1. Попередьте користувачів і в призначений час закрийте вхід: у типових конфігураціях це «Блокування роботи користувачів» у розділі адміністрування, для клієнт-серверної бази — ще й у властивостях бази в консолі кластера. Запишіть код для розблокування й переконайтеся, що активних сеансів немає.
  2. Зупиніть на старому сервері обміни й регламентні завдання, щоб документи не надсилалися з двох місць.
  3. Зробіть остаточну копію. Для файлової бази — тією самою командою robocopy (або архівом) у порожній каталог. Для PostgreSQL — дамп. Для MS SQL Server — різницеву копію:
    BACKUP DATABASE [bas_buh]
    TO DISK = N'D:\Backup\bas_buh_diff.bak'
    WITH DIFFERENTIAL, INIT, CHECKSUM, COMPRESSION, STATS = 10;
  4. Передайте копію й відновіть базу (файлову — покладіть на місце пробної). Для MS SQL Server:
    RESTORE DATABASE [bas_buh]
    FROM DISK = N'D:\Transfer\bas_buh_diff.bak'
    WITH RECOVERY, STATS = 10;
    За повної моделі відновлення можна застосувати ще й копії журналу транзакцій: різницеву копію й кожну копію журналу (RESTORE LOG) відновлюйте з NORECOVERY, а останню — з RECOVERY (приклади Microsoft). Потім знову зареєструйте базу в кластері сервера BAS.
  5. Перевірте базу (див. наступний розділ), скопіюйте файли поза базою, що змінилися, й увімкніть обміни на новому сервері. На запитання конфігурації відповідайте, що базу переміщено.
  6. Зніміть блокування входу в новій базі (у файловій базі воно переїжджає разом із каталогом: запустіть її з параметром /UC і кодом для розблокування) і роздайте користувачам новий ярлик RDP.
  7. Одразу зробіть першу резервну копію на новому сервері й переконайтеся, що планове копіювання спрацювало.

Як перевірити результат#

  • Файлова база: до першого запуску на новому місці порівняйте хеш головного файлу на обох серверах (Get-FileHash у PowerShell). MS SQL Server: запустіть перевірку цілісності — вона не має повернути помилок:
    DBCC CHECKDB ([bas_buh]) WITH NO_INFOMSGS;
  • Вбудована перевірка BAS: у конфігураторі в меню «Адміністрування» запустіть тестування та виправлення інформаційної бази, спершу в режимі лише тестування; для файлової бази є ще утиліта chdbfl у каталозі bin платформи. Виправлення запускайте, лише маючи копію.
  • Контрольні звіти: оборотно-сальдова відомість за поточний період, залишки на складах і в касі, кількість документів за останній день — цифри на обох серверах мають збігатися, а останній документ, уведений перед блокуванням, має бути в новій базі.
  • Користувач входить через новий ярлик, друкує й підписує тестовий документ; обміни з M.E.Doc і банком працюють.

Старий сервер і план відкату#

Старий сервер не вимикайте й не очищайте ще кілька днів. База на ньому — лише для читання: вхід заблоковано, обміни зупинено, адміністратор входить із кодом для розблокування, тільки щоб звірити звіти.

План відкату запишіть до початку робіт:

  • Умова. До якої години і за яких ознак ви повертаєтеся: не збігаються контрольні звіти, не працює друк чи підпис.
  • Дія. Зняти блокування на старому сервері, увімкнути там обміни, повернути користувачам старий ярлик, а нову базу закрити для входу.
  • Межа. Відкат безболісний, доки на новому сервері не почали вводити документи: потім їх доведеться вводити в стару базу повторно. Тож рішення ухвалюйте до початку робочого дня.

Типові помилки#

  • Повну копію MS SQL Server відновили з RECOVERY: різницева вже не застосується, повну доведеться відновлювати знову.
  • Сервер BAS не підключається до відновленої бази MS SQL Server: на новому екземплярі треба заново створити його обліковий запис (login) і знову надати йому права на базу.

Що далі#

  • Резервні копії з першого дня: Резервні копії баз даних. На основних лінійках до сервера входить місце для резервних копій на окремому сховищі; копіювання ви налаштовуєте самі, параметри підключення надішле підтримка.
  • Переїжджає не лише облікова база? Скористайтеся чек-листом переїзду.
  • Сервер під облікову базу — у каталозі: радимо лінійки Стандарт і Бізнес; про вибір країни — Локації.