宁夏电信帐务结算系统数据库日常维护文档v2[1].0.doc

上传人:laozhun 文档编号:2395290 上传时间:2023-02-17 格式:DOC 页数:27 大小:457.50KB
返回 下载 相关 举报
宁夏电信帐务结算系统数据库日常维护文档v2[1].0.doc_第1页
第1页 / 共27页
宁夏电信帐务结算系统数据库日常维护文档v2[1].0.doc_第2页
第2页 / 共27页
宁夏电信帐务结算系统数据库日常维护文档v2[1].0.doc_第3页
第3页 / 共27页
宁夏电信帐务结算系统数据库日常维护文档v2[1].0.doc_第4页
第4页 / 共27页
宁夏电信帐务结算系统数据库日常维护文档v2[1].0.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《宁夏电信帐务结算系统数据库日常维护文档v2[1].0.doc》由会员分享,可在线阅读,更多相关《宁夏电信帐务结算系统数据库日常维护文档v2[1].0.doc(27页珍藏版)》请在三一办公上搜索。

1、宁夏电信帐务结算系统数据库日常维护文档(v2.0) 宏智科技股份有限公司2003年4月资料版本:V2.0日 期:2003年4月密 级:公开资料 内部资料 保密资料 机密资料状 态:初稿 讨论稿 发布版权声明宏智科技股份有限公司20022002年版权所有,保留一切权利非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文的部分或全部,并不得以任何形式传播。Copyright2002 by Wholewise Sci.&Tech. Co.,Ltd.All Right Reserved.No part of this document may be reproduced or transmitte

2、d in any form or by any means without prior written consent of Wholewise Sci.&Tech. Co.,Ltd. 文档控制记录修改记录日期作者版本修改记录2002-11-13刘高智1.0初稿2003/04/30程国谦1.1修订错误2003/05/05程国谦2.0增加DBA所必须掌握的UNIX命令审阅姓名时间职位程国谦2003/04/25技术资源部经理分发拷贝No.姓名分发时间单位1张建雷2003/05/10宁夏电信公司2崔鹏2003/05/10宏智科技宁夏电信计费系统项目经理目录1系统监控41.1CPU使用情况监控41.2

3、内存使用情况监控41.3系统空间使用情况42oracle存储监控52.1检查oracle日志52.2检查数据库数据表空间的使用情况62.3检查表和索引的扩展72.3.1检查扩展数多于100的表和索引72.3.2检查不能扩展的数据库对象72.4检查回滚段使用情况72.4.1检查回滚段配置情况72.4.2检查回滚段争夺82.4.3检查回滚段的扩展83数据库性能监控83.1收集数据库运行信息83.2跟踪应用运行情况93.3定期对数据库对象进行分析93.4定期更新OPS视图103.5检查数据库排序和临时段103.5.1检查内存排序的比例103.5.2检查临时表空间的设置103.6检查重做日志文件使用情

4、况113.6.1检查logswitch113.6.2检查重做日志文件空间请求113.6.3检查重做日志文件的latch113.7检查数据库的命中率113.7.1检查Library Cache命中率113.7.2检查Data Dictionary Cache命中率113.7.3检查buffer cache命中率123.8v$resource_limit124数据库备份125附录A 脚本126附录B. 其它的一些常用脚本167附录C 常用的数据字典198附录D DBA常用unix命令及配置文件221 系统监控1.1 CPU使用情况监控用vmstat命令监控系统,命令输出如下;# vmstat pr

5、ocs memory page faults cpur b w avm free re at pi po fr de sr in sy cs us sy id0 0 0 32243 1091988 7 0 0 0 0 0 2 2040 3341 1387 10 1 89 注意:cpu选项的id值。该值太小表示cpu繁忙。可能存在cpu瓶颈或有不正常进程存在。可用top命令近一步监控占用资源大的进程。1.2 内存使用情况监控用vmstat 命令监控# vmstat procs memory page faults cpur b w avm free re at pi po fr de sr in

