Я помітив, що коли ви встановлюєте транзакційну реплікацію, SQL Server встановить керування діапазоном ідентичності вручну. Це означає, що в моїй базі даних підписок, коли я намагаюся вставити новий запис у таблицю, ПК - це стовпець ідентичності, він дасть мені помилку і скаже, що намагався вставити ПК "1", "2 "," 3 "і т. Д. Це відбувається тому, що поточне значення ідентичності для всіх стовпців ідентичності підписника повертається до початкового значення (зазвичай 1), а не залишається на тому, що було в видавці.
Я розумію, чому SQL Server робить це - ви повинні залишити таблицю абонентів лише для читання. Однак мій сценарій трохи неортодоксальний - я періодично оновлюю свого підписника за допомогою реплікації, одразу створюю резервну копію цього БД, тоді я хочу зробити кілька оновлень для підписника, щоб НЕ БУДУТЬ бути повернутим до видавця, потім коли я переходжу до оновлення абонента ще раз, я відновлюю його базу даних з попередньої резервної копії та витягую останні оновлення. Оскільки я хочу робити оновлення для абонента між цими оновленнями ("тимчасові дельти", якщо ви хочете), мені потрібен стовпець ідентифікації для роботи, а не для скидання на 1 при реплікуванні.
Я спробував увімкнути автоматичне управління діапазоном ідентичності під час налаштування своєї публікації, але це просто дає мені таку помилку, коли я намагаюся додати таблицю до публікації:
Msg 21231, рівень 16, стан 1, процедура sp_MSrepl_addarticle, рядок 2243
Автоматична підтримка діапазону ідентичності корисна лише для публікацій, які дозволяють оновлювати передплатників.
Чи є спосіб вирішити цю проблему? Я начебто хочу подати цю реплікацію на SQL Server так, ніби вона була лише для читання в кінці підписника, тому що я не планую робити оновлення, які будуть відштовхуватися до видавця , але я хочу робити тимчасові оновлення, які буде стерто до наступної реплікації.
Я також вважав, що реплікація знімка може бути більш підходящим методом, ніж транзакційна реплікація для моєї схеми використання, але проблема полягає в тому, що реплікація знімка вимагає надсилання цілого проклятого БД кожне оновлення; оскільки я планую негайно створити резервну копію БД після останньої реплікації, мені не потрібно було робити цю передачу щоразу; лише зміни, коли минулого разу.
Is there any way I can get round this problem?
Ви повинні встановити стовпець ідентичності як НЕ ДЛЯ ЗАМОВЛЕННЯ, використовуючи sys.sp_identitycolumnforreplication для sql сервера 2005 і новіших версій . Вам навіть не доведеться повторно знімати свої статті, коли ви змінюєте стовпець посвідчення як такий, що не стосується реплікації. Просто не робіть це за допомогою GUI.