Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

95

积分

192

好友

16

主题
1#
发表于 2013-3-4 10:24:37 | 查看: 5761| 回复: 16
ML 论坛里的所写的Oracle-base的脚本,由于一些原因(你懂的),给不会的童鞋贴在这里
  1. -- -----------------------------------------------------------------------------------
  2. -- File Name    :[url]http://www.oracle-base.com/dba/10g/generate_multiple_awr_reports.sql[/url]
  3. -- Author       : DR Timothy S Hall
  4. -- Description  : Generates AWR reports for all snapsots between the specified start and end point.
  5. -- Requirements : Access to the v$ views, UTL_FILE and DBMS_WORKLOAD_REPOSITORY packages.
  6. -- Call Syntax  : Create the directory with the appropriate path.
  7. --                Adjust the start and end snapshots as required.
  8. --                @generate_multiple_awr_reports.sql
  9. -- Last Modified: 02/08/2007
  10. -- -----------------------------------------------------------------------------------
  11. CREATE OR REPLACE DIRECTORY awr_reports_dir AS '/tmp/';

  12. DECLARE
  13.    -- Adjust before use.
  14.    l_snap_start       NUMBER := 1;
  15.    l_snap_end         NUMBER := 10;
  16.    l_dir              VARCHAR2(50) := 'AWR_REPORTS_DIR';
  17.    
  18.    l_last_snap        NUMBER := NULL;
  19.    l_dbid             v$database.dbid%TYPE;
  20.    l_instance_number  v$instance.instance_number%TYPE;
  21.    l_file             UTL_FILE.file_type;
  22.    l_file_name        VARCHAR(50);

  23. BEGIN
  24.    SELECT dbid
  25.    INTO   l_dbid
  26.    FROM   v$database;

  27.    SELECT instance_number
  28.    INTO   l_instance_number
  29.    FROM   v$instance;
  30.      
  31.    FOR cur_snap IN (SELECT snap_id
  32.                     FROM   dba_hist_snapshot
  33.                     WHERE  instance_number = l_instance_number
  34.                     AND    snap_id BETWEEN l_snap_start AND l_snap_end
  35.                     ORDER BY snap_id)
  36.    LOOP
  37.      IF l_last_snap IS NOT NULL THEN
  38.        l_file := UTL_FILE.fopen(l_dir, 'awr_' || l_last_snap || '_' || cur_snap.snap_id || '.htm', 'w', 32767);
  39.       
  40.        FOR cur_rep IN (SELECT output
  41.                        FROM   TABLE(DBMS_WORKLOAD_REPOSITORY.awr_report_html(l_dbid, l_instance_number, l_last_snap, cur_snap.snap_id)))
  42.        LOOP
  43.          UTL_FILE.put_line(l_file, cur_rep.output);
  44.        END LOOP;
  45.        UTL_FILE.fclose(l_file);
  46.      END IF;
  47.      l_last_snap := cur_snap.snap_id;
  48.    END LOOP;
  49.    
  50. EXCEPTION
  51.    WHEN OTHERS THEN
  52.      IF UTL_FILE.is_open(l_file) THEN
  53.        UTL_FILE.fclose(l_file);
  54.      END IF;
  55.      RAISE;
  56. END;
  57. /
复制代码
个人测试机上的运行结果
  1. [root@OEL48 tmp]# ll
  2. total 1711
  3. -rw-r--r--  1 oracle oinstall 258016 Mar  4 11:29 awr_1_2.htm
  4. -rw-r--r--  1 oracle oinstall 124614 Mar  4 11:32 awr_2_3.htm
  5. -rw-r--r--  1 oracle oinstall 197851 Mar  4 11:34 awr_3_4.htm
  6. -rw-r--r--  1 oracle oinstall 158034 Mar  4 11:37 awr_4_5.htm
  7. -rw-r--r--  1 oracle oinstall 253271 Mar  4 11:37 awr_5_6.htm
  8. -rw-r--r--  1 oracle oinstall 201584 Mar  4 11:39 awr_6_7.htm
  9. -rw-r--r--  1 oracle oinstall 125158 Mar  4 11:41 awr_7_8.htm
  10. -rw-r--r--  1 oracle oinstall 205918 Mar  4 11:42 awr_8_9.htm
  11. -rw-r--r--  1 oracle oinstall 169717 Mar  4 11:42 awr_9_10.htm
  12. -rw-r-----  1 oracle oinstall    446 Feb 27 11:07 cpuinfo.txt
  13. drwx------  3 oracle oinstall   1024 Feb 28 13:48 gconfd-oracle
  14. drwx------  2 root   root       1024 Feb 27 10:12 gconfd-root
  15. -rw-r-----  1 oracle oinstall     18 Feb 27 10:57 glibc.txt
  16. drwx------  2 oracle oinstall   1024 Feb 28 13:48 keyring-LgIRTh
  17. -rw-r-----  1 oracle oinstall     20 Feb 27 11:07 LinuxVendor_output.txt
  18. drwx------  2 root   root      12288 Feb 27 09:24 lost+found
  19. srwxr-xr-x  1 oracle oinstall      0 Feb 28 13:52 mapping-oracle
  20. srwxr-xr-x  1 root   root          0 Feb 27 01:59 mapping-root
  21. -rw-r-----  1 oracle oinstall  21594 Feb 27 10:57 pkginfo.txt
  22. -rw-r-----  1 oracle oinstall    100 Feb 27 11:07 swapinfo.txt
  23. -rw-r-----  1 oracle oinstall     11 Feb 27 11:07 tmpFileKernelParms.txt
  24. -rw-r--r--  1 root   root          0 Feb 27 02:03 vboxguest-Module.symvers
