5 系统维护
5.1 solaris 系统
涉及的服务器 account1(218.29.0.239), account2(218.29.0.240), oradb1(218.29.0.244) ,oradb2(218.29.0.245)
5.1.1 系统概况
1. 操作系统基本信息: uname -a 将依次显示 操作系统名称,hostname,操作系统大版本信息,操作系统小版本信息,硬件类型,cpu类型,平台信息。
2. 内核信息:修改/etc/system 文件更改缺省的内核参数,modinfo显示模块信息,sysdef显示驱动和内核参数信息。
3. cpu 信息:/usr/sbin/psrinfo -v 显示cpu 状态,数量,cpu类型和主频。
4. 内存信息:prtconf | grep “memory size” 显示内存大小。
5. 硬盘/光驱信息:iostat -en 显示硬盘和光驱的硬件地址,各种状态信息,型号及硬盘大小。可以通过该命令检查是否出现过各类错误。
6. 网卡信息:ifconfig -a ,显示网卡名称,状态,最大传输单元mtu,ip 地址,子网掩码,广播地址。
7. ha 信息:
8. 网络信息:netstat -rn 显示静态路由和缺省路由。
9. 包pkg 信息 :pkginfo -l pkgname。通过它判定某个pkg 是否安装,相关的还有pkgadd,pkgrm,pkgchk。
10. 补丁patch 信息: showrev -p 。安装某些软件需要特定的patch,通过它判断。
11. 文件系统信息: df -k 监测capacity 判断是否出现空间不足。
12. 用户信息:who 显示当前在线用户。whodo 显示当前用户进行的操作。 通过useradd,groupadd或admintool 进行用户的管理。id 显示当前用户的login name,login id, group name group name。
5.1.2系统监控
1. cpu 性能监控 :vmstat /mpstat 和sar ,vmstat 和sar 在smp系统中显示汇总信息,而mpstat 可以显示每颗cpu的负载。vmstat 监控procs 下的r和b 数目,它反映目前处于运行和阻滞状态的进程数目,如果r数目长期大于cpu 数目同时cpu 下的us+sy >80,表示cpu处理能力不足。
2. 内存监控: vmstat ,监控memory 下的free和page下的pi/po,pi/po反映每秒钟以k为单位换进/换出的数量。如果free的数目很小同时pi/po数目长时间大于0 ,则表示内存不足。
3. 硬盘监控:iostat -d 和sar -d ,可以看到每块硬盘及硬盘的每个分区的工作情况
4. 交换区监控:swap -l 和swap -s ,应尽量将交换区的放置在负载较轻的硬盘上。同时交换区的使用百分比不应过高。
5. ha 系统监控:
6. 网络监控: netstat -in 显示每块网卡的工作负载情况。ipkts/opkts发送包和接受包的情况。ierrs/oerrs,collis 表示发生的错误和冲突。
ierrs/ipkts或oerrs/opkts >2%,表示网络冲突严重。
7. 端口监控:监控某个服务是否启动或正常运行,
netstat -an |grep portnum 或tcpdump |grep portnum。
8. 硬件故障诊断:/usr/platform/`uname -m`/sbin/prtdiag -v 通过输出结果判定有无硬件故障。
9. syslogd日志监控,, syslogd后台进程将系统运行中的信息写入 /var/adm/messages 文件中,通过它来监控有无异常的软硬件错误信息的出现。
较早一点的信息存在同一目录下的messages.0,message.1 文件中。
10. mail 监控:某些用户通过crontab 定时执行任务,任务完成后,cron进程会给用户发mail,通过察看mail 判断任务是否完成。在系统出异常的情况下,syslogd会发给root用户mail。因此root 用户的mail需要特别注意。
11. 进程监控:通过ps,prstat 命令或/usr/dt/bin/sdtprocess 工具监控特别消耗资源的进程。sdtprocess是图形工具,可以按照cpu和mem的使用及执行时间排序。prstat 统计系统的活动进程并按需要的顺序排序。
12. 系统运行时间监控 :uptime衡量一个机器开时长及系统负载的命令。uptime 显示的时间越大,说明机器越稳定。
13. 系统运行级别监控:who -r 显示当前机器的运行级。
5.2 linux 系统
涉及的前端机:fep1(218.29.0.227), fep2(218.29.0.228), fep3(218.29.0.229), fep4(218.29.0.230), fep5(218.29.0.231), fep6(218.29.0.232), fep7(218.29.0.233),fep8(218.29.0.234),fep9(218.29.0.235),fep10(218.29.0.236),fep11(218.29.0.237),fep12(218.29.0.238)
5.2.1系统概况
1. 操作系统基本信息: uname -a
2. 内核信息:/proc/sys/kernel 目录下的文件记录各个内核参数,modinfo显示模块信息,sysdef显示驱动和内核参数信息。
3. cpu 信息:。
4. 内存信息:prtconf | grep “memory size” 显示内存大小。
5. 硬盘/光驱信息:。
6. 网卡信息:ifconfig -a ,显示网卡名称,状态,最大传输单元mtu,ip 地址,子网掩码,广播地址。
7. 网络信息:netstat -rn 显示静态路由和缺省路由。
8. 包pkg 信息 :rpm(redhat package manager)。通过它判定某个pkg 是否安装,rpm -q 查询,rpm -i 安装
9. 补丁patch 信息:文件系统信息: df -k 监测capacity 判断是否出现空间不足。
10. 用户信息:who 显示当前在线用户。通过kde的user manager工具添加用户。id 显示当前用户的login name,login id, group name group name。
5.2.1系统监控
1. cpu 性能监控 :vmstat和sar 。vmstat 监控procs 下的r和b 数目,它反映目前处于运行和阻滞状态的进程数目,如果r数目长期大于cpu 数目同时cpu 下的us+sy >80,表示cpu处理能力不足。
2. 内存监控: vmstat ,监控memory 下的free和page下的pi/po,pi/po反映每秒钟以k为单位换进/换出的数量。如果free的数目很小同时pi/po数目长时间大于0 ,则表示内存不足。
3. 硬盘监控:iostat -d 和sar -d
4. 交换区监控swap -l
5. 网络监控 netstat -in
6. 端口监控:监控某个服务是否启动 netstat -an |grep portnum 或tcpdump |grep portnum
7. 硬件故障诊断:。
8. syslogd日志监控,, syslogd后台进程将系统运行中的信息写入 /var/adm/messages 文件中,通过它来监控有无异常的软硬件错误信息的出现。
较早一点的信息存在同一目录下的messages.0,message.1 文件中。
9. mail 监控:某些用户通过crontab 定时执行任务,任务完成后,cron进程会给用户发mail,通过察看mail 判断任务是否完成。在系统出异常的情况下,syslogd会发给root用户mail。因此root 用户的mail需要特别注意。
10. 进程监控:通过ps 或top监控特别消耗资源的进程。
6.数据库维护
6.1 数据库的安装
6.1.1 操作系统的准备工作
1. 内核参数的修改
编辑修改/etc/system 文件
set shmsys:shminfo_shmmax=4294967295
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=100
set shmsys:shminfo_shmseg=10
set semsys:seminfo_semmns=2000
set semsys:seminfo_semmsl=1000
set semsys:seminfo_semmni=100
set semsys:seminfo_semopm=100
set semsys:seminfo_semvmx=32767
2. 检查需要的操作系统patch
通过sunsolve.sun.com 上下载特定的版本的patch集并安装,可以满足oracle 的安装需要。
3. 操作系统用户/组的添加
l groupadd dba
l groupadd oinstall
l useradd -c “oracle dba” -d /home/oracle -g oinstall -g dba
l 修改/etc/passwd文件 ,更改用户登陆shell 或其他信息
4. 用户环境变量的设定
6.1.2 数据库的安装
6.1.3数据库patch 安装
1. patch 下载:oracle 数据库的patch 从oracle的metalink网站下载,登录成功后,在patch页面中的product family下拉框中选择”oracle databse”,product 下拉框中选择”rdbms server”;release 下拉框中 选择”oracle 8.1.7.4″;platform 下拉框中选择”sun solaris os( sparc) 64-bit”,language下拉框中选择”american english (us)” ,limit search to下拉框中选择”latest product patches or minipacks”,点击submit提交。在随后出现的页面中点击download下载patch。
2. patch 安装:patch 下载后首先需要解压缩, 安装与数据库安装方法类似,启动runinstaller安装程序,选择解压缩完成后patch目录下的product文件进行安装。特别注意patch安装时,数据库必须处于正常关闭状态。
3. 安装完成后检查:select * from v$version; 检查各个产品的版本号是否从8.1.7.0升级成为8.1.7.4。
6.2数据库基本信息汇总
1. 版本信息
sql>select * from v$version;
2. 数据库名称,归档方式 状态
sql> col name format a12
sql>select name,log_mode,open_mode from v$database;
3. 数据库安装选项
sql>col parameter format a50
sql>select * from v$option;
4. 数据库文件包括三类:控制文件control file, 日志文件log file , 数据文件datafile
l 控制文件
sql> select name from v$controlfile;
l 日志文件名称及大小
col group# format 999 heading group
col member format a45 heading member justify c
col status format a10 heading status justify c
col archived format a10 heading archived
col fsize format 999 heading size|(mb)
select l.group#, member, archived, l.status, (bytes/1024/1024) fsize from v$log l, v$logfile f where f.group# = l.group# order by 1 ;
l.数据文件名称,所在表空间及大小
col file_name format a50 heading datafile name
col tablespace_name format a18 heading related tablespace
select substr(file_id,1,3) “id#”,
file_name,
tablespace_name,
bytes/(1024*1024) “m”,
status from sys.dba_data_files where tablespace_name<>perfstat order by tablespace_name, file_name;
5.表空间信息(大小 剩余空间 使用百分比)
select dba.tablespace_name tablespace,
nvl(round (used.bytes/(1024*1024), 0),0) “used mb”,
nvl(round (free.bytes/(1024*1024), 0),0) “free mb”,
round ((nvl(used.bytes, 0)+nvl(free.bytes, 0))/(1024*1024), 0) total –,
–nvl(round (used.bytes/(1024*1024), 0),0)/round ((nvl(used.bytes, 0)+nvl(free.bytes, 0))/(1024*1024), 0) rate
from dba_tablespaces dba,
(select tablespace_name, sum(bytes) bytes
from dba_segments
group by tablespace_name) used,
(select tablespace_name, sum(bytes) bytes
from dba_free_space
group by tablespace_name) free
where dba.tablespace_name = used.tablespace_name (+)
and dba.tablespace_name = free.tablespace_name (+)
and dba.tablespace_name<>perfstat
order by dba.tablespace_name;
6.回滚段的信息察看回滚段名称,大小,所在表空间,以及状态。
select substr(sys.dba_rollback_segs.segment_id,1,5) “id#”,
substr(sys.dba_segments.owner,1,8) “owner”,
substr(sys.dba_segments.tablespace_name,1,17)”tablespace name”,
substr(sys.dba_segments.segment_name,1,17) “rollback name”,
substr(sys.dba_segments.bytes,1,15) “size (bytes)”,
substr(sys.dba_segments.extents,1,6) “extent#”,
substr(sys.dba_rollback_segs.status,1,10) “status”
from sys.dba_segments, sys.dba_rollback_segs
where sys.dba_segments.segment_name = sys.dba_rollback_segs.segment_name and
sys.dba_segments.segment_type = rollback order by sys.dba_rollback_segs.segment_id;
7.数据库参数信息察看没有使用缺省值的参数
col name format a20
select name,value from v$parameter where isdefault=false;
8.数据库用户信息检查是否有用户的 默认或临时表空间为system 表空间
select user_id,
substr(username,1,15) username,
substr(password,1,15) password,
substr(default_tablespace,1,15) “default tbs”,
substr(temporary_tablespace,1,15) “temporary tbs”,
created, substr(profile,1,10) profile
from sys.dba_users order by username;
6.3数据库优化及主要参数调整
oracle数据库在启动时会读取命名规则为init<sid>.ora的初始化参数文件。这个配置文件中的各个参数设定对整个oracle数据库性能起决定作用,先简单介绍各个参数的含义,然后给出建议配置。除特殊说明外,介绍参数的更改都需进行数据库的重启操作。根据数据库系统规模,oracle提供小,中,大(small,medium,large)三个建议建议配置档,配置时做为参考。
l db_block_size: 数据块大小,数据存储的最小单位,这个参数在oracle9i以前各个版本中,数据库创建完成后是不可改变的。可选范围是2k,4k,8k,16k,32k单位是byte。应用系统中,部分数据表字段较多,db_block_size设定偏小造成记录不能在单一数据块中存储,因此访问一条用户记录不能在一次物理i/o操作中完成,需要多次i/o,导致性能下降;另外较多的 varchar2类型字段和数据更新可能造成行链接和行迁移,除设定pctfree较大外,db_block_size也要设定大一些。建议配置为8k,创建数据库时指定。
l db_block_buffers: 数据高速块的多少,存放从硬盘中读出的数据块。db_block_buffers决定内存中可存放的大小为db_block_size的oracle数据块的数量。应用程序第一次访问数据时从硬盘中读取,然后数据存储在内存中,直到数据长时间不被访问,同时内存中不能容纳更多数据时,数据被写回硬盘,下次需要访问时,再从硬盘中读取。该参数越大,oracle在内存中找到所需数据的可能性就越大。相同数据内存读取速度要比硬盘快几十倍,因此响应速度也会大大提高。db_block_size与db_block_buffers乘积确定oracle数据库所占内存的90%左右。 如果服务器专用运行数据库,建议两个参数的乘积占服务器物理内存的40%,通过对数据缓存的命中率进行监控后,做进一步调整。
l shared_pool_size:内存中存放sql语句访问路径,相关访问权限,表结构信息的位置,单位是字节。 建议使用默认配置的大(large)一档,为 9000000(字节)。通过sql语句监控生产机缓存命中率后进行相应调整。
l sort_area_size :可在内存中进行排序的最大字节数。应用程序向数据库发出类似orderby,group by 或创建索引时,需要进行排序操作。排序在内存中完成的速度同样快于硬盘中速度。sort_area_size越大,排序完成在内存中的可能也越大。建议使用默认配置的大(large)一档,大小为524288字节。通过对动态视图的监控进行进一步的调整。
l log_buffer: 日志缓存大小,对于数据库的dml/ddl 等语句首先写入log_buffer,然后写入日志文件。建议初始配置为512k,如果日志缓存等待明显,再加大,一般不超过为1m。
l processes: 同时访问oracle数据库的进程数,包括后台进程(dbwr,lgwr,chpt)和enus,cnus 各个模块建立的到数据库的长连接数,设定大一点不会造成负面影响,如果偏小则会造成不能进行数据库连接的错误。建议配置为150。
l dml_locks: 它表示任何时间所有用户在所有表中放置锁定的最大数量。缺省值是事务最大数量的四倍。同样可以设定较大一点,不会有负面影响。建议为2000。
l open_cursors: 用户可以同时打开的游标数。设定大一点不会造成负面影响,如果偏小则会出现不能打开游表的错误。 建议配置为500。
l db_files: 数据库数据文件的数目。建议设定为200。
l rollback_segments:回滚段的名称,用户自己创建完回滚段后将名称添加在此处。在oltp环境下,回滚段的数目为最大并发交易数的1/3~1/4。
6.4 数据库的备份/恢复
6.5数据库的监控/维护
6.5.1 推荐使用的监控方法
statspack 的介绍: statspack 是oracle公司针对oracle enterprise edition 8.1.6 及以上版本推出的性能监控工具包。用于替代原有的utlbstat/utlestat。比utlbstat/utlestat能够收集更多的数据,包括耗资源多的sql。同时预先计算了许多对性能调优很有用的比值(ratios)。可以更加全面的监控数据的整体运行情况。同时可将生成的report文件发送给oracle公司进行协助分析。
监控的范围主要是:
l 主要内存参数的大小(db_block_buffers, db_block_size, log_buffer, shared_pool_size)。
l 系统负载情况:每秒钟的生成的日志量,数据库的逻辑读,物理读,交易数量等。
l 各类缓存命中率。如库缓存命中率,字典缓存命中率,db block buffer命中率,排序在内存中进行的比率等。
l 造成系统响应时间慢的几类事件,通过优化这几类事件提高系统响应速度。
l 按照各类消耗资源排序的sql语句。通常系统响应速度慢除与参数设置有关外,还与书写不规范的sql语句有关。通过优化捕捉到的sql语句,提高响应速度。
l 各个表空间及组成表空间各个文件的i/o负载情况。通过这部分内容判断各个文件i/o是否均衡。
l 回滚段信息:反映是否有回滚段的竞争,是否有回滚段的过分扩展。
l 所有没有按缺省设置的参数。
statspack软件包的创建:
l 安装文件:unix 操作系统下,安装文件存放在$oracle_home/rdbms/admin 目录下。
l 创建时的执行的用户和执行的文件
sql>connect internal ;
sql>@?/rdbms/admin/spcreate.sql;
l 安装过程中的主要动作:
1安装生成一个用户perfstat/perfstat =>spcusr.sql,
安装时输入:default tablespace/ temporary tablespace
2建立需要的table =>spctab.sql
3生成dbms_shared_pool 和dbms_job pl/sql 程序包=>spcpkg.sql
statspack软件包的执行/数据采集
当系统响应速度出现明显下降的时候,可通过statspack进行系统运行数据采集,并生成报告文件,进行分析。
l 初始准备:在init<sid>.ora中设置timed_statistics=true,并让其生效。或使用alter system set timed_statistics=true;
l 使用创建的perfstat用户连接
sql>connect perfstat/perfstat;
l 执行第一次采集程序:
sql>execute statspack.snap;l