Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » MobiLink - Clientadministration » SQL Anywhere-Clients für MobiLink » Ereignis-Hooks für SQL Anywhere-Clients

 

sp_hook_dbmlsync_download_log_ri_violation

Protokolliert referenzielle Integrität beim Downloadvorgang

Zeilen in der Tabelle #hook_dict

Name

Wert

Beschreibung

publication_n (in)

Publikation

Die synchronisierten Publikationen, wobei n eine Ganzzahl ist. Es gibt einen publication_n-Eintrag für jede Publikation im Upload. Die Nummerierung von n beginnt bei Null.

MobiLink user (in)

MobiLink-Benutzername

Der MobiLink-Benutzer, für den Sie synchronisieren

foreign key table (in)

Tabellenname

Die Tabelle, die die Fremdspalte enthält, für die der Hook aufgerufen wird

primary key table (in)

Tabellenname

Die Tabelle, die vom Fremdschlüssel referenziert wird, für den der Hook aufgerufen wurde

role name (in)

Rollenname

Der Rollenname des Fremdschlüssels, für den der Hook aufgerufen wird

script version (in)

Skriptversionsname

Die MobiLink-Skriptversion, die für die Synchronisation verwendet werden soll

Bemerkungen

Eine Download-RI-Verletzung tritt ein, wenn Zeilen im Download die Fremdschlüsselbeziehungen in der entfernten Datenbank verletzen. Diese Hooks gestatten es Ihnen, auftretende RI-Verletzungen zu protokollieren, sodass Sie ihre Ursache später untersuchen können.

Nachdem der Download abgeschlossen ist, aber noch vor dem Festschreiben, prüft dbmlsync auf RI-Verletzungen. Wenn eine Verletzung gefunden wird, identifiziert das Dienstprogramm einen Fremdschlüssel, der eine RI-Verletzung enthält, und ruft sp_hook_dbmlsync_download_log_ri_violation auf (sofern implementiert). Danach ruft es sp_hook_dbmlsync_download_ri_conflict auf (sofern implementiert). Wenn der Konflikt weiterhin besteht, löscht dbmlsync die Zeile, die die Fremdschlüssel-Integrität verletzt. Dieser Prozess wird für die restlichen Fremdschlüssel wiederholt, bei denen RI-Verletzungen vorkommen.

Dieser Hook wird nur aufgerufen, wenn RI-Verletzungen für Tabellen vorkommen, die derzeit synchronisiert werden. Wenn RI-Verletzungen für Tabellen vorhanden sind, die nicht synchronisiert werden, wird dieser Hook nicht aufgerufen, und die Synchronisation schlägt fehl.

Dieser Hook wird über eine andere als die von dbmlsync für den Download verwendete Verbindung aufgerufen. Die vom Hook verwendete Verbindung hat die Isolationsstufe 0, sodass der Hook die Zeilen sehen kann, die vom Download übernommen wurden und noch nicht festgeschrieben sind. Die Aktionen des Hooks werden sofort nach seiner Ausführung festgeschrieben, sodass die durchgeführten Änderungen beibehalten werden, und zwar unabhängig davon, ob der Download festgeschrieben oder zurückgesetzt wird.

Auf Windows Mobile-Geräten werden Synchronisationstabellen exklusiv gesperrt. Das bedeutet, dass dieser Hook nicht erfolgreich ausgeführt werden kann, wenn er auf eine der Synchronisationstabellen zugreifen muss. Er kann auch nicht ausgeführt werden, wenn er auf Synchronisationstabellen zugreifen muss und Sie die erweiterte Option LockTables von dbmlsync auf EXCLUSIVE gesetzt haben. Weitere Hinweise finden Sie unter Erweiterte Option LockTables (lt).

Versuchen Sie nicht, diesen Hook zu verwenden, um RI-Verletzungen aufzulösen. Er darf ausschließlich für die Protokollierung verwendet werden. Für die Behebung von RI-Verletzungen steht sp_hook_dbmlsync_download_ri_violation zur Verfügung.

Siehe auch
Beispiele

Nehmen wir an, Sie verwenden die folgende Tabelle, um Verletzungen der referenziellen Integrität zu protokollieren.

CREATE TABLE DBA.LogRIViolationTable
(
    entry_time  TIMESTAMP,
    pk_table  VARCHAR( 255 ),
    fk_table  VARCHAR( 255 ),
    role_name  VARCHAR( 255 )
);

Das folgende Beispiel protokolliert den Fremdschlüssel-Tabellennamen, den Primärschlüssel-Tabellennamen und den Rollennamen, wenn in der entfernten Datenbank eine Verletzung der referenziellen Integrität entdeckt wird. Die Informationen werden in der LogRIErrorTable-Tabelle in der entfernten Datenbank gespeichert.

CREATE PROCEDURE sp_hook_dbmlsync_download_log_ri_violation()
BEGIN
 INSERT INTO DBA.LogRIViolationTable VALUES( 
 CURRENT_TIMESTAMP,
 (SELECT value FROM #hook_dict WHERE name = 'Primary key table'),
 (SELECT value FROM #hook_dict WHERE name = 'Foreign key table'),
 (SELECT value FROM #hook_dict WHERE name = 'Role name' ) );  
END;