Share via


Architettura delle query distribuite

MicrosoftSQL Server supporta due metodi per fare riferimento a origini dati OLE DB eterogenee nelle istruzioni Transact-SQL:

  • Nomi di server collegati

    Per assegnare il nome di un server a un'origine dei dati OLE DB vengono utilizzate le stored procedure di sistema sp_addlinkedserver e sp_addlinkedsrvlogin. Per fare riferimento agli oggetti di server collegati nelle istruzioni Transact-SQL, è possibile utilizzare nomi in quattro parti. Se ad esempio si definisce il nome del server collegato DeptSQLSrvr per un'altra istanza di SQL Server, l'istruzione seguente fa riferimento a una tabella di tale server:

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

    È inoltre possibile specificare il nome del server collegato in un'istruzione OPENQUERY per aprire un set di righe dall'origine dei dati OLE DB. Successivamente, è possibile inserire i riferimenti a tale set di righe nelle istruzioni Transact-SQL in base alle stesse modalità utilizzate per i riferimenti a una tabella.

  • Nomi di connettore ad hoc

    Nel caso di un numero limitato di riferimenti a un'origine dei dati, nella funzione OPENROWSET o OPENDATASOURCE vengono specificate le informazioni necessarie per la connessione al server collegato. In seguito, sarà possibile fare riferimento a tale set di righe nelle istruzioni Transact-SQL in base alle stesse modalità utilizzate per i riferimenti a una tabella:

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

SQL Server utilizza OLE DB per la comunicazione tra il motore relazionale e il motore di archiviazione. Il motore relazionale suddivide ogni istruzione Transact-SQL in una serie di operazioni su set di righe OLE DB semplici, aperti dal motore di archiviazione nelle tabelle di base. Pertanto, il motore relazionale può aprire inoltre set di righe OLE DB semplici in qualsiasi origine dei dati OLE DB.

Motore relazionale, livello OLE DB, motore di archiviazione

Il motore relazionale utilizza l'API OLE DB per aprire i set di righe nei server collegati, recuperare le righe e gestire le transazioni.

Per ogni origine dei dati OLE DB accessibile come server collegato, è necessario un provider OLE DB nel server che esegue SQL Server. La serie di operazioni Transact-SQL che è possibile utilizzare per un'origine dei dati OLE DB specifica dipende dalle funzionalità del provider OLE DB. Per ulteriori informazioni, vedere Guida di riferimento ai provider OLE DB per query distribuite.

Per ogni istanza di SQL Server, i membri del ruolo predefinito del server sysadmin possono attivare o disattivare l'utilizzo di nomi di connettore ad hoc per un provider OLE DB tramite la proprietà SQL ServerDisallowAdhocAccess. Quando l'accesso ad hoc è disattivato, qualsiasi utente collegato a tale istanza può eseguire istruzioni SQL contenenti nomi di connettore ad hoc che fanno riferimento a qualsiasi origine dei dati in rete accessibile tramite tale provider OLE DB. Per controllare l'accesso alle origini dei dati, i membri del ruolo sysadmin possono disattivare l'accesso ad hoc per tale provider OLE DB, limitando l'accesso degli utenti esclusivamente alle origini dei dati a cui fanno riferimento i nomi di server collegati definiti dagli amministratori. Per impostazione predefinita, l'accesso ad hoc è attivato per il provider OLE DB di SQL Server e disattivato per tutti gli altri provider OLE DB.

Le query distribuite consentono agli utenti di accedere a un'altra origine dei dati (ad esempio file, origini dati non relazionali come Active Directory e così via) tramite il contesto di protezione dell'account di Microsoft Windows utilizzato per l'esecuzione del servizio SQL Server. SQL Server rappresenta l'account di accesso appropriato nel caso degli account di accesso di Windows ma non per gli account di accesso di SQL Server. In tal modo modo, è possibile che l'utente di una query distribuita acceda a un'altra origine dei dati per cui non dispone delle autorizzazioni necessarie, ma l'account utilizzato per l'esecuzione del servizio SQL Server dispone di tali autorizzazioni. Per definire gli account di accesso specifici autorizzati per l'accesso al server collegato corrispondente, utilizzare la stored procedure sp_addlinkedsrvlogin. Poiché tale controllo non è disponibile per i nomi ad hoc, prestare attenzione quando si attiva l'accesso ad hoc in un provider OLE DB.

Se possibile, SQL Server esegue il push di operazioni relazionali quali join, restrizioni, proiezioni, ordinamenti e raggruppamenti all'origine dei dati OLE DB. SQL Server non esegue per impostazione predefinita la scansione della tabella di base in SQL Server e l'operazione relazionale stessa. SQL Server esegue query al provider OLE DB per determinare il livello di grammatica SQL supportato e, in base a tali informazioni, esegue il push del maggior numero possibile di operazioni relazionali al provider. Per ulteriori informazioni, vedere Requisiti relativi al sottolinguaggio SQL per i provider OLE DB.

In SQL Server è disponibile un meccanismo in base al quale il provider OLE DB restituisce statistiche che indicano la modalità di distribuzione dei valori di chiave all'interno dell'origine dei dati OLE DB. In tal modo, Query Optimizer di SQL Server può analizzare in modo più approfondito lo schema di dati nell'origine dei dati in base ai requisiti di ogni istruzione SQL, generando con maggiore efficienza piani di esecuzione ottimali. Per ulteriori informazioni, vedere Requisiti relativi alle statistiche di distribuzione per i provider OLE DB.