很多时候,对数据库进行性能诊断可以使用SQL跟踪的方法,把一些信息记录在trace文件里以后分析。一般情况下我们可以通过初始化参数SQL_TRACE=TRUE来设置SQL跟踪。
我们也可以通过设置10046事件来进行SQL跟踪,并且可以设置不同的跟踪级别,比使用SQL_TRACE获得更多的信息。
Level 0 停用SQL跟踪,相当于SQL_TRACE=FALSE
Level 1 标准SQL跟踪,相当于SQL_TRACE=TRUE
Level 4 在level 1的基础上增加绑定变量的信息
Level 8 在level 1的基础上增加等待事件的信息
Level 12 在level 1的基础上增加绑定变量和等待事件的信息
10046事件不但可以跟踪用户会话(trace文件位于USER_DUMP_DEST ),也可以跟踪background进程(trace文件位于BACKGROUND_DUMP_DEST )。trace文件的大小决定于4个因素:跟踪级别,跟踪时长,会话的活动级别和MAX_DUMP_FILE_SIZE参数。
启用跟踪事件10046
1.在全局设置
修改初始化参数
EVENT = "10046 trace name context forever, level 8"
2.在当前session设置
alter session set events '10046 trace name context forever, level 8';
alter session set events '10046 trace name context off ......
原文地址:http://space.itpub.net/12330444/viewspace-249140
关于tkprof的详细使用情况可在oracle10g联机文档Performance Tuning Guide中找到。
Tkprof是一个分析ORACLE跟踪文件并且产生一个更加人性化清晰的输出结果的可执行工具;可用来格式化sql trace产生的文件,让你更容易看懂trace的内容。
Tkprof存放位置:C:\oracle\ora92\bin\tkprof.exe;
Tkprof全称:tool kit profiler trace kernel profiler
用法:
Tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ]
参数说明:
tracefile: 你要分析的trace文件
outputfile: 格式化后的文件
explain=user/password@connectstring
table=schema.tablename
这两个参数是一起使用的,通过连接数据库对在trace文件中出现的每条sql语句查看执行计划,并将之输出到outputfile中。
注意,该table必须是数据库中不存在的,如果存在会报错。
print=n: 只列出最初N个sql执行语句
insert=filename:&nb ......
一个称职的数据库DBA仅仅取得ORACLE厂家认证是不够的,关键是真实环境的历练,笔者从事ORACLE DBA多年,经历ORACLE版本从8i到10g(注:对于一个公司或单位的真实环境,对于版本的追求首要的,关键的稳定性),操作系统从windows 单机、双机到主流IBM、HP的UNIX操作系统,以下是笔者多年从事ORACLE DBA的一些心得,希望能给初学者一些启示和鼓励,与同道中人带来一些共鸣。
作为一个专业的DBA必须具备以下技能:
一、os : linux,solaris或其他unix起码要一种
二、bash (不精通也要熟) LINUX与UNIX SHELL编程指南.pdf
三、perl (精通):
Perl_CD_BookShelf.chm,包括learning perl、perl pragramming
四、java(掌握)包括jdbc thin,oci等4类不同的连接方式,性能设置,一些中间件的知识了解一些就够了
五、oracle performance tuning(范围很广)
OCP performance book下tom的书《Wrox - Expert one-on-one Oracle》(Oracle专家高级编程)
本 书是一本关于使用Oracle成功开发应用程序的工具手册,由Oracle公司的资深开发人员Thomas Kyte集自己多年开发经验编写。学习本书能帮助读者彻底理解Oracle的工作原理 ......
SQL> alter tablespace myalan
2 add datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\IRMDB\myspace02.dbf' size 10m;
表空间已更改。
SQL> select file_name from dba_data_files where tablespace_name='MYALAN';
FILE_NAME
--------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\IRMDB\MYSPACE.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\IRMDB\MYSPACE02.DBF
SQL> alter database datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\IRMDB\MYSPACE02.DBF' offline drop;
数据库已更改。
SQL> select file_name from dba_data_files where tablespace_name='MYALAN';
FILE_NAME
--------------------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\IRMDB\MYSPACE.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\IRMDB\MYSPACE02.DBF
SQL> alter tablespace myalan drop datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\IRMDB\MYSPACE02.DBF';
alter tablespace myalan drop datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\IRMDB\MYSP ......
常用的几个数据字典:
user_objects : 记录了用户的所有对象,包含表、索引、过程、视图等信息,以及创建时间,状态是否有效等信息,是非DBA用户的大本营。想知道自己有哪些对象,往这里查。
user_source :包含了系统中对象的原码,如存储过程,FUNCTION、PROCEDURE、PACKAGE等信息
cat或Tab :包含当前用户所有的用户和视图信息和同义词信息,cat还多了一个SYNONYM;
dict :系统中所有的数据字典都存储在这里面
Oracle中的数据字典有静态和动态之分。静态数据字典主要是在用户访问数据字典时不会发生改变的,但动态数据字典是依赖数据库运行的性能的,反映数据库运行的一些内在信息,所以在访问这类数据字典时往往不是一成不变的。以下分别就这两类数据字典来论述。
1. 静态数据字典
这类数据字典主要是由表和视图组成,应该注意的是,数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。静态数据字典中的视图分为三类,它们分别由三个前缀够成:user_*、 all_*、 dba_*。
user_*
该视图存储了关于当前用户所拥有的对象的信息。(即所有在该用户模式下的对象)
all_*
该试图存储了当前用户能够访问的对象的信息。(与user_*相比,all_* 并 ......
数据字典dict总是属于Oracle用户sys的。
1、用户:
select username from dba_users;
改口令
alter user spgroup identified by spgtest;
2、表空间:
select * from dba_data_files;
select * from dba_tablespaces;//表空间
select tablespace_name,sum(bytes), sum(blocks)
from dba_free_space group by tablespace_name;//空闲表空间
select * from dba_data_files
where tablespace_name='RBS';//表空间对应的数据文件
select * from dba_segments
where tablespace_name='INDEXS';
3、数据库对象:
select * from dba_objects;
CLUSTER、DATABASE LINK、FUNCTION、INDEX、LIBRARY、PACKAGE、PACKAGE BODY、
PROCEDURE、SEQUENCE、SYNONYM、TABLE、TRIGGER、TYPE、UNDEFINED、VIEW。
4、表:
select * from dba_tables;
analyze my_table compute statistics;->dba_tables后6列
select extent_id,bytes from dba_extents
where segment_name='CUSTOMERS' and segment_type='TABLE'
order by extent ......