1

いくつかの特定の要件の下で、Oracle データベース ユーザーのデータのバックアップ/エクスポートおよび復元/インポートを実現しようとしています。すでに解決策を考えていますが、それが正しい方法である場合は、フィードバックをいただければ幸いです。

クライアントでは、jdbc を介してリモート oracle データベースにアクセスできる Java アプリケーションが実行されています。sql*plusクライアントで ProcessBuilder を介して実行することもできます。クライアントには最低限の権利が必要です。サーバーでは、Oracle Database 10 (またはそれ以上) が実行されています。

目標は
、a) このアプリケーション/ユーザーのデータのみ (およびそれ以降) をエクスポートすること、
b)
リモート データベース サーバーへのファイル アクセスなし (ssh、ftp、Enterprise Manager なし、経由のみ) でデータを他のリモート データベースにインポートすることです。 jdbc、sql*plus、またはその他のクライアント ツール)、およびデータベース インスタンスはサーバー上にデータを作成しないでください。クライアントはファイルを削除できないためです。中間ファイルなしで別のデータベースにデータを直接コピー/複製することは意図されていません。

私のアプローチ

書き出す

i) sql*plus を介してテーブル定義ファイル (tableName.sql) を作成します。

spool tableName.sql
select dbms_metadata.get_ddl('TABLE','tableName','dbUser') from dual;
spool off;

ii) sqlplus と適切な変数 (ラインサイズなど) を使用して、ユーザーのすべてのテーブルのデータをフラットファイル (tableName.txt) に抽出します。

spool tableName.txt;
select * from tableName;
spool off;

輸入

i) 生成された SQL スクリプトを実行してテーブルを作成する

ii) テーブル データをインポートするために sql*Loader を実行します。

sqlldr dbUser/dbPW control=loadTable.control

ここで、loadTable.control は次のとおりです。

load data
infile 'tableName.txt'
into table tableName
fields terminated by ',' optionally enclosed by '"'
TRAILING NULLCOLS
( ... )

現時点では、tableName.txt のフォーマットに問題があり、別の方法がないか自問自答しています。さらに、クライアント/サーバーの文字セットにも問題があると思います。

私の理解が正しければ、データ ポンプ エクスポート/インポート ツールには DATABASE LINK が必要であり、そのためクライアント上で Oracle インスタンスが実行されている必要があります。

RMAN にはあまりにも多くの権限が必要であり、データベース全体のバックアップに重点が置かれていると思います。

いくつかの背景情報

私は、MySQL データベースの同じ手順をすでに実現しています。私は次のようにエクスポートを実装しました: i)すべてのテーブルに対して
テーブル定義ファイル(tableName.sql)を作成する ii)すべてのテーブルのデータをファイル(tableName.txt)に抽出するSHOW CREATE TABLE

mysql --host=dbHost --port=dbPort --user=dbUser --password=dbPassword --default-character-set=DEFAULT_CHARACTER_SET --quick --database=dbName --execute='Select * from table' > tableName.txt

インポートのために、生成された sql スクリプトを実行してテーブルを作成し、続いて以下を実行します。

LOAD DATA LOCAL INFILE 'tablename.txt' REPLACE INTO TABLE tableName;
4

0 に答える 0