Skip to main content

 

 

 

 
Language:

 

 

 

 
 
OutSystems

データの移行方法

このドキュメントでは、環境の単一、複数、またはすべてのアプリケーションのデータをProduction環境からNon-Production環境に移行するユースケースに関して、「データ移行ガイド」の補足となる情報について説明します。 移行プロセスに関する例とガイダンスをいくつか示します。データ移行タスクに直接関連する質問や手順のほか、データベースに関する知識を深めたり、データ移行戦略やソリューションアプローチに影響を及ぼしたりする可能性のある質問もあります。

一般的な質問

このセクションでは、データ移行に関する一般的な質問を示します。

バイナリ型のアトリビュートを持つエンティティを特定するにはどのようにすればよいですか?

バイナリ型のアトリビュートは多くのディスク領域を使用し、これらを移行するには多くの時間やリソースを要します。 このため、このようなアトリビュートや関連するエンティティを特定し、これらの移行計画を作成することが重要です。

下記のクエリは、バイナリ型のアトリビュートを含むアプリケーションに属するエンティティティをすべて返します。

SELECT 
      app.NAME [Application]
    , entity.NAME [Entity Name]
    , entity.PHYSICAL_TABLE_NAME [PhysicalTable Name]
    , attribute.NAME [Attribute]
FROM ossys_Entity_Attr attribute
JOIN ossys_Entity entity
    ON attribute.Entity_id = entity.id
    AND entity.IS_ACTIVE = 1 /* Active Entities*/
    AND entity.IS_SYSTEM = 0 /* Not system */
JOIN ossys_Espace espace
    ON entity.ESPACE_ID = espace.ID
JOIN ossys_Module module
    ON espace.ID = module.ESPACE_ID
JOIN OSSYS_APP_DEFINITION_MODULE appmodule
    ON module.ID = appmodule.MODULE_ID
JOIN OSSYS_Application app
    ON appmodule.APPLICATION_ID = app.ID 
WHERE 
    /* Active Entity Attributes */
    attribute.IS_ACTIVE = 1 
    /* Filter Binary Data type */
    AND attribute.TYPE = (
        select ID from OSSYS_BASIC_TYPE where NAME = 'BinaryData'
    )
ORDER BY app.NAME
    , entity.NAME
    , entity.PHYSICAL_TABLE_NAME
    , attribute.NAME

上記のクエリの結果の一部を以下に例として示します。

Application Entity Name PhysicalTable Name Attribute
App Feedback FeedbackScreenshot OSUSR_s41_FeedbackScreenshot ImageBinary
App Feedback FeedbackSoundMessage OSUSR_s41_FeedbackSoundMessage SoundBinary
App Feedback Resource OSUSR_s41_Resource Content
App Feedback WebpageContent OSUSR_s41_WebpageContent Content

アプリケーションを無効にするにはどのようにすればよいですか?

アプリケーションを無効にするときは、Service Centerを使用します。[Factory]に移動し、[Applications]リストで無効にするアプリケーションを検索して選択し、アプリケーションの詳細に移動します。この画面に[Disable]ボタンがあります。

アプリケーションを無効にすると、以下のようになります。

  • Webページが使用できなくなります。「Application Temporarily Unavailable」という画面メッセージが表示されます。
  • Webサービスが使用できなくなります。以下の出力が返されます。{"Errors":["The Application is offline."],"StatusCode":500}
  • タイマーが実行されなくなります。アプリケーションが無効になっている間にタイマーの実行が設定されている場合、アプリケーションが有効になった直後にそのタイマーが実行されます。
  • BPTが停止します。データベーストリガーはアクティブですが、OSSYS_BPM_EVENTおよびOSSYS_BPM_EVENT_QUEUEシステムエンティティのレコードがスケジュール通りに処理されません。アプリケーションが有効になった後にこれらのテーブル内のレコードが処理され、BPTプロセスとアクティビティが通常のフローに戻ります。

ユーザー

アプリケーションユーザーを取得するにはどのようにすればよいですか?