6、 sy cs us sy id0 0 0 32243 1091988 7 0 0 0 0 0 2 2040 3341 1387 10 1 89注意:如果memory的free list(free项)持续增大,可能程序存在内存泄漏。Page in(pi)和page out(po)持续为非零值时,表示存在内存瓶颈。1.3 系统空间使用情况用df -k命令检查系统使用空间:注意:检查每个文件系统的使用空间百分比(used),特别是根文件系统(/)、oracle文件系统(/oracle)和归档日志文件系统(/global/arch1,/global/arch2)。不要让使用空间超过80%。当oracl

7、e文件系统没有空余空间时,数据库会出现中断的情况。应定期用df(或df k)命令察看oracle文件系统的使用情况,保证使用率在80%以下。不要将数据库备份文件长期存放在oracle文件系统中。注意定期清除oracle的日志文件。若使用ORACLE并行数据库(OPS),禁止在oracle文件系统中创建数据文件。如果是归档日志文件系统满,需要检查备份系统。如果数据库启动在archive log(归档)模式下,应定期察看archive log的文件系统(在计费周期里,建议每隔12个小时察看一次,根据我们的经验,象宁夏电信这样的集中计费系统,每小时生成的日志文件估计在5GB左右,若不及时将归档日志文

8、件备份出去,将导致数据库系统hang住),保证有足够的空间存放archive log文件。及时的备份archive log文件,并做及时的清理。数据库管理员应定期清理log文件、trc文件、和core文件。Oracle的日志文件有: /oracle/app/oracle/admin/bill/budmp目录下的alert_bill.log文件(数据库日志文件) /oracle/app/oracle/admin/bill/budmp目录下的*.trc 文件(oracle后台进程产生的trace文件) /oracle/app/oracle/admin/bill/udump目录下的*.trc 文件

9、(oracle错误时产生的trace文件) /oracle/app/oracle/admin/bill/cdump目录下的core_* (oracle core dump 文件) /oracle/app/oracle/product/8.1.7/dbs 目录下的core_* (oracle core dump 文件) /oracle/app/oracle/proudct/8.1.7/network/log目录下的listener.log (监听进程日志) /oracle/app/oracle/proudct/8.1.7/network/log目录下的sqlnet.log (sqlnet日志)应

10、特别注意的是listener.log文件,该文件存放在$ORACLE_HOME/network/log目录下。在监听进程配置不正确或监听进程出现错误时,log文件会增长得很快,应定期察看log文件的大小,并清空该文件,但该文件只能采用 $ORACLE_HOME/network/log/listener.log命令清空该文件而不能删除该文件。2 oracle存储监控2.1 检查oracle日志用vi命令查看数据库日志(/oracle/app/oracle/admin/bill/bdump/alert_bill.log文件)检查数据库的报错信息,尤其注意ORA-600错误、ORA-07445错误、

11、ORA-01578错误等对系统影响较大的错误。对数据库的报错,应首先使用oerr命令查看该错误的解释和基本的应对手段。如:对错误ORA-1562oerr ora 165201652, 00000, unable to extend temp segment by %s in tablespace %s/ *Cause: Failed to allocate an extent for temp segment in tablespace./ *Action: Use ALTER TABLESPACE ADD DATAFILE statement to add one or more/ file

12、s to the tablespace indicated我们可以很轻易的了解到由于磁盘空间不足导致该错误,可以通过增加数据文件或其他方式解决该故障。对于不能处理的报错,请将错误日志和trace文件mail给系统集成事业部、拨打宏智科技服务热线、通过ORACLE metalink网站()开tar或拨打ORACLE 800服务热线 8008100366解决故障。错误的trace文件存放在/oracle/app/oracle/admin/bill/cdump或/oracle/app/oracle/admin/bill/bdump目录下。如:Mon Apr 15 20:01:44 2002Error

