Known issues, limitations, and notes

このページには、次の既知の問題、制限、および注意事項がリストされています。

Migration Portal

ラップされたオブジェクト

Migration Portalはラップされたオブジェクトを評価できません。抽出されたDDLに含める場合、それらはMigration Portalにロードされず、評価されるオブジェクトの数に含まれません。ラップされたオブジェクトを評価してEDB Postgres Advanced Serverに移行する場合は、Migration PortalにアップロードするDDLファイルにオブジェクトのアンラップバージョンを含めます。これを行う推奨される方法は、スキーマ抽出を実行する前に、Oracleデータベース内のラップされたバージョンをクリアテキストバージョンに置き換えることです。スキーマ抽出を実行した後、オブジェクトをラップされたバージョンに置き換えることができます。

ファイルエンコーディング

Migration Portalでは、 .SQL 出力ファイルをUTF-8エンコード形式にすることをお勧めします。非UTF-8エンコーディングの.SQL ファイルをアップロードすると、UTF-8と互換性のないすべての文字が出力DDLで置換文字「�」に変換されます。

Tip

LinuxのiconvユーティリティまたはWindowsのLibIconvユーティリティを使用して、抽出したファイルをUTF-8形式に手動で変換できます。たとえば、データベースのキャラクタセットがLatin-1(ISO-8859-1)の場合、次のように抽出したファイルをUTF-8形式に変換できます。

ALTERステートメント

ALTER TABLE と ALTER TRIGGER を除き、Migration PortalはDDL内の他の ALTER ステートメントを処理しません。

ユーザー、ロール、プロファイル、および付与

付与

Migration Portalは、抽出およびアップロードされたスキーマのOracleユーザーの評価と移行をサポートするようになりました。プロジェクトに関連付けられたスキーマのすべてのユーザー、ロール、およびプロファイルは、Migration Portalビューの GLOBAL_OBJECTS 擬似スキーマの下にグループ化されます。現在、システム権限、オブジェクト権限、およびロールの付与は、ユーザーオブジェクトのDDLに含まれています。同様に、ロールへのシステム権限とオブジェクト権限の付与は、ロールオブジェクトのDDLに含まれています。

付与は現在ユーザーオブジェクトとロールオブジェクトにアタッチされているため、ユーザーに権限が付与されている1つ以上のオブジェクトに障害が発生すると、ユーザーオブジェクト自分自身が評価に失敗します。この問題を解決するには、個々のステートメントにSQL単一行コメント(-- )を使用するか、連続したgrantステートメントにSQL複数行コメント(/* */ )を使用して、失敗したオブジェクトのgrantステートメントをコメントアウトし、オブジェクトを再評価できます。実行されます。失敗した付与ステートメントに対応する失敗したオブジェクトが修復された後、以前に失敗した付与ステートメントのコメントを外し、ユーザーオブジェクトを再評価できます。

特権

スキーマをターゲットEDB Postgres Advanced Serverデータベースに移行するには、移行の実行に使用されているターゲットデータベースユーザーに次の権限が必要です。

  • プロファイルを移行するSUPERUSER

  • ユーザーとロールを移行するSUPERUSER またはCREATE ROLE

パスワード

ユーザーを移行する場合、Migration Portalはユーザーのパスワードを移行しません。ユーザーは、パスワードなしでターゲットEDB Postgres Advanced Serverデータベースに作成されます。ユーザーにパスワードを構成することが望ましい場合、または必要な場合は、ユーザーの移行後にターゲットデータベースで手動で行うことができます。

プロファイル

Migration Portalは、スキーマユーザーに割り当てられた非DEFAULT プロファイルを移行します。 Oracleプロファイルには、パスワードとリソースの両方の制限が含まれます。 EDB Postgres Advanced Serverは、Oracleパスワード関連の制限のみをサポートしています。リソース制限はプロファイルとともに抽出されますが、パスワード制限のみがMigration Portalによってアップロード、評価、および移行されます。また、Oracleデータベースでは、 DEFAULT プロファイルが新しい制限値でオーバーライドされている可能性があります。 DEFAULT プロファイルは、 Migration Portalによって移行されません。 EDB Postgres Advanced ServerのDEFAULT プロファイルを、Oracle DEFAULT プロファイルに適用された制限のオーバーライドで構成する必要がある場合は、 ALTER PROFILE ステートメントを使用してターゲットのEDB Postgres Advanced Serverデータベースに手動で適用する必要があります。

注釈

バージョン4.3.0以降、Migration Portalはユーザー、ロール、プロファイル、および付与の評価をサポートしています。ただし、Migration Portalの以前のバージョン(4.3.0より前)を使用して作成されたプロジェクトの場合、この機能はサポートされていません。ユーザー、ロール、プロファイル、および付与を評価するには、最新バージョンのEDB DDLエクストラクタを使用して新しいプロジェクトを作成します。

Oracleのデフォルトケースを使用

Oracleのデフォルトのケース機能を使用するオプションでは、OracleデータベースからEDB Postgres Advanced Serverデータベースにスキーマを移行するときに、すべてのデータベースオブジェクトのOracleのデフォルトの大文字の命名規則が保持されます。

