AWR(二)-迁移AWR数据之导出AWR收集数据
之前写过一篇关于AWR基本配置的文章(详见:http://www.dbdream.com.cn/2011/12/01/awr%E4%B8%80-%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE/),今天说下AWR数据的迁移操作。
ORACLE从10g开始,推出AWR工具,使我们可以更方便更直观的分析数据库的性能和状态,有些时候,我们无法去客户现场,只能远程采集或者由客户方采集分析数据,然后导入本地数据库进行分析,还好AWR支持这部分数据的迁移。
1. 在导出数据之前,一般需要创建以下路径:
DATA_PUMP_DIR EXP IMP DATA_FILE_DIR SQL> create directory data_file_dir as 'd:dir'; SQL> create directory exp as 'd:exp';
2. 导出AWR数据
在$ORACLE_HOME/rdbms/admin目录下,我们会看到很多以awr开头的sql脚本。
2006-12-01 19:31 1,189 awrblmig.sql 2005-05-23 20:13 21,618 awrddinp.sql 2009-05-13 19:08 7,600 awrddrpi.sql 2005-05-27 20:22 2,069 awrddrpt.sql 2009-03-24 10:38 11,490 awrextr.sql 2008-03-13 16:01 17,051 awrgdinp.sql 2009-05-13 19:08 7,551 awrgdrpi.sql 2009-04-29 17:53 1,958 awrgdrpt.sql 2008-03-13 16:01 7,719 awrginp.sql 2009-04-29 17:53 1,578 awrgrpt.sql 2008-03-13 16:01 6,526 awrgrpti.sql 2004-09-01 18:38 50,507 awrinfo.sql 2005-01-05 15:25 2,542 awrinpnm.sql 2006-03-03 17:47 8,901 awrinput.sql 2009-03-24 10:38 10,458 awrload.sql 2003-10-24 14:20 2,069 awrrpt.sql 2005-04-18 13:00 7,801 awrrpti.sql 2005-01-05 15:25 6,919 awrsqrpi.sql 2005-01-05 15:25 1,528 awrsqrpt.sql
可以使用awrextr.sql脚本导出AWR数据到dmp文件,实现AWR数据的迁移。步骤大致如下:
SQL> @?/rdbms/admin/awrextr ~~~~~~~~~~~~~ AWR EXTRACT ~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~ This script will extract the AWR data for a range of snapshots ~ ~ into a dump file. The script will prompt users for the ~ ~ following information: ~ ~ (1) database id ~ ~ (2) snapshot range to extract ~ ~ (3) name of directory object ~ ~ (4) name of dump file ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Databases in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id DB Name Host ------------ ------------ ------------ * 1520519778 STREAM STREAM 1645778343 B1ACDB acdbm 1645778343 B1ACDB acdbs The default database id is the local one: '1520519778'. To use this database id, press to continue, otherwise enter an alternative. 输入 dbid 的值:
输入DBID,本机的DBID是1520519778。
输入 dbid 的值: 1520519778 Using 1520519778 for Database ID Specify the number of days of snapshots to choose from ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Entering the number of days (n) will result in the most recent (n) days of snapshots being listed. Pressing without specifying a number lists all completed snapshots. 输入 num_days 的值:
系统提示导出多少天的AWR数据,本文模拟7天也就是一周。
输入 num_days 的值: 7 Listing the last 10 days of Completed Snapshots DB Name Snap Id Snap Started ------------ --------- ------------------ STREAM 571 30 11月 2011 17:40 572 30 11月 2011 21:47 573 01 12月 2011 11:02 574 01 12月 2011 12:00 575 01 12月 2011 13:00 Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 输入 begin_snap 的值:
由于昨天对AWR数据进行了清理,目前数据库里没有多少AWR快照,模拟从SNAP_ID:571到SNAP_ID:575(也只有这么多的快照)。
输入 begin_snap 的值: 571 Begin Snapshot Id specified: 571 输入 end_snap 的值: 575 End Snapshot Id specified: 575 Specify the Directory Name ~~~~~~~~~~~~~~~~~~~~~~~~~~ Directory Name Directory Path ------------------------------ --------------------------------------------- DATA_FILE_DIR D:dir DATA_PUMP_DIR D:oracleadminstreamdpdump EXP d:exp IMP d:imp ORACLECLRDIR D:oracleproduct11.2.0dbhome_1binclr ORACLE_OCM_CONFIG_DIR D:oracleproduct11.2.0dbhome_1ccrstate SQLLDR d:test XMLDIR D:oracleproduct11.2.0dbhome_1rdbmsxml Choose a Directory Name from the above list (case-sensitive). 输入 directory_name 的值:
到这里就用到了刚才创建的目录DATA_FILE_DIR了,如果没有这个目录就会报错,而且DATA_FILE_DIR一定要大写,小写也报错,坑爹啊。
输入 directory_name 的值: DATA_FILE_DIR Using the dump directory: DATA_FILE_DIR Specify the Name of the Extract Dump File ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The prefix for the default dump file name is awrdat_571_575. To use this name, press to continue, otherwise enter an alternative. 输入 file_name 的值:
输入你要将AWR数据保存成dmp文件的名字,注意不能加后缀,否则就会杯具。
输入 file_name 的值: AWR_571-575 Using the dump file prefix: AWR_571-575 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | The AWR extract dump file will be located | in the following directory/file: | D:dir | AWR_571-575.dmp | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | *** AWR Extract Started ... | This operation will take a few moments. The | progress of the AWR extract operation can be | monitored in the following directory/file: | D:dir | AWR_571-575.log
此时,后台已经开始导出AWR数据了,上面已经提示,导出的路径是D:dir,导出的文件名是AWR_571-575.dmp,还提示可以参考D:dir目录下的AWR_571-575.log日志,还挺人性化的。
如果看到下面的提示,AWR数据导出完成。
End of AWR Extract
可以到D:dir目录下去查看生成的文件。
D:dir> D:dir>DIR awr_571* 2011-12-01 14:13 9,003,008 AWR_571-575.DMP 2011-12-01 14:13 14,864 AWR_571-575.log
下面摘录部分AWR_571-575.log日志信息。
启动 "SYS"."SYS_EXPORT_TABLE_01": 正在使用 BLOCKS 方法进行估计... 处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA 使用 BLOCKS 方法的总估计: 909.6 MB 处理对象类型 TABLE_EXPORT/TABLE/TABLE 已完成 128 TABLE 个对象, 用时 14 秒 处理对象类型 TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT 已完成 121 CONSTRAINT 个对象, 用时 2 秒 处理对象类型 TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT 已完成 1 REF_CONSTRAINT 个对象, 用时 1 秒 . . 导出了 "SYS"."WRH$_SQL_PLAN" 1.195 MB 3052 行 . . 导出了 "SYS"."WRH$_SQLTEXT" 336.3 KB 336 行 . . 导出了 "SYS"."WRH$_SYSMETRIC_SUMMARY" 70.41 KB 790 行 . . 导出了 "SYS"."WRH$_WAITCLASSMETRIC_HISTORY" 23.61 KB 177 行 . . 导出了 "SYS"."WRH$_SYSMETRIC_HISTORY" 187.4 KB 3540 行 . . 导出了 "SYS"."WRH$_ENQUEUE_STAT" 27.20 KB 365 行 . . 导出了 "SYS"."WRH$_SEG_STAT_OBJ" 66.22 KB 584 行 . . 导出了 "SYS"."WRH$_SQLSTAT":"WRH$_SQLSTA_1645778343_0" 36.64 KB 0 行 . . 导出了 "SYS"."WRH$_LATCH":"WRH$_LATCH_1645778343_0" 10.99 KB 0 行 . . 导出了 "SYS"."WRH$_BG_EVENT_SUMMARY" 15.17 KB 219 行 . . 导出了 "SYS"."WRH$_SEG_STAT":"WRH$_SEG_ST_1645778343_0" 22.76 KB 0 行 . . 导出了 "SYS"."WRH$_SQL_BIND_METADATA" 131.6 KB 2177 行 . . 导出了 "SYS"."WRH$_SYSSTAT":"WRH$_SYSSTA_1645778343_0" 6.593 KB 0 行 ... ... 已成功加载/卸载了主表 "SYS"."SYS_EXPORT_TABLE_01" ****************************************************************************** SYS.SYS_EXPORT_TABLE_01 的转储文件集为: D:DIRAWR_571-575.DMP 作业 "SYS"."SYS_EXPORT_TABLE_01" 已于 14:13:54 成功完成
细心的人可能会发现,怎么导出的都是以WRH$开头的表,这一堆表都是AWR存放统计信息的表,AWR的内存统计收集组件收集的统计信息最终会由MMON进程写入到这一堆表中,这些表的默认存放在SYSAUX表空间,这些表ORACLE隐藏的比较好,传说中是不提供用户直接访问,但那也只是传说。
SQL> select table_name from dict where table_name like 'WRH$%'; 未选定行 SQL> select table_name from dict where table_name like 'SYS.WRH$%'; 未选定行 SQL> select table_name from dict where table_name='WRH$_SQL_PLAN'; 未选定行
看,数据字典的数据字典都查不到这些表的信息,但是DBA_TABLES视图里还是可以查到的。
SQL> select table_name,owner,tablespace_name from dba_tables where table_name like 'WRH%'; TABLE_NAME OWNER TABLESPACE_NAME ---------------------------------------- ---------- -------------------- WRH$_FILESTATXS_BL SYS SYSAUX WRH$_TEMPSTATXS SYS SYSAUX WRH$_DATAFILE SYS SYSAUX WRH$_TEMPFILE SYS SYSAUX ... ...
还有一些视图也可以查到AWR的信息,比如以DBA_HIST开头的表。
SQL> select table_name from dict where table_name like '%DBA_HIST%'; TABLE_NAME ---------------------------------------- DBA_HIST_ACTIVE_SESS_HISTORY DBA_HIST_ASH_SNAPSHOT DBA_HIST_BASELINE DBA_HIST_BASELINE_DETAILS DBA_HIST_BASELINE_METADATA DBA_HIST_BASELINE_TEMPLATE DBA_HIST_BG_EVENT_SUMMARY DBA_HIST_BUFFERED_QUEUES DBA_HIST_BUFFERED_SUBSCRIBERS DBA_HIST_BUFFER_POOL_STAT DBA_HIST_CLUSTER_INTERCON ... ...
一共有100多个以DBA_HIST开头的视图,生成AWR报告的时候,有些查询的就是这些视图,有兴趣的人可以分析下$ORACLE_HOME/rdbms/admin/awrrpt.sql脚本。