Skip to main content

 

 

 

 
Language:

 

 
 
 
OutSystems

データベーススタック(SQL Server、Oracle、MySQL)とコードスタック(.NET、Java)間の移行

概要

OutSystemsプラットフォームは、複数のコードスタックとデータベーススタック上で実行されます。これは、ユーザーが最初にプラットフォームの使用を開始する際に選択するものです。

スタックの組み合わせのうちの1つで作成されたアプリケーションを別のものに移行する必要や要望が、ある時点で生じる可能性があります。OutSystemsプラットフォームのアーキテクチャはすべてのスタックで基本的に同じですが、これらの下位レベルには違いがあるため、移行が適切に行われるようにいくつかのアクションを実行する必要があります。

このような操作を実行する際の最大の懸念事項として、以下の2つが挙げられます。

  • SQL Serverデータベース用に開発されたアプリのOracleデータベースでの使用

  • SQL ServerデータベースからOracleデータベースへのデータの移行

この記事では、これらのトピックに対処する方法の概要を説明し、詳細に関する他の参考資料を示しています。

SQL Serverデータベース用に開発されたアプリのOracleデータベースでの使用

ある環境からアプリケーションを別の環境に移行するには、ソースからアプリをダウンロードして新しい環境にパブリッシュすれば十分です。

異なるスタック(コードの場合はJavaまたは.NET、データベースの場合はSQL Server、Oracle、またはMySQL)間でアプリを移行しても、アプリケーションの動作はほとんど変わりません。

考慮が必要な点は、以下のとおりです(最優先事項)。

  • 高度なクエリ/SQLノード: 3つのデータベースエンジン間ではSQL構文が異なるため、クエリの変更が必要になる場合があります。典型的な例は、SELECT TOP N .... [SQL Server]の場合とSELECT * FROM (SELECT ....) WHERE ROWNUM < N [Oracle]の場合との違いです。

  • トランザクションの動作: READ UNCOMMITTEDを使用するエンジンやREAD COMMITTEDを使用するエンジンがあり、異なっている場合があります。移行時には、この点により注意を払う必要があると考えられます。

  • クエリのパフォーマンス: データモデルの基本的な原則は同じであるため(テーブルの列、インデックス、統計などテーブル)、通常のシナリオでは、ほとんどのクエリでパフォーマンスの大幅な向上や低下は発生しません。 ただし、データベースエンジンごとに独自の独立した実装がある場合、動作が同じであるとは限りません。つまり、個々のクエリでパフォーマンスが低下する場合があり、十分なパフォーマンスを復元するために、そうしたクエリには局部的なチューニングが必要になる可能性があります。

  • エクステンションを使用した統合: Javaから.NETへの移行、または.NETからJavaへの移行では、エクステンションのコードを書き直すか追加する必要があります。OutSystemsが提供するエクステンションでは両方のスタックのコードがありますが、このコードはOutSystemsが明示的に作成したものです。ユーザーが独自にコーディングした場合(またはForgeのエクステンションを使用した場合)は、注意が必要です。

SQL ServerデータベースからOracleデータベースへのデータの移行

これは簡単な操作ではありません。OutSystemsがSQL Server、Oracle、MySQLで作成するモデルは非常によく似ていますが、同じはありません。それらの間で無計画に移行してもうまくいきません。端的な例は空の文字列をデータベースに保存する方法とOracleでのオブジェクト名の最大長です。

そのため、OutSystemsではこの処理を文書化せず、ユーザーが独自に上記の操作を実行しないように推奨しています。つまり、この操作はサポート対象外であり、OutSystemsでは対応できません。また、OutSystemsが支援できない問題が発生する可能性があります。

データの移行が必要な場合は、プラットフォームを使用し、(Webサービスなどを介して)データを一方から他方に移行するロジックを実装できます。ただし、そのロジックには、プラットフォームをそのまま使用してすべてのデータ書き込みを行う処理を含める必要があります。これ以外に実行可能なアプローチはありません。