导出导入AWR数据,不仅对远程诊断有用,而且对历史数据的对比诊断也是很有价值。例如,最近某个SQL突然变慢,想看看他过去的这段时间该SQL的执行计划及AWR报告,那也可以利用AWR的导出导入功能(前提是将每个月的AWR数据导出后进行归档)。如下是导出导入的全过程:[@more@]
1、因为在导出(或导入)时,我们需要指出导出(导入)文件存放路径。因首先要建立导出(或导入)路径。
SQL>connect sys/password as sysdba;
SQL>create directory dump_awras ‘E:DBwork’;
SQL>grant read,write on directory dump_dir to system;
2、通过awrextr.sql脚本进行导出
利用有权限的用户调用$ORACLE_HOME/rdbms/admin/awrextr.sql脚本,并按提示操作就可以导出就可以了。
SQL> @?/rdbms/admin/awrextr.sql
3、利用有权限的用户调用$ORACLE_HOME/rdbms/admin/awrload.sql脚本,并按提示操作就可以实现导入。如果需要导入,则按如下步骤执行
SQL> @?/rdbms/admin/awrload.sql
我在第一次执行时,总是报如下错误。经过仔细观察发现,在按提示输入数据文件名时,一般不需要填写后缀.dmp字样,如E:DBworkawrdat_1737_2443_july而不是E:DBworkawrdat_1737_2443_july.dmp,如下所示:
|*** AWR Load Started ...
|
|This operation will take a few moments. The
|progress of the AWR load operation can be
|monitored in the following directory/file:
|E:DBwork
|awrdat_1737_2443_july.dmp.log
|
Exception encountered in AWR_LOAD
ORA-39001: 参数值无效
ORA-39000: 转储文件说明错误
ORA-31640: 无法打开要读取的转储文件 "E:DBworkawrdat_1737_2443_july.dmp.dmp"
ORA-27041:
无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) The system cannot find the file specified.
ORA-39001: 参数值无效
begin
*
第 1 行出现错误:
ORA-06512: 在 "SYS.DBMS_SWRF_INTERNAL", line 1208
ORA-06512: 在 line 3
begin
*
第 1 行出现错误:
ORA-20106: AWR tables do not exist for the 'AWR_STAGE' user
ORA-06512: 在 "SYS.DBMS_SWRF_INTERNAL", line 1733
ORA-06512: 在 line 3
... Dropping AWR_STAGE user
4、在本地作出刚导入的AWR数据的数据库的AWR报表,则需要调用$ORACLE_HOME/rdbms/admin/awrrpti.sql脚本,按提示操作即可。
SQL> @?/rdbms/admin/awrrpti.sql
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB IdInst Num DB NameInstanceHost
------------ -------- ------------ ------------ ------------
37479808941dbdb1test-db1
37479808942dbdb2test-db2
* 18759601751 KUQLAN10kuqlan10abc123
输入 dbid 的值:3747980894-----在此要选择要刚导入数据所对应的数据库DBid
Using3747980894 for database Id
输入 inst_num 的值:1
Using 1 for instance number
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 的值:
….
如上所示,按提示输入即可。
总结:
通过以上方法我们不仅克服时间的限制,也能远程仔细看到数据库健壮性所需的所有关键数据。
我在第一次测试时遇到两个问题:
其一是数据库没有进入打开状态而mount状态原因,导入后制作AWR报告时无法显示snapshot id,打开数据库后重新导入问题被解决了。
其二是制作AWR报告不知存放到(比如HTML格式的)哪一个路径底下,实际上AWR报告就在你的当前目录下存放(即在sqlplus / assysdba执行前的cmd提示所对应的路径)。