ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
PL/SQL で表定義のSQLを取得 ( No.17 )
日時: 2008/07/23 17:02
名前: lightbox



エクスポートで出力したダンプファイルより作成します。
基本的には、Data Pump Import ユーティリティ で行う表定義を取得と同じです 

スキーマ表現を変更したい場合のオプションは、後でエディタで変更できるので
特に必要ありませんが、インポート処理をそのユーザで行いたい場合は、
select * from USER_ROLE_PRIVS で権限を確認して( たいてい無いので )
SYSTEM でログインして権限を付与する必要があります
( コマンドプロンプトから impdp を実行する場合は、SYSTEM でログインするのが通常です )
※ ロールの一覧は select * from DBA_ROLES
PROCEDURE DATAPUMP_SQL_FILE

/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
	J_HANDLE NUMBER;
	J_STS VARCHAR2(20);
/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
	DBMS_OUTPUT.PUT_LINE('デバッグ:開始');

	/***************************/
	/* OPEN */
	/***************************/
	J_HANDLE := DBMS_DATAPUMP.OPEN(
		'SQL_FILE'
		,'TABLE'
		,NULL
		,NULL
		,'COMPATIBLE'
		,DBMS_DATAPUMP.KU$_COMPRESS_METADATA
	);

	/***************************/
	/* 入力ファイル */
	/***************************/
	DBMS_DATAPUMP.ADD_FILE(
		J_HANDLE
		,'TABLE_BACKUP_TEST.ORA'
		,'MYDIR'
		,NULL
		,DBMS_DATAPUMP.KU$_FILE_TYPE_DUMP_FILE
	);

	/***************************/
	/* 出力ファイル */
	/***************************/
	DBMS_DATAPUMP.ADD_FILE(
		J_HANDLE
		,'TABLE_BACKUP_TEST.SQL'
		,'MYDIR'
		,NULL
		,DBMS_DATAPUMP.KU$_FILE_TYPE_SQL_FILE
	);

	/***************************/
	/* 出力オプション */
	/***************************/
	DBMS_DATAPUMP.METADATA_TRANSFORM(
		J_HANDLE
		,'SEGMENT_ATTRIBUTES'
		,0
		,NULL
	);

	/***************************/
	/* スキーマ表現を変更したい場合 */
	/* 但し以下の権限が必要 */
	/* IMP_FULL_DATABASE ロール */
	/***************************/
	DBMS_DATAPUMP.METADATA_REMAP (
		J_HANDLE
		,'REMAP_SCHEMA'
		,'ORA_01'
		,'JET'
		,NULL
	);

	/***************************/
	/* SQL 式で スキーマを指定 */
	/***************************/
	DBMS_DATAPUMP.METADATA_FILTER(
		J_HANDLE
		,'SCHEMA_EXPR'
		,'IN (''ORA_01'')'
	);

	/***************************/
	/* SQL 式で 表を指定 */
	/***************************/
	DBMS_DATAPUMP.METADATA_FILTER(
		J_HANDLE
		,'NAME_EXPR'
		,'IN (''社員マスタ'',''商品マスタ'')'
	);

	/***************************/
	/* 開始 */
	/***************************/
	DBMS_DATAPUMP.START_JOB(
		J_HANDLE
		,0
	);

	/***************************/
	/* JOB 終了まで待機 */
	/***************************/
	DBMS_DATAPUMP.WAIT_FOR_JOB(
		J_HANDLE
		,J_STS
	);

	/***************************/
	/* 終了ステータスの表示 */
	/***************************/
	DBMS_OUTPUT.PUT_LINE('処理終了:'||J_STS);

/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
	WHEN OTHERS THEN
		DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
Oracle ドキュメント : DBMS_DATAPUMP