Tabelle di base di sistema

Si applica a:SQL Server Istanza gestita di SQL di Azure

Le tabelle di base di sistema sono le tabelle sottostanti in cui vengono effettivamente archiviati i metadati per un database specifico. Il database master è speciale in questo senso perché contiene alcune tabelle aggiuntive che non sono presenti in nessun altro database. Queste tabelle contengono metadati persistenti il cui ambito è esteso all'intero server.

Importante

Le tabelle di base di sistema vengono usate solo all'interno del motore di database di SQL Server e non sono destinate all'uso generico dei clienti. Sono soggette a modifiche e la compatibilità non è garantita.

Metadati della tabella di base di sistema

Un utente autorizzato con autorizzazione CONTROL, ALTER o VIEW DEFINITION per un database può visualizzare i metadati della tabella di base di sistema nella vista del catalogo sys.objects . L'utente autorizzato può anche risolvere i nomi e gli ID oggetto delle tabelle di base di sistema usando funzioni predefinite, ad esempio OBJECT_NAME e OBJECT_ID.

Per eseguire l'associazione a una tabella di base di sistema, un utente deve connettersi all'istanza di SQL Server usando la connessione amministrativa dedicata. Se si tenta di eseguire una query SELECT da una tabella di base di sistema senza connettersi tramite DAC, viene generato un errore.

Importante

L'accesso alle tabelle di base di sistema tramite applicazione livello dati è progettato solo per il personale Microsoft e non è uno scenario di clienti supportato.

Tabelle di base di sistema

La tabella seguente elenca e descrive ogni tabella di base di sistema in SQL Server.

Tabella di base Descrizione
sys.sysschobjs Esiste in ogni database. Ogni riga rappresenta un oggetto del database.
sys.sysbinobjs Esiste in ogni database. Contiene una riga per ogni entità Service Broker del database. Le entità Service Broker includono gli elementi seguenti:

Tipo di messaggio

Contratto servizio

Servizioo

I nomi e i tipi utilizzano regole di confronto binarie predefinite.
sys.sysclsobjs Esiste in ogni database. Contiene una riga per ogni entità classificata che condivide le stesse proprietà comuni che includono gli elementi seguenti:

Assemblaggio

Dispositivo di backup

Catalogo full-text

Funzione di partizione

Schema di partizione

Gruppo di file

Chiave offuscata

Schema
sys.sysnsobjs Esiste in ogni database. Contiene una riga per ogni entità dell'ambito dello spazio dei nomi. Questa tabella viene utilizzata per archiviare le entità di raccolta XML.
sys.syscolpars Esiste in ogni database. Contiene una riga per ogni colonna di una tabella, vista o funzione con valori di tabella. Contiene anche righe per ogni parametro di una procedura o funzione.
sys.systypedsubobjs Esiste in ogni database. Contiene una riga per ogni sottoentità tipizzata. In questa categoria rientrano solo i parametri relativi alla funzione di partizione.
sys.sysidxstats Esiste in ogni database. Contiene una riga per ogni indice o statistica di tabelle e viste indicizzate

Nota: ogni indice (ad eccezione dell'heap) è associato a una statistica con lo stesso nome dell'indice.
sys.sysiscols Esiste in ogni database. Contiene una riga per ogni indice persistente e colonna delle statistiche.
sys.sysscalartypes Esiste in ogni database. Contiene una riga per ogni tipo di sistema o tipo definito dall'utente.
sys.sysdbreg Esiste solo nel database master . Contiene una riga per ogni database registrato.
sys.sysxsrvs Esiste solo nel database master . Contiene una riga per ogni server locale, collegato o remoto.
sys.sysrmtlgns Questa tabella di base di sistema esiste solo nel database master . Contiene una riga per ogni mapping di account di accesso remoto. Viene utilizzata per eseguire il mapping tra gli account di accesso in ingresso che risultano provenire da un server corrispondente e un account di accesso locale effettivo.
sys.syslnklgns Esiste solo nel database master . Contiene una riga per ogni mapping di account di accesso collegato. I mapping di account di accesso collegati vengono utilizzati da chiamate di procedure remote e query distribuite che provengono da un server locale a un server collegato corrispondente.
sys.sysxlgns Esiste solo nel database master . Contiene una riga per ogni entità di server.
sys.sysdbfiles Esiste in ogni database. Se la colonna dbid è zero, la riga rappresenta un file appartenente a questo database. Nel database master la colonna dbid può essere diversa da zero. In questo caso, la riga rappresenta un file master.
sys.sysusermsg Esiste solo nel database master . Ogni riga rappresenta un messaggio di errore definito dall'utente.
sys.sysprivs Esiste in ogni database. Contiene una riga per ogni database o autorizzazione a livello di server.

Nota: le autorizzazioni a livello di server vengono archiviate nel database master .
sys.sysowners Esiste in ogni database. Ogni riga rappresenta un'entità di database.
sys.sysobjkeycrypts Esiste in ogni database. Contiene una riga per ogni chiave simmetrica, crittografia o proprietà crittografica associata a un oggetto.
sys.syscerts Esiste in ogni database. Contiene una riga per ogni certificato di un database.
sys.sysasymkeys Esiste in ogni database. Ogni riga rappresenta una chiave asimmetrica.
sys.ftinds Esiste in ogni database. Contiene una riga per ogni indice full-text del database.
sys.sysxprops Esiste in ogni database. Contiene una riga per ogni proprietà estesa.
sys.sysallocunits Esiste in ogni database. Contiene una riga per ogni unità di allocazione di archiviazione.
sys.sysrowsets Esiste in ogni database. Contiene una riga per ogni set di righe della partizione per un indice o un heap.
sys.sysrowsetrefs Esiste in ogni database. Contiene una riga per ogni riferimento di indice a un set di righe.
sys.syslogshippers Esiste solo nel database master . Contiene una riga per ogni server di controllo del mirroring del database.
sys.sysremsvcbinds Esiste in ogni database. Contiene una riga per ogni associazione al servizio remoto.
sys.sysconvgroup Esiste in ogni database. Contiene una riga per ogni istanza di servizio di Service Broker.
sys.sysxmitqueue Esiste in ogni database. Contiene una riga per ogni coda di trasmissione di Service Broker.
sys.sysdesend Esiste in ogni database. Contiene una riga per ogni endpoint di invio di una conversazione di Service Broker.
sys.sysdercv Esiste in ogni database. Contiene una riga per ogni endpoint di ricezione di una conversazione di Service Broker.
sys.sysendpts Esiste solo nel database master . Contiene una riga per ogni endpoint creato nel server.
sys.syswebmethods Esiste solo nel database master . Contiene una riga per ogni metodo SOAP definito in un endpoint HTTP attivato per SOAP creato nel server.
sys.sysqnames Esiste in ogni database. Contiene una riga per ogni spazio dei nomi o nome completo a un token ID di 4 byte.
sys.sysxmlcomponent Esiste in ogni database. Ogni riga rappresenta un componente di XML Schema.
sys.sysxmlfacet Esiste in ogni database. Contiene una riga per ogni facet XML (restrizione) di definizione del tipo XML.
sys.sysxmlplacement Esiste in ogni database. Contiene una riga per ogni posizione XML dei componenti XML.
sys.syssingleobjrefs Esiste in ogni database. Contiene una riga per ogni riferimento N-a-1 generale.
sys.sysmultiobjrefs Esiste in ogni database. Contiene una riga per ogni riferimento N-a-N generale.
sys.sysobjvalues Esiste in ogni database. Contiene una riga per ogni proprietà del valore generale di un'entità.
sys.sysguidrefs Esiste in ogni database. Contiene una riga per ogni riferimento a ID classificati GUID.

Aggiornamento delle tabelle di base di sistema

È possibile visualizzare i dati nelle tabelle di sistema tramite le viste del catalogo di sistema. Per aggiornare i metadati in una tabella di base di sistema, usare l'interfaccia Transact-SQL appropriata, ad esempio istruzioni DDL. Non è possibile aggiornare manualmente le tabelle di sistema. SQL Server segnala i messaggi seguenti quando si eseguono aggiornamenti diretti alle tabelle di sistema.

Una tabella di sistema viene aggiornata manualmente

Msg 17659: Avviso: l'ID <> tabella di sistema è stato aggiornato direttamente nell'ID <> del database e la coerenza della cache potrebbe non essere stata mantenuta. È necessario riavviare SQL Server.

Avvio di un database con una tabella di sistema aggiornata manualmente

Messaggio 3859: avviso: il catalogo di sistema è stato aggiornato direttamente nell'ID database 17, più di recente in date_time.

Esecuzione del comando DBCC_CHECKDB dopo l'aggiornamento manuale di una tabella di sistema

Messaggio 3859: avviso: il catalogo di sistema è stato aggiornato direttamente nell'ID database 17, più di recente in date_time.

Se si eseguono aggiornamenti manuali a una tabella di sistema e si verifica un problema, potrebbe essere richiesto di eseguire il ripristino da un backup o copiare i dati dal database interessato a un nuovo database. Altre informazioni sui messaggi di errore dell'azione dell'utente.