复制代码
存放目录 以及间隔都可以自己修改。。。 在生产库上跑之前 请在测试库上测试
Oracle ALLSTARS II:171092051(Oracle基础讨论群)
提问之前请阅读以下链接
http://t.askmaclean.com/thread-714-1-1.html
http://train.askmaclean.com/node/5
Oracle ALLSTARS III:180013778(扯蛋打酱油专用群)
2#
发表于 2013-3-4 10:27:41
本帖最后由 136156188 于 2013-3-4 22:25 编辑

链接需修复

已修复,好东西,又省事了。

回复 只看该作者 道具 举报

3#
发表于 2013-3-4 10:35:50
顶一个...

回复 只看该作者 道具 举报

4#
发表于 2013-3-4 10:40:38
好东西啊.顶

回复 只看该作者 道具 举报

5#
发表于 2013-3-4 10:44:50
不用一步一步来了 不错

回复 只看该作者 道具 举报

6#
发表于 2013-3-4 12:30:27
这好的东西,赞一个。

回复 只看该作者 道具 举报

7#
发表于 2013-3-7 09:15:25
好贴,收藏了!

回复 只看该作者 道具 举报

8#
发表于 2013-3-7 16:35:48
提示: 作者被禁止或删除 内容自动屏蔽

回复 只看该作者 道具 举报

9#
发表于 2013-3-7 16:36:10
提示: 作者被禁止或删除 内容自动屏蔽

回复 只看该作者 道具 举报

10#
发表于 2013-3-8 08:37:30
huzia 发表于 2013-3-7 16:35
我这个执行完没找到,这个目录。我到/CCTEST02/里面都找不到tmp目录。

tmp 是在根目录下

回复 只看该作者 道具 举报

11#
发表于 2013-3-8 08:58:01
创建/CCTEST02/tmp/

回复 只看该作者 道具 举报

12#
发表于 2013-3-8 09:12:14
WWJD_DBA 发表于 2013-3-8 08:58
创建/CCTEST02/tmp/

11. CREATE OR REPLACE DIRECTORY awr_reports_dir AS '/tmp/';
将上面这句 修改成下面

11. CREATE OR REPLACE DIRECTORY awr_reports_dir AS '/CCTEST02/tmp/;

回复 只看该作者 道具 举报

13#
发表于 2013-3-8 11:38:24
huzia 发表于 2013-3-7 16:35
我这个执行完没找到,这个目录。我到/CCTEST02/里面都找不到tmp目录。

有权限吗?

回复 只看该作者 道具 举报

14#
发表于 2013-4-2 08:53:23
提示: 作者被禁止或删除 内容自动屏蔽

回复 只看该作者 道具 举报

15#
发表于 2013-4-2 08:53:51
提示: 作者被禁止或删除 内容自动屏蔽

回复 只看该作者 道具 举报

16#
发表于 2013-4-2 21:56:31
huzia 发表于 2013-4-2 08:53
还是不行,执行不了啊


这是因为你改动的太多啦 :)

根据需要只需要更改三个参数即可:

1. 自定义要创建的Directory目录,一般来说/tmp目录大家都有写权限,所以如果选择其他目录,一定要确保Oracle有写权限。

CREATE OR REPLACE DIRECTORY awr_reports_dir AS '/u07/CCTEST02/tmp/';

下面两个参数的更改要根据你的数据库可以查询到的snap_id来更改。注意这个脚本是按照两个相邻的snap_id为开始和结束的,所以最好不要跨度太大。测试的话之间有10以内感觉就可以啦,所以你所写的两个snap_id感觉跨度太大了,170多个snap_id,这会产生大量的report,这样做也没有什么实际的意义 :)

2. l_snap_start       NUMBER := 30287;

3. l_snap_end         NUMBER := 30458;

最多修改这三兄弟就够啦,其他的就不用动了,比如你的脚本里修改了好多地方,当然跑不出来也正常啦。

LOOP
       l_file := UTL_FILE.fopen(l_dir, 'awr_' || l_last_snap || '_' || 112 || '.htm', 'w', 32767);  
   UTL_FILE.put_line(l_file, 'cur_rep.output');
      UTL_FILE.fclose(l_file);
         
     IF l_last_snap IS NOT NULL THEN
       l_file := UTL_FILE.fopen(l_dir, 'awr_' || l_last_snap || '_' || cur_snap.snap_id || '.htm', 'w', 32767);
      


当然作者的脚本里面也清楚说明了这几个地方,可以重点看下。

-- Description  : Generates AWR reports for all snapsots between the specified start and end point.
-- Call Syntax  : Create the directory with the appropriate path.
--                Adjust the start and end snapshots as required.


Good luck ;)

回复 只看该作者 道具 举报

17#
发表于 2013-4-3 05:49:00
本帖最后由 Ling.QIu 于 2013-4-3 09:01 编辑

这个脚本我修改成只生成某时间段的awr报告了,输入两个时间参数即可。楼主这个还要先查询快照id不方便,而且生成的报告是一小时一个同时生成多个


这是个人不同工作习惯 有些喜欢把 查询的东西写成脚本 有些喜欢交互的 我还是比较偏好脚本 这样可以留存

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 13:05 , Processed in 0.076623 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569