

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Oracle SERIALLY\$1REUSABLE プラグマパッケージを PostgreSQL に移行
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql"></a>

*Amazon Web Services、Vinay Paladi*

## 概要
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-summary"></a>

このパターンは、SERIALLY\$1REUSABLE プラグマとして定義されている Oracle パッケージをAmazon Web Services (AWS) 上の PostgreSQL に移行するための段階的なアプローチを提供します。このアプローチでは、SERIALLY\$1REUSABLE プラグマの機能が維持されます。

PostgreSQL はパッケージの概念と SERIALLY\$1REUSABLE プラグマをサポートしていません。PostgreSQL でも同様の機能を実現するには、パッケージ用のスキーマを作成し、関連するすべてのオブジェクト (関数、プロシージャ、タイプなど) をスキーマ内にデプロイできます。SERIALLY\$1REUSABLE プラグマの機能を実現するために、このパターンで提供されるラッパー関数スクリプトの例では、「[AWS Schema Conversion Tool (AWS SCT) 拡張パック](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html)」を使用しています。

詳細については、Oracle ドキュメントの「[SERIALLY\$1REUSABLE Pragma](https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems046.htm)」を参照してください。

## 前提条件と制限
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント。
+ AWS SCT の最新バージョンと必要なドライバー
+ Amazon Aurora PostgreSQL 互換エディションデータベースまたは PostgreSQL データベース用の Amazon Relational Database Service (Amazon RDS) 

**製品バージョン**
+ Oracle データベースバージョン 10g 以降

## アーキテクチャ
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-architecture"></a>

**ソーステクノロジースタック**
+ Oracle Database のオンプレミス

**ターゲットテクノロジースタック**
+ 「[Aurora PostgreSQL 互換](https://aws.amazon.com/rds/aurora/details/postgresql-details/)」または Amazon RDS for PostgreSQL
+ AWS SCT

**移行アーキテクチャ**

![\[AWS SCT、.sql ファイル、手動変換、PostgreSQL を使用して AWS に送信されるオンプレミスの Oracle DB データ。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/fe3c45d2-6ea4-43b5-adb1-18f068f126b9/images/2dc90708-e300-4251-9d12-de97b6588b72.png)


## ツール
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-tools"></a>

**AWS サービス**
+ 「[AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)」は、ソースデータベーススキーマとカスタムコードの大部分をターゲットデータベースと互換性のある形式に自動的に変換することで、異種データベース移行をサポートします。
+ 「[Amazon Aurora PostgreSQL 互換エディション](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)」は、PostgreSQL デプロイのセットアップ、運用、スケーリングを支援するフルマネージド型で ACID 準拠のリレーショナルデータベースエンジンです。
+ 「[Amazon Relational Database Service (Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)」を使用して、AWS クラウドでの PostgreSQL リレーショナルデータベースをセットアップ、運用、スケーリングできます。

その他のツール
+ 「[pgAdmin](https://www.pgadmin.org/)」は PostgreSQL 用のオープンソース管理ツールです。データベースオブジェクトの作成、管理、使用を支援するグラフィカルインターフェイスを提供します。

## エピック
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-epics"></a>

### AWS SCT を使用して Oracle パッケージを移行する
<a name="migrate-the-oracle-package-by-using-aws-sct"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AWS SCT を設定します。 | ソースデータベースへの AWS SCT 接続を設定します。詳細については、「[AWS SCTのソースとしての Oracle データベースの使用](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html)」を参照してください。 | DBA、開発者 | 
| スクリプトを変換します。 | AWS SCT を使用して Oracle パッケージを変換します。そのためには、ターゲットデータベースを Aurora PostgreSQL 互換として選択します。 | DBA、開発者 | 
| .sql ファイルを保存します。 | .sql ファイルを保存する前に、AWS SCT の **[プロジェクト設定]** オプションを **[ステージごとの単一ファイル]** に変更します。AWS SCT は、.sql ファイルをオブジェクトタイプに基づいて複数の.sql ファイルに分割します。 | DBA、開発者 | 
| コードを変更してください。 | AWS SCT によって生成された `init` 関数を開き、「*追加情報*」セクションの例に示すように変更します。機能 `pg_serialize = 0` を実現するための変数が追加されます。 | DBA、開発者 | 
| 変換をテストします。 | `init` 関数を Aurora PostgreSQL 互換データベースにデプロイし、結果をテストします。 | DBA、開発者 | 

## 関連リソース
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-resources"></a>
+ 「[AWS スキーマ変換ツール](https://aws.amazon.com/dms/schema-conversion-tool/)」
+ 「[Amazon RDS](https://aws.amazon.com/rds/)」 
+ 「[Amazon Aurora 機能](https://aws.amazon.com/rds/aurora/postgresql-features/)」
+ 「[SERIALLY\$1REUSABLE Pragma プラグマ](https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/seriallyreusable_pragma.htm#LNPLS01346)」

## 追加情報
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-additional"></a>

```
Source Oracle Code:

CREATE OR REPLACE PACKAGE test_pkg_var
IS
PRAGMA SERIALLY_REUSABLE;
PROCEDURE function_1
 (test_id number);
PROCEDURE function_2
 (test_id number
 );
END;

CREATE OR REPLACE PACKAGE BODY test_pkg_var
IS
PRAGMA SERIALLY_REUSABLE;
v_char VARCHAR2(20) := 'shared.airline';
v_num number := 123;

PROCEDURE function_1(test_id number)
IS
begin
dbms_output.put_line( 'v_char-'|| v_char);
dbms_output.put_line( 'v_num-'||v_num);
v_char:='test1';
function_2(0);
END;

PROCEDURE function_2(test_id number)
is
begin
dbms_output.put_line( 'v_char-'|| v_char);
dbms_output.put_line( 'v_num-'||v_num);
END;
END test_pkg_var;

Calling the above functions

set serveroutput on


EXEC test_pkg_var.function_1(1);


EXEC test_pkg_var.function_2(1);


Target Postgresql Code:


CREATE SCHEMA test_pkg_var;

CREATE OR REPLACE FUNCTION test_pkg_var.init(pg_serialize IN INTEGER DEFAULT 0)

RETURNS void
AS
$BODY$

DECLARE

BEGIN

if aws_oracle_ext.is_package_initialized( 'test_pkg_var' ) AND pg_serialize = 0

then

return;

end if;

PERFORM aws_oracle_ext.set_package_initialized( 'test_pkg_var' );

PERFORM aws_oracle_ext.set_package_variable( 'test_pkg_var', 'v_char', 'shared.airline.basecurrency'::CHARACTER

VARYING(100));

PERFORM aws_oracle_ext.set_package_variable('test_pkg_var', 'v_num', 123::integer);

END;

$BODY$

LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION test_pkg_var.function_1(pg_serialize int default 1)

RETURNS void
AS

$BODY$
DECLARE

BEGIN

PERFORM test_pkg_var.init(pg_serialize);

raise notice 'v_char%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_char');

raise notice 'v_num%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_num');

PERFORM aws_oracle_ext.set_package_variable( 'test_pkg_var', 'v_char', 'test1'::varchar);

PERFORM test_pkg_var.function_2(0);
END;

$BODY$
LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION test_pkg_var.function_2(IN pg_serialize integer default 1)

RETURNS void

AS

$BODY$

DECLARE

BEGIN

PERFORM test_pkg_var.init(pg_serialize);

raise notice 'v_char%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_char');

raise notice 'v_num%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_num');

END;
$BODY$
LANGUAGE plpgsql;


Calling the above functions

select test_pkg_var.function_1()

 select test_pkg_var.function_2()
```