Возможно ли иметь перекрестные запросы к базам данных, которые охватывают базы данных на двух разных серверах MS SQL 2008?
Если да, то какую конфигурацию необходимо выполнить в MS SQL? Кроме того, может кто-нибудь показать мне пример запроса?
Ползучесть прицела:
При связывании двух серверов:
Это называется распределенным запросом и встречается довольно часто. Связанный сервер - это наиболее распространенный и простой способ делать то, что вы описываете; Если это не сработает, вы можете попробовать OPENQUERY или OPENROWSET, но, вероятно, вам это не понадобится. Другие рассказали о том, как создать связанный сервер, поэтому я не буду вдаваться в подробности.
Запросы, использующие связанный сервер, могут снизить производительность, но производительность на сервере в целом не ухудшится. Поскольку ваши серверы географически разбросаны, снижение производительности будет больше, чем если бы они находились в одной локальной сети; вам нужно будет попробовать его, чтобы увидеть, приемлема ли производительность, но если у удаленного сервера есть приличное время отклика, у вас, вероятно, все будет хорошо.
При использовании связанного сервера важно помнить, что наборы результатов, возвращаемые с удаленного сервера, должны быть максимально сфокусированными. SQL Server не обеспечивает активного соединения между двумя серверами для «живого» соединения между объектами на разных серверах, как это происходит, когда все находится на одном сервере. Вместо этого он разбивает распределенный запрос на части, которые могут выполняться независимо на удаленных серверах, затем возвращает результаты на вызывающий (локальный) сервер и завершает задание. Это означает, что что-нибудь - соединения, условия, расчеты и т. д. - которые включают более одного сервера, должны храниться на локальном сервере, а любые данные, необходимые для поддержки, должны быть возвращены. В качестве простого примера, если таблица из 10 000 000 строк на удаленном сервере присоединяется к таблице из 15 строк на локальном сервере, SQL Server вернет все 10 000 000 строк с удаленного сервера, чтобы выполнить соединение! Излишне говорить, что это приведет к значительному снижению производительности, особенно при более медленном соединении. Используйте предполагаемые планы выполнения для проверки удаленных запросов; использовать такие вещи, как производные столбцы и CTE, для «явного» создания атомарных запросов, которые можно передавать оптом на удаленный сервер; и если вы видите серьезную проблему, не бойтесь разбивать запросы на отдельные запросы, чтобы заставить его возвращать небольшой набор результатов.
Надеюсь это поможет!
Да, можно, с Связанный сервер.
SELECT * FROM SERVER1.DBO.DB1.TABLE1
Предостережение: я разработчик, а не dba - мое мнение может отличаться; p
Конфиг и как: связанные серверы и идентификаторы из 4 частей
Но вы должны вопрос посложнее; команда DBA на моем последнем месте стремилась свести к минимуму такие "мерзости"; Я уверен, что у них были веские причины для администраторов баз данных; Как оказалось, я согласился с точки зрения разработчика, чисто из соображений обслуживания / управляемости.
Когда я создаю связанные серверы для своей организации, я всегда сопоставляю все учетные записи («Для входа в систему, не указанного в списке выше, подключения будут: Не установлены» - первый переключатель в разделе безопасности связанного сервера в графическом интерфейсе).
У меня есть жалобы на это, но с моей точки зрения, когда я явно отображаю логины, я знаю, кто переходит с начального сервера на целевой сервер. Интересно, что у меня никогда не было аудитора, спрашивающего о связанных серверах.