Oracle+DBA日常工作手册.docx
- 文档编号:9382522
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:45
- 大小:2.14MB
Oracle+DBA日常工作手册.docx
《Oracle+DBA日常工作手册.docx》由会员分享,可在线阅读,更多相关《Oracle+DBA日常工作手册.docx(45页珍藏版)》请在冰豆网上搜索。
Oracle+DBA日常工作手册
OracleDBA日常工作手册
第一章.事前阶段
一、日常工作-每天应做工作内容
1、工作内容-日常环境监控
1.1系统运行环境监控
检查文件系统以及oracle数据库数据文件所在卷的使用(剩余空间),如果文件系统的剩余空间小于20%,需要删除不用的文件以释放空间;
UNIX系统的文件系统及数据文件所在卷的空间使用率:
su–oraprod或者su-oratest
AIX、linux查看磁盘空间:
df–k
HP-UX查看磁盘空间:
bdf
1.2数据库运行状况监控
1.2.1外部
确认所有的INSTANCE状态正常(保证实例正常),检查Oracle实例核心后台进程是否都存在、状态是否正常
$ps-ef|greporaprod
查看数据库实例是否能正常连接、访问
SQL>selectstatus,instance_namefromv$instance;
监听是否正常
$lsnrctlstatus
1.2.2内部
是否所有表空间都处于online状态
SQL>selecttablespace_name,statusfromdba_tablespaces;
selectfile#,status,namefromv$datafile_header;
selectfile_name,status,tablespace_namefromdba_data_files;
如果数据文件的STATUS列不是AVAILABLE或者ONLINE,那么就要采取相应的措施,如对该数据文件进行恢复操作,或重建该数据文件所在的表空间。
Oracle数据库日志文件是否正常
SQL>Select*fromv$log;
SQL>Select*fromv$logfile;
1).检查trace文件记录alert和trace文件中的错误。
telnet192.168.150.1su–oraprod
在oraprod用户下$cd到bdump目录,通常是$ORACLE_BASE/admin/
使用Unix的‘tail-f’命令来查看alert_
如果发现任何新的ORA-错误,记录并解决
2).查看DBSNMP的运行情况
检查每个被管理机器的‘DBSNMP’进程并将它们记录到日志中。
在UNIX中,在命令行中,键入ps–ef|grepdbsnmp,将回看到2个 DBSNMP进程在运行。
如果没有,重启DBSNMP。
(注意:
此步骤在oraprod下只有1个进程,需要研究)
3).检查回滚段
回滚段的状态一般是在线的,除了一些为复杂工作准备的专用段一般状态是离线的。
a)每个数据库都有一个回滚段名字的列表。
b)你可以用V$ROLLSTAT来查询在线或是离线的回滚段的现在状态;
1.2.3日常操作
1).不要在服务器上直接执行rm操作
当有文件需要删除时,把这些文件mv到一个规定的文件夹,然后CD进入此文件夹再进行删除操作。
(注意:
在rm日志文件时直接rm即可,若rm文件夹一定要rm–r)
2).数据库备份校验
命令:
rmantarget/连接到数据库,rman>restoredatabasevalidate;
3).查看数据库连接信息
定时对数据库的连接情况进行检查,看与数据库建立的会话数目是不是正常,如果建立了过多的连接,会消耗数据库的资源。
同时,对一些“挂死”的连接,可能需要手工进行清理。
以下的SQL语句列出当前数据库建立的会话情况:
Selectcount(*)fromv$session;――查看当前会话连接数
selectsid,serial#,username,program,machine,statusfromv$session;
其中,SID会话(session)的ID号;
SERIAL#会话的序列号,和SID一起用来唯一标识一个会话;
USERNAME建立该会话的用户名;
PROGRAM这个会话是用什么工具连接到数据库的;
STATUS当前这个会话的状态,ACTIVE表示会话正在执行某些任务,INACTIVE表示当前会话没有执行任何操作;
如果DBA要手工断开某个会话,则执行:
altersystemkillsession'SID,SERIAL#';
注意:
USERNAME列为空的会话,是Oracle的后台进程,不要对这些会话进行任何操作
4).查看并发会话量
并发会话量正常时段为60以下,查询系统在20以下,如果超过这些指标,则认为系统有阻塞情况,需要查找原因,引起关注。
查询系统并发的脚本为:
selectcount
(1)fromv$sessionwherestatus='ACTIVE'andusernamenotin('SYS','SYSTEM');
5).查看是否有僵死进程
selectspidfromv$processwhereaddrnotin(selectpaddrfromv$session);
有些僵死进程有阻塞其他业务的正常运行,定期杀掉僵死进程
6).检查数据库定时作业的完成情况
如果数据库使用了Oracle的JOB来完成一些定时作业,要对这些JOB的运行情况进行检查:
selectjob,log_user,last_date,failures
fromdba_jobs;
如果FAILURES列是一个大于0的数的话,说明JOB运行失败,要进一步的检查。
7).控制文件的备份
在数据库结构发生变化时,如增加了表空间,增加了数据文件或重做日志文件这些操作,都会造成Oracle数据库控制文件的变化,DBA应及进行控制文件的备份,备份方法是:
执行SQL语句:
alterdatabasebackupcontrolfileto'/home/backup/control.bak';
或:
alterdatabase backupcontrolfiletotrace;
这样,会在USER_DUMP_DEST(初始化参数文件中指定)目录下生成创建控制文件的SQL命令。
8).数据库坏块的处理
当Oracle数据库出现坏块时,Oracle会在警告日志文件(alert_SID.log)中记录坏块的信息:
ORA-01578:
ORACLEdatablockcorrupted(file#7,block#
ORA-01110:
datafile
'/oracle1/oradata/V920/oradata/V816/users01.dbf'
其中,<AFN>代表坏块所在数据文件的绝对文件号,
在排除了数据库以外的原因后,再对发生坏块的数据库对象进行处理。
解决方式:
1.确定发生坏块的数据库对象
SELECTtablespace_name,segment_type,owner,segment_name
FROM dba_extents WHERE file_id=
AND
2.决定修复方法
如果发生坏块的对象是一个索引,那么可以直接把索引DROP掉后,再根据表里的记录进行重建;
如果发生坏块的表的记录可以根据其它表的记录生成的话,那么可以直接把这个表DROP掉后重建;
如果有数据库的备份,则恢复数据库的方法来进行修复;
如果表里的记录没有其它办法恢复,那么坏块上的记录就丢失了,只能把表中其它数据块上的记录取出来,然后对这个表进行重建。
3.用Oracle提供的DBMS_REPAIR包标记出坏块
execDBMS_REPAIR.SKIP_CORRUPT_BLOCKS('
4.使用Createtableasselect命令将表中其它块上的记录保存到另一张表上
createtablecorrupt_table_bakasselect*fromcorrupt_table;
5.用DROPTABLE命令删除有坏块的表
droptablecorrupt_table;
6.用altertablerename命令恢复原来的表
altertablecorrupt_table_bakrenametocorrupt_table;
7.如果表上存在索引,则要重建表上的索引
1.3检查oracle数据库表空间的使用情况
1.3.1检查表空间的使用情况
1、查询表空间的总容量
selecttablespace_name,sum(bytes)/1024/1024MBfromdba_data_files
groupbytablespace_name;
2、查询表空间未使用的大小
selecttablespace_name,sum(bytes)/1024/1024MBfromdba_free_space
groupbytablespace_name;
3、
(一)查看表空间已经使用的百分比
selecta.tablespace_name,a.bytes/1024/1024"SumMB",(a.bytes-b.bytes)/1024/1024"usedMB",b.bytes/1024/1024"freeMB",round(((a.bytes-b.bytes)/a.bytes)*100,2)
"percent_used"from
(selecttablespace_name,sum(bytes)bytes
fromdba_data_filesgroupbytablespace_name)a,
(selecttablespace_name,sum(bytes)bytes,max(bytes)largest
fromdba_free_spacegroupbytablespace_name)b
wherea.tablespace_name=b.tablespace_name
orderby((a.bytes-b.bytes)/a.bytes)desc
(二)查看表空间空闲百分比
selecta.tablespace_name,round(a.total_size)"total_size(MB)",
round(a.total_size)-round(b.free_size,3)"used_size(MB)",
round(b.free_size,3)"free_size(MB)",
round(b.free_size/total_size*100,2)||'%'free_rate
from(selecttablespace_name,sum(bytes)/1024/1024total_sizefromdba_data_filesgroupbytablespace_name)a,
(selecttablespace_name,sum(bytes)/1024/1024free_sizefromdba_free_spacegroupbytablespace_name)b
wherea.tablespace_name=b.tablespace_name(+);
(三)表空间碎片查询
selecttablespace_name,
Sqrt(max(blocks)/sum(blocks))*(100/Sqrt(Sqrt(count(blocks))))FSFI,
count(blocks),sum(blocks),max(blocks)
fromsys.dba_free_spacegroupbytablespace_name;
表空间的碎片合并:
altertablespacetablespace_namecoalesce;
然后再执行查看表空间碎片的SQL语句,看表空间的碎片有没有减少。
如果没有效果,并且表空间
对表空间的扩充对表空间的数据文件大小进行扩展,或向表空间增加数据文件,具体操作见“存储管理”部份。
1.3.2查看oracle数据库的表空间包含的数据文件与增加或者删除数据文件
1、查看表空间中包含的数据文件以及数据文件的状态与是否自动扩展大小
selectfile_name,tablespace_name,status,autoextensible,increment_by,bytes/1024/1024bytesfromdba_data_files
2、增加数据文件
altertablespaceWANJIN
adddatafile'E:
\U01\APP\ORACLE\ORADATA\WANJINDBA\WANJIN3.DBF'
size10M(autoextendonmaxsize20G)
上述语句解释:
向WANJIN表空间中增加一个10M大小,最大自动扩展到20G的一个数据文件,括号内的命令可以不执行
直接更改数据文件的大小:
altertablespaceWANJIN
Datafile‘E:
\U01\APP\ORACLE\ORADATA\WANJINDBA\WANJIN3.DBF’resize=100M
3、删除表空间数据文件
AltertablespaceWANJIN
Dropdatafile‘E:
\U01\APP\ORACLE\ORADATA\WANJINDBA\WANJIN3.DBF’
4、检查无效的数据库对象
SELECTowner,object_name,object_typeFROMdba_objects
WHEREstatus=’INVALID’
5、检查不起作用的约束
SELECTowner,constraint_name,table_name,
constraint_type,status
FROMdba_constraints
WHEREstatus='DISABLED’ANDconstraint_type='P'
6、检查无效的trigger
SELECTowner,trigger_name,table_name,status
FROMdba_triggers
WHEREstatus='DISABLED’
7、检查数据库控制文件
在数据库已经启动的情况下:
select*fromv$controlfile
如果数据库没有启动则:
SQL>showparametercontrol_files;
8、查看参数文件是否存在
SQL>showparameterspfile;
9、查看缓冲区命中率
缓冲区命中率应该保证在95%以上。
Select1-(sum(decode(name,'physicalreads',value,0))/
(sum(decode(name,'dbblockgets',value,0))+
(sum(decode(name,'consistentgets',value,0)))))"BufferHiteRate"fromv$sysstat;
10).检查数据库等待事件
如果数据库长时间持续出现大量像bufferbusywaits、dbfilescatteredread、dbfilesequentialread、enqueue、freebufferwaits、latchfree、logfilesync、logfileparallewrite等等非空闲待事件时,需要对其进行分析,可能存在问题的语句。
Selectsid,event,p1,p2,p3,WAIT_TIME,SECONDS_IN_WAITfromv$session_waitwhereeventnotlike'SQL%'andeventnotlike'rdbms%';
11).检查数据库锁表情况
selectsid,serial#,username,SCHEMANAME,osuser,MACHINE,
terminal,PROGRAM,owner,object_name,object_type,o.object_id
fromdba_objectso,v$locked_objectl,v$sessions
whereo.object_id=l.object_idands.sid=l.session_id;
解锁处理:
altersystemkillsession'&sid,&serial#';
2、工作内容-日常性能监控
2.1间隔一段时间使用操作系统top等工具监控UNIX操作系统资源动态运行状况
CPU、内存、网络、IO、进程、页面交换等主要活动监控:
:
top、topas、vmstat、sar、iostat等
2.2间隔一段时间对数据库性能进行监控
Oracle11g图形工具-PerformanceManager监控顶层会话及顶层SQL
1.打开OEM控制台,选中要监控的数据库(oracle中OEM后台进程运行命令:
Windows:
dos下执行emctlstartdbconsole
Linux在su-oraprod下执行emctlstartdbconsole
网址是:
https:
//localhost:
1158/em/
查看oracle版本命令:
selectbannerfromsys.v_$version;)
2.介绍OEM主要内容
Oracle11g的OEM主要监控:
主机CPU,IO情况,Oracle数据库进程情况,SQL相应时间等;
登录Oracle11gOEM,选择性能-其它监视链接:
顶级活动
点击“顶级会话”中的“活动百分比”较高的“会话ID”
点击该会话ID对应的SQLID,查看该顶级会话中SQL的详细信息
点击“计划”—“表”标签,查看该SQL语句的详细执行计划
浏览该顶层会话对应SQL语句的详细信息
3、工作内容-日常数据库管理
3.1一天内间隔一定时间运行
3.1.1检查警告日志文件中最新错误信息
Linux、Unix系列平台:
vi$ORACLE_BASE/
输入:
“/ORA-”回车进行查找(此步骤为在.log文件中搜索包含该内容的语句)
3.1.2系统运行状况快照采集
每天根据实际情况,在以下三个阶段手工运行Statspack快照采集,输出快照报表:
●正常工作压力下
●每天业务最高峰期
●特殊业务运行阶段
Oracle11gOEM图形管理工具实现系统快照采集
Oracle11gOEM图形工具自动执行快照采集,缺省1小时收集一次,可以根据实际情况修改收集间隔时间、降低对系统性能影响。
系统快照自动收集时间、间隔、保留期限设置
登录Oracle10gOEM,选择服务器-自动工作量资料档案库
点击编辑,查看或修改快照收集时间及间隔
Oracle11g缺省系统快照每隔一小时执行一次,保留最近8天的所有快照,可根据实际情况修改调整,点确定后保存所做修改。
创建当前时间点系统快照
点击管理快照和保留的快照集下面的当前快照ID
选择起始快照,点击创建
选择“是”开始执行快照创建
快照在当前时间点成功创建。
输出两个快照时间点之间的快照信息报表
把“创建保留的快照集”改为“查看报告”,选择起始快照号,点击“开始”
选择结束快照号,点击“确定”
开始创建两个快照时间点之间的所有统计信息报告
另存该输出快照报告为HTML文件
注:
生成的统计信息快照报告放在专门目录下,定期对其整理、分析,作为EAS数据库运行整体状况及问题诊断的依据。
3.2每天工作结束后、系统空闲时运行
3.2.1图形界面查看表空间使用率
Oracle11gOEM表空间管理
登录OEM后选择主目录-空间概要—数据库大小
在该界面下可以看到表空间使用率,以及可以添加表空间和增加数据文件。
3.2.2数据库备份及日志清理
数据库备份主要提供两种方式,物理备份及逻辑备份,物理备份主要使用OracleRMAN工具,逻辑备份主要使用Oracle导出工具Exp及Expdp。
Oracle物理备份(RMAN)
该方式下周一到周五每天做一次增量备份,并检查备份是否正确,同时清理归档日志。
Oracle11gOEM图形化方式设置RMAN备份自动执行任务
RMAN备份主要参数设置
登录11gOEM,选择:
可用性-备份/恢复/备份设置
磁盘设备备份路径、并行度指定(根据服务器cpu个数匹配)
在这里的的用户名和密码是操作系统的用户和密码;
备份策略设置
主要是指定备份磁盘位置及备份保留时间,下图设置中为周备份策略考虑,保留最近7天备份。
两种RMAN自动调度备份策略1)使用Oracle建议的自动调度备份策略
选择可用性—管理-调度备份
选择“调度Oracle建议的备份”
选择备份目标介质,缺省备份到磁盘介质
该备份策略内容描述
设置该策略执行数据库全量或增量备份的调度时间
调度oracle建议的备份:
复查
2)自定义RMAN自动备份策略
选择“可用性—管理—调度备份—调度定制备份”
选择备份类型、归档日志、过时备份清理策略
备份目标介质设置(缺省使用前面“备份设置”中设置的参数)
备份自动执行的调度
备份设置信息复查,确定后提交作业
通过查看作业可以了解备份任务进展情况。
3)查看当前数据库RMAN备份信息
选择可用性-管理—备份报告,可以查看所有备份执行情况
注:
前面描述的是数据库全量备份的调度策略设置,增量备份的调度策略设置方法类似,只需要在备份类型中选择增量备份即可。
设置完成后EAS数据库自动备份策略为一周一次全量备份,在星期六晚上12点进行。
周一到周五每天晚上12点执行一次增量备份,保留最近7天备份,过期备份、归档日志自动删除。
Oracle逻辑备份(EXP/EXPDP)
1)操作系统级设置自动备份任务
root用户登录操作系统,运行crontab–e,添加以下内容:
5023**1-6su–oracle-c/usr/app/oracle/expdp/eas_expdp_MontoSat.sh>/dev/null2>&1
#星期一到星期六晚上11点50导出数据
5023**0su–oracle-c/usr/app/oracle/expdp/eas_expdp_Sunday.sh>/dev/null2>&1
#星期日11点50开始导出
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle DBA 日常工作 手册