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は、スキーマユーザーに割り当てられたnon-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エクストラクタは、プロファイル、ロール、および付与の情報を自動的に抽出します。

  • EDB DDLエクストラクタは現在、Oracle 11gからのROLES 、SYSTEM GRANTS ON ROLES 、OBJECT GRANTS ON ROLES 、およびROLE GRANTS の抽出をサポートしていません。これにより、抽出されたファイルのこれらのオブジェクトタイプに対応するセクションにエラーメッセージが書き込まれます。これらのエラーは、 Migration Portalによるこれらのファイルの評価に問題を引き起こしません。

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のプロファイル割り当てを削除し、ユーザー作成オブジェクトを再評価します。

  • スキーマモードでimpdp またはexpdp を使用して、Oracle 11gからROLES 、SYSTEM GRANTS ON ROLES 、OBJECT GRANTS ON ROLES 、およびROLE GRANTS を抽出しようとすると、エラーが表示される場合があります。回避策は、full=y オプションを使用することです。これにより、すべてのスキーマと前述のオブジェクトタイプがエラーなしで抽出されます。