13、s in file /oracle/app/oracle/admin/bill/bdump/smon_11866_bill.trc:ORA-00600: internal error code, arguments: 16224, , , , , , , 2.2 检查数据库数据表空间的使用情况使用如下的脚本检查表空间使用情况,相关脚本参见附录A。FREE_SPACE.SQL 检查表空间剩余空间。FREE_PER_TP.SQL 检查表空间剩余空间百分比。当表空间使用空间超过80%,建议进行垃圾表的清理或增加数据库文件扩大表空间大小。l OPS环境下,不要使用一般文件做数据库的数据文件,日志文件,

14、控制文件。一定要用裸设备,裸设备的设备名是/dev/r,同时一定要注意数据文件大小一定要略小于裸设备大小。l 在增加或删除数据文件后,注意及时维护安装配置文档中的数据文件分配表。2.3 检查表和索引的扩展2.3.1 检查扩展数多于100的表和索引使用LAGRE_EXTENT.SQL检查扩展数多于100的表和索引。对于扩展数多的表和索引,建议:修改数据库对象的存储参数并重建该数据对象。2.3.2 检查不能扩展的数据库对象使用MAX_EXTENT.SQL检查因达到maxextent参数引起的表或索引不能扩展。使用NO_SPACE.SQL检查因表空间的最大空闲块小于表的扩展块引起的表或索引不能扩展。

15、对于第一种情况,可暂时将maxextent设为unlimited或通过重建数据库对象的方式彻底解决该问题。对于第二种情况,应将next调小,将pctincrease设为0。以上两种错误,均应考虑对对象的存储策略进行修订,避免再次出现类似故障。2.4 检查回滚段使用情况2.4.1 检查回滚段配置情况使用ROLL_SEGS.SQL脚本查看回滚段配置。回滚段配置及使用注意以下几点: 数据库有足够的回滚段。(见6.2) 回滚段使用独立的表空间。 每个回滚段的initial_extent和next_extent一样大,pct_increase为0。 每个回滚段使用相同的存储策略 system回滚段例外

16、大事务使用少量大的回滚段,小事务使用大量小的回滚段2.4.2 检查回滚段争夺使用ROLL_CONT.SQL检查回滚段竞争。当结果大于1%时,需增加回滚段的数量。2.4.3 检查回滚段的扩展使用ROLL_EXTENT.SQL检查回滚段的扩展。如果大部分回滚段扩展次数较大。则: 在回滚段的存储参数中设置optimal值。Optimal值必须大于minextent值。 增加回滚段的initial和next值。 增加回滚段表空间的大小。如果是某个回滚段扩展较大。则表明数据库中有较大的事务。建议建一个大的回滚段,用于大的事务。平时大的回滚段处于offline状态,在大事务执行时,online大的回滚段。

17、在sql语句中指明事务使用大的回滚段。3 数据库性能监控在日常维护过程中,应定时对数据库系统运行情况进行检查。例如定时检查数据库表空间使用情况;定时对数据库性能进行分析(使用utlbstat/utlestat脚本对数据库的数据库缓冲区命中率等进行监控);定时对数据库的表和索引进行分析;定时对占用系统资源最多的数据库进程进行跟踪并反馈给应用开发人员等以保证数据库系统的运行正常与高效。3.1 收集数据库运行信息ORACLE提供了两个脚本utlbstat.sql和utlestat.sql用于收集数据库运行信息(包括数据库缓冲区命中率、磁盘读写分布等),在数据库最忙的时候执行如下脚本收集信息:Svrm

18、grl alter system set timed_statistics=true;Svrmgrl ?/rdbms/admin/utlbstat.sql执行该语句2030分钟svrmgrl ?/rdbms/admin/utlestat.sql(?$ORACLE_HOME)svrmgrl alter system set timed_statistics=false;在当前目录下将生成一个report.txt文件,可以与在系统空闲或其他时间生成的文件进行比较,判断是否需要修改数据库初始化参数。3.2 跟踪应用运行情况数据库运行过程中可能由于应用sql语句不规范、索引失效或其他问题导致性能下降,

19、响应速度变慢,可以通过如下方式对应用进行跟踪:svrmgrl ?/utlxplansvrmgrl select sid,serial# from v$session where username=&username;svrmgrl execute dbms_system.set_sql_trace_in_session(sid,serial#,true);执行该语句2030分钟左右svrmgrl execute dbms_system.set_sql_trace_in_session(sid,serial#,false);在$ORACLE_BASE/admin/$ORACLE_SID/udum

20、p目录下将生成一个trc文件,可以使用如下命令将其转换为文本文件:$ tkprof out.trc out.txt explain=username/password sys=no3.3 定期对数据库对象进行分析定期对表进行分析有几点需要注意:u 系统表不能进行分析,一旦对系统表进行分析将导致数据库性能缓慢甚至产生其他问题,这是由于ORACLE对系统表的查询的优化方式和一般情况下的SQL优化方式不同。u 需要对所有非系统的表全部进行分析。如果只分析部分表则可能导致数据库执行时选择错误的执行策略,导致数据库性能缓慢。u 由于目前计费帐务系统的应用方式,建议每旬下帐后对所有的应用的表进行分析;但由

21、于部分表记录数可能达到几千万条,这样一个晚上可能无法完成所有表的分析,因此建议采用采样分析。建议在应用部门的配合下,编写一个适合当地的分析脚本(大表采用采样分析10万条,小表则全部分析)并定期进行分析并记录分析时间及执行人以提高系统的运行效率。3.4 定期更新OPS视图在OPS环境下,建议每隔3/4周运行catparr.sql以刷新ops依赖的底层数据字典ext_to_obj视图。由于在OPS的环境下,v$ping和v$cache是依据内部表ext_to_object的信息产生的。而表ext_to_obj是从ext_to_obj_view(由脚本catparr.sql产生的)视图产生的静态表。

22、由此可知,ext_to_obj是静态的,它随时间而老化,这就引起为什么在v$ping和v$cache视图中某些对象的丢失,解决这个问题只有定期地运行catparr.sql,以刷新ext_to_obj内部表。3.5 检查数据库排序和临时段3.5.1 检查内存排序的比例用DISK_SORT.SQL检查在磁盘排序的百分比。当比例大于5时,需增加sort_area_size值。3.5.2 检查临时表空间的设置临时表空间的设置应注意以下事项: 数据库中使用一个或多个临时表空间 在每个用户定义时指定临时表空间,不允许使用system表空间作为用户的临时表空间 将临时表空间的类型设为temporary。 临

23、时表空间的存储参数设置。使用相同的initial和next值。设置pctincease为0,initial及next应为sort_area_size的整数倍3.6 检查重做日志文件使用情况3.6.1 检查logswitch查看alert_.log文件,看重做日志文件切换的间隔。如果间隔时间经常性的小于10分钟或经常出现诸如“checkpoint not complete”之类的提示则建议增大重做日志文件的大小。ORACLE建议重做日志文件切换的间隔时间应为2040分钟。3.6.2 检查重做日志文件空间请求用REDO_SPACE.SQL查看。百分比应小于1%,否则应增加log_buffers设置

24、。3.6.3 检查重做日志文件的latch用REDO_LATCH1.SQL检查redolog的allocation latch。用REDO_LATCH2.SQL检查redolog的copy latch。如果百分比大于1%,则应增加db_block_lru_latches和log_buffers。3.7 检查数据库的命中率3.7.1 检查Library Cache命中率用LIB_CACHE.SQL查看library cache命中率。如果命中率miss大于1%,增大shared_pool_size。3.7.2 检查Data Dictionary Cache命中率用DICT_CACHE.SQL查看

25、Data Dictionary Cache命中率。如果命中率miss大于15,增大shared_pool_size。3.7.3 检查buffer cache命中率用BUFFER_CACHE.SQL查看buffer cache命中率。如果命中率小于95%,增大db_block_buffers。分析non_sys用户的表和索引经常分析非sys用户的表和索引,有利于数据库性能。3.8 v$resource_limit在ORACLE8版本中,双机之间的参数应该经常进行观察并做及时调整,否则可能导致客户端无法正常登录数据库服务器:svrmgrl select * from v$resource_limi