EDB DDLエクストラクタおよびOracle Data Pumpユーティリティは、PL / SQLの本文内で参照されるオブジェクト名を除き、Oracleのデフォルトのケース(つまり、オブジェクト名の大文字または大文字と小文字を区別するオブジェクト名のそれぞれのケース)ですべてのDDLを抽出しますDDLの作成時にユーザーが明示的に二重引用符で囲まない限り、オブジェクト。

そのため、Migration Portalはこの機能のソーススキーマファイルからのすべての二重引用符を保持します。さらに、Migration Portalは二重引用符を次のものに適用します。

  • ビューおよびマテリアライズドビューのSELECT ステートメント内の列名。

  • チェック制約内の列名。

  • トリガーヘッダー内のテーブル名と列名。

Oracleの大文字と小文字を使用するオプションが選択されていない場合、Migration Portalのデフォルトの動作は、すべてのオブジェクトが小文字( EDB Postgres Advanced Serverのデフォルトのケース)で作成されます。ソースDDL内。

useOraCase機能を使用して、以下のソースとターゲットのDDLを見つけます。

- - Source DDL
CREATE TABLE "RHS_SANITY"."DEPT"
   (    "DEPTNO" NUMBER(2,0),
    "DNAME" VARCHAR2(14),
    "LOC" VARCHAR2(14),
     CONSTRAINT "DEPTDEPTNO_PK" PRIMARY KEY ("DEPTNO")
  USING INDEX  ENABLE,
     CONSTRAINT "DEPTDNAME_UK" UNIQUE ("DNAME")
  USING INDEX  ENABLE
   ) ;

- - Target DDL
CREATE TABLE "RHS_SANITY"."DEPT"
   (    "DEPTNO" NUMBER(2,0),
    "DNAME" VARCHAR2(14),
    "LOC" VARCHAR2(14),
     CONSTRAINT "DEPTDEPTNO_PK" PRIMARY KEY ("DEPTNO")
  USING INDEX  ENABLE,
     CONSTRAINT "DEPTDNAME_UK" UNIQUE ("DNAME")
  USING INDEX  ENABLE
   ) ;

Oracleのデフォルトのケースを使用している間、他のプロジェクトと比較して互換性率が低下する場合があります。この互換性率の低下に寄与する可能性のある理由は次のとおりです。

  • 最も一般的な理由は、オブジェクト/リレーションが存在しないことです。このシナリオは、テーブル/オブジェクトがOracleのケースを保持するために二重引用符で囲まれているのに対し、障害が発生したオブジェクトでは二重引用符なしで参照されていることが原因です。例:

CREATE TABLE "HR"."EMP"
   (   "EMPNO" NUMBER(4,0),
         "ENAME" VARCHAR2(10),
         "JOB" CLOB,
         "MGR" NUMBER(4,0),
         "HIREDATE" DATE,
         "SAL" NUMBER(7,2),
         "COMM" NUMBER(7,2),
         "DEPTNO" NUMBER(2,0),
       CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
  USING INDEX  ENABLE
   ) ;

CREATE OR REPLACE  PROCEDURE "HR"."PROC"
IS
 CURSOR emp_cur IS SELECT hiredate, CAST(hiredate AS timestamp(6)) AS timestamped FROM emp;
 REC emp_cur%rowtype;
BEGIN
   OPEN emp_cur;
   LOOP
   FETCH emp_cur INTO rec;
       EXIT WHEN emp_cur%NOTFOUND ;
               DBMS_OUTPUT.PUT_LINE(rec.hiredate ||  ||rec.timestamped);
         END LOOP;
    CLOSE EMP_CUR;
   END ;

エラーは次のように表示されます。

edb_notranlate_2 上記の例では、テーブル名とその列名は、 CREATE TABLE ステートメントで引用符で囲まれた大文字の名前で指定されています。ただし、 CREATE OR REPLACE PROCEDURE ステートメントでは、テーブルとその列は、引用符で囲まれていない小文字の識別子を使用して参照されます。

  • %type を使用して定義された変数は、コードオブジェクトで失敗します。先行するtable.column-name はemployees.employee_id%type のように小文字ですが、実際のテーブルの名前と列名は二重引用符で囲まれています。例:

CREATE TABLE "HR"."EMPLOYEES"
   (    "EMPLOYEE_ID" NUMBER(6,0),
          "FIRST_NAME" VARCHAR2(20),
          "LAST_NAME" VARCHAR2(25) CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL ENABLE,
          "EMAIL" VARCHAR2(25) CONSTRAINT "EMP_EMAIL_NN" NOT NULL ENABLE,
          "PHONE_NUMBER" VARCHAR2(20),
          "HIRE_DATE" DATE CONSTRAINT "EMP_HIRE_DATE_NN" NOT NULL ENABLE,
          "JOB_ID" VARCHAR2(10) CONSTRAINT "EMP_JOB_NN" NOT NULL ENABLE,
          "SALARY" NUMBER(8,2),
          "COMMISSION_PCT" NUMBER(2,2),
          "MANAGER_ID" NUMBER(6,0),
          "DEPARTMENT_ID" NUMBER(4,0),
           CONSTRAINT "EMP_SALARY_MIN" CHECK ("SALARY" > 0) ENABLE,
           CONSTRAINT "EMP_EMP_ID_PK" PRIMARY KEY ("EMPLOYEE_ID")
  USING INDEX  ENABLE,
           CONSTRAINT "EMP_EMAIL_UK" UNIQUE ("EMAIL")
  USING INDEX  ENABLE
   ) ;
