インポートにはData Pumpを使っています。
Recovery Managerではない理由は次の通り。
1.はじめに・インポート先(開発DB)の容量不足でエクスポートデータを置けない ・サーバ間マテリアライズドビューが多数あるので、テーブルとインデックス以外をリカバリしたくない ・週次でRMANフルバックアップという運用をしているため、リカバリがめんどうw
Oracleには2種類のエクスポート/インポートコマンドがあります。
Data Pumpを使っている理由は、速度とスキーマ変更機能です。
2.作業の流れ
ここでは、マテビューのマスタ側サーバのエクスポートデータをインポートします。
そのままインポートするとマテビューログや統計情報も含まれるので、次の流れで 行います。
(1)バックアップサーバからエクスポートデータをコピー(1)バックアップサーバからエクスポートデータをコピー (2)DDLの抽出ディレクトリの確認 (3)エクスポートデータからDDLだけをファイル出力 (4)DDLファイルを編集し、テーブルおよびインデックス以外を削除 (5)編集したDDLを実行してcreate table|index (6)エクスポートデータからレコードデータのみをインポート (7)analyze
エクスポートデータのコピー例
(2)DDLの抽出ディレクトリの確認$ ssh sssdev1 $ /backup/databasefile/201008/sssdb3/ $ scp sss01_db_i_dp20100820.dmp.gz oracle@sssdb11:/usr/local/dbdata/
ディレクトリ設定がされているか確認します。
ここではEXPDP_DATAを使います。
(3)エクスポートデータからDDLだけをファイル出力select * from dba_directories; OWNER DIRECTORY_NAME DIRECTORY_PATH ---------- ------------------------- --------------------------------------------- SYS ORACLE_OCM_CONFIG_DIR /opt/app/oracle/product/10.2.0/db/ccr/state SYS DATA_PUMP_DIR /opt/app/oracle/product/10.2.0/db/rdbms/log/ SYS EXPDP_DATA /usr/local/dbdata
本番システムで使っていないスキーマにインポートしたい時はremap_schemaが非常に便利です。
remap_tableの方が便利ですが、たしか11gからだったと思います。
ここではtestdocomoという調査用に作ったスキーマに変換します。
(4)DDLファイルを編集し、テーブルおよびインデックス以外を削除$ vi testdocomo.par1_0820 directory=expdp_data dumpfile=sss01_db_i_dp20100820.dmp ★エクスポートしたデータ logfile=sss01_db_i_sql20100820.log job_name=job_impdp sqlfile=sss01_db_i_20100820.sql ★DDLのファイル出力 remap_schema=sss01docomo:testdocomo ★別スキーマにも変換可能 remap_tablespace=sss01_i_data:test_i_data ★別表領域にも変換可能 remap_tablespace=sss01_i_idx:test_i_idx remap_tablespace=mvlog_i_data:test_i_data INCLUDE=TABLE:"IN ('T_ACCESS1','T_USER1')" ★テーブル指定も可能 $ impdp testdocomo/xxxxxxxxxxxx parfile=testdocomo.par1_0820
TABLE, INDEX, CONSTRAINT以外を削除します。
特に、マテビューログのSYS用DDLは、元のスキーマ名で設定するので注意。
また、ビットマップインデックスは、通常のインデックスとは別項目で出力することも注意。
(5)編集したDDLを実行してcreate table|indexvi等で編集して★だけ残します。 $ grep "^-- new obj" sss01_db_i_20100902.sql -- new object type path is: SCHEMA_EXPORT/TABLE/TABLE ★ -- new object type path is: SCHEMA_EXPORT/TABLE/INDEX/INDEX ★ -- new object type path is: SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT ★ -- new object type path is: SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS -- new object type path is: SCHEMA_EXPORT/TABLE/COMMENT -- new object type path is: SCHEMA_EXPORT/TABLE/INDEX/FUNCTIONAL_AND_BITMAP/INDEX ★ -- new object type path is: SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/FUNCTIONAL_AND_BITMAP/INDEX_STATISTICS -- new object type path is: SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS -- new object type path is: SCHEMA_EXPORT/TABLE/POST_TABLE_ACTION -- new object type path is: SCHEMA_EXPORT/TABLE/MATERIALIZED_VIEW_LOG
テーブルおよびインデックス作成例
(6)エクスポートデータからレコードデータのみをインポート$ sqlplus testdocomo/xxxxxxxxxxxx SQL> @sss01_db_i_20100820.sql
レコードデータのインポート例
(7)analyze$ cat testdocomo.par2_0820 directory=expdp_data dumpfile=sss01_db_i_dp20100820.dmp logfile=sss01_db_i_sql20100820.log job_name=job_impdp remap_schema=sss01docomo:testdocomo remap_tablespace=sss01_i_data:test_i_data remap_tablespace=sss01_i_idx:test_i_idx remap_tablespace=mvlog_i_data:test_i_data CONTENT=DATA_ONLY ★レコードデータのみを指定 INCLUDE=TABLE:"IN ('T_ACCESS1','T_USER1')" ★テーブル指定も可能 $ impdp testdocomo/xxxxxxxxxxxx parfile=testdocomo.par2_0820
データ量が多いときはやった方が精神衛生上よいです。
analyze table TBL_SG1_0820 compute statistics; ★インデックスもanalyze
0 件のコメント:
コメントを投稿