26、t;一旦发现参数max_allocate超过或接近initial_allocate设置,应及时调整相应参数4 数据库备份对于数据库备份来说,最佳的方式是使用自动备份系统(例如Legato或Veritas备份软件ORACLE RMAN磁带库)对数据库进行定时自动备份,但自动备份系统不能解决所有的问题,应使用exp命令对系统中的配置表等进行定期备份,以便于系统故障时的快速恢复:常用备份脚本如下:exp user/passwd file=exp.dmp log=exp.log buffer=1048576 compress=y 注意: 使用exp备份前一定要检查数据库环境变量尤其是语言集设置是否有误

27、(zhs16cgb231280或zhs16gbk); 备份时一定要输出log文件以利于检查备份工作是否正常完成; 使用compressy选项有利于在导入时对数据块扩展进行优化。5 附录A 脚本 FREE_SPACE.SQL select tablespace_name,sum(blocks) as free_blk,trunc(sum(bytes)/(1024*1024) as free_m,max(bytes)/(1024) as big_chunk_k,count(*) as num_chunksfrom dba_free_spacegroup by tablespace_name FRE

28、E_PER_TP.SQSELECT tablespace_name, largest_free_chunk, nr_free_chunks, sum_alloc_blocks, sum_free_blocks, to_char(100*sum_free_blocks/sum_alloc_blocks, 09.99) | % AS pct_freeFROM ( SELECT tablespace_name, sum(blocks) AS sum_alloc_blocksFROM dba_data_filesGROUP BY tablespace_name),( SELECT tablespace

29、_name AS fs_ts_name,max(blocks) AS largest_free_chunk,count(blocks) AS nr_free_chunks,sum(blocks) AS sum_free_blocksFROM dba_free_spaceGROUP BY tablespace_name )WHERE tablespace_name = fs_ts_name LAGRE_EXTENT.SQLselect owner,segment_name,extents,bytes , max_extents,next_extent from dba_segments wher

30、e segment_type in (TABLE,INDEX) and extents200 order by owner,segment_name; MAX_EXTENT.SQLSelect a.owner,a.segment_type,a.segment_name,a.tablespace_name From dba_segments a,dba_semgments bWhere a.extnets+1b.max_extents And a.owner=b.owner And a.segment_name=b.segment NO_SPACE.SQLselect a.owner, a.se

31、gment_name, b.tablespace_name, decode(ext.extents,1,b.next_extent, a.bytes*(1+b.pct_increase/100) nextext, freesp.largest from dba_extents a, dba_segments b, (select owner, segment_name, max(extent_id) extent_id, count(*) extents from dba_extents group by owner, segment_name ) ext, (select tablespac

32、e_name, max(bytes) largest from dba_free_space group by tablespace_name ) freesp where a.owner=b.owner and a.segment_name=b.segment_name and a.owner=ext.owner and a.segment_name=ext.segment_name and a.extent_id=ext.extent_id and b.tablespace_name = freesp.tablespace_name and decode(ext.extents,1,b.n

33、ext_extent, bytes*(1+b.pct_increase/100) freesp.largest ROLL_SEGS.SQLSelect segment_name,tablespace_name,initial_extent,next_extent,pct_increase From dba_rollback_segs ROLL_CONT.SQLselect w.class, (sum(w.count)/sum(s.value) * 100from v$waitstat w , v$sysstat swhere w.class in (system undo header,sys

34、tem undo block, undo header, undo block) and s.name in (db block gets,consistent gets) group by w.class ROLL_EXTENT.SQLselect a.name,b.extentsfrom v$rollname a,v$rollstat bwhere a.usn=b.usn DISK_SORT.SQLSELECT DISK.VALUE DISK, MEM.VALUE MEM,(DISK.VALUE/MEM.VALUE)*100 RATIO FROM V$SYSSTAT MEM, V$SYSS

35、TAT DISK WHERE MEM.NAME = sorts (memory) AND DISK.NAME = sorts (disk) REDO_SPACE.SQLselect (a.value/b.value)*100from v$sysstat a,v$sysstat bwhere a.name=redo buffer allocation retriesand b.name=redo entries REDO_LATCH1.SQLselect (misses/decode(gets,0,1,gets)*100 Ratio1,(immediate_misses/decode(immed

36、iate_misses+ immediate_gets,0,1, immediate_misses+immediate_gets)*100) Ratio2from v$latch lwhere l.name = redo allocation REDO_LATCH2.SQLselect (misses/decode(gets,0,1,gets)*100 Ratio1, (immediate_misses/decode(immediate_misses+ immediate_gets,0,1, immediate_misses+immediate_gets)*100) Ratio2from v$

37、latch lwhere l.name = redo copy LIB_CACHE.SQLselect sum(pins), sum(reloads),sum(reloads)/sum(pins)*100from v$librarycache DICT_CACHE.SQLselect sum(gets), sum(getmisses),sum(getmisses)/sum(gets)*100from v$rowcache BUFFER_CACHE.SQLselectsum(decode(name, consistent gets,value, 0) Consis Gets,sum(decode

38、(name, db block gets,value, 0) DB Blk Gets,sum(decode(name, physical reads,value, 0) Phys Reads,(sum(decode(name, consistent gets,value, 0) +sum(decode(name, db block gets,value, 0) -sum(decode(name, physical reads,value, 0)/(sum(decode(name, consistent gets,value, 0) + sum(decode(name, db block get

39、s,value, 0) ) * 100 Hit Ratiofrom v$sysstatwhere name in (db block gets,consistent gets,physical reads)6 附录B. 其它的一些常用脚本 监控实例的等待select event,sum(decode(wait_Time,0,0,1) Prev, sum(decode(wait_Time,0,1,0) Curr,count(*) Tot from v$session_Wait group by event order by 4 监控当前数据库谁在运行什么SQL语句SELECT osuser, u

40、sername, sql_text from v$session a, v$sqltext b where a.sql_address =b.address order by address, piece 查找使用CPU最多的用户Sessionselect a.sid,spid,status,substr(a.program,1,40) prog,terminal,osuser,value/60/100 value from v$session a,v$process b,v$sesstat c where c.statistic#=12 and c.sid=a.sid and a.paddr

41、=b.addr order by value desc 查看锁信息SELECT sn.username, m.sid, m.type, DECODE(m.lmode, 0, None, 1, Null, 2, Row Share, 3, Row Excl., 4, Share, 5, S/Row Excl.,6, Exclusive, lmode, ltrim(to_char(lmode,990) lmode, DECODE(m.request,0, None, 1, Null, 2, Row Share, 3, Row Excl., 4, Share, 5, S/Row Excl., 6,

42、Exclusive, request, ltrim(to_char(m.request, 990) request, m.id1, m.id2 FROM v$session sn, v$lock m WHERE (sn.sid = m.sid AND m.request != 0) OR (sn.sid = m.sid AND m.request = 0 AND lmode != 4 AND (id1, id2) IN (SELECT s.id1, s.id2 FROM v$lock s WHERE request != 0 AND s.id1 = m.id1 AND s.id2 = m.id

43、2) ) ORDER BY id1, id2, m.request 检查哪个用户锁住了表column username format a13 column object_name format a20 column MACHINE format a10 select a.sid,a.type,a.id1,c.object_name,b.username,a.lmode,B.MACHINE,D.SPIDfrom v$lock a,v$session b,all_objects c,V$PROCESS D where a.sid=b.sid and a.type in (TM,TX) and c.object_id=a.id1 AND B.PADDR=D.ADDR order by username 查看前台正在发出的SQL语句select user_name,sql_text from v$open_cursor where sid in (select sid from (select sid,seria

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号