MSSQL in Linux: Errore di tabella: Collegamento tra oggetti

Microsoft.SQLServer.Linux.EventRule.DBEngine.Table_error__Cross_object_linkage_1_5_Rule (Rule)

La pagina P_ID1 fa riferimento, in una relazione padre-figlio, a una pagina (P_ID2) in un oggetto diverso.

Knowledge Base article:

Cause

La pagina P_ID1 fa riferimento, in una relazione padre-figlio, a una pagina (P_ID2) in un oggetto diverso.

Informazioni relative ai vari stati:

Stato 1 (I_ID1 = 0): le pagine appartengono a un heap. La pagina P_ID1 ha un record di inoltro che fa riferimento a una riga nella pagina P_ID2.

Stato 1 (I_ID1 > 0): le pagine provengono da un albero B dell'indice. La pagina P_ID1 ha un puntatore di pagina figlio che fa riferimento alla pagina P_ID2.

Stato 2: le pagine appartengono a un oggetto testo. Si è verificata una delle condizioni seguenti:

La pagina P_ID1 è una pagina di testo contenente un record con un puntatore figlio che fa riferimento a un record nella pagina P_ID2.

La pagina P_ID1 è una pagina di indice o di dati contenente una radice di tipo testo all'interno di riga che rimanda a una pagina di testo P_ID2.

Risoluzioni

ERRORE HARDWARE

Eseguire gli strumenti di diagnostica hardware e risolvere eventuali problemi. Esaminare inoltre i log applicazioni e di sistema di Linux nonché il log degli errori di SQL Server per verificare se l'errore è stato causato da un guasto dell'hardware. Risolvere tutti gli eventuali problemi relativi all'hardware.

Se i problemi di incoerenza dei dati persistono, provare a sostituire i vari componenti hardware per isolare il problema. Verificare che nel sistema non sia stata abilitata la memorizzazione nella cache in scrittura per il controller del disco. Se si ritiene che il problema possa essere questo, contattare il fornitore dell'hardware.

Infine, potrebbe essere utile passare a un sistema hardware completamente nuovo, eseguendo anche la riformattazione delle unità disco e la reinstallazione del sistema operativo.

RIPRISTINO DAL BACKUP

Se il problema non è correlato all'hardware ed è disponibile un backup valido noto, ripristinare il database dal backup.

DBCC CHECKDB

Se non è disponibile una copia di backup valida, eseguire DBCC CHECKDB senza una clausola di correzione per determinare l'entità del problema. DBCC CHECKDB consiglierà una clausola di correzione da usare. Eseguire quindi DBCC CHECKDB con la clausola di correzione appropriata per correggere il problema.

ATTENZIONE: se non si è certi dell'effetto sui dati provocato dall'esecuzione di DBCC CHECKDB con una clausola di correzione, contattare il supporto tecnico prima di eseguire questa istruzione.

ATTENZIONE: l'operazione di correzione può comportare la perdita di dati.

La correzione dipende dallo stato dell'errore:

Stato 1 (heap): il record di inoltro nella pagina P_ID1 verrà eliminato e tutti gli indici non cluster sull'heap verranno ricompilati.

Stato 1 (albero B): l'indice contenente la pagina P_ID1 verrà ricompilato.

Stato 2: i due record nelle pagine P_ID1 e P_ID2 verranno eliminati.

Se l'esecuzione di DBCC CHECKDB con una clausola di correzione non consente di risolvere il problema, rivolgersi al servizio di supporto tecnico.

Se l'errore persiste anche se DBCC CHECKDB non riporta alcun errore, inserire i vincoli nello script, eliminarli, quindi ricrearli. Se si continua a ricevere l'errore, trasferire i dati in una nuova tabella ed eliminare la tabella esistente.

Parametri di cui è possibile eseguire l'override

Nome

Descrizione

Valore predefinito

Abilitato

Abilita o disabilita il flusso di lavoro.

Intervallo (secondi)

Intervallo di tempo ricorrente in secondi in cui eseguire il flusso di lavoro.

300

Priorità

Definisce la priorità dell'avviso.

1

Gravità

Definisce la gravità dell'avviso.

2

Tempo di sincronizzazione

Tempo di sincronizzazione

 

Timeout (secondi)

Specifica il tempo di esecuzione consentito per il flusso di lavoro prima che venga chiuso e contrassegnato come non riuscito.

200

Timeout per la connessione di database (secondi)

Il flusso di lavoro avrà esito negativo e registrerà un evento se non riesce ad accedere al database durante il periodo specificato.

15

Element properties:

TargetMicrosoft.SQLServer.Linux.DBEngine
CategoryEventCollection
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
RemotableTrue
Alert Message
MSSQL in Linux: Errore di tabella: Collegamento tra oggetti
{0}
CommentMom2017ID='{4131B4E6-3994-4D3F-83EA-228232BB9798}';MOM2017GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}

Member Modules:

ID Module Type TypeId RunAs 
_F6DA1507_12AF_11D3_AB21_00A0C98620CE_ DataSource Microsoft.SQLServer.Linux.DataSource.EventCollectionFiltered Default
GenerateAlert WriteAction System.Health.GenerateAlert Default

Source Code:

<Rule ID="Microsoft.SQLServer.Linux.EventRule.DBEngine.Table_error__Cross_object_linkage_1_5_Rule" Target="SqlDiscL!Microsoft.SQLServer.Linux.DBEngine" Enabled="true" ConfirmDelivery="true" Remotable="true" Comment="Mom2017ID='{4131B4E6-3994-4D3F-83EA-228232BB9798}';MOM2017GroupID={467ECC75-C5DA-42BD-955C-A73BBB51AF74}">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="_F6DA1507_12AF_11D3_AB21_00A0C98620CE_" Comment="{F6DA1507-12AF-11D3-AB21-00A0C98620CE}" TypeID="Microsoft.SQLServer.Linux.DataSource.EventCollectionFiltered">
<MachineName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</MachineName>
<NetbiosComputerName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/NetbiosComputerName$</NetbiosComputerName>
<InstanceName>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</InstanceName>
<ConnectionString>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/ConnectionString$</ConnectionString>
<InstanceVersion>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Version$</InstanceVersion>
<InstanceEdition>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/Edition$</InstanceEdition>
<SqlExecTimeoutSeconds>60</SqlExecTimeoutSeconds>
<SqlTimeoutSeconds>15</SqlTimeoutSeconds>
<TimeoutSeconds>200</TimeoutSeconds>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<EventDisplayNumber>8925</EventDisplayNumber>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="GenerateAlert" TypeID="Health!System.Health.GenerateAlert">
<Priority>1</Priority>
<Severity>2</Severity>
<AlertMessageId>$MPElement[Name="Microsoft.SQLServer.Linux.EventRule.DBEngine.Table_error__Cross_object_linkage_1_5_Rule.AlertMessage"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/MachineName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type="SqlCoreLib!Microsoft.SQLServer.Core.DBEngine"]/InstanceName$</AlertParameter2>
<AlertParameter3>Event ID: $Data/Property[@Name='EventID']$. $Data/Property[@Name='Message']$</AlertParameter3>
</AlertParameters>
<Suppression>
<SuppressionValue/>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>