設定スクリプトを実行する前に、次の要件を確認してください。
設定スクリプトを実行するデータベースユーザーは、同期中に Mobile Link システムテーブルを更新するユーザーと同じである必要があります。このユーザーを使用して Mobile Link サーバーを起動したり、Mobile Link アプリケーションを設定したりします。 必要なパーミッションを参照してください。
Mobile Link サーバーを統合データベースに接続するために使用される RDBMS ユーザーは、Mobile Link システムテーブル、プロシージャーなどを修飾子なしで使用できる必要があります (SELECT * from ml_user など)。
また、RDBMS ユーザーの場合は、GV$TRANSACTION と V$SESSION に対する SELECT パーミッション、および DBMS_UTILITY に対する EXECUTE パーミッションも必要です。同義語である GV$TRANSACTION および V$SESSION には直接パーミッションを付与することができません。そのため、同義語の派生元である GV_$TRANSACTION および V_$SESSION の動的パフォーマンスビューに対してパーミッションを付与する必要があります。このアクセス権を付与するには、SYS として接続する必要があります。このアクセス権を付与する Oracle の構文は次のとおりです。
grant select on SYS.GV_$TRANSACTION to user-name; |
grant select on SYS.V_$SESSION to user-name; |
grant execute on SYS.DBMS_UTILITY to user-name; |
Oracle を Mobile Link 統合データベースとして動作するよう設定するには、設定プロシージャーを実行して、Mobile Link 同期に必要な Mobile Link システムテーブル、ストアドプロシージャー、トリガー、ビューを追加する必要があります。次のような方法で実行できます。
\MobiLink\setup にある syncora.sql 設定スクリプトを実行します。
Sybase Central で Mobile Link のシステム設定を確認し、更新します。Mobile Link システム設定を参照してください。
Oracle 統合データベースには、ODBC DSN を設定する必要があります。次の項を参照してください。
Oracle Real Application Clusters 内での Mobile Link の同期とタイムスタンプベースのダウンロード Mobile Link サーバーが次の最終ダウンロードタイムスタンプをフェッチする時刻と、ダウンロードされるローをフェッチする時刻との差を超える差異が、Oracle クラスタノードの各クロック間に存在する場合、Oracle RAC で実行されている統合データベースのローが欠落する場合があります。この問題は、ノードのクロックが同期される RAC システムではあまり起こりませんが、ノードのクロック間の差異が大きければ大きいほど、発生する可能性も大きくなります。対処方法としては、modify_next_last_download_timestamp または modify_last_download_timestamp スクリプトのいずれかを作成し、ノードのクロック間の最大差をなくします。
Oracle では、少なくともバージョン 10i 以降では、クラスタ内のすべてのクロックの同期に Network Time Protocol (NTP) を使用することをすすめています。NTP は、UNIX と Linux では通常デフォルトで実行されます。クラスタのノードが NTP を使用するよう正しく構成されている場合、(NTP サーバーとどれくらい近いかにより) それらのクロック間の時刻差は 200 マイクロ秒から 10 ミリ秒の範囲となります。Windows Server 2003 以降、Windows Time サービスには、デフォルトで実行される NTP バージョン 3 プロトコルが実装されています。また、バージョン 11gR2 以降の Oracle Clusterware には、クロックの同期をモニターする Oracle クラスタ時刻同期化サービス (CTSS) が含まれています。これでは、NTP または Windows Time サービスのいずれも実行されていない場合、クロックの同期がアクティブに維持されます。ただし、CTSS と Windows Time サービスは NTP と比較すると正確性に劣ります。
next_last_download_timestamp をフェッチする時刻と、ダウンロードするローをフェッチする時刻との差が Oracle RAC のノードのクロックで最大 1 秒ある場合、ローの欠落を防ぐために、Mobile Link サーバーでは、次の条件が該当する場合、統合データベースからフェッチした next_last_download_timestamp から 1 秒を減算します。
Mobile Link サーバーが使用する Oracle アカウントに、SYS.DBMS_UTILITY の実行権限があります
統合データベースとは Oracle RAC システムです
MobiLink バージョン 12.0.0 以降で、generate_next_last_download_timestamp スクリプトがありません
Oracle RAC ノードのクロック間に大きな時間差がある場合、ノードのクロック間の最大時間差をなくす generate_next_last_download_timestamp、modify_next_last_download_timestamp または modify_last_download_timestamp スクリプトを定義してこの問題を回避できます。
データ型マッピング カラムのデータ型は、統合データベースとリモートデータベース間で完全に一致する必要があります。詳細については、Oracle データのマッピングを参照してください。
CHAR カラム Oracle では、CHAR データ型は固定長で、文字列の長さに合わせてブランクが埋め込まれています。Mobile Link リモートデータベース (SQL Anywhere または Ultra Light) では、CHAR は VARCHAR と同じで、固定幅に合わせて値にブランクが埋め込まれることはありません。統合データベースで CHAR の代わりに VARCHAR を使用することを強くおすすめします。CHAR を使用する必要がある場合は、mlsrv12 -b コマンドラインオプションを使用すると、同期中に文字列から後続ブランクを削除できます。このオプションは、重複を検出するとき文字列を比較時する際に重要です。
-b mlsrv12 オプション を参照してください。
タイムスタンプ Mobile Link サーバーは、gv$transaction を使用して、リモートデータベースが次の同期に使用するタイムスタンプを生成するため、Mobile Link サーバーのログイン ID には gv_$transaction で SELECT パーミッションが必要です。Oracle では、gv$transaction に直接アクセス権を付与できません。そのため、その基底にある gv_$transaction ビューに対して SELECT パーミッションを付与する必要があります。 パーミッション を参照してください。
ストアドプロシージャー ストアドプロシージャーを使用して結果セットを返す場合、または VARRAY パラメーターを受け入れる場合は、iAnywhere Solutions 12 - Oracle ODBC ドライバー の [プロシージャーから結果が返される、または VARRAY パラメーターを使用する] オプションを選択してください。また、Sybase Central では、リモートデータベースの集中管理に使用するために、プロシージャーが結果を返すことが必要となるため、集中管理を使用する場合には、このオプションを選択する必要があります。
セッション全体の変数 セッション全体の情報を保持するには、Oracle パッケージ内の変数を使用します。Oracle パッケージでは、変数の作成、修正、破棄が可能です。これらの変数は Oracle パッケージが現在のパッケージであるかぎり有効です。
オートインクリメントメソッド プライマリキーの一意性を維持するには、Oracle シーケンスを使用して、SQL Anywhere オートインクリメントフィールドのキーのリストに似た、キーのリストを生成します。CustDB サンプルデータベースの Samples\MobiLink\CustDB\custora.sql に、サンプルコーディングが用意されています。ただし、オートインクリメントとは異なり、シーケンスを明示的に参照する必要があります。SQL Anywhere オートインクリメントは、INSERT 文でカラムが参照されていない場合は、自動的にカラム値を挿入します。
Oracle では空の文字列をサポートしていない Oracle では、空の文字列は NULL として処理されます。SQL Anywhere と Ultra Light では、空の文字列は NULL とは異なる意味を持ちます。したがって、Oracle 統合データベースがある場合には、クライアントデータベースで空の文字列を使用しないようにしてください。
Mobile Link 独立性レベル を参照してください。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |