最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

数据库维护工作手册

来源:动视网 责编:小OO 时间:2025-09-25 05:16:27
文档

数据库维护工作手册

数据库维护工作手册文档编号:文档名称:编写:审核:批准:批准日期:1概述数据库的日常监控是使管理员及时了解系统异常的手段。大部分情况下,系统总是正常运行的。只有对正常情况的充分了解,才能通过对比正常情况发现异常情况。对于数据库的日常监控要有记录,文字记录或者电子文档保存。对于数据库异常进行分析,提出解决方案。日常工作包括监控和维护两个部分。此文档中关于数据库的运行命令示例主要针对于ORACLE数据库,但对于SYBASE数据库同样有参考价值,只要换用相对应的语句即可。数据库监控2数据库监控数据库
推荐度:
导读数据库维护工作手册文档编号:文档名称:编写:审核:批准:批准日期:1概述数据库的日常监控是使管理员及时了解系统异常的手段。大部分情况下,系统总是正常运行的。只有对正常情况的充分了解,才能通过对比正常情况发现异常情况。对于数据库的日常监控要有记录,文字记录或者电子文档保存。对于数据库异常进行分析,提出解决方案。日常工作包括监控和维护两个部分。此文档中关于数据库的运行命令示例主要针对于ORACLE数据库,但对于SYBASE数据库同样有参考价值,只要换用相对应的语句即可。数据库监控2数据库监控数据库
数据库维护工作手册

文档编号:文档名称:
编    写:审    核:
批    准:批准日期:
1

概述

数据库的日常监控是使管理员及时了解系统异常的手段。大部分情况下,系统总是正常运行的。只有对正常情况的充分了解,才能通过对比正常情况发现异常情况。对于数据库的日常监控要有记录,文字记录或者电子文档保存。对于数据库异常进行分析,提出解决方案。

日常工作包括监控和维护两个部分。

此文档中关于数据库的运行命令示例主要针对于ORACLE数据库,但对于SYBASE数据库同样有参考价值,只要换用相对应的语句即可。

数据库监控

2数据库监控

数据库监控工作内容

制定和改进监控方案,编写监控脚本。

对于数据库进行日常监测,提交记录。

根据监测结果进行分析、预测,提交相应的系统改进建议方案。

数据库监控工作步骤

2.1.1查看数据库日志

数据库的日志上会有大量对于管理员有用的信息。ORACLE的Alert日志纪录了数据库系统所报的系统级错误信息,以及数据块失效等严重错误信息。错误信息的产生,会产生相应的跟踪文件,通过查看警告日志和跟踪文件可查找错误原因,对于发现的问题应及时解决和汇报。如:

1.表空间是否满,是否需要进行添加或者扩展。Alert文件中会显示有表块无法扩展的提示。

2.表的块或者页面是否损坏。(往往这时alert文件中会显示ora-600的错误。)

3.数据库是否进行了异常操作。(如:drop tablespace等等)。

实用命令:

·报警日志文件(alert.log或alrt.ora)

记录数据库启动,关闭和一些重要的出错信息。数据库管理员应该经常检查这个文件,并对出现的问题作出即使的反应。可以通过以下SQL 找到他的路径select value from v$parameter where upper(name) ='BACKGROUND_DUMP_DEST',或通过参数文件获得其路径,或者show parameter BACKGROUND_DUMP_DEST。

·后台跟踪文件

路径与报警文件路径一致,记载了系统后台进程出错时写入的信息。

·用户跟踪文件

记载了用户进程出错时写入的信息,一般不可能读懂,可以通过ORACLE的TKPROF工具转化为可以读懂的格式。用户跟踪文件的路径,你可以通过以下SQL找到他的路径select value from v$parameter where upper(name) ='USER_DUMP_DEST',或通过参数文件获得其路径,或者show parameter USER_DUMP_DEST。

可以通过设置用户跟踪或dump命令来产生用户跟踪文件,一般在调试、优化、系统分析中有很大的作用。

