Це може бути проблемою при викликах OLEDB на віддалені сервери (пов'язані сервери та конфігурації SSIS використовують OLEDB).
Це вада дизайну, помилка Microsoft SQL Server, яка не була виправлена до моменту, коли SQL Server 2012 SP1, як я пам’ятаю, де не дозволяє віддаленій статистиці використовувати віддалену оптимізацію запиту.
Вам потрібно буде запустити sp_WhoIsActive ( завантажити / документи ) з сервера REMOTE в запиті, а також побачити трафік, але SQL Server, який не є SP1 2012, чомусь не дозволяє використовувати віддалену статистику, навіть якщо логін має читач даних доступ до всіх таблиць на віддаленому сервері.
Рішення Майкрософт полягає у наданні зв'язаного облікового запису сервера, який робить віддалений виклик, щоб мати SA, або ddladmin або DBO доступ до віддаленого сервера / таблиці (ів).
Я використовував це для вирішення цієї проблеми в деяких наших налаштуваннях, які здебільшого є прозорими з точки зору рішення, не допускаючи підвищених дозволів для DB або SQL серверів на віддаленій стороні. В основному вам потрібно надати роль ddladmin віддаленого входу у відповідну віддалену БД SQL Server, а потім створити роль з явними дозволами DENY для змін об’єктного рівня, якщо ви лише плануєте дозволити SELECT доступ.
Нижче наведена копія спеціальної фіксованої ролі БД, яку я створюю для цього, але ви, можливо, захочете перевірити та підтвердити або відрегулювати додатково плюс деякі читання та дослідження, але вирішено прозоро для мене в деяких випадках - кеш може знадобитися очистити, хоч перш ніж він працює так майте це на увазі, і як тільки це буде очищено, запустіть його двічі і перевірте як місцеву активність, так і віддалену активність.
Отже, дозвольте довіреній системі роль ddladmin у віддаленій БД, ви дозволите інші звичайні дозволи на віддаленій БД, ви створите користувацьку роль БД, як я вказано нижче, на цьому ж сервері, а потім ви додасте цей самий обліковий запис до цього нового спеціального виправленого файлу Роль БД з явним запереченням, очистити кеш, запустіть запит двічі або більше після очищення кешу, щоб побачити, чи він вирішується.
Спеціально відповісти на ваше запитання, хоча з тієї причини, коли ви бачите ці вилучення курсорів, якщо ви працюєте з версією нижче SQL Server 2012 SP1 і бачите це, а ви виконуєте віддалений запит, оскільки він не дозволяє використовувати або віддалений запит статистика в цьому налаштуванні без вирішення (як зазначено вище), тоді вона виконує порядок обробку рядків, як було зазначено вище, оскільки запит не оптимізовано за допомогою статистики для найкращого плану запитів і має проблему кардинальності.
/*
CREATE A NEW ROLE - Deny explicit DB object access for linked
server credentials that the DDLAdmin role gives which is needed
for DBCC SHOW_STATISTICS across linked servers
*/
-- Database specific
CREATE ROLE db_LinkedServer_Restriction
DENY ALTER ANY ASSEMBLY TO db_LinkedServer_Restriction
DENY ALTER ANY ASYMMETRIC KEY TO db_LinkedServer_Restriction
DENY ALTER ANY CERTIFICATE TO db_LinkedServer_Restriction
DENY ALTER ANY CONTRACT TO db_LinkedServer_Restriction
DENY ALTER ANY DATABASE DDL TRIGGER TO db_LinkedServer_Restriction
DENY ALTER ANY DATABASE EVENT NOTIFICATION TO db_LinkedServer_Restriction
DENY ALTER ANY DATASPACE TO db_LinkedServer_Restriction
DENY ALTER ANY FULLTEXT CATALOG TO db_LinkedServer_Restriction
DENY ALTER ANY MESSAGE TYPE TO db_LinkedServer_Restriction
DENY ALTER ANY REMOTE SERVICE BINDING TO db_LinkedServer_Restriction
DENY ALTER ANY ROUTE TO db_LinkedServer_Restriction
DENY ALTER ANY SCHEMA TO db_LinkedServer_Restriction
DENY ALTER ANY SERVICE TO db_LinkedServer_Restriction
DENY ALTER ANY SYMMETRIC KEY TO db_LinkedServer_Restriction
DENY CHECKPOINT TO db_LinkedServer_Restriction
DENY CREATE AGGREGATE TO db_LinkedServer_Restriction
DENY CREATE DEFAULT TO db_LinkedServer_Restriction
DENY CREATE FUNCTION TO db_LinkedServer_Restriction
DENY CREATE PROCEDURE TO db_LinkedServer_Restriction
DENY CREATE QUEUE TO db_LinkedServer_Restriction
DENY CREATE RULE TO db_LinkedServer_Restriction
DENY CREATE SYNONYM TO db_LinkedServer_Restriction
DENY CREATE TABLE TO db_LinkedServer_Restriction
DENY CREATE TYPE TO db_LinkedServer_Restriction
DENY CREATE VIEW TO db_LinkedServer_Restriction
DENY CREATE XML SCHEMA COLLECTION TO db_LinkedServer_Restriction
DENY REFERENCES TO db_LinkedServer_Restriction
GO