Archives for September 2006

Oracle 10g的分析工具:AWR

AWR,自动工作负载信息库,是Oracle 10g内置的类似Statspack的信息采集和性能分析工具。AWR的使用非常简单方便,还可以导出采集数据至其他数据库进行分析。虽然使用上很简单, 但作为一个性能分析利器,它丝毫不逊于Statspack。唯一遗憾的是AWR没有well-documented,Oracle的官方文档并没有给出详 细的说明。这里介绍一下简单的用法。 要使用AWR必须设置STATISTICS_LEVEL参数,共有三个:BASIC,TYPICAL,ALL。如果设为BASIC将禁用许多特性,如ADDM。安装Oracle 10g后,默认值是TYPICAL。 AWR的统计数据默认保留7天,并且每小时获取一次快照。 SQL> col snap_interval for a30 SQL> col retention for a30 SQL> select snap_interval, retention 2 from dba_hist_wr_control; SNAP_INTERVAL RETENTION —————————— —————————— +00000 01:00:00.0 +00007 00:00:00.0 当然,你可以修改快照时间和保留时间: begin dbms_workload_repository.modify_snapshot_settings ( interval => 20, retention => 2*24*60 ); end; 你也可以手工运行快照,或者删除快照,具体可以参考DBMS_WORK_LOAD_REPOSITORY的使用说明。Oracle已经提供几个SQL用于分析,常用的有: $ORACLE_HOME/rdbms/admin/addmrpt.sql $ORACLE_HOME/rdbms/admin/awrinfo.sql $ORACLE_HOME/rdbms/admin/awrrpt.sql $ORACLE_HOME/rdbms/admin/awrrpti.sql $ORACLE_HOME/rdbms/admin/awrinput.sql 其中awrinfo.sql提供AWR的基本信息,如大小,数据分布等。它不是设计用来分析实例运行情况的,已经有专门的程序来提供这些功能,如awrrpt.sql。AWR的采集数据可以导出成data pump文件,用于传输到其他数据库进行分析。比如客户将采集数据提交给专业人士进行分析。 begin DBMS_SWRF_INTERNAL.AWR_EXTRACT ( [...]

利用AUL来恢复数据

今天试验了把在只有数据文件的条件下恢复。我用的是AUL免费版本。 先建立试验环境,创建一个数据文件和两个表,插入少量数据: SQL> conn / as sysdba Connected. SQL> create tablespace test 2 datafile ‘d:\test.dbf’ size 2M 3 extent management local; Tablespace created. SQL> create table zeeno1 (text varchar(100)) 2 tablespace test; Table created. SQL> insert into zeeno1 values(‘Hello World!’); 1 row created. SQL> create table zeeno2 (id number(5)) 2 tablespace test; Table created. SQL> [...]

Analyze Alert Log by SQL

Oracle 10g提供UTL_FILE包,提供对服务器上文件的读写功能。它由UTL_FILE_DIR参数控制目录权限,并且必须在参数文件中修改,不能使用alter system。 比如提供对D:\Zeeno目录的读写权限,可以这样设置: ORCL.UTL_FILE_DIR=D:\Zeeno 或者: ORCL.UTL_FILE_DIR=* 这表示对所有目录拥有读写权限,适合在测试数据库中使用。这样,我们就可以在不登录服务器的前提下查看Alert,并用自己的SQL做简单的统计和分析,比如统计最近的alter database记录。 首先建立一存放日志数据的表: SQL> create table zeeno_alertlog(t varchar2(1000)); Table created. 读取日志: declare fh utl_file.file_type; buffer varchar2(2000); begin fh := utl_file.fopen(‘C:\oracle\product\10.2.0\admin\orcl\bdump’,'alert_orcl.log’,'r’); loop utl_file.get_line(fh,buffer); dbms_output.put_line(buffer); insert into zeeno_alertlog values(buffer); commit; end loop; exception when NO_DATA_FOUND then utl_file.fclose(fh); end; / SQL> select * from zeeno_alertlog where t like ‘Completed: alter%’; T [...]

Oracle XE的数据库创建过程

今天安装了Oracle XE,发现并没有自动创建数据库。趁着这个机会顺便观察了把alert log,重新回顾一下数据库手工创建过程。 文章末尾附带了所用到的脚本。 1. 创建SPFILE。 SQL*Plus: Release 10.2.0.1.0 – Production on Fri Sep 1 15:53:26 2006 Copyright (c) 1982, 2005, Oracle. All rights reserved. SQL> conn / as sysdba Connected. SQL> create spfile from pfile=’c:\pfile.ora’; File created. SQL> startup nomount ORACLE instance started. Total System Global Area 146800640 bytes Fixed Size 1286220 bytes Variable [...]