Назад | Перейти на главную страницу

Репликация транзакций SQL Server 2008 R2 через VPN

У меня проблемы с настройкой репликации через VPN.

У меня есть база данных SQL Server 2008 R2 Enterprise Edition на сервере Windows 2008 R2.

SQL Server работает на нестандартном порту. Я настроил его так, чтобы он действовал как собственный дистрибьютор, и настроил издателя на этом сервере. Он настроен как обновляемое транснациональное издание (да, это необходимо).

На этом сервере у меня включена маршрутизация и удаленный доступ, чтобы иметь возможность устанавливать VPN-соединения. Он настроен со статическим пулом IP-адресов, первый из которых в диапазоне всегда назначается серверу. Я назначил тестирующему пользователю статический адрес в этом диапазоне (не знаю, нужно это или нет).

Все клиенты будут версии 2008 R2, но могут быть экземплярами SQL Express или автономными разработчиками полного продукта.

Я могу без проблем установить VPN-соединение от клиента и видеть, что назначены правильные IP-адреса.

После подключения к базе данных, чтобы проверить, что я могу установить соединение, я понял, что мне нужно иметь возможность подключаться к базе данных, используя имя сервера, а не IP-адрес, необходимый для репликации, который изначально не работал. Я создал запись в файле hosts для сервера на клиенте, используя имя NETBIOS сервера, и теперь я могу подключиться к серверу с клиента, используя SERVER\INSTANCE, PORT синтаксис через VPN. Поскольку это экземпляр по умолчанию на сервере, я также могу подключиться просто SERVER, PORT синтаксис.

После всего этого я все еще получаю следующую ужасную ошибку: SQL Server replication requires the actual server name to make a connection to the server. Connections through a server alias, IP address, or any other alternate name are not supported. Specify the actual server name, 'SERVER\INSTANCE'. (Replication.Utilities).

Что я пропустил? Как мне заставить это работать?

TIA

Попробуйте эту команду:

select name from sys.servers

Посмотрите, что будет восстановлено. Это имя необходимо использовать для подключения к серверу при настройке репликации.

Или измените его на имя, которое хотите использовать:

sp_dropserver 'currentname'
go
sp_addserver 'changedname' , 'local'

Затем необходимо перезагрузить движок db

Я решил это в прошлом, создав псевдоним на стороне сервера (cliconfig) с тем же именем, которое удаленный сервер показывает в sys.servers, но имя и порт сервера указывают на IP-адрес и порт SQL, поскольку не было разрешения имен .

Просто бессвязный разговор, возможно, слишком поздно для вас, но полезный для гуглфайеров: исходя из того, что я прочитал, я предполагаю, что вам нужно добавить псевдоним на локальный сервер, так как немного сложно найти именованный экземпляр. Клиент SQL Server перейдет в браузер SQL для получения информации об именованных экземплярах, что кажется недоступным через VPN. Но перед этим проверяет локальные псевдонимы, указано ли там имя хоста. Вы можете добавить его в Диспетчере конфигурации SQL Server - Псевдонимы. Спасательный совет: синхронизируйте 32-битные и 64-битные псевдонимы. Период.

Измените порт обратно на номер порта по умолчанию. Вы ничего не делаете, меняя номер порта, только усложняете себе жизнь.

Немного не связано, но я использовал Double Take, чтобы получить дополнительный уровень репликации SQL Server на уровне всего сервера. В зависимости от требований вашего плана аварийного восстановления это очень хороший вариант. Отработка отказа может быть ручной или полностью автоматизированной и может быть дешевле, чем реализация VM-Ware.