そこで、Java ベースのデータ変換 / マスキング ツールを用意しました。これを Oracle 10g でテストしたかったのです。Oracle 10g の良いところは、いくつかのサンプル スキーマに 50 万件のレコードが含まれていることです。スキーマは、SH、OE、HR、IX などです。10g をインストールしたところ、インストール スクリプトが ORACLE_HOME/demo/scripts の下にあることがわかりました。
これらのスクリプトをバッチ モードで実行するように少しカスタマイズしました。これで、データ変換ソフトウェアをテストするためのソース データを作成するという私の要件の半分が解決されました。要件の後半は、同じスキーマを異なる名前 (TR_HR、TR_OE など...) でデータなしで作成することです。これらのスキーマは、ターゲット スキーマを表します。つまり、私のソフトウェアはスキーマ内のテーブルからデータを取得し、別のスキーマ内の同じテーブルにロードします。
ここで、ターゲット スキーマを作成して空にする際に 2 つの問題があります。
- バッチジョブでこれが欲しいです。ただし、入手した oracle スクリプトのサンプル スキーマ名は構成できません。そこで、OE を TR_OE に、HR を TR_HR に置き換えて、スクリプトを作成してみました。ただし、このアプローチは、サンプル スキーマの作成方法がやや複雑であるため、やや苛立たしいものです。オラクルはシノニム、ビュー、具体化されたビュー、データ型、および多くの奇妙なものを作成します。
- ターゲット スキーマ (TR_HR、TR_OE、...) を空にしたいと考えています。しかし、一部のスキーマには循環参照が含まれているため、データを削除できません。唯一の回避策は、特定の外部キーを削除し、データを削除してから、制約を追加し直すことです。
大騒ぎせずに、これをすべて行う簡単な方法はありますか? テストには複雑なデータ セットが必要です (トリガーを持つテーブル、複数の階層などのように複雑です。たとえば、最大 5 レベルの子を持つ子テーブル、IOT テーブルと IOT テーブルを参照する親テーブル)。非 IOT テーブルなどを参照します。) サンプル スキーマは、データ セットの観点からはほぼ完璧です。唯一の課題は、ソース スキーマをロードし、ターゲット スキーマを作成して空にするというこのプロセス全体を自動化することです。あなたの助けと提案に感謝します。
アップデート
Oracle サンプル スキーマを手動でインストールするために実行する必要があるメイン スクリプトは、mkplug.sql です。以下は、dmp ファイルからスキーマをロードする行です。
host imp "'sys/&&password_sys AS SYSDBA'" transport_tablespace=y file=&imp_file log=&imp_logfile datafiles='&datafile' tablespaces=EXAMPLE tts_owners=hr,oe,pm,ix,sh
さて、私はこの行を(mkplug.sqlおよび他のすべてのSQLファイルのパス関連の問題にパッチを当てた後)これに変更しようとしました:
host imp "'sys/&&password_sys AS SYSDBA'" rows=n transport_tablespace=y file=&imp_file log=&imp_logfile datafiles='&datafile' tablespaces=EXAMPLE tts_owners=hr,oe,pm,ix,sh
そして... それは助けにはなりませんでした。行= n属性にもかかわらず、スキーマは行データで作成されました:(