Arquitectura de consultas distribuidas

MicrosoftSQL Server admite dos métodos para referenciar orígenes de datos OLE DB heterogéneos en instrucciones de Transact-SQL:

  • Nombres de servidores vinculados

    Los procedimientos almacenados del sistema sp_addlinkedserver y sp_addlinkedsrvlogin se utilizan para dar un nombre de servidor a un origen de datos OLE DB. Se puede hacer referencia a los objetos de estos servidores vinculados en instrucciones Transact-SQL mediante nombres que consten de cuatro partes. Por ejemplo, si un nombre de servidor vinculado de DeptSQLSrvr se define en otra instancia de SQL Server, la instrucción siguiente hace referencia a una tabla de ese servidor:

    SELECT Title, HireDate 
       FROM DeptSQLSrvr.AdventureWorks.HumanResources.Employee
    

    El nombre del servidor vinculado también puede especificarse en una instrucción OPENQUERY para abrir un conjunto de filas desde un origen de datos OLE DB. Se puede hacer referencia a este conjunto de filas del mismo modo que a una tabla en las instrucciones Transact-SQL.

  • Nombres de conectores ad hoc

    Para las referencias poco frecuentes a un origen de datos, las funciones OPENROWSET u OPENDATASOURCE se especifican con la información necesaria para conectarse a un servidor vinculado. A continuación, se puede hacer referencia al conjunto de filas del mismo modo que se hace referencia a una tabla en instrucciones Transact-SQL:

    SELECT *
    FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
            'c:\MSOffice\Access\Samples\Northwind.mdb';'Admin';'';
            Employees)
    

SQL Server utiliza OLE DB para la comunicación entre el motor relacional y el motor de almacenamiento. El motor relacional divide cada instrucción Transact-SQL en un grupo de operaciones sobre conjuntos de filas OLE DB simples abiertos por el motor de almacenamiento desde las tablas base. Esto significa que el motor relacional también puede abrir conjuntos de filas OLE DB simples en cualquier origen de datos OLE DB.

Motor relacional, capa OLE DB, motor de almacenamiento

El motor relacional utiliza la interfaz de programación de aplicaciones (API) OLE DB para abrir los conjuntos de filas en servidores vinculados, recuperar las filas y administrar las transacciones.

Es necesario que haya un proveedor OLE DB en el servidor que ejecute SQL Server por cada origen de datos OLE DB al que se tenga acceso como servidor vinculado. El conjunto de operaciones Transact-SQL que puede utilizarse con un origen de datos OLE DB específico depende de las capacidades del proveedor OLE DB. Para obtener más información, vea Referencia del proveedor OLE DB para consultas distribuidas.

Para cada instancia de SQL Server, los miembros de la función fija de servidor sysadmin pueden habilitar o deshabilitar el uso de nombres de conectores ad hoc para un proveedor OLE DB mediante la propiedad de SQL ServerDisallowAdhocAccess. Cuando se habilita el acceso ad hoc, cualquier usuario que haya iniciado sesión en esa instancia puede ejecutar instrucciones SQL que contengan nombres de conectores ad hoc, haciendo referencia a cualquier origen de datos de la red al que se pueda obtener acceso mediante el proveedor OLE DB. Para controlar el acceso a orígenes de datos, los miembros de la función fija de servidor sysadmin pueden deshabilitar el acceso ad hoc para dicho proveedor OLE DB, limitando así el número de usuarios a aquellos orígenes de datos a los que se hace referencia según los nombres de servidor vinculados definidos por los administradores. De forma predeterminada, el acceso ad hoc está habilitado para el proveedor OLE DB de SQL Server y deshabilitado para los demás proveedores OLE DB.

Las consultas distribuidas pueden permitir que los usuarios tengan acceso a otro origen de datos (p. ej., archivos, orígenes de datos no relacionales como Active Directory, etc.) utilizando el contexto de seguridad de la cuenta de Microsoft Windows con la que se ejecuta el servicio SQL Server. SQL Server suplanta el inicio de sesión convenientemente para los inicios de sesión de Windows; no obstante, esto no es posible con los inicios de sesión de SQL Server. Esto puede permitir potencialmente que un usuario de consultas distribuidas obtenga acceso a un origen de datos para el que no tiene permisos, pero para el que la cuenta con la que el servicio SQL Server se está ejecutando sí tiene permisos. Utilice sp_addlinkedsrvlogin para definir los inicios de sesión específicos que están autorizados a obtener acceso al servidor vinculado correspondiente. Este control no está disponible para nombres ad hoc; por tanto, tenga precaución a la hora de habilitar el proveedor OLE DB para el acceso ad hoc.

Siempre que es posible, SQL Server inserta operaciones relacionales como combinaciones, restricciones, proyecciones, ordenaciones y agrupaciones en el origen de datos OLE DB. De manera predeterminada, SQL Server no recorre la tabla base de SQL Server y no ejecuta las operaciones relacionales. SQL Server consulta al proveedor OLE DB para determinar el nivel de gramática SQL que admite y, de acuerdo con esta información, inserta en el proveedor tantas operaciones relacionales como sean posibles. Para obtener más información, vea Requisitos de lenguaje SQL para proveedores OLE DB.

SQL Server especifica un mecanismo para que un proveedor OLE DB devuelva estadísticas que indiquen cómo se distribuyen los valores de clave en el origen de datos OLE DB. Esto permite que el optimizador de consultas de SQL Server analice mejor el patrón de datos del origen de datos según los requisitos de cada instrucción SQL, lo que mejora la capacidad del optimizador a la hora de generar planes de ejecución óptimos. Para obtener más información, vea Requisitos de las estadísticas de distribución para proveedores OLE DB.