一、数据库日常工作
oracle管理员应按如下方式对oracle数据库系统做定期监控:
1、每天对oracle数据库的运行状态、日志文件、备份情况、数据库空间使用情况、系统资源使用情况进行检查,发现并解决问题。
2、每周对数据库对象的空间扩展情况、数据的增长情况进行监控、对数据库做健康检查、对数据库对象的状态做检查。
3、每月对表和索引等进行analyze、检查表空间碎片、寻找数据库性能调整的机会、进行数据库性能调整、提出下一步空间管理计划。对oracle数据库状态进行一次全面检查。
每天工作
1、确认所有的instance状态正常登录到所有数据库或实例,检测oracle后台进程:
select instance_name,status,host_name from gv$instance;
#ps -ef | grep ora
2、 确认ORACLE监听器状态正常。
3、检查文件系统的使用(剩余空间)。如果文件系统的剩余空间小于20%,需删除不用的文件以释放空间。#df –H
4、检查日志文件和trace文件记录alert和trace文件中的错误。
cd $ORACLE_BASE/oradata/<sid>/bdump
tail -f alert_<sid>.log
发现任何新的ORA_错误,记录并解决
5、检查数据库当日备份的有效性
对RMAN备份方式,检查第三方备份工具的备份日志以确定备份是否成功
对EXPORT备份方式,检查exp日志文件以确定备份是否成功
对其它备份方式,检查相应的日志文件
6、检查数据文件的状态记录状态不是“online"的数据文件,并做恢复。
select file_name,status,ONLINE_STATUS from dba_data_files where ONLINE_STATUS='OFFLINE'; "
7、检查表空间的使用情况及剩余表空间情况
SELECT a.tablespace_name "表空间名",
total / 1024 / 1024 "表空间大小(M)",
free / 1024 / 1024 "表空间剩余大小(M)",
(total - free) / 1024 / 1024 "表空间使用大小(M)",
ROUND((total - free) / total, 4) * 100 "使用率 %"
FROM (SELECT tablespace_name, SUM(bytes) free
FROM DBA_FREE_SPACE
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) total
FROM DBA_DATA_FILES
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name;
select a.tablespace_name, round(a.total_size,1) "total(M)",
round(a.total_size)-round(nvl(b.free_size,0),1) "used(M)",
round(nvl(b.free_size,0),1) "free(M)",
round(nvl(b.free_size,0)/total_size*100,1) "free rate(%)"
from (select tablespace_name,sum(bytes)/1024/1024 total_size
from dba_data_files
group by tablespace_name) a,
(select tablespace_name,sum(bytes)/1024/1024 free_size
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name(+)
order by "free rate(%)";
--查看用户和默认表空间的对应关系
select username,default_tablespace from dba_users;
8、监控数据库性能
1)运行utlbstat.sql/utlestat.sql生成系统报告,或者使用statspace收集统计数据;
2)运行AWR报告;
9、检查数据库性能,记录数据库的CPU使用、IO、Buffer命中率等等,使用vmstat、iostat、 top
10、日常出现问题的处理
数据库每日工作检查清单
数据库管理员姓名: 检查日期:
数据库名称 |
| 操作系统状态 |
| ||
项目 | 正常 | 不正常 | 异常原因 | 解决方法 |
|
数据库状态 |
|
|
|
|
|
监听器状态 |
|
|
|
|
|
磁盘空间使用 |
|
|
|
|
|
表空间状态 |
|
|
|
|
|
备份的状态 |
|
|
|
|
|
警告日志状态 |
|
|
|
|
|
监控异常状态 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
每周的工作
1、控制数据库对象空间扩展情况,根据本周每天的检查情况找到空间扩展很快的数据库对象,并采取相应的措施。
删除历史数据、扩展表空间、是否需要修改表存储参数。
alter tablespace <name> add datafile '<file>' size <size>
调整数据对象的存储参数 next extent pct_increase
2、监控数据量的增长情况
根据本周每天的检查情况找到记录数据数量增长很快的数据库对象,并采取相应的措施
删除历史数据、扩表空间
alter tablespace <name> add datafile '<file>' size <size>
3、延续每日监控数据库运作状况,按照需求修改数据参数。
4、根据每日监控数据库运行状况寻找关键,针对没有效率的SQL进行SQL优化。
5、系统健康检查
检查以下内容:
init<sid>.ora
controlfile
redo log file
archiveing
sort area size
tablespace(system,temporary,tablespace fragment)
datafiles(autoextend,location)
object(number of extent,next extent,index)
rollback segment
logging & tracing(alert.log,max_dump_file_size,sqlnet)
6、检查无效的数据库对象
select owner,object_name,object_type from dba_objects where status='INVALID'
7、检查不起作用的约束
select owner,constraint_name,table_name,constraint_type,status from dba_constraints
where status='DISABLED' and constraint_type='p'
8、检查无效的trigger
select owner,trigger_name,table_name,status from dba_triggers
where status='DISABLED'
9、检查无效的索引
select index_name,index_type,table_name,status from dba_indexes
where status='UNSABLE';
10、检查是否有新增的失效对象,可使用下列SQL指令查询确认对象状态。
select owner object_owner,object_name,object_type,status from dba_objects
where owner not in ('SYS','SYSTEM')
AND STATUS='INVALID'
ORDER BY owner,object_type,object_name
/
11、检查是否有表空间碎片,FSFI是可用碎片空间,数值最大值为100表示没有碎片,通常低于30%就需要进行重整操作。
select tablespace_name as "TABLEPSACE NAME",
sqrt(max(blocks)/sum(blocks))*(100/sqrt(sqrt(count(blocks)))) as "FSFI%"
from dba_free_space
group by tablespace_name
order by 1
/
数据库每周工作检查清单
数据库管理员姓名: 检查日期:
数据库名称 |
| 操作系统状态 |
| ||
项目 | 正常 | 不正常 | 异常原因 | 解决方法 |
|
表空间状态 |
|
|
|
|
|
索引 |
|
|
|
|
|
触发器 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
每月的工作
1、针对表及索引进行数据统计分析(每个月至少一次):Analyze tables/indexes/cluster
analyze table <name> estimate statistics sample 50 percent;
2、检查表空间碎片
根据本月每周的检查分析数据库碎片,找到相应的解决方法
3、寻找数据库性能调整机会
比较每天对数据库性能的监控报告,确定是否有必要对数据库性能进行调整
4、数据库性能调整,如有必要进行性能调整
5、提出下一步空间管理计划,根据每周的监控,提出空间管理的改进方法
6、产生每月表空间增长报告:可利用以下SQL来产生每月数据库增长数据报告,以及每月表空间增长数据报告。
每月数据库增长数据报告
select to_char(creation_time,'RRRR Month') "Month",
sum(bytes)/1024/1024/1024 "growth in GB"
from sys.v_$datafile
where creation_time>sysdate-365
group by to_char(creation_time,'RRRR Month')
/
每月表空间增长数据报告
select a.ts# as "tablespace no",b.name as "tablespace name",
to_char(a.creation_time,'RRRR Month') "Month",
sum(a.bytes)/1024/1024/1024 "growth in GB" from sys.v_$datafile a,sys.v_$tablespace B
where a.creation_time>sysdate-365
and a.ts#=b.ts#
group by a.ts#,b.name,to_char(a.creation_time,'RRRR Month')
/
7、每个月少检查一次是否有行链接、行迁移;
行链接:主要造成的原因是每笔数据过长,无法容纳在一个数据块里面。
行迁移:主要是当数据要更新时,造成每笔数据过长,必须前移另一个较大的数据块里面。
建立临时表,执行$ORACLE_HOME/RDBMS/ADMIN/UTLCHAIN.SQL会自动产生临时表.
产生分析指令.
select 'analyze table'||owner||'.'||table_name||'list chained rows into system.chained_rows;' from dba_tables
where owner='SYSTEM'
/
注: where owner='SYSTEM'可自行决定要针对哪一个方案下的表作分析.
目的是将分析出来的结果放入到CHAINED_ROWS表中,因此每次要执行前要将CHAINED_ROWS表清空或移除重建,防止重复计算.
3)执行报表.
select b.owner_name as "owner",
a.table_name as "table name",
b.row_count as "row count",
a.num_rows as "total rows" from all_tables a,
(select b.owner_name,b.table_name,count(b.head_rowid) row_count from chained_rows b
group by b.owner_name,b.table_name) b
where a.table_name=b.table_name
/
8、检查备份计划及测试备份的可用性。
数据库每月工作检查清单
数据库管理员姓名: 检查日期:
数据库名称 |
| 操作系统状态 |
| ||
项目 | 正常 | 不正常 | 异常原因 | 解决方法 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
二、
1、数据文件数量由4种因素所控制。
受限于操作系统:操作系统常会限制同一个PROCESS可以处理最大的文件数目。
受限于数据库:需要设置MAXDATAFILES最大可以拥有多少个文件。
受限于初始化参数文件,DB—FILES可限制数据库最大可开启多少个数据文件。
受限ORACLE版本,不同版本及对应的不同平台中,所限开启的数据文件数目不同。
2、查看REDO LOG文件分配及大小。
select a.group#,b.member,a.bytes/1024/1024 "SIZE(MB)" FROM V$LOG a,v$logfile b
where b.group#=a.group#
order by a.group#
/
3、查看归档日志文件的历史信息。
注:sequence#就是序列号。
select sequence#,to_char(first_time,'YYYY-MM-DD HH24:MI:SS') FIRST_TIME from v$log_history
/
4、行迁移:
行链接:
高水位线;
磁盘阵列的种类及数据库的数据文件
磁盘类型 | 说明 | 数据文件 | 说明 | 磁盘类型 |
RAID 0 |
| 控制文件 | 读写不明显,相当重要 | RAID 0 |
RAID 1 |
| 初始化参数文件 | 只读不写 | RAID 1 |
RAID 0+1 |
| 重做日志 |
| RAID 1+0 |
RAID 1+0 |
| 归档日志 |
| RAID 1或5 |
RAID 3 |
| 数据文件 | 读得多的用RAID 5 写得多的用RAID 1+0 临时表空间放RAID1+0上 |
|
RADI 5 |
|
|
|
|