可在参数文件种用SQL_TRACE=TRUE打开该文件(对所有用户),也可用alter session set sql_trace=true打开当前会话,也可用execute dbms_system.set_sql_trace_in_session(sid,serial#,true)打开指定会话。

2.1.2检查是否有失效的数据库对象

主要关注索引,触发器,存储过程,函数等等。如:查找user_objects数据字典,看其中是否有状态为invalid的对象。判断失效原因(如:视图失效的原因有可能是由于创建视图的基表被删除等等),找出原因可进行对象重建或修复。

实用命令:

    Select object_name,object_type

      From user_objects

     Where object_type=’INVALID’;

2.1.3查看数据库剩余空间

1.剩余空间不足时要扩展空间,一般的,当剩余空间小于10%时,要进行空间扩展。对于ORACLE数据库,通过查找tablespaces相关的数据字典可以看到有用的信息。

2.检查数据快速增长的表,通过对于dba_segments数据字典的监视可以找到,当过快增长时,协调开发人员,确定解决方案。

2.1.4重点表检查

1.检查系统核心业务表。

因为这些表健康与否与日常业务的正常运行密切相关。重点检查这些表的索引是否失效,表的统计信息是否及时更新,如:当这些表进行了大的数据装载或者删除操作之后。原则上需要检查所有的表,只是由于上面这些表更关键,建议管理员给以更多的关注。

2.重点检查数据量超过百万行的表,各地的情况可能不一样,当数据超过百万行之后,如果索引失效会导致表扫描,占用大量系统IO,严重影响系统性能。

2.1.5查看数据库是否正常

包括数据库实例是否正常工作、listener是否工作正常,确保数据库系统环境正常。数据库连接是否正常、检查是否有超出正常水平的连接数。

如:平常500个,某天下午忽然达到600个。应记录这种异常情况。分析产生这种情况的原因,如:在低版本的ORACLE中,很可能是一些其他异常的应用出错后产生的死连接。

2.1.6死锁检查

监控数据库运行过程中,出现的阻塞,记录现象,记录产生阻塞的SQL语句,执行的用户,发生时间,频率,处理(杀掉、等待自然解锁等)。ORACLE版本中的死锁会在alert文件中产生记录,oracle会自动解锁(其实是选择一个杀掉)。对于死锁的处理过程要进行记录。可以使用OEM工具或者查找相关的V$视图来确认产生阻塞的语句。

2.1.7监控SQL语句的执行

查找效率低下的SQL语句,联系协调开发人员,进行相关处理。可使用ORACLE提供的AWR进行,也可使用ORACLE提供的OEM工具执行,或者自行编制的脚本等等。

2.1.8操作系统级检查

运行vmstat,sar,topas(AIX系统),glance(HP系统)等命令检查CPU、内存、虚拟内存等的使用情况。

运行df,du,iostat检查磁盘使用情况

运行netstat检查网络情况

运行手工编制的监控脚本检查。

针对于操作系统的不同,使用的命令也会有不同,请参考相应的操作系统文档。建议使用man命令察看相应的帮助信息。

2.1.9其他

每天查看晚间定时执行的数据库信息收集作业和备份作业的日志输出,确认都已正常完成。往往不能正常完成是由于如下的原因:请确认脚本是否变动(错误的修改造成等等),设备(主机,磁盘阵列,磁带库,网络等等)是否正常,空间是否足够等等。

建议每天按业务峰值情况,对数据库性能数据进行定时采集及分析。

3数据库维护

数据库维护工作内容

包括维护、故障诊断、错误修复、备份恢复、历史数据迁移等过程。

数据库维护工作事项

3.1.1页面修复

根据日常监控的结果,进行页面(或者数据库坏块)修复,如将表数据导出后重建表,然后导入数据。提交修复记录。

3.1.2数据库对象重建

根据数据库监控的结果,重建失效的对象。如:索引、存储过程、函数、视图、触发器等等。

实用命令:

Alter index <索引名> rebuild [online];

3.1.3碎片回收(数据重组)

当某些数据库运行一段时间后,表会产生碎片,影响数据库的性能。可根据日常检查的结果,运用工具或脚本对于数据库空间进行重组或回收。由于ORACLE数据库本身的原因,在进行了DELETE操作之后也不会使HWM(High Water Mark 高水位线)降低,因此不会释放所占用的空间,所以建议在进行了数据迁移之后将全库进行EXP,然后进行IMP操作,以释放占用的空间。

3.1.4删除不用的数据

此项工作要得到开发方、设计人员、以及相关人员的确认后,方可执行。

3.1.5备份恢复

需要定期对于数据库备份进行有效性检测,定期进行数据恢复的演练操作。以防止万一的数据库事故时准备不足。

数据库需要采用在线的热备份,不需要关闭数据库进行,在备份的同时可以进行正常的数据库的各种操作,满足了7*24的系统的需要。数据库的备份不能影响用户对数据库的访问。

目标

需要在线热备份

多级增量备份

并行备份,恢复

减小所需要备份量

备份,恢复使用简单

可参考如下的方案:

1.每月做一个数据库的全备份(包含只读表空间)

2.每星期做一次零级备份(不包含只读表空间)

3.每个星期三做一次一级备份

4.每天做一个二级备份

5.任何表空间改成只读状态后做一个该表空间的备份。

6.当需要时(如四个小时归档文件系统就要接近满了)备份归档文件。

3.1.6历史数据迁移

定期进行历史数据迁移,减少生产数据库的压力。

3.1.7定期修改密码

包括SYS,SYSTEM等用户。

3.1.8删除掉不必要的用户

对于系统安装时的演示用户,如:hr,scott等。

建议每周定期清理和备份一周所产生的Alert日志、跟踪文件和dump文件。分别位于$ORACLE_BASE/admin/$ORACLE_SID/bdump, $ORACLE_BASE/admin/$ORACLE_SID/udump, $ORACLE_BASE/admin/$ORACLE_SID/cdump,等目录下。

定期对表进行统计分析,(如可使用analyze等命令,8i以上有dbms_stats包来实现,使SQL优化器总是能找到最好的查询策略。

制定和执行纪录保证生产库的安全:

应绝对禁止在生产库上进行开发、测试。

3.1.9其他

针对不同的数据库版本的不同特点进行相应的维护操作。具体情况请参见ORACLE文档或者访问metalink。

4数据库管理常用SQL脚本

常用的SQL脚本,在实施时可供数据库管理员参考,在执行时,需要进行相应的修改。

1.剩余空间检查

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_chunks

FROM dba_free_space

GROUP BY tablespace_name

2.表空间数据量情况显示

SELECT tablespace_name, max_blocks, count_blocks, sum_free_blocks

, to_char(100*sum_free_blocks/sum_alloc_blocks, '99.99') || '%'

AS pct_free

FROM ( SELECT tablespace_name

, sum(blocks) AS sum_alloc_blocks

FROM dba_data_files

GROUP BY tablespace_name

)

, ( SELECT tablespace_name AS fs_ts_name

, max(blocks) AS max_blocks

, count(blocks) AS count_blocks

, sum(blocks) AS sum_free_blocks

FROM dba_free_space

GROUP BY tablespace_name )

WHERE tablespace_name = fs_ts_name

3.表和索引分析

BEGIN

dbms_utility.analyze_schema ( '&OWNER', 'ESTIMATE', NULL, 5 ) ;

END ;

4.检查空间情况

SELECT a.table_name, a.next_extent, a.tablespace_name

FROM all_tables a,

( SELECT tablespace_name, max(bytes) as big_chunk

FROM dba_free_space

GROUP BY tablespace_name ) f

WHERE f.tablespace_name = a.tablespace_name

AND a.next_extent > f.big_chunk

5.检查已经存在的空间扩展

SELECT count(*), segment_name, segment_type, dt.tablespace_name

FROM dba_tablespaces dt, dba_extents dx

WHERE dt.tablespace_name = dx.tablespace_name

AND dt.next_extent != dx.bytes AND dx.owner = '&OWNER'

GROUP BY segment_name, segment_type, dt.tablespace_name

6.检查没有主键的表

SELECT table_name

FROM all_tables

WHERE owner = '&OWNER'

MINUS

SELECT table_name

FROM all_constraints

WHERE owner = '&&OWNER'

AND constraint_type = 'P'

7.检查失效的主键

SELECT owner, constraint_name, table_name, status

FROM all_constraints

WHERE owner = '&OWNER' AND status = 'DISABLED’ AND constraint_type = 'P'

8.重建索引,具体参数请根据实际情况进行修改

SELECT 'alter index ' || index_name || ' rebuild '

, 'tablespace INDEXES storage ( initial 256 K next 256 K ) ; '

FROM all_indexes

WHERE ( tablespace_name != 'INDEXES'

OR next_extent != ( 256 * 1024 )

)

AND owner = '&OWNER'

9.对比两个实例的不同

SELECT object_name, object_type

FROM user_objects

MINUS

SELECT object_name, object_type

FROM user_objects@&my_db_link

10.查看动态性能视图

Select * from V$FIXED_TABLE

11.查看约束

select a.constraint_name, a.constraint_type,a.*

from user_constraints a

where table_name='table_name';

select constraint_name, column_name

 from user_cons_columns

 where table_name='table_name';

12.查看索引

  user_indexes包含索引的名字,user_ind_columns包含索引的列.

13.查看数据库启动参数:show parameter para,v$parameter提供当前会话信息,v$system_parameter提供当前系统信息。其中isses_modifiable,issys_modifiable表示是否允许动态修改。

14.查看进程号:

select p.spid, s.username 

from v$process p , v$session s

 where p.addr=s.paddr;

15.查看数据文件:

select name, status 

from v$datafile;

select * 

from dba_data_files;

16.查看数据文件状态

select d.file# f#, d.name, d.status, h.status

  from v$datafile d, v$datafile_header h

 where d.file#=h.file#;

17.查看控制文件

select name 

from v$controlfile;

select type, record_size, records_total, records_used

  from v$controlfile_record_section

 where type=’DATAFILE’;

18.查看是否归档模式:

archive log list

select name, log_mode 

from v$database;

select archiver 

from v$instance;

19.查看日志组:

select groups, current_group#, sequence# 

from v$thread;

select group#, sequence#, bytes  , members, status 

from v$log;

select * 

from v$logfile; 

     

其中status为空表示正常。

20.查看large pool

select * 

from v$sgastat 

where pool=’large pool’;

21.查看归档位置

show parameter archive 

select destination, binding, target, status 

from v$archive_dest;

22.查看归档进程

select * 

from v$archive_processes;

23.查看正在备份的数据文件

select * 

from v$backup;

24.查看需要恢复的文件

select * 

from v$recover_file;

25.查看所有归档日志文件

select * 

from v$archived_log;

26.查看恢复时要用到的日志文件

select * 

from v$recovery_log;

27.查看SGA的结构

Show sga;

select * 

from v$sgastat;

28.提取library cache的命中率

select gethitratio 

from v$librarycache 

where namespace=’…’;

29.查看正在运行的SQL语句

select sql_text, users_executing, executions, loads 

from v$sqlarea;

select * 

from v$sqltext 

where sql_text=’select * from emp%’;

30.查看library cache reload情况:

select sum(pins) “Executions”, sum(reloads) “cache Misses”, sum(reloads)/sum(pins)

from v$librarycache;

31.查看大匿名块

select sql_text from v$sqlarea 

where command_type=47

and length(sql_text)>500;

32.查看当前会话的UGA区

select sum(value)||’bytes’ “Total session memory”

  from v$mystat, v$statname

 where name=’session uga memory’

   and v$mystat.statistic#=v$statname.statistic#;

33.查看所有MTS用户的UGA区:

select sum(value)||’bytes’ “Total session memory”

  from v$sesstat, v$statname

 where name=’session uga memory’

   and v$sesstat.statistic#=v$statname.statistic#;

34.查看所有用户使用的最大的UGA区:

select sum(value)||’bytes’ “Total session memory”

  from v$sesstat, v$statname

 where name=’session uga memory max’

   and v$sesstat.statistic#=v$statname.statistic#;

35.查看high-water mark以下的块数

select table_name, blocks 

from dba_tables 

where table_name=’table_name’;

36.查看会话的I/O:

select io.block_gets, io.consistent_gets, io.physical_reads

  from v$sess_io io, v$session s

 where s.audsid=USERENV(‘SESSIONID’) 

and io.sid=s.sid;

37.查看Buffer pool的命中率

select name, 1-(physical_reads/(db_block_gets+consistent_gets)) “HIT_RATIO”

  from sys.v$buffer_pool_statistics

where db_block_gets+consistent_gets>0;

38.查看free list的竞争

select class, count, time 

from v$waitstat 

where class=’segment header’;

select event, total_waits 

from v$system_event 

where event=’buffer busy waits’;

buffer busy waits可在两种情况发生:1dirty queue已满,2free list竞争。

39.查看free list竞争发生在哪个segment上

select s.segment_name, s.segment_type, s.freelists, w.wait_time,

       w.seconds_in_wait, w.state

from dba_segments s, v$session_wait w

where w.event=’buffer busy waits’

    and w.p1=s.header_file

    and w.p2=s.header_block;

40.查看全表扫描发生的次数

select name, value 

from v$sysstat 

where name like ‘%table scan%’;

41.查看大操作的执行情况

select sid, serial#, opname,

       to_char(start_time, ‘HH24:MI:SS’) as start_t,

       (sofar/totalwork)*100 as percent_complete

 from v$session_longops;

42.查看数据文件的I/O

select phyrds, phywrts, d.name

  from v$datafile d, v$filestat f

 where d.file#=f.file# order by d.name;

43.查看空闲块数少于10%的segment(blocks在high-water mark以下,empty_blocks其上)

select owner, table_name, blocks, empty_blocks

  from dba_tables

 where empty_blocks/(blocks+empty_blocks)<0.1 and blocks+empty_blocks!=0;

44.查看migration和chaining

analyze table table_name compute statistics;

select num_rows, chain_cnt

from dba_tables 

where table_name=’table_name’;

45.查看表的统计信息

analyze table table_name compute statistics;

select num_rows, blocks, empty_blocks as empty, avg_space, chain_cnt, avg_row_len

 from dba_tables

where owner=’HR’ and

 table_name=’table_name’;

46.查看索引的统计信息

analyze index index_name validate structure;

select (del_lf_rows_len/lf_rows_len)*100 as index_usage

 from index_stats;

5日常维护和问题管理

目的

作为一名数据库管理员,数据库应用的正常稳定运行是保障我们应用系统的

重要保证,而数据库的日常监控和维护工作至关重要。做好它的检查工作的文档管理也是数据库管理的必不可少的工作之一,这有利于我们追踪问题和对数据库的版本控制非常重要。

例行工作建议

每天例行工作:

1.确定数据库实例处于运行状态

2.检查ALERT 日志

3.确定数据库成功备份

4.确定数据库归档到磁带

5.确定有足够的资源使数据库能运行在良好状态

6.抽时间阅读DBA管理手册

每周例行工作:

1.检查是否有对象处于非正常状态

2.检查安全策略

3.检查SQL*NET 日志中是否有错误

4.归档所有ALERT 日志

每月例行工作:

1.检查潜在的危害

2.检查是否需要性能调优及调优时机

3.检查I/O竞争

4.检查数据库碎片

5.制定将来的性能计划

6.进行数据库调优和维护

相关填表说明

日常维护检查表:是数据库管理员在平时的日常监控维护工作后做的工作记录。只填写检查的结果。详细的问题管理记录和解决过程就填写问题管理记录表。如果在检查过程中正常在相应栏目打√,如果有异常状况打X,同时在后面写上相对应的问题管理记录的编号。问题编号的命名格式是12位,就是当时填写记录表的日期和时间,例如数据库管理员在2010年04月11日14:00在做例行检查时发现了问题,那么在填写日常维护检查表时就应在相对应的栏目写上问题编号201004111400。

问题管理记录表是在填写日常维护检查表的基础上发现了问题再填写详细的问题发生和解决过程。其中问题编号就是日常维护检查表中的问题编号。

 变更记录表是我们对数据库做操作前后的一个记录表。

日常检查维护表

日常维护检查表
日期检查人
检查内容检查结果

查看数据库日志

检测失效对象

查看数据库剩余空间

查看数据库状态

死锁(阻塞)检查

作业检查

监控数据性能采集

监控SQL语句执行

其他环节的监控1

其他环节的监控2

操作

系统

Vmstat命令

df命令

uptime命令

bdf命令

root mail命令

cmviewcl命令

/var/adm/syslog/syslog.log

其他命令1

其他命令2

应用应用的日志

应用的进程1

应用的进程2

应用的进程3

备份备份是否完成
备份过程是否正常
注释:检查过程是否碰到问题?
问题管理记录

记录日期记录人问题编号
问题简要描述
问题分类
 硬件 操作系统 数据库
问题详细描述:
问题产生环境
问题诊断原因
问题解决步骤
变更管理记录

变更流水号:

1.变更提出
变更提出人变更提出日期
变更原因简要描述:
    
2.变更评估
变更评估人变更评估日期
变更是否实施  
变更紧急程度 紧急 一般 不紧急
变更实施期限
3.变更实施
变更实施人变更实施日期
变更实施步骤简要描述:
是否有应急方案  
应急方案简要描述:

文档

数据库维护工作手册

数据库维护工作手册文档编号:文档名称:编写:审核:批准:批准日期:1概述数据库的日常监控是使管理员及时了解系统异常的手段。大部分情况下,系统总是正常运行的。只有对正常情况的充分了解,才能通过对比正常情况发现异常情况。对于数据库的日常监控要有记录,文字记录或者电子文档保存。对于数据库异常进行分析,提出解决方案。日常工作包括监控和维护两个部分。此文档中关于数据库的运行命令示例主要针对于ORACLE数据库,但对于SYBASE数据库同样有参考价值,只要换用相对应的语句即可。数据库监控2数据库监控数据库
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top