Vor dem Ausführen des Setupskripts sollten Sie die folgenden Anforderungen berücksichtigen:
Der gleiche Datenbankbenutzer, der das Setupskript ausführt, wird als Benutzer erwartet, der die MobiLink-Systemtabellen während der Synchronisation aktualisiert. Dieser Benutzer muss verwendet werden, um den MobiLink-Server zu starten und MobiLink-Anwendungen zu konfigurieren. Siehe Erforderliche Privilegien.
Der RDBMS-Benutzer, der mithilfe des MobiLink-Servers eine Verbindung mit der konsolidierten Datenbank herstellt, muss in der Lage sein, die MobiLink-Systemtabellen, -Prozeduren usw. ohne Qualifizierer zu verwenden (Beispiel: SELECT * from ml_user).
Der RDBMS-Benutzer benötigt außerdem das SELECT-Privileg für GV$TRANSACTION, GV$SESSION, GV$LOCK und DBA_OBJECTS sowie EXECUTE-Privilegien für DBMS_UTILITY. Sie können eine Berechtigung nicht direkt für die Synonyme GV$TRANSACTION, GV$SESSION und GV$LOCK erteilen. Stattdessen müssen Sie die Berechtigung für die zugrunde liegenden dynamischen Performanceansichten GV_$TRANSACTION, GV_$SESSION und GV_$LOCK erteilen. Dazu müssen Sie eine Verbindung als SYS herstellen. Die Oracle-Syntax zur Erteilung dieser Berechtigung lautet:
grant select on SYS.GV_$TRANSACTION to user-name; |
grant select on SYS.GV_$SESSION to user-name; |
grant select on SYS.GV_$LOCK to user-name; |
grant execute on SYS.DBMS_UTILITY to user-name; |
Um Oracle für die Verwendung als MobiLink-konsolidierte Datenbank einzurichten, müssen Sie eine Einrichtungsprozedur durchführen, die Systemtabellen, gespeicherte Prozeduren, Trigger und Ansichten hinzufügt, die für die MobiLink-Synchronisation erforderlich sind. Es gibt mehrere Möglichkeiten, dies durchzuführen:
Führen Sie das Setupskript syncora.sql aus, das sich im Verzeichnis %SQLANY16%\MobiLink\Setup befindet.
Prüfen und Aktualisieren der MobiLink-Systemeinrichtung von Sybase Central. Siehe MobiLink-Systemkonfiguration.
Für die konsolidierte Oracle-Datenbank muss eine ODBC-DSN eingerichtet werden. Siehe:
MobiLink-Synchronisation und zeitstempelbasierte Downloads mit einem Oracle Real Application Cluster Zeilen in der konsolidierten Datenbank, die auf einem Oracle RAC ausgeführt wird, können ausgelassen werden, wenn die Systemuhren der Knoten des Oracle-Clusters sich um mehr unterscheiden als die Zeit, die zwischen dem Abrufen des vorletzten Download-Zeitstempels durch den MobiLink-Server und dem Abrufen der herunterzuladenden Zeilen verstrichen ist. Dieses Problem ist auf einem RAC-System mit synchronisierten Knotensystemuhren unwahrscheinlich, aber die Wahrscheinlichkeit erhöht sich bei größeren Unterschieden von Systemuhren verschiedener Knoten. Eine Behelfslösung ist die Erstellung eines modify_next_last_download_timestamp- oder modify_last_download_timestamp-Skripts zur Subtrahierung des maximalen Unterschieds der Knotensystemuhren.
Mindestens seit Version 10i empfiehlt Oracle die Verwendung des NTP-Protokolls (Network Time Protocol) für die Synchronisation der Systemuhren auf allen Knoten in einem Cluster. NTP läuft normalerweise standardmäßig unter Unix und Linux. Wenn Cluster-Knoten korrekt für die Verwendung von NTP konfiguriert sind, sollten alle Systemuhren innerhalb von 200 Mikrosekunden bis zu 10 Millisekunden liegen (abhängig von der Nähe des NT-Servers). Seit Windows Server 2003 implementiert der Windows Time Service die NTP Version 3, die standardmäßig ausgeführt wird. Ab Version 11gR2 enthält die Oracle Clusterware den Oracle Cluster Time Synchronization Service (CTSS) zur Überwachung der Synchronisation der Systemuhren oder, wenn weder NTP noch Windows Time Service ausgeführt wird, zur aktiven Aufrechterhaltung der Systemuhr-Synchronisation. CTSS und Windows Time Service sind jedoch weniger präzise als NTP.
Zur Vermeidung von fehlenden Zeilen wird folgendermaßen vorgegangen: Wenn Systemuhren von Oracle RAC-Knoten um bis zu eine Sekunde mehr voneinander abweichen, als die Zeit, die zwischen dem Abrufen des next_last_download_timestamp-Werts und dem Herunterladen der Zeilen liegt, subtrahiert der MobiLink-Server eine Sekunde vom next_last_download_timestamp-Wert, der aus der konsolidierten Datenbank abgerufen wurde, wenn die folgenden Bedingungen erfüllt sind:
Das vom MobiLink-Server verwendete Oracle-Konto hat das EXECUTE-Privileg für SYS.DBMS_UTILITY.
Die konsolidierte Datenbank ist ein Oracle RAC-System.
Für MobiLink-Versionen 12.0.0 und höher ist kein generate_next_last_download_timestamp-Skript vorhanden.
Bei Oracle RAC-Knoten, deren Systemuhren größere Unterschiede aufweisen, können Sie das Problem vermeiden, indem Sie ein generate_next_last_download_timestamp-, modify_next_last_download_timestamp- oder modify_last_download_timestamp-Skript definieren, um den größten Systemuhrunterschied der Knoten zu beheben.
Datentypen zuordnen Die Datentypen von Spalten müssen korrekt zwischen der konsolidierten und der entfernten Datenbank abgestimmt und zugeordnet werden. Siehe Oracle-Datentypzuordnung.
XMLTYPE-Datentyp Die Verwendung des Oracle-Datentyps XMLTYPE in SQL Anywhere oder UltraLite erfordert besondere Vorsicht. Siehe XMLTYPE-Datentyp in Oracle.
CHAR-Spalten In Oracle haben CHAR-Datentypen eine feste Länge und werden bis zur vollen Länge der Zeichenfolge mit Leerzeichen aufgefüllt. In entfernten MobiLink-Datenbanken (SQL Anywhere oder UltraLite) entspricht CHAR dem Datentyp VARCHAR: Werte werden nicht bis zu einer bestimmten Länge mit Leerzeichen aufgefüllt. Verwenden Sie in der konsolidierten Datenbank unbedingt VARCHAR anstelle von CHAR. Wenn Sie CHAR verwenden müssen, können Sie mit der mlsrv16-Befehlszeilenoption -b während der Synchronisation nachgestellte Leerzeichen aus Zeichenfolgen entfernen. Diese Option ist wichtig für Zeichenfolgenvergleiche, mit denen Konflikte erkannt werden.
Siehe mlsrv16-Option -b .
Zeitstempel Der MobiLink-Server generiert mithilfe von gv$transaction einen Zeitstempel, der von der entfernten Datenbank bei der nächsten Synchronisation verwendet werden soll. Daher muss die Login-ID für den MobiLink-Server ein SELECT-Privileg für gv$transaction haben. Oracle gestattet es Ihnen nicht, den Zugriff direkt auf gv$transaction zu erteilen. Stattdessen müssen Sie das SELECT-Privileg für die zugrunde liegende Ansicht gv_$transaction erteilen. Siehe Privilegien.
Gespeicherte Prozeduren Wenn Sie gespeicherte Prozeduren verwenden, um Ergebnismengen zurückzugeben oder VARRAY-Parameter zu akzeptieren, müssen Sie die Option Prozedur gibt Ergebnisse zurück oder verwendet VARRAY-Parameter für den SQL Anywhere 16 - Oracle-ODBC-Treiber aktivieren. Außerdem benötigt Sybase Central Prozeduren für die Rückgabe von Ergebnissen, um die zentrale Administration von entfernten Datenbanken verwenden zu können, sodass diese Option bei Verwendung der zentralen Administration aktiviert werden muss.
Variablen für die gesamte Sitzung Sie können sitzungsbezogene Daten in Variablen in Oracle-Paketen speichern. Mit Oracle-Paketen können Variablen erstellt, geändert und gelöscht werden und diese Variablen können verfügbar sein, so lange das betreffende Oracle-Paket aktuell ist.
Methoden für automatisches Inkrementieren Um die Eindeutigkeit von Primärschlüsseln zu erhalten, können Sie mit einer Oracle-Sequenz eine Liste von Schlüsseln erstellen, die der in einem SQL Anywhere-autoincrement-Feld ähnelt. In der Beispieldatenbank CustDB finden Sie Code-Beispiele unter Samples\MobiLink\CustDB\custora.sql. Im Unterschied zu einer autoincrement-Spalte müssen Sie jedoch die Sequenz explizit referenzieren. Bei SQL Anywhere-autoincrement-Spalten wird automatisch ein Spaltenwert eingefügt, wenn die Spalte nicht in einer INSERT-Anweisung referenziert ist.
Oracle unterstützt keine leeren Zeichenfolgen In Oracle wird eine leere Zeichenfolge wie der Wert NULL behandelt. In SQL Anywhere und UltraLite haben leere Zeichenfolgen eine andere Bedeutung als der Wert NULL. Verwenden Sie daher keine leeren Zeichenfolgen in Ihren Client-Datenbanken, wenn Sie mit einer konsolidierten Oracle-Datenbank arbeiten.
Der Oracle-Datentyp XMLTYPE kann dem XML-Datentyp von SQL Anywhere zugeordnet werden oder den UltraLite-Datentypen LONG VARCHAR und VARCHAR( n). Es ist wichtig zu beachten, dass der Oracle-Datenbankserver die Daten vor dem Speichern in einer XMLTYPE-Spalte validiert, während SQL Anywhere und UltraLite dies nicht tun. Sie müssen daher sicherstellen, dass die hochzuladenden XML-Dokumente gültigen XML-Code enthalten.
Kleine XML-Dokumente mit einer Länge von höchstens 32 kB können mit Oracle PL/SQL-Anweisungen in eine Oracle-Datenbank hochgeladen und aus ihr heruntergeladen werden. Wenn die Länge von XML-Dokumenten größer ist als 32 kB, müssen XML-Dokumente für den Upload möglicherweise mit den Skripten upload_insert und upload_update in eine globale temporäre Tabelle hochgeladen werden. Anschließend können die Upload-Daten mit dem Skript end_upload_rows oder end_upload konvertiert und in der eigentlichen Synchronisationstabelle gespeichert werden.
Die folgenden Beispiele enthalten Upload- und Download-Beispielskripten für das Hoch- und Herunterladen von XMLTYPE-Objekten zwischen einer konsolidierten Oracle-Datenbank und entfernten SQL Anywhere-Datenbanken. In diesen Beispielen ist die Upload-Tabelle in der konsolidierten Oracle-Datenbank folgendermaßen definiert:
create table test (pk int not null primary key, c1 XMLTYPE) |
Die Upload-Tabelle ist in der entfernten SQL Anywhere-Datenbank folgendermaßen definiert:
create table test (pk int not null primary key, c1 XML) |
Wenn alle XML-Dokumente höchstens 32 kB groß sind, können die Upload- und Download-Skripten folgendermaßen geschrieben werden upload_insert
declare v_pk integer; v_c1 clob; x_c1 xmltype; begin v_pk := {ml r.pk}; v_c1 := {ml r.c1}; x_c1 := XMLTYPE.createXML( v_c1 ); insert into test values( v_pk, x_c1 ); end; |
download_cursor
select pk, XMLSERIALIZE( content c1 ) from test |
Dieses upload_insert-Skript funktioniert gut, wenn die XML-Datenlänge kleiner oder gleich 32 kB ist. Wenn jedoch die XML-Datenlänge größer ist als 32 kB, gibt der Oracle Server möglicherweise eine Fehlermeldung aus.
Falls XML-Dokumente länger sind als 32 kB, müssen die für den Upload vorgesehenen XML-Daten in eine globale temporäre Tabelle hochgeladen werden Das upload_insert-Skript lädt die XML-Dokumente in eine globale temporäre Tabelle in der konsolidierten Oracle-Datenbank hoch. Die globale temporäre Tabelle ist folgendermaßen definiert:
create global temporary table tmp_test (pk int, c1 CLOB) |
Die upload_insert-Skript kann folgendermaßen geschrieben werden:
insert into tmp_test values( {ml r.pk}, {ml r.c1} ) |
Die c1-Spalte in der temporären Tabelle muss den CLOB-Datentyp aufweisen.
Das end_upload_rows-Skript ruft die XML-Dokumente aus der globalen temporären Tabelle ab, konvertiert sie in XML-Dokumente und speichert anschließend die XML-Daten in der Testtabelle. Im Folgenden sehen Sie das end_upload_rows-Skript:
insert into test (pk, c1) (select pk, XMLTYPE.createXML(c1) from tmp_test |
Siehe MobiLink-Isolationsstufen.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |