Oracle DBA 职责
上一篇 / 下一篇 2008-09-24 17:56:38 / 个人分类:DBA
Oracle数据库管理员应按如下方式对Oracle数据库系统做定期监控:
(1).每天 对Oracle数据库的运行状态,日志文件,备份情况,数据库的空间使用情况,系统资源的使用情况进行检查,发现并解决问题。
(2).每周 对数据库对象的空间扩展情况,数据的增长情况进行监控,对数据库做健康检查,对数据库对象的状态做检查。
(3).每月 对表和索引等进行Analyze,检查表空间碎片,寻找数据库性能调整的机会,进行数据库性能调整,提出下一步空间管理计划。对ORACLE数据库状态进行一次全面检查。
每天的工作
(1).确认所有的INSTANCE状态正常登陆到所有数据库或例程,检测ORACLE后台进程: $ps –ef|grep ora
(2).检查数据文件的状态记录状态不是“online”的数据文件,并做恢复。
Select file_name, statusITPUB个人空间5c[ aWLA1w!nM X
from dba_data_files
}
q;~I.@oR&Is2H0 where status=’UNAVAILABLE’;
(3).检查日志文件和trace文件记录alert和trace文件中的错误。
连接到每个需管理的系统
* 使用‘telnet’
mbH8E#k)f\u0 * 对每个数据库,cd到bdump目录,通常是$ORACLE_BASE//bdumpITPUB个人空间'k]3u#Y1C6D,vAI
* 使用Unix‘tail’命令来查看alert_.log文件ITPUB个人空间2A/p'Cp8b6~m-q)G
* 如果发现任何新的ORA-错误,记录并解决。
(4).检查数据库当日备份的有效性。
对RMAN备份方式: 检查第三方备份工具的备份日志以确定备份是否成功
对EXPORT备份方式: 检查exp日志文件以确定备份是否成功
对其他备份方式: 检查相应的日志文件
(5).检查文件系统的使用(剩余空间)。如果文件系统的剩余空间小于20%,需删除不用的文件以释放空间。
$df –k
(6).检查表空间的使用情况
SELECT tablespace_name, max_m, count_blocks free_blk_cnt, sum_free_m,to_char(100*sum_free_m/sum_m, '99.99') || '%' AS pct_free
A8p!vd~)r%z)|\0 FROM (SELECT tablespace_name,sum(bytes)/1024/1024 AS sum_m
JH I0}#\)If$h0 FROM dba_data_filesITPUB个人空间m5Nn0}*A4Z!gJ~
GROUP BY tablespace_name),ITPUB个人空间7oD s|Zk9of&x)_7N
(SELECT tablespace_name AS fs_ts_name, max(bytes)/1024/1024 AS max_m, count(blocks) AS count_blocks, sum(bytes/1024/1024) AS sum_free_m
|E vS9S+N0 FROM dba_free_space
V%]k(f,lx3o0 GROUP BY tablespace_name )
F!|!I cWt O4w%^O0 WHERE tablespace_name = fs_ts_name;
(7).检查剩余表空间
SELECT tablespace_name, sum ( blocks ) as free_blk , trunc ( sum ( bytes ) /(1024*1024) ) as free_m,ITPUB个人空间ee2V Br-A6D9c
max ( bytes ) / (1024) as big_chunk_k, count (*) as num_chunksITPUB个人空间 _"ZZq9p_
FROM dba_free_spaceITPUB个人空间?cH
Bk"G j5T
GROUP BY tablespace_name;
(8).监控数据库性能
运行bstat/estat生成系统报告或者使用statspack收集统计数据
(9).检查数据库性能,记录数据库的cpu使用、IO、buffer命中率等等
使用vmstat,iostat,glance,top等命令
(10).日常出现问题的处理。
每周的工作
(1).监控数据库对象的空间扩展情况
根据本周每天的检查情况找到空间扩展很快的数据库对象,并采取相应的措施:
--删除历史数据
* 扩表空间
alter tablespace add datafile ‘’ size
* 调整数据对象的存储参数
next extent
c9hz7ma `0 pct_increase
(2).监控数据量的增长情况
根据本周每天的检查情况找到记录数量增长很快的数据库对象,并采取相应的措施:
删除历史数据
* 扩表空间
alter tablespace add datafile ‘’ size
(3).系统健康检查
检查以下内容:
init.oraITPUB个人空间QD YrK
controlfileITPUB个人空间O)o.}&Qn6xs1R
redo log file
&Y$u zP%`C0 archiving
7NR4?/i4}6L
i^{O0 sort area size
wk6T^T(Q G,C8yCJP0 tablespace(system,temporary,tablespace fragment)ITPUB个人空间$r
x$Z&BB]-O$m
datafiles(autoextend,location)ITPUB个人空间 S.aL%n$]
object(number of extent,next extent,index)ITPUB个人空间f"mX$I
i*`:w5S
rollback segment
"t6R6kVH/M Oq
N0 logging &tracing(alert.log,max_dump_file_size,sqlnet)
(4).检查无效的数据库对象
col owner for a20ITPUB个人空间5C1x:N1T*O)W z
col object_name for a30
!@PR
n_ {0 SELECT owner, object_name, object_type
6y dK8QA_}K Q0 FROM dba_objects
}&fh8R'H E0 WHERE status= ’INVALID’;
(5).检查不起作用的约束
SELECT owner, constraint_name, table_name, constraint_type, statusITPUB个人空间a:qpqItH
FROM dba_constraintsITPUB个人空间#l
I)D9C?(M[]kQDQ m
WHERE status = 'DISABLED’ AND constraint_type = 'P' ;
(6).检查无效的trigger
SELECT owner, trigger_name, table_name, status
7Di:uu!N$T0 FROM dba_triggersITPUB个人空间s O4a"X-@U"r
_
WHERE status = 'DISABLED’;
每月的工作
(1). Analyze Tables/Indexes/Cluster
analyze table estimate statistics sample 50 percent;
(2).检查表空间碎片
根据本月每周的检查分析数据库碎片情况,找到相应的解决方法;
(3).寻找数据库性能调整的机会
比较每天对数据库性能的监控报告,确定是否有必要对数据库性能进行调整;
(4).数据库性能调整
如有必要,进行性能调整;
(5).提出下一步空间管理计划
根据每周的监控,提出空间管理的改进方法;
DBA日常管理
目的:这篇文档有很详细的资料记录着对一个甚至更多的ORACLE数据库每天的,每月的,每年的运行的状态的结果及检查的结果,在文档的附录中你将会看到所有检查,修改的SQL和PL/SQL代码。
目录
1.日常维护程序
A.检查已起的所有实例
B.查找一些新的警告日志
C.检查DBSNMP是否在运行
D.检查数据库备份是否正确
E.检查备份到磁带中的文件是否正确
F.检查数据库的性能是否正常合理,是否有足够的空间和资源
G.将文档日志复制到备份的数据库中
H.要常看DBA用户手册
2.晚间维护程序
A.收集VOLUMETRIC的数据
3.每周维护工作
A.查找那些破坏规则的OBJECT
B.查找是否有违反安全策略的问题
C.查看错误地方的SQL*NET日志
D.将所有的警告日志存档
E.经常访问供应商的主页
4.月维护程序
A.查看对数据库会产生危害的增长速度
B.回顾以前数据库优化性能的调整
C.查看I/O的屏颈问题
D.回顾FRAGMENTATION
E.将来的执行计划
F.查看调整点和维护
5.附录
A.月维护过程
B.晚间维护过程
C.周维护过程
一.日维护过程
A.查看所有的实例是否已起:
确定数据库是可用的,把每个实例写入日志并且运行日报告或是运行测试文件。当然有一些操作我们是希望它能自动运行的。
可选择执行:用ORACLE管理器中的‘PROBE’事件来查看;
B.查找新的警告日志文件;
1.联接每一个操作管理系统;
2.使用‘TELNET’或是可比较程序;
3.对每一个管理实例,经常的执行$ORACLE_BASE//bdump操作,并使其能回退到控制数据库的SID。
4.在提示下,使用UNIX中的‘TAIL’命令查看alert_.log,或是用其他方式检查文件中最近时期的警告日志;
5.如果以前出现过的一些ORA_ERRORS又出现,将它记录到数据库恢复日志中并且仔细的研究它们,这个 数据库恢复日志在〈FILE〉中;
C.查看DBSNMP的运行情况;
检查每个被管理机器的‘DBSNMP’进程并将它们记录到日志中。
在UNIX中,在命令行中,键入ps–ef | grep dbsnmp,将回看到2个DBSNMP进程在运行。如果没有,重启DBSNMP。
D.查数据库备份是否成功;
E.检查备份的磁带文档是否成功;
F.检查对合理的性能来说是否有足够的资源;
1.检查在表空间中有没有剩余空间。
对每一个实例来说,检查在表空间中是否存在有剩余空间来满足当天的预期的需要。当数据库中已有的数据是稳定的,数据日增长的平均数也是可以计算出来,最小的剩余空间至少要能满足每天数据的增长。
A)运行‘FREE.SQL’来检查表空间的剩余空间。
B)运行‘SPACE.SQL’来检查表空间中的剩余空间百分率
2.检查回滚段;
回滚段的状态一般是在线的,除了一些为复杂工作准备的专用段,它一般状态是离线的。
a)每个数据库都有一个回滚段名字的列表。
b)你可以用V$ROLLSTAT来查询在线或是离线的回滚段的现在状态.
Select USN, LATCH, EXTENTS, RSSIZE, WRITES, HWMSIZE, SHRINKS, STATUSITPUB个人空间g;@,n/s5v8s-D@(^8N%d
From v$rollstat;
c)对于所有回滚段的存储参数及名字,可用DBA_ROLLBACK_SEGS来查询。但是它不如V$ROLLSTAT 准确。
col segment_name for a15ITPUB个人空间x/FG
Gf I._l
col tablespace_name for a20
p]ql+RH
bt1H0 col file_id for 9999999
Bhi#v c6V0 Select *
+{fC`
[t W%ts#[(y0 From dba_rollback_segs;
3.识别出一些过分的增长。
查看数据库中超出资源或是增长速度过大的段,这些段的存储参数需要调整。
a)收集日数据大小的信息,可以用‘ANALYZE5PCT.SQL’。如果你收集的是每晚的信息,则可跳过这 一步。
b)检查当前的范围,可用‘NR_EXTENTS.SQL’。
c)查询当前表的大小信息。
d)查询当前索引大小的信息。
e)查询增长趋势。
4.确定空间的范围。
如果范围空间对象的NEXT_EXTENT比表空间所能提供的最大范围还要大,那么这将影响数据库的运行。如果我们找到了这个目标,可以用‘ALTER TABLESPACE COALESCE’调查它的位置,或加另外的数据文件。
A)运行‘SPACEBOUND.SQL’。如果都是正常的,将不返回任何行。
5.回顾CPU,内存,网络,硬件资源论点的过程。
A)检查CPU的利用情况,进到x:.htm =>system metrics=>CPU利用页,CPU的最大限度为400,当CPU的 占用保持在350以上有一段时间的话,我们就需要查看及研究出现的问题。
G.将存档日志复制到备用数据库中
如果有一个备用数据库,将适当的存档日志复制到备用数据库的期望位置,备用数据库中保存最近期的数据。
H.经常查阅DBA用户手册
如果有可能的话,要广泛的阅读,包括DBA手册,行业杂志,新闻组或是邮件列表。
二.晚间维护过程
大部分的数据库产品将受益于每晚确定的检查进程的运行。
A.收集VOLUMETRIC数据
1.分析计划和收集数据
更准确的分析计算并保存结果。
a)如果你现在没有作这些的话,用‘MK VOLFACT.SQL’来创建测定体积的表。
b)收集晚间数据大小的信息,用‘ANALYZE COMP.SQL’。
c)收集统计结果,用‘POP VOL.SQL’。
d)在空闲的时候检查数据,可能的话,每周或每个月进行。
我是用MS EXCEL和ODBC的联接来检查数据和图表的增长。
三.每周维护过程
A.查找被破坏的目标
1.对于每个给定表空间的对象来说,NEXT_EXTENT的大小是相同的,如12/14/98,缺省的NEXT_EXTENT的 DATAHI为1G,DATALO为500MB,INDEXES为256MB。
A)检查NEXT_EXTENT的设置,可用‘NEXTEXT.SQL’。
B)检查已有的EXTENTS,可用‘EXISTEXT.SQL’。
2.所有的表都应该有唯一的主键
a)查看那些表没有主键,可用‘NO_PK.SQL’。
b)查找那些主键是没有发挥作用的,可用‘DIS_PK.SQL’。
c)所有作索引的主键都要是唯一的,可用‘NONUPK.SQL’来检查。
3.所有的索引都要放到索引表空间中。运行‘MKREBUILD_IDX.SQL’
4.不同的环境之间的计划应该是同样的,特别是测试环境和成品环境之间的计划应该相同。
a)检查不同的2个运行环境中的数据类型是否一致,可用‘DATATYPE.SQL’。
b)在2个不同的实例中寻找对象的不同点,可用‘OBJ_COORD.SQL’。
c)更好的做法是,使用一种工具,象寻求软件的计划管理器那样的工具。
B.查看是否有危害到安全策略的问题。
C.查看报错的SQL*NET日志。
1.客户端的日志。
2.服务器端的日志。
D.将所有的警告日志存档。
E..供应商的主页
1. ORACLE供应商
http://www.oramag.com
~ b4a
K0['|]0
2. Quest Software
3. Sun Microsystems
四.月维护过程
A.查看对数据库会产生危害的增长速度
1.从以前的记录或报告中回顾段增长的变化以此来确定段增长带来危害
B.回顾以前数据库优化性能的调整
1.回顾一般ORACLE数据库的调整点,比较以前的报告来确定有害的发展趋势。
C.查看I/O的屏颈问题
1.查看前期数据库文件的活动性,比较以前的输出来判断有可能导致屏颈问题的趋势。
D.回顾FRAGMENTATION
E.计划数据库将来的性能
1.比较ORACLE和操作系统的CPU,内存,网络,及硬盘的利用率以此来确定在近期将会有的一些资源争夺的趋 势;
2.当系统将超出范围时要把性能趋势当作服务水平的协议来看。
F.完成调整和维护工作
1.使修改满足避免系统资源的争夺的需要,这里面包括增加新资源或使预期的停工。
五.附录(维护用程序)
A.日常程序
0. free.sql
* To verify free space in tablespacesITPUB个人空间 E{6D IR;T:W'V(f5q}Z
* Minimum amount of free spaceITPUB个人空间L5WG'H-y
* document your thresholds:ITPUB个人空间T:hf0@ ] c'i
* = m
SELECT tablespace_name, sum ( blocks ) as free_blk , trunc ( sum ( bytes ) /ITPUB个人空间4xt)ZWLy
(1024*1024) ) as free_m, max ( bytes ) / (1024) as big_chunk_k, count (*) as num_chunks
F
u/I"gn%y*R/}El0 FROM dba_free_space GROUP BY tablespace_name;
1. Space.sql
* -- space.sqlITPUB个人空间4?K,dV)Sh[ os
* -- To check free, pct_free, and allocated space within a tablespaceITPUB个人空间7ZdHd`pN
* -- 11/24/98
SELECT tablespace_name, largest_free_chunk, nr_free_chunks, sum_alloc_blocks, sum_free_blocksITPUB个人空间R];~]i
, to_char(100*sum_free_blocks/sum_alloc_blocks, '09.99') || '%' AS pct_freeITPUB个人空间y2g\b
cH8_K
FROM ( SELECT tablespace_name , sum(blocks) AS sum_alloc_blocks
#U Da {Q/};N
H/mKf0 FROM dba_data_files GROUP BY tablespace_name )ITPUB个人空间$o4@j{D2Ju8~
, ( SELECT tablespace_name AS fs_ts_name
8o-F
@*S.h/A6t%wDpZ0 , max(blocks) AS largest_free_chunkITPUB个人空间!j'e*t*u@8cK
, count(blocks) AS nr_free_chunks
)E!f4[6a0oW0 , sum(blocks) AS sum_free_blocks FROM dba_free_space
\_f+V @^~~0 GROUP BY tablespace_name ) WHERE tablespace_name = fs_ts_name;
2. analyze5pct.sql
* -- analyze5pct.sqlITPUB个人空间 @]D:~{0x
* -- To analyze tables and indexes quickly, using a 5% sample sizeITPUB个人空间UB {)pETJRP+|
* -- (do not use this script. if you are performing the overnight collection of volumetric data)ITPUB个人空间%X8e+Au`f
* -- 11/30/98
BEGINITPUB个人空间%Ja)MZ&H^ L
Z
S:[
DBMS_UTILITY.ANALYZE_SCHEMA ('&OWNER', 'ESTIMATE',NULL, 5) ;ITPUB个人空间+T'_'F|?
END;ITPUB个人空间/n!}wj:bpz2|U/c,kj
u
/
3. nr_extents.sql
* -- nr_extents.sql
.f&xp8dQV2FC c0 * -- To find out any object reachingITPUB个人空间c$`kfEr)zm
* -- extents, and manually upgrade it to allow unlimitedITPUB个人空间;a8CB\Rj6d
* -- max_extents (thus only objects we *expect* to be bigITPUB个人空间C#`1a.i[m ?!r
* -- are allowed to become big)ITPUB个人空间(iK@RM8H5N
* -- 11/30/98
SELECT e.owner, e.segment_type , e.segment_name , count(*) as nr_extents , s.max_extentsITPUB个人空间 {;~o;at
e%t
, to_char ( sum ( e.bytes ) / ( 1024 * 1024 ) , '999,999.90') as MBITPUB个人空间U-g]S6Q
FROM dba_extents e , dba_segments s
]x6z^_+@0 WHERE e.segment_name = s.segment_nameITPUB个人空间y9u*\c@&L9Cd#T
GROUP BY e.owner, e.segment_type , e.segment_name , s.max_extents
ER"fM)?]0 HAVING count(*) > &THRESHOLD
*n
~C9_P
aj0 OR ( ( s.max_extents - count(*) ) < &&THRESHOLD )ITPUB个人空间!c
M3AR,v3B1x3d)b'FB
ORDER BY count(*) desc;
4. spacebound.sql
* spacebound.sqlITPUB个人空间.a1j6P!][8U
* To identify space-bound objects. If all is well, no rows are returned.ITPUB个人空间s4rrquB@
* f any space-bound objects are found, look at value of NEXT extentITPUB个人空间4_p7~
Ny?:U:?a@}$D
* size to figure out what happened.ITPUB个人空间F3k}8NUV:g
* Then use coalesce (alter tablespace coalesce .
n1K6@ q+g0^!A0l}0 * Lastly, add another datafile to the tablespace if needed.
}0jaN [%^~;~0 * 11/30/98
SELECT a.table_name, a.next_extent, a.tablespace_name
C/Ex,y9H,yey9aG0 FROM all_tables a,ITPUB个人空间_vz2|W#DC
( SELECT tablespace_name, max(bytes) as big_chunk
BB skuDV mvM0 FROM dba_free_spaceITPUB个人空间 cY9q-cWK4K.Zn%z
GROUP BY tablespace_name ) f
*\l)K4Df7i3\4]0 WHERE f.tablespace_name = a.tablespace_name
([$hY Q-Ab+Ne:oZ4M!q2r0 AND a.next_extent > f.big_chunk;
B.每晚处理程序
1. mk_volfact.sql
* mk_volfact.sql (only run this once to set it up; do not run it nightly!)
Table UTL_VOL_FACTS
CREATE TABLE utl_vol_facts (
1]N;JU4] g0 table_name VARCHAR2(30),ITPUB个人空间B)orp7I4o
num_rows NUMBER,ITPUB个人空间3Pb8sc4d6^#E M8{O3O
meas_dt DATE )
;_2d?%a8z/wo w3_J0 TABLESPACE platabITPUB个人空间 W'f|hf$Acp
STORAGE (
3]O/J|T
\DO'iM0 INITIAL 128kITPUB个人空间
Tt$Y+Ef)CyZ
DSXvWP
NEXT 128kITPUB个人空间*Q.bXKm)]wBp~(j
PCTINCREASE 0ITPUB个人空间A6B!O0M
tznx MA:L.HM
MINEXTENTS 1
L8?QT$an
so+zc0 MAXEXTENTS unlimitedITPUB个人空间8S8LU8T.u+a{
)
w"UV!@l:g Z#Y0 /ITPUB个人空间?Te0Rt~6bVP
-- Public SynonymITPUB个人空间j F)g+I.H
CREATE PUBLIC SYNONYM utl_vol_facts FOR &OWNER..utl_vol_facts
KXh&v$q
x0 /
* Grants for UTL_VOL_FACTS
GRANT SELECT ON utl_vol_facts TO public
2. analyze_comp.sql
On a[bw*C6w0ITPUB个人空间(\Y(`D&CiH'\Su
* analyze_comp.sql
H3Y-o
Y D0ITPUB个人空间~Z t5?J-jOV
BEGIN
5J rd$X pI;rR.z I%W0 SYS.DBMS_UTILITY.ANALYZE_SCHEMA ( '&OWNER','COMPUTE');
Yi;W`(b1G'T2o0 END;
S'MgJD&L0 /
fn-n6k/kF0ITPUB个人空间:g-T!moyL
3. pop_vol.sql
nS~4dEm1kr;|0ITPUB个人空间\9f[$p,XuPYA
* pop_vol.sql ITPUB个人空间!So)@uu3O)\*b-rn
ITPUB个人空间.xN&r%@4FOoS
insert into utl_vol_factsITPUB个人空间K.Z UCd"buw
select table_nameITPUB个人空间K*x4C
x?5i
, NVL ( num_rows, 0) as num_rows
)re7m6b4?a{;f5G0 , trunc ( last_analyzed ) as meas_dtITPUB个人空间^l~1w|'R _}f
from all_tables
3bM.g
Acf2q$i+G0
)\X,jd NR,f)i%@8OM0 * or just user_tables ITPUB个人空间bzx]4W
d}qv
ITPUB个人空间+y/X Bd._ C0_+Q
where owner in ('&OWNER')ITPUB个人空间Xt2K"R^mY[-p~
ITPUB个人空间(yzw
i9F8}/l c:`
* or a comma-separated list of owners ITPUB个人空间/cU}T}
y0y%L@c
ITPUB个人空间|IQ`
N D
K&e#v,V
/ITPUB个人空间 amd:li9o
commit
5Yy6c-b{hf3vn0 /
|eHa!Iz0
D.}g
r)Gv9I0 C.每周处理程序ITPUB个人空间Na*s"b+t
ITPUB个人空间RW.oi#D
1. nextext.sql
$i8HO/p6A,]q0ITPUB个人空间!?R"M0I4|9^M7v
* nextext.sqlITPUB个人空间%nW#f&`+t
l(r
V
* To find tables that don't match the tablespace default for NEXT extent.
y(@
\7R8m]#w7Vz0 * The implicit rule here is that every table in a given tablespace shouldITPUB个人空间K
i_o4\G
* use the exact same value for NEXT, which should also be the tablespace's
v7z#r,jB
N)T0Y%{7D0 * default value for NEXT.
T.|T qG"D$z:}P W-g0 * his tells us what the setting for NEXT is for these objects today.
b@S2iW)m0 * 11/30/98
#b-@+oS:I!u7O0ITPUB个人空间)J1h+^ZaT)\
SELECT segment_name, segment_type, ds.next_extent as Actual_Next
8rm5e'C3At0 , dt.tablespace_name, dt.next_extent as Default_NextITPUB个人空间l)e4v%`8s5O\!D
FROM dba_tablespaces dt, dba_segments dsITPUB个人空间%@YOm`S
WHERE dt.tablespace_name = ds.tablespace_name
d#MU.sZ,F0 AND dt.next_extent !=ds.next_extent
YTT)X:w.k4Ko0 AND ds.owner = UPPER ( '&OWNER' )
XQ4fi*YN2Y0 ORDER BY tablespace_name, segment_type, segment_name;ITPUB个人空间+H%K6F-p/^K!n
导入论坛 引用链接 收藏 分享给好友 推荐到圈子 管理 举报
TAG:
标题搜索
日历
|
|||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
| 1 | 2 | 3 | 4 | 5 | 6 | ||||
| 7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
| 14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
| 21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
| 28 | 29 | 30 | 31 | ||||||
数据统计
- 访问量: 1502
- 日志数: 21
- 建立时间: 2008-02-28
- 更新时间: 2008-11-03