ユーザーエンティティ外部キーの使用を検索するには、2つの手順を実行する必要があります。

  1. ユーザーエンティティ識別子を外部キーとして使用するエンティティアトリビュートを検索します。
    • 例 - 下記のクエリの詳細は以下のとおりです。
      • App Feedbackという名前のアプリケーションのアクティブなeSpaceでフィルタリングします。
      • Data Kindエンティティのみが返されるようにフィルタリングし、結果から静的エンティティの情報を除外します
      • ユーザー識別子のアトリビュートの型を‘bt’[eSpaceのSS_Key]’*’[エンティティのSS_Key]という形式でフィルタリングします。btはビジネスタイプを表し、その後にEspace Service CenterのSS_KeyOSSYS_ESPACE)と*が続き、最後にユーザーエンティティのSS_KeyOSSYS_ENTITY)で終わります。
        SELECT 
            OSSYS_APPLICATION.NAME [Application]
            , OSSYS_ESPACE.NAME [Espace]
            , OSSYS_ENTITY.NAME [Entity Name]
            , OSSYS_ENTITY.PHYSICAL_TABLE_NAME [Physical Table Name]
            , OSSYS_ENTITY_ATTR.NAME [Attribute]
        FROM OSSYS_APPLICATION
        JOIN OSSYS_APP_DEFINITION_MODULE
            ON OSSYS_APPLICATION.ID = OSSYS_APP_DEFINITION_MODULE.APPLICATION_ID
        JOIN OSSYS_MODULE
            ON OSSYS_APP_DEFINITION_MODULE.MODULE_ID = OSSYS_MODULE.ID
        JOIN OSSYS_ESPACE
            ON OSSYS_MODULE.ESPACE_ID = OSSYS_ESPACE.ID
        JOIN  OSSYS_ENTITY
            ON OSSYS_ESPACE.ID  = OSSYS_ENTITY.ESPACE_ID
        JOIN OSSYS_ENTITY_ATTR
            ON OSSYS_ENTITY.ID = OSSYS_ENTITY_ATTR.Entity_Id 
        WHERE OSSYS_APPLICATION.IS_ACTIVE = 1 /* Active Application */
            AND OSSYS_APPLICATION.NAME = 'App Feedback'
            AND OSSYS_ESPACE.IS_ACTIVE = 1 /* Active Espaces */
            AND OSSYS_ESPACE.IS_SYSTEM = 0 /* Not a System Espace */
            AND OSSYS_ENTITY.IS_ACTIVE = 1 /* Active Entity */
            AND OSSYS_ENTITY.Data_Kind = 'entity' /* staticEntity, entity, clientEntity */
            AND OSSYS_ENTITY_ATTR.IS_ACTIVE = 1 /* Active Attributes */
            AND OSSYS_ENTITY_ATTR.TYPE = 
                CONCAT(
                'bt', /* Business concept Type */
                /* SS_Key of the Espace Owner of the Platform Entities */
                (   SELECT SS_KEY 
                    FROM OSSYS_ESPACE 
                    WHERE NAME = 'ServiceCenter'), 
                '*', /* Separator */
                /* SS_Key of the User Entity of the corresponding Espace above */
                    (   SELECT SS_KEY 
                    FROM OSSYS_ENTITY 
                    WHERE NAME = 'User' 
                        AND ESPACE_ID = (SELECT ID FROM OSSYS_ESPACE WHERE NAME = 'ServiceCenter'))
                    )
Application eSpace Entity Name Physical Table Name Attribute
App Feedback ECT_Provider Rule_User OSUSR_s41_Rule_User User_Id
App Feedback ECT_Provider FeedbackExt OSUSR_s41_FeedbackExt StatusChangeBy
App Feedback ECT_Provider LastFeedback OSUSR_s41_LastFeedback UserId
App Feedback ECT_Provider AppConfig OSUSR_s41_AppConfig CreatedBy
App Feedback ECT_Provider AppConfig OSUSR_s41_AppConfig UpdatedBy
  1. ユーザーコンシューマエンティティごとに、アプリケーションで使用されているユーザー識別子の値を取得することができます。
    • 例 - OSUSR_s41_LastFeedbackエンティティのUserIdアトリビュートに保存されているユーザー識別子の値を取得します。null値をフィルタリングします。
    SELECT distinct(UserId) 
    FROM OSUSR_s41_LastFeedback
    WHERE UserId IS NOT NULL

