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 di servizio Service 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.