CREATE OR REPLACE  PROCEDURE "HR"."PKG" AS
-- declare variables for data fetched from cursor
  empid       employees.employee_id%TYPE; -- variable for employee_id
  hiredate    employees.hire_date%TYPE;   -- variable for hire_date
  firstname   employees.first_name%TYPE;  -- variable for first_name
  lastname    employees.last_name%TYPE;   -- variable for last_name
  rowcount    NUMBER;
  bonusamount NUMBER;
  yearsworked NUMBER;
-- declare the cursor with a parameter
  CURSOR cursor1 (thismonth NUMBER)IS
    SELECT employee_id, first_name, last_name, hire_date FROM employees
       WHERE EXTRACT(MONTH FROM hire_date) = thismonth;
BEGIN
  null;
END;

エラーは次のように表示されます。

syntax error at or near "%" (line 3, char 37)
  • テーブルの列のデータ型にTYPE参照がある場合、大文字と小文字の違いにより失敗します。例:

CREATE OR REPLACE TYPE "HR"."USER_TYPE" IS OBJECT(
    "ID" NUMBER,
    "NAME" VARCHAR2(256)
);

CREATE TABLE "HR"."MY_TABLE"
(
    "ID" NUMBER,
    "MY_NAME" user_type
);

エラーは次のように表示されます。

type "user_type" does not exist
LINE 4:     "MY_NAME" user_type
              ^
SQL state: 42704
Character: 58

EDB DDLエクストラクタ

  • EDB DDLエクストラクタスクリプトは、Flashback を使用して復元されたオブジェクトで、まだBIN$b54+4XlEYwPgUAB/AQBWwA==$0 のような名前が付いているものを抽出しません。これらのオブジェクトを抽出する場合は、オブジェクトの名前を変更して、抽出プロセスを再実行する必要があります。

  • EDB DDLエクストラクタは、通常のテーブルとしてnologging テーブルを抽出します。これらのテーブルがEDB Postgres Advanced Serverに移行されると、WALログファイルが作成されます。

  • EDB DDLエクストラクタは、ステータスがVALID のオブジェクトのみを抽出します。 Migration Portalで評価するINVALID ステータスのオブジェクトについては、最初にVALID に更新します。

  • EDB DDLエクストラクタは、Oracleラップ機能を使用して難読化されたオブジェクトを抽出しません。そのため、これらのオブジェクトは、 Migration Portalによって評価されるDDLのセットに含まれません。これらのオブジェクトを評価してEDB Postgres Advanced Serverに移行する場合は、オブジェクトのラップバージョンをラップされていないバージョンに置き換えます。詳細については、 ラップされたオブジェクト を参照してください。

  • EDB DDLエクストラクタは、スキーマ名とその依存情報を保存するためのグローバル一時テーブルを作成します。これらのテーブルは、抽出が成功すると削除されます。

  • EDB DDLエクストラクタスクリプトは、PostgreSQLがサポートしていないため、名前がPG_ で始まるスキーマを抽出しません。これらのスキーマを抽出する場合は、抽出前にスキーマの名前を変更する必要があります。

  • EDB DDLエクストラクタは、プロファイル、ロール、および付与の情報を自動的に抽出します。

Oracle Data Pumpユーティリティ

  • Oracleの引用演算子でIDENTIFIED BY 句を使用してデータベースリンクを作成すると、Migration PortalがSQLファイルの解析に失敗する場合があります。たとえば、IDENTIFIED BY VALUES q'[:1]' 。ファイルを正常に解析するには、実際のパスワードを使用してみてください。たとえば、IDENTIFIED BY my_password 。

  • Oracle Data Pumpユーティリティによって生成されたDDLには、Migration Portalで処理されないALTER FUNCTION 、ALTER PACKAGE 、ALTER TYPE などのALTER STATEMENTS が含まれる場合があります。

・ Oracle Data Pumpがスキーマモードで実行されている場合、つまりexpdp コマンドの実行時にSCHEMAS パラメーターが使用されている場合、プロファイルとロールが抽出されません。エクスポートされるスキーマユーザーにプロファイルが割り当てられている場合、プロファイルはエクスポートされたimpdp ファイルの一部ではないため、Migration Portalでのスキーマユーザーオブジェクトの評価は失敗します。この問題を解決するには、ユーザーオブジェクトのターゲットDDLでプロファイルの割り当てを削除し、ユーザー作成オブジェクトを再評価します。