アプリケーションロールを取得するにはどのようにすればよいですか?

ある環境の「Users」アプリケーションの各eSpaceに関連するすべてのロールを取得します。両方の環境でこのクエリを実行して結果を取得した後、eSpaceのSS_KeyとロールのSS_Keyを使用して相互に照合する必要があります。

下記のクエリを実行します。


SELECT 
      app.NAME [Application]
    , espace.NAME [Espace]
    , role.NAME [Role]
    , role.ID [RoleId] 
    , espace.SS_KEY [Espace SS_Key]
    , role.SS_KEY [Role SS_Key]
FROM OSSYS_APPLICATION app
JOIN OSSYS_APP_DEFINITION_MODULE appmudule
    ON app.ID = appmudule.APPLICATION_ID
JOIN OSSYS_MODULE module
    ON appmudule.MODULE_ID = module.ID
JOIN  ossys_ESPACE espace
    ON module.ESPACE_ID = espace.ID
    AND espace.IS_ACTIVE = 1 /* Active Espace */
    AND espace.IS_SYSTEM = 0 /* Not a System Espace */
JOIN ossys_Role role
    ON espace.id = role.espace_id
    AND role.IS_ACTIVE = 1 /* Active Role */
WHERE app.IS_ACTIVE = 1 /* Active Applications only */
    AND app.NAME = 'Users'

例 - クエリの実行結果の一部を以下に示します。

Application eSpace Role Espace SS_Key Role SS_Key
Users Users UserManager 7 65106059-0439-4be5-b011-2f01fba4afa6
Users Users SuperUser 8 65106059-0439-4be5-b011-2f01fba4afa6

アプリケーションデータ

アプリケーションデータの場所を確認するにはどのようにすればよいですか?

返されたアプリケーションeSpaceごとに、すべてのエンティティと物理名を返します。エンティティは1つのeSpaceに属し、eSpaceは1つのアプリケーションに属します。さらに、eSpaceは1つ以上のソリューションに属します。 eSpaceのSS KeyとエンティティのSS_Keyは同じ値を保持し続け、環境間で同じオブジェクトを表します。

例 - 「App Feedback」という名前のアプリケーションのエンティティを検索します。

SELECT 
      app.NAME [Application]
    , espace.NAME [Espace]
    , entity.NAME [Entity]
    , entity.PHYSICAL_TABLE_NAME [Physical Entity Name]
    , espace.SS_KEY [Espace SS_Key]
    , entity.SS_KEY [Entity SS_Key]
FROM OSSYS_APPLICATION app
JOIN OSSYS_APP_DEFINITION_MODULE appmodule
    ON app.ID = appmodule.APPLICATION_ID
JOIN OSSYS_MODULE
    ON appmodule.MODULE_ID = OSSYS_MODULE.ID
JOIN  ossys_ESPACE espace
    ON OSSYS_MODULE.ESPACE_ID = espace.ID
        AND espace.IS_ACTIVE = 1 /* Active Espace */
        AND espace.IS_SYSTEM = 0 /* Not a System Espace */
JOIN  ossys_ENTITY entity
    ON espace.ID  = entity.ESPACE_ID
    AND entity.IS_ACTIVE = 1 /* Active Entities */
    AND entity.Data_Kind = 'entity'
WHERE app.IS_ACTIVE = 1 /* Active Application */    
    AND app.NAME = 'App Feedback'

以下のデータが返されます。

Application Espace Entity Physical Entity Name SS_KEY SS_Key
App Feedback ECT_Provider AppConfig OSUSR_s41_AppConfig 50957770-1dd0-42bf-9fcb-c57953b87ce1 d43af2e2-daa1-4aec-8203-df5371aff811
App Feedback ECT_Provider CallbackRule OSUSR_s41_CallbackRule 50957770-1dd0-42bf-9fcb-c57953b87ce1 37a0ee89-268b-8bed-9ba1-8a75bf145294

BPT

ターゲット環境でBPTトリガーを停止するにはどのようにすればよいですか?

イベントテーブルは、BPTがトリガーするサブスクリプションを登録するために使用されます。トリガーはイベントテーブルのデータを使用して、BPTイベントキューのエントリを作成します。

クラウドインフラでは、BPTトリガーを無効にする権限がありません。 ターゲット環境のトリガーを停止ために実行可能な回避策の1つは、BPTがトリガーするエンティティ(OSUSR)に関連するイベントエンティティ(OSEVT)のレコードをすべて削除する方法です。この方法では、トリガーは無効になりませんが、スケジューラによって処理されるBPTイベントキューに何も作成されないため同じ結果が得られます。

必要な場合、ソース環境でも同じ回避策を使用できますが、元のデータが保持されるようにより慎重に行う必要があります。ソースのイベントデータは、ターゲットに移行する必要があり、この場合、トリガーを有効にするために再度挿入する必要があります。

イベントキューにトリガーイベントが挿入されないようにするため、ユーザーデータやアプリケーションデータなどを移行する前に最初の操作を実行する必要があります。

例 - ``Order````エンティティに関連するイベントエンティティのレコードをすべて削除します。

DELETE FROM OSEVT_ORDER 

BPTトリガーのサブスクリプションがあるイベントテーブルを取得するにはどのようにすればよいですか?

例 - イベントエンティティを検索します。以下のクエリを実行します。


select    app.NAME [Application]
    , entity.NAME [Entity]
    , entity.PHYSICAL_TABLE_NAME [Entity Physical Name]
    , entity.Event_Table_Name [Event Table Name]
from ossys_Espace espace
join ossys_entity entity
    on espace.ID = entity.ESPACE_ID
join OSSYS_MODULE module
    on espace.ID = module.ESPACE_ID
join OSSYS_APP_DEFINITION_MODULE appmodule
    on module.ID = appmodule.MODULE_ID
join OSSYS_APPLICATION app
    on appmodule.APPLICATION_ID = app.ID
where espace.IS_ACTIVE = 1
    and entity.Event_Table_Name is not null
    and entity.Expose_Process_Events = 1
    and app.IS_ACTIVE = 1

以下のデータが返されます。

Application Entity Entity Physical Name Event Table Name
Service Center TestCase OSSYS_TEST_CASE OSEVT_TEST_CASE
Service Center Group_Role OSSYS_GROUP_ROLE OSEVT_GROUP_ROLE
Service Center User OSSYS_USER OSEVT_USER
Service Center Group OSSYS_GROUP OSEVT_GROUP
Service Center Role OSSYS_ROLE OSEVT_ROLE
Service Center Group_User OSSYS_GROUP_USER OSEVT_GROUP_USER
BPT Testing WorldCity OSUSR_w83_WorldCity OSEVT_w83_WorldCity

例 - いずれかのイベントエンティティに含まれるデータを取得します。

select * 
from OSEVT_w83_WorldCity

以下のデータが返されます。

_ESPACE_ID _TENANT_ID _ACTIVITY_ID _PROCESS_DEF_ID _IS_UPDATE _IS_LIGHT ID
26 20 123956 NULL 1 0 2
26 20 123958 NULL 1 0 1
26 20 123957 NULL 1 0 5
26 20 123959 NULL 1 0 3
26 20 123955 NULL 1 0 4
  • eSpace ID - トリガーされるエンティティの定義と開発を含むeSpaceのeSpace識別子
  • テナントID - 上記のeSpace IDの同じユーザープロバイダのテナント識別子
  • Is_Update - エンティティのプロセススケジュールOnUpdateまたはOnCreateが処理するキューにイベントを追加するかどうかを定義します。「wait」または「conditional start」タイプのBPTアクティビティで使用されます
  • Is_Light - 軽量BPT定義/開発でイベントサブスクリプションが定義されているかどうかを定義します

アプリケーションのBPTプロセスインスタンスを取得するにはどのようにすればよいですか?

アプリケーションに関連するプロセスのリストを取得します。 下記のクエリは、プロセス定義とそれぞれのアプリケーションとeSpaceの所有者を検索します。

SELECT 
      app.NAME [Application]
    , espace.NAME [Espace]
    , process.ID [Process Id]
FROM OSSYS_APPLICATION app
JOIN OSSYS_APP_DEFINITION_MODULE appmodule
    ON app.ID = appmodule.APPLICATION_ID
JOIN OSSYS_MODULE module
    ON appmodule.MODULE_ID = module.ID
JOIN  ossys_Espace espace
    ON module.ESPACE_ID = espace.ID
    AND espace.IS_ACTIVE = 1 /* Active Espace*/
    AND espace.IS_SYSTEM = 0 /* Not System Espace*/
JOIN ossys_BPM_Process_Definition process_def
    ON espace.id = process_def.Espace_Id 
    AND process_def.Is_Active = 1 /* Active Process Def*/
JOIN ossys_BPM_Process process
    ON process.PROCESS_DEF_ID = process_def.id
JOIN ossys_BPM_Process_Status process_status
    ON process.STATUS_ID = process_status.ID
WHERE app.IS_ACTIVE = 1 /* Active Application */
ORDER BY espace.id, process.id

以下のデータが返されます。

Application Espace Process Id
Users Users 31217

フィルタを追加し、実行されている現在アクティブなプロセス(プロセスステータスのIs TerminatedフラグがFalseに設定されているプロセス)のみを取得することができます。

インスタンスを実行しているアクティビティを取得するにはどのようにすればよいですか?

ターミネートされておらず、実行されている現在アクティブなプロセスとアクティビティのリストを取得します。 下記のクエリは、ターミネートされていないプロセス定義、それらに関連するプロセスインスタンス、プロセスインスタンスに関連するターミネートされていないアクティビティ、それらのアプリケーションとeSpaceの所有者を検索します。

SELECT    app.NAME [Application]
    , espace.NAME [Espace]
    , process.ID [Process Id]
    , activity.Id [Activity Id]
FROM OSSYS_APPLICATION app
JOIN OSSYS_APP_DEFINITION_MODULE appmodule
    ON app.ID = appmodule.APPLICATION_ID
JOIN OSSYS_MODULE module
    ON appmodule.MODULE_ID = module.ID
JOIN  ossys_Espace espace
    ON module.ESPACE_ID = espace.ID
    AND espace.IS_ACTIVE = 1 /* Active Espace*/
    AND espace.IS_SYSTEM = 0 /* Not System Espace*/
JOIN ossys_BPM_Process_Definition process_def
    ON espace.id = process_def.Espace_Id 
    AND process_def.Is_Active = 1 /* Active Process Def*/
JOIN ossys_BPM_Process process
    ON process.PROCESS_DEF_ID = process_def.id
JOIN ossys_BPM_Process_Status process_status
    ON process.STATUS_ID = process_status.ID
JOIN ossys_BPM_Activity activity
    ON process.Id = activity.Process_Id
JOIN ossys_BPM_Activity_Status activity_status
    ON activity.Status_Id = activity_status.ID
WHERE app.IS_ACTIVE = 1 /* Active Application */
    and process_status.IS_TERMINAL = 0
    and activity_status.IS_TERMINAL = 0
ORDER BY espace.id, process.id

以下のデータが返されます。

Application Espace Process Id Activity Id
BPT Testing Migration 30987 123960
BPT Testing Migration 30987 123958
BPT Testing Migration 30988 123959
BPT Testing Migration 30988 123963
BPT Testing Migration 30989 123961
  • Was this article helpful?