Eindeutige Primärschlüssel aufrechterhalten
Eindeutige Primärschlüssel mit Global Autoinkrement-Werten aufrechterhalten
Wenn Sie das Extraktionsdienstprogramm verwenden, um Ihre entfernten Datenbanken zu erstellen, können Sie eine gespeicherte Prozedur schreiben, um diese Aufgabe zu automatisieren. Wenn Sie eine gespeicherte Prozedur namens sp_hook_dbxtract_begin erstellen, wird sie automatisch vom Extraktionsdienstprogramm aufgerufen. Bevor die Prozedur aufgerufen wird, erstellt das Extraktionsdienstprogramm eine temporäre Tabelle namens #hook_dict mit dem folgenden Inhalt:
| Name | Wert |
|---|---|
| extracted_db_global_id | Zu extrahierende Benutzer-ID |
Wenn Sie Ihre sp_hook_dbxtract_begin-Prozedur schreiben, um die value-Spalte der Zeile zu ändern, wird dieser Wert als die GLOBAL_DATABASE_ID-Option der extrahierten Datenbank verwendet, und er markiert den Anfang des Bereichs von Primärschlüsselwerten für GLOBAL DEFAULT AUTOINCREMENT-Werte.
Angenommen, Sie wollen eine Datenbank für den entfernten Benutzer user2 mit der user_id 101 extrahieren. Wenn Sie keine sp_hook_dbxtract_begin-Prozedur festlegen, wird die GLOBAL_DATABASE_ID der extrahierten Datenbank auf 101 eingestellt.
Wenn Sie eine sp_hook_dbxtract_begin-Prozedur festlegen, die aber keine Zeilen in #hook_dict ändert, dann bleibt die Option weiterhin auf 101 eingestellt.
Nehmen wir an, Sie richten die Datenbank folgendermaßen ein:
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'Dadurch erhält jede extrahierte oder erneut extrahierte Datenbank einen anderen Wert für GLOBAL_DATABASE_ID. Die Erste beginnt mit 1001, die Nächste mit 2001 und so weiter.
Um die Fehlerbehebung von Prozedureinstiegen zu unterstützen, gibt dbxtract Folgendes aus, wenn der ausführliche Meldungsmodus eingestellt ist:
Die gefundenen Prozedureinstiege
Den Inhalt von #hook_dict vor dem Aufruf des Prozedureinstiegs
Den Inhalt von #hook_dict nach dem Aufruf des Prozedureinstiegs
SQL Anywhere Studio 9.0.1
Copyright © 1989–2004 Sybase Inc. Teil-Copyright © 2001–2004 iAnywhere Solutions Inc. Alle Rechte vorbehalten.