Condividi tramite


Tabelle di base di sistema

Si applica a:SQL ServerIstanza 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 master database è 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 per uso generico dei clienti. Le tabelle di base di sistema sono soggette a modifiche e la compatibilità non è garantita.

Metadati della tabella di base di sistema

Un utente autorizzato che dispone CONTROLdell'autorizzazione , ALTERo VIEW DEFINITION per un database può visualizzare i metadati della tabella di base di sistema nella vista del sys.objects catalogo. 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. Il tentativo di eseguire una SELECT query da una tabella di base di sistema senza connettersi tramite applicazione livello dati genera 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à di Service Broker includono gli oggetti seguenti:

Tipo di messaggio
Contratto di servizio
Servizio
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 oggetti seguenti:

Assemblaggio
Dispositivo di backup
Catalogo full-text
Funzione di partizione
Schema di partizione
Gruppo di file
Chiave offuscata
Diagramma
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 master database. Contiene una riga per ogni database registrato.
sys.sysxsrvs Esiste solo nel master database. Contiene una riga per ogni server locale, collegato o remoto.
sys.sysrmtlgns Questa tabella di base di sistema esiste solo nel master database. 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 master database. 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 master database. 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. master Nel database la colonna dbid può essere diversa da zero. In questo caso, la riga rappresenta un file master.
sys.sysusermsg Esiste solo nel master database. 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 master database.
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 master database. 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 master database. Contiene una riga per ogni endpoint creato nel server.
sys.syswebmethods Esiste solo nel master database. 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.

Aggiornare le 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: Warning: System table ID <id> has been updated directly in database ID <id> and cache coherence may not have been maintained. SQL Server should be restarted.

Avviare un database con una tabella di sistema aggiornata manualmente

Msg 3859: Warning: The system catalog was updated directly in database ID 17, most recently at date_time.

Eseguire il comando DBCC_CHECKDB dopo l'aggiornamento manuale di una tabella di sistema

Msg 3859: Warning: The system catalog was updated directly in database ID 17, most recently at 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. Per altre informazioni, vedere Azioni utente per MSSQLSERVER_8992.