Wenn Sie das Extraktionsdienstprogramm (dbxtract) oder den Assistenten zum Extrahieren einer Datenbank verwenden, um Ihre entfernten Datenbanken zu erstellen, können Sie eine gespeicherte Prozedur schreiben, um das Festlegen von eindeutigen Datenbank-Identifizierungsnummern zu automatisieren.
Voraussetzungen
Hook-Prozeduren können von jedem Benutzer mit dem MANAGE REPLICATION-Systemprivileg erstellt werden. Um jedoch zu gewährleisten, dass ein Hook auf die #hook_dict-Tabelle zugreifen kann, die verwendet wird, um Daten an und aus Hooks zu übergeben, müssen Hooks eine der folgenden Anforderungen erfüllen:
Eigentümer muss ein Benutzer sein, der die Systemprivilegien SELECT ANY TABLE und UPDATE ANY TABLE hat.
Sie müssen durch die SQL SECURITY INVOKER-Klausel der CREATE PROCEDURE-Anweisung definiert sein.
Erstellen Sie eine gespeicherte Prozedur namens sp_hook_dbxtract_begin.
Beispiel: Um eine Datenbank für den entfernten Benutzer user2 mit einer user_id von 1001 zu extrahieren, führen Sie die folgenden Anweisungen aus:
SET OPTION "PUBLIC"."global_database_id" = '1'; CREATE TABLE extract_id (next_id INTEGER NOT NULL) ; INSERT INTO extract_id VALUES( 1 ); CREATE PROCEDURE sp_hook_dbxtract_begin AS DECLARE @next_id INTEGER UPDATE extract_id SET next_id = next_id + 1000 SELECT @next_id = (next_id ) FROM extract_id COMMIT UPDATE #hook_dict SET VALUE = @next_id WHERE NAME = 'extracted_db_global_id'; |
Jede extrahierte oder wieder extrahierte Datenbank erhält einen unterschiedlichen global_database_id-Wert. Der Erste beginnt mit 1001, dann kommt 2001, und so weiter.
Führen Sie das Extraktionsdienstprogramm (dbxtract) mit der Option -v oder den Assistenten zum Extrahieren einer Datenbank aus, um Ihre entfernten Datenbanken zu extrahieren. Das Extraktionsdienstprogramm führt die folgenden Aufgaben aus:
Es erstellt eine temporäre Tabelle namens #hook_dict mit dem folgenden Inhalt:
name | Wert |
---|---|
extracted_db_global_id |
Zu extrahierende Benutzer-ID |
Wenn Sie eine sp_hook_dbxtract_begin-Prozedur schreiben, um den Spaltenwert der Zeile zu ändern, wird dieser Wert als die global_database_id-Option der extrahierten Datenbank verwendet und markiert den Anfang des Bereichs von Primärschlüsselwerten für GLOBAL DEFAULT AUTOINCREMENT-Werte.
Wenn Sie keine sp_hook_dbxtract_begin-Prozedur festlegen, hat die extrahierte Datenbank eine global_database_id von 101.
Wenn Sie eine sp_hook_dbxtract_begin-Prozedur festlegen, die keine Zeilen in der #hook_dict-Tabelle ändert, wird die global_database_id weiterhin auf 101 gesetzt.
Ruft sp_hook_dbxtract_begin auf.
Gibt die folgenden Informationen aus, um die Fehlersuche von Prozedureinstiegen zu unterstützen:
Die gefundenen Prozedureinstiege.
Der Inhalt von #hook_dict vor dem Aufruf des Prozedureinstiegs.
Der Inhalt von #hook_dict nach dem Aufruf des Prozedureinstiegs.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |