何かと便利なStatspackレポートを生成するためのStatspackデータですが、エクスポートしてインポートすることで別サーバへデータを移行させることもでき、調査時などには役に立ちます。
Statspackをエクスポートする
まずはエクスポートの手順です。
通常の expコマンド にて下記のようにエクスポートすることが可能です。spuexp.par というエクスポートのパラメータを指定する必要があります。
$ exp userid=perfstat/[パスワード] parfile=$ORACLE_HOME/rdbms/admin/spuexp.par statistics=none Export: Release 11.2.0.1.0 - Production on 木 9月 25 14:05:16 2014 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 接続先: Oracle Database 11g Release 11.2.0.1.0 - 64bit Production UTF8キャラクタ・セットおよびAL16UTF16 NCHARキャラクタ・セットでエクスポートを実行します サーバーではJA16EUCキャラクタ・セットを使用します(キャラクタ・セットの変換可能) . プリスキーマ・プロシージャ型オブジェクトとアクションをエクスポート中 . ユーザーPERFSTATの外部関数ライブラリ名をエクスポート中 . PUBLICタイプのシノニムをエクスポート中 . プライベート・タイプのシノニムをエクスポート中 . ユーザーPERFSTATのオブジェクト型定義をエクスポート中 PERFSTATのオブジェクトをエクスポートします... . データベース・リンクをエクスポート中 . 順序番号をエクスポート中 . クラスタ定義をエクスポート中 . PERFSTATの表をエクスポートします... 従来型パス経由... .. 表 STATS$BUFFERED_QUEUESをエクスポート中 0行エクスポートされました。 .. 表 STATS$BUFFERED_SUBSCRIBERSをエクスポート中 0行エクスポートされました。 .. 表 STATS$BUFFER_POOL_STATISTICSをエクスポート中 20行エクスポートされました。 .. 表 STATS$CR_BLOCK_SERVERをエクスポート中 0行エクスポートされました。 .. 表 STATS$CURRENT_BLOCK_SERVERをエクスポート中 0行エクスポートされました。 .. 表 STATS$DATABASE_INSTANCEをエクスポート中 1行エクスポートされました。 .. 表 STATS$DB_CACHE_ADVICEをエクスポート中 415行エクスポートされました。 .. 表 STATS$DLM_MISCをエクスポート中 0行エクスポートされました。 .. 表 STATS$DYNAMIC_REMASTER_STATSをエクスポート中 0行エクスポートされました。 .. 表 STATS$ENQUEUE_STATISTICSをエクスポート中 1880行エクスポートされました。 .. 表 STATS$EVENT_HISTOGRAMをエクスポート中 27212行エクスポートされました。 .. 表 STATS$FILESTATXSをエクスポート中 380行エクスポートされました。 .. 表 STATS$FILE_HISTOGRAMをエクスポート中 4060行エクスポートされました。 .. 表 STATS$IDLE_EVENTをエクスポート中 129行エクスポートされました。 .. 表 STATS$INSTANCE_CACHE_TRANSFERをエクスポート中 0行エクスポートされました。 .. 表 STATS$INSTANCE_RECOVERYをエクスポート中 20行エクスポートされました。 .. 表 STATS$INTERCONNECT_PINGSをエクスポート中 0行エクスポートされました。 .. 表 STATS$IOSTAT_FUNCTIONをエクスポート中 280行エクスポートされました。 .. 表 STATS$IOSTAT_FUNCTION_NAMEをエクスポート中 14行エクスポートされました。 .. 表 STATS$JAVA_POOL_ADVICEをエクスポート中 40行エクスポートされました。 .. 表 STATS$LATCHをエクスポート中 10700行エクスポートされました。 .. 表 STATS$LATCH_CHILDRENをエクスポート中 0行エクスポートされました。 .. 表 STATS$LATCH_MISSES_SUMMARYをエクスポート中 2574行エクスポートされました。 .. 表 STATS$LATCH_PARENTをエクスポート中 0行エクスポートされました。 .. 表 STATS$LEVEL_DESCRIPTIONをエクスポート中 5行エクスポートされました。 .. 表 STATS$LIBRARYCACHEをエクスポート中 440行エクスポートされました。 .. 表 STATS$MEMORY_DYNAMIC_COMPSをエクスポート中 320行エクスポートされました。 .. 表 STATS$MEMORY_RESIZE_OPSをエクスポート中 141行エクスポートされました。 .. 表 STATS$MEMORY_TARGET_ADVICEをエクスポート中 140行エクスポートされました。 .. 表 STATS$MUTEX_SLEEPをエクスポート中 600行エクスポートされました。 .. 表 STATS$OSSTATをエクスポート中 400行エクスポートされました。 .. 表 STATS$OSSTATNAMEをエクスポート中 20行エクスポートされました。 .. 表 STATS$PARAMETERをエクスポート中 7060行エクスポートされました。 .. 表 STATS$PGASTATをエクスポート中 320行エクスポートされました。 .. 表 STATS$PGA_TARGET_ADVICEをエクスポート中 280行エクスポートされました。 .. 表 STATS$PROCESS_MEMORY_ROLLUPをエクスポート中 1620行エクスポートされました。 .. 表 STATS$PROCESS_ROLLUPをエクスポート中 420行エクスポートされました。 .. 表 STATS$PROPAGATION_RECEIVERをエクスポート中 0行エクスポートされました。 .. 表 STATS$PROPAGATION_SENDERをエクスポート中 0行エクスポートされました。 .. 表 STATS$RESOURCE_LIMITをエクスポート中 80行エクスポートされました。 .. 表 STATS$ROLLSTATをエクスポート中 220行エクスポートされました。 .. 表 STATS$ROWCACHE_SUMMARYをエクスポート中 1100行エクスポートされました。 .. 表 STATS$RULE_SETをエクスポート中 20行エクスポートされました。 .. 表 STATS$SEG_STATをエクスポート中 0行エクスポートされました。 .. 表 STATS$SEG_STAT_OBJをエクスポート中 0行エクスポートされました。 .. 表 STATS$SESSION_EVENTをエクスポート中 0行エクスポートされました。 .. 表 STATS$SESSTATをエクスポート中 0行エクスポートされました。 .. 表 STATS$SESS_TIME_MODELをエクスポート中 0行エクスポートされました。 .. 表 STATS$SGAをエクスポート中 80行エクスポートされました。 .. 表 STATS$SGASTATをエクスポート中 288行エクスポートされました。 .. 表 STATS$SGA_TARGET_ADVICEをエクスポート中 140行エクスポートされました。 .. 表 STATS$SHARED_POOL_ADVICEをエクスポート中 332行エクスポートされました。 .. 表 STATS$SNAPSHOTをエクスポート中 20行エクスポートされました。 .. 表 STATS$SQLTEXTをエクスポート中 40560行エクスポートされました。 .. 表 STATS$SQL_PLANをエクスポート中 0行エクスポートされました。 .. 表 STATS$SQL_PLAN_USAGEをエクスポート中 0行エクスポートされました。 .. 表 STATS$SQL_STATISTICSをエクスポート中 20行エクスポートされました。 .. 表 STATS$SQL_SUMMARYをエクスポート中 39606行エクスポートされました。 .. 表 STATS$SQL_WORKAREA_HISTOGRAMをエクスポート中 280行エクスポートされました。 .. 表 STATS$STATSPACK_PARAMETERをエクスポート中 1行エクスポートされました。 .. 表 STATS$STREAMS_APPLY_SUMをエクスポート中 0行エクスポートされました。 .. 表 STATS$STREAMS_CAPTUREをエクスポート中 0行エクスポートされました。 .. 表 STATS$STREAMS_POOL_ADVICEをエクスポート中 400行エクスポートされました。 .. 表 STATS$SYSSTATをエクスポート中 12080行エクスポートされました。 .. 表 STATS$SYSTEM_EVENTをエクスポート中 2457行エクスポートされました。 .. 表 STATS$SYS_TIME_MODELをエクスポート中 380行エクスポートされました。 .. 表 STATS$TEMPSTATXSをエクスポート中 20行エクスポートされました。 .. 表 STATS$TEMP_SQLSTATSをエクスポート中 .. 表 STATS$THREADをエクスポート中 20行エクスポートされました。 .. 表 STATS$TIME_MODEL_STATNAMEをエクスポート中 19行エクスポートされました。 .. 表 STATS$UNDOSTATをエクスポート中 971行エクスポートされました。 .. 表 STATS$WAITSTATをエクスポート中 360行エクスポートされました。 . シノニムをエクスポート中 . ビューをエクスポート中 . ストアド・プロシージャをエクスポート中 . 演算子をエクスポート中 . 参照整合性制約をエクスポート中 . トリガーをエクスポート中 . 索引タイプをエクスポート中 . ビットマップ、ファンクションおよび拡張可能索引をエクスポート中 . ポスト可能なアクションをエクスポート中 . マテリアライズド・ビューをエクスポート中 . スナップショット・ログをエクスポート中 . ジョブ・キューをエクスポート中 . リフレッシュ・グループと子をエクスポート中 . ディメンションをエクスポート中 . ポストスキーマ・プロシージャ型オブジェクトとアクションをエクスポート中 . 統計をエクスポート中 エクスポートは警告なしで正常終了しました。
これでダンプファイル『spuexp.dmp』とログファイル『spuexp.log』がカレントディレクトリに出力されているはずですので確認してみます。
$ ls -lhtr | grep spu -rw-r--r-- 1 oracle oinstall 9.8K 9月 25 14:05 spuexp.log -rw-r--r-- 1 oracle oinstall 20M 9月 25 14:05 spuexp.dmp
Statspackをインポートする
続いてインポートする手順です。 このままインポートしては制約でエラーが発生してしまいますので、いろいろと制約を無効化する必要があります。
こんな感じでエラーがでます。
. . 表 "STATS$BUFFER_POOL_STATISTICS"をインポートしています IMP-00019: Oracleエラー2291により、行のインポートは拒否されました IMP-00003: Oracleエラー2291が発生しました。 ORA-02291: 整合性制約(PERFSTAT.STATS$BUFFER_POOL_STATS_FK)に違反しました - 親キーがありません
参照制約を無効化するSQLと有効化するSQLを作成するSQLファイルを作成します。
$ vi alter_const.sql set echo off set feedback off set pagesize 0 set linesize 200 spool dis_const.sql prompt set echo on prompt set termout on prompt set feedback on prompt spool dis_const.log select 'alter table ' || table_name || ' disable constraint ' || constraint_name || ';' from user_constraints where constraint_type='R'; prompt spool off spool off spool en_const.sql prompt set echo on prompt set termout on prompt set feedback on prompt spool en_const.log select 'alter table ' || table_name || ' enable constraint ' || constraint_name || ';' from user_constraints where constraint_type='R'; prompt spool off spool off
作成したSQLファイルを実行して制約変更SQLファイルを作成します。
$ sqlplus perfstat/pafpaf SQL> @alter_const.sql
dis_const.sql と en_const.sql という2つのファイルが作成されているはずですので、事前にStatspackの全データを削除して dis_const.sql を実行して参照制約を無効化させます。
$ sqlplus perfstat/pafpaf SQL> @?/rdbms/admin/sptrunc.sql begin_or_exitに値を入力してください: [エンターキー] SQL> @dis_const.sql SQL> exit
これでようやく準備が整いました
ダンプファイルからインポートします。
$ imp perfstat/[パスワード] file=spuexp.dmp log=spuimp.log ignore=y
最後に制約を有効化すれば完了です。
$ sqlplus perfstat/[パスワード] SQL> @en_const.sql SQL> exit
インポート途中でちょいとエラーが出ます。
問題なくインポートされているようですが気持ちが悪いですね‥ ちょっと調査してみたいと思います。