Oracle数据库日常检查文档
- 格式:doc
- 大小:92.50 KB
- 文档页数:7
数据库日常维护手册1.1数据库的安装1.1.1操作系统的准备工作Oracle 数据库的基本软件安装在oradb1和oradb2上。
数据文件,日志文件,控制文件通过手工建库时,指定在共享的阵列上。
Oradb1与Oradb2的安装配置方法相同,以Oradb1为例说明。
1.内核参数的修改编辑修改/etc/system 文件set shmsys:shminfo_shmmax= 0x200000000set shmsys:shminfo_shmmin=1set shmsys:shminfo_shmmni=100set shmsys:shminfo_shmseg=10set semsys:seminfo_semmni=100set semsys:seminfo_semmsl=600set semsys:seminfo_semmns=1200set semsys:seminfo_semopm=100set semsys:seminfo_semvmx=32767扩大共享内存和信号量参数。
2.检查需要的操作系统patch通过 上下载特定版本(Solaris 8)的patch集并安装,可以满足Oracle 的安装需要。
3.操作系统用户/组的添加●groupadd dba●groupadd oinstall●useradd -c "Oracle DBA" -d /home/oracle -g oinstall -G dba●修改/etc/passwd文件,更改用户登陆shell 或其他信息oracle:x:102:101::/export/home/oracle:/bin/ksh4.Oracle用户环境变量的设定在oracle 用户的初始化环境变量文件中(/export/home/oracle/.profile),增加如下内容。
ORACLE_BASE=/opt/app/oracleORACLE_HOME=/opt/app/oracle/product/8.1.7ORACLE_TERM=vt100ORACLE_OWNER=oracleNLS_LANG="SIMPLIFIED CHINESE_china".ZHS16CGB231280ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/dataORACLE_SID=actdbTMP=/tmpPATH=$ORACLE_HOME/bin:/usr/ccs/bin:$PATHLD_LIBRARY_PATH=/opt/oracle/app/oracle/product/8.1.7/lib:/usr/libexport ORACLE_BASE ORACLE_HOME ORACLE_TERM ORACLE_OWNER NLS_LANGORA_NLS33 ORACLE_SID TMP PATH LD_LIBRARY_PATHLANG=zhexport LANGumask 022stty erase ^HEDITOR=viexport EDITOR文件主要设定数据库的基本目录,数据库的SID名称和数据库的中文语言环境。
ORACLE数据库日常维护手册(最全+最实用)byfwyangoracle日常维护手册查阅数据库版本select*fromv$version;查阅数据库语言环境selectuserenv('language')fromdual;查阅oracle实例状态selectinstance_name,host_name,startup_time,status,database_statusfromv$instanc e;查阅oracle监听状态lsnrctlstatus查看数据库归档模式selectname,log_mode,open_modefromv$database;查看回收站中对象selectobject_name,original_name,typefromrecyclebin;清空回收站中对象purgerecyclebin;还原回收站中的对象flashbacktable\tobeforedroprenametotest;1byfwyang闪回误删除的表flashbacktableaaatobeforedrop;闪回表中记录到某一时间点altertabletestenablerowmovement;flashbacktabletesttotimestamp21:17:47','yyyy-mm-ddhh24:mi:ss');to_timestamp('2021-10-15查阅当前可以话selectsid,serial#,username,program,machine,statusfromv$session;查阅ddl门锁select*fromdba_ddl_lockswhereowner='fwyang';检查等待事件selectsid,ername,event,wait_class,t1.sql_textfromv$sessiona,v$sqlareat1whe rewait_class<>'idle'anda.sql_id=t1.sql_id;检查数据文件状态selectfile_name,statusfromdba_data_files;检查表空间使用情况selectupper(f.tablespace_name)\表中空间名\,d.tot_grootte_mb\表中空间大小(m)\,d.tot_grootte_mb-f.total_bytes\已使用空间(m)\,to_char(round((d.tot_grootte_mb-f.total_bytes)/d.tot_grootte_mb*100,2),'990.99')\采用比\,f.total_bytes\空闲空间(m)\,2byfwyangf.max_bytes\最小块(m)\from(selecttablespace_name,round(sum(bytes)/(1024*1024),2)total_bytes,round(max(bytes)/(1024*1024),2)max_ bytesfromsys.dba_free_spacegroupbytablespace_name)f,(selectdd.tablespace_name,round(sum(dd.bytes)/(1024*1024),2)tot_grootte_mbfromsys.dba_data_filesddgroupb ydd.tablespace_name)dwhered.tablespace_name=f.tablespace_nameorderby4desc;膨胀表中空间altertablespcets_aj_datacoalesce;减少表中空间大小selectt.tablespace_name,t.file_name,t.bytes/1024/1024/1024fromdba_data_filestwheret.tablespace_name='ts_aj_data';altertablespacets_aj_dataadddatafile'/data/ts_aj_data05_10g.dbf'size10000mauto extendoff;检查不起作用的约束selectowner,constraint_name,table_name,constraint_type,statusfromdba_constrain tswherestatus='disable';检查出现坏块的数据库对象selecttablespace_name,segment_type,owner,segment_namefromdba_extentswherefile_id=<afn>and<block>betweenblock_idandblock_id+blocks-1;3byfwyang检查违宪的数据库对象selectowner,object_name,object_typefromdba_objectswherestatus='invalid';查看语句执行进度selectse.sid,opname,trunc(sofar/totalwork*100,2)||'%'aspct_work,elapsed_secondselapsed,round(elapsed_seconds*(totalwork-sofar)/sofar)remain_time,sql_textfromv$session_longopssl,v$sqlareasa,v$sessionsewheresl.sql_hash_value=sa.hash_ valueandsl.sid=se.sidandsofar!=totalworkorderbystart_time;检查碎片程度低的表中selectsegment_nametable_name,count(*)extentsfromdba_segmentswhereownernotin('sys','system')groupbysegment_namehavingcount(*)=(selectmax(count(*))fromdba_segmentsgroupbysegment_name);检查表空间的i/o比例selectdf.tablespace_namename,df.file_name\,f.phyrdspyr,f.phyblkrdpbr,f.phywrts pyw,f.phyblkwrtpbwfromv$filestatf,dba_data_filesdfwheref.file#=df.file_idorderbydf.tablespace_na me;4byfwyang检查碎片程度低的表中selectsegment_nametable_name,count(*)extentsfromdba_segmentswhereownernotin('sys','system')groupbysegment_namehavingcount(*)=(selectmax(count(*))fromdba_segmentsgroupbysegment_name);检查文件系统的i/o比例selectsubstr(a.file#,1,2)\,substr(,1,30)\,a.status,a.bytes,b.phyrds,b.ph ywrtsfromv$datafilea,v$filestatbwherea.file#=b.file#;检查消耗cpu最低的进程selectp.pidpid,s.sidsid,p.spidspid,ernameusername,s.osuserosname,p.serial#s_#,p.terminal,p.programprogram,p.background,s.status,rtrim(substr(a.sql_text,1,80))sqlfromfromv$processp,v$sessions,v$sqlareaawhere p.addr=s.paddrands.sql_address=a.address(+)andp.serial#<>'1';检查运转好久的sqlselectusername,5。
目录1. 检查数据库基本状况41.1. 检查ORACLE实例状态41.2. 检查ORACLE服务进程41.3. 检查ORACLE监听状态52. 检查系统和ORACLE日志文件62.1. 检查操作系统日志文件62.2. 检查ORACLE日志文件62.3. 检查ORACLE核心转储目录72.4. 检查ROOT用户和ORACLE用户的EMAIL 73. 检查ORACLE对象状态73.1. 检查ORACLE控制文件状态73.2. 检查ORACLE在线日志状态83.3. 检查ORACLE表空间的状态83.4. 检查ORACLE所有数据文件状态83.5. 检查无效对象93.6. 检查所有回滚段状态104. 检查ORACLE相关资源的使用情况104.1. 检查ORACLE初始化文件中相关参数值10 4.2. 检查数据库连接情况114.3. 检查系统磁盘空间124.4. 检查表空间使用情况124.5. 检查一些扩展异常的对象134.6. 检查SYSTEM表空间内的内容144.7. 检查对象的下一扩展与表空间的最大扩展值145. 检查ORACLE数据库备份结果145.1. 检查数据库备份日志信息155.2. 检查BACKUP卷中文件产生的时间155.3. 检查ORACLE用户的EMAIL 156. 检查ORACLE数据库性能156.1. 检查数据库的等待事件156.2. DISK READ最高的SQL语句的获取156.3. 查找前十条性能差的SQL 166.4. 等待时间最多的5个系统等待事件的获取16 6.5. 检查运行很久的SQL 166.6. 检查消耗CPU最高的进程166.7. 检查碎片程度高的表176.8. 检查表空间的I/O 比例176.9. 检查文件系统的I/O 比例176.10. 检查死锁及处理176.11. 检查数据库CPU、I/O、内存性能186.12. 查看是否有僵死进程196.13. 检查行链接/迁移196.14. 定期做统计分析196.15. 检查缓冲区命中率206.16. 检查共享池命中率206.17. 检查排序区206.18. 检查日志缓冲区217. 检查数据库安全性217.1. 检查系统安全日志信息217.2. 检查用户修改密码218. 其他检查228.1. 检查当前CRONTAB任务是否正常228.2. ORACLE JOB是否有失败228.3. 监控数据量的增长情况228.4. 检查失效的索引238.5. 检查不起作用的约束238.6. 检查无效的TRIGGER 23本文档为本人亲自整理的公司的维护文档,内容很详细,DBA日常任务基本就是文档中写的那些,初学DBA或是有意学习DBA的同学们可取去学习学习,文档有实例讲解,很实用。
Oracle 数据库日常巡检指令Oracle数据库的日常巡检内容包括:Oracle数据库基本状况检查;Oracle相关资源的使用情况检查;Oracle数据库性能检查;数据库服务器cpu、mem和I/O 性能检查;数据库服务器安全性及其他事项检查等五大检查项目。
1、数据库基本状况检查(1)、数据库实例状况检查说明:其中“STATUS”表示Oracle当前的实例状态,必须为“OPEN”;“DATABASE_STATUS”表示Oracle当前数据库的状态,必须为“ACTIVE”。
(2)、数据库表空间状态检查说明:输出结果中STATUS应该都为“ONLINE”。
(3)、数据库数据文件检查1 select tablespace_name,status from dba_tablespaces;说明:输出结果中“STATUS”应该都为“AVAILABLE”。
(4)、数据库在线日志检查1 select group#,status,type,member from v$logfile;说明:输出结果应该有3条或3条以上记录,“STATUS”应该为非“INVALID”,非“DELETED”。
“STATUS”的值为空表示正常。
(5)、数据库回滚段检查1 select segment_name,status from dba_rollback_segs;说明:输出结果中所有回滚段的“STATUS”应该为“ONLINE”。
2、数据库相关资源使用情况检查(1)、检查Oracle初始化文件中相关参数值1 select resource_name,max_utilization,initial_allocation, limit_value from v$resource_limit;说明:若字段值【LIMIT_VALU】-【MAX_UTILIZATION】<=5,则表明与RESOURCE_NAME相关的Oracle初始化参数需要调整。
Oracle数据库日常维护在Oracle数据库运行期间,DBA应该对数据库的运行日志及表空间的使用情况进行监控,及早发现数据库中存在的问题。
一、Oracle警告日志文件监控Oracle在运行过程中,会在警告日志文件(alert_SID.log)中记录数据库的一些运行情况:●数据库的启动、关闭,启动时的非缺省参数;●数据库的重做日志切换情况,记录每次切换的时间,及如果因为检查点(checkpoint)操作没有执行完成造成不能切换,会记录不能切换的原因;●对数据库进行的某些操作,如创建或删除表空间、增加数据文件;●数据库发生的错误,如表空间不够、出现坏块、数据库内部错误(ORA-600)DBA应该定期检查日志文件,根据日志中发现的问题及时进行处理二、数据库表空间使用情况监控(字典管理表空间)数据库运行了一段时间后,由于不断的在表空间上创建和删除对象,会在表空间上产生大量的碎片,DBA应该及时了解表空间的碎片和可用空间情况,以决定是否要对碎片进行整理或为表空间增加数据文件。
select tablespace_name,count(*) chunks ,max(bytes/1024/1024) max_chunkfrom dba_free_spacegroup by tablespace_name;上面的SQL列出了数据库中每个表空间的空闲块情况,如下所示:TABLESPACE_NAME CHUNKS MAX_CHUNK-------------------- ---------- ----------INDX 1 57.9921875RBS 3 490.992188RMAN_TS 1 16.515625SYSTEM 1 207.296875TEMP 20 70.8046875TOOLS 1 11.8359375USERS 67 71.3671875其中,CHUNKS列表示表空间中有多少可用的空闲块(每个空闲块是由一些连续的Oracle数据块组成),如果这样的空闲块过多,比如平均到每个数据文件上超过了100个,那么该表空间的碎片状况就比较严重了,可以尝试用以下的SQL命令进行表空间相邻碎片的接合:alter tablespace 表空间名 coalesce;然后再执行查看表空间碎片的SQL语句,看表空间的碎片有没有减少。
oracleDBA日常维护手册图文讲解Oracle10g数据库日常维护手册目录1.检查数据库基本状况 (3)1.1. 检查O RACLE实例状态 (3)1.2. 检查O RACLE服务进程 (3)1.3. 检查O RACLE监听状态 (4)2.检查系统和ORACLE日志文件 (5)2.1. 检查操作系统日志文件 (5)2.2. 检查ORACLE日志文件 (6)2.3. 检查O RACLE核心转储目录 (6)2.4. 检查R OOT用户和O RACLE用户的EMAIL (6)3.检查ORACLE对象状态 (7)3.1. 检查O RACLE控制文件状态 (7)3.2. 检查O RACLE在线日志状态 (7)3.3. 检查O RACLE表空间的状态 (7)3.4. 检查O RACLE所有数据文件状态 (8)3.5. 检查无效对象 (9)3.6. 检查所有回滚段状态 (9)4.检查ORACLE相关资源的使用情况 (10)4.1. 检查O RACLE初始化文件中相关参数值 (10) 4.2. 检查数据库连接情况 (11)4.3. 检查系统磁盘空间 (13)4.4. 检查表空间使用情况 (13)4.5. 检查一些扩展异常的对象 (14)4.6. 检查SYSTEM表空间内的内容 (14)4.7. 检查对象的下一扩展与表空间的最大扩展值 (14)5.检查ORACLE数据库备份结果 (15)5.1. 检查数据库备份日志信息 (15)5.2. 检查BACKUP卷中文件产生的时间 (15)5.3. 检查ORACLE用户的EMAIL (15)6.检查ORACLE数据库性能 (16)6.1. 检查数据库的等待事件 (16)6.2. D ISK R EAD最高的SQL语句的获取 (16) 6.3. 查找前十条性能差的SQL (16)6.4. 等待时间最多的5个系统等待事件的获取 (16) 6.5. 检查运行很久的SQL (16)6.6. 检查消耗CPU最高的进程 (17)6.7. 检查碎片程度高的表 (17)6.8. 检查表空间的I/O比例 (17)6.9. 检查文件系统的I/O比例 (18)6.10. 检查死锁及处理 (18)6.11. 检查数据库CPU、I/O、内存性能 (18)6.12. 查看是否有僵死进程 (20)6.13. 检查行链接/迁移 (20)6.14. 定期做统计分析 (20)6.15. 检查缓冲区命中率 (21)6.16. 检查共享池命中率 (21)6.17. 检查排序区 (21)6.18. 检查日志缓冲区 (22)7.检查数据库安全性 (22)7.1. 检查系统安全日志信息 (22)7.2. 检查用户修改密码 (22)8.其他检查 (23)8.1. 检查当前CRONTAB任务是否正常 (23)8.2. O RACLE J OB是否有失败 (23)8.3. 监控数据量的增长情况 (23)8.4. 检查失效的索引 (24)8.5. 检查不起作用的约束 (24)8.6. 检查无效的TRIGGER (25)巡检内容1.检查数据库基本状况在本节中主要对数据库的基本状况进行检查,其中包含:检查Oracle实例状态,检查Oracle服务进程,检查Oracle监听进程,共三个部分。
Oracle数据库日常检查文档 1 / 7 数据库日常检查文档
1. 检查表空间使用情况: 1.1 检查是否开启自扩展功能: select tablespace_name,, round((increment_by*8191)/(1024*1024),2)||'M' as 自扩展大小M from dba_data_files;
目的:检查表空间是否开启自扩展功能。 若检查自扩展特别小,请用下面的方法把自扩展根据数据量增长情况调大。 alter database datafile '新增加数据文件路径' autoextend on next *M maxsize unlimited;--把*替换为你需要的自扩展大小
1.2 检查表空间的使用情况: select a.tablespace_name,a.totals 总大小M,b.frees 空闲大小M, round((a.totals-b.frees)/a.totals,4)*100||'%' 使用率 from (select sum(bytes)/(1024*1024) as totals,tablespace_name from dba_data_files group by tablespace_name) a, (select sum(bytes)/(1024*1024) as frees,tablespace_name from dba_free_space group by tablespace_name) b where a.tablespace_name=b.tablespace_name ;
目的:当表空间没有开启自扩展功能时,表空间的使用率大于等于85%时,需要向表空间增加数据文件。开启自扩展功能的表空间,检查常用的表空间自扩展的大小不小于100M。
注: 检查ulog用户对应的表空间: select default_tablespace from dba_users where username='ULOG';
Ulog用户下的tlog表主要是记录日志的,因为大部分的报表涉及记录日志。所以,ulog用户对应的表空间不管是开启还是未开启自扩展功能,当ulog对应的表空间的使用率大于等于85%时,就对性能有影响,考虑truncate释放空间或是扩空间。 Oracle数据库日常检查文档 2 / 7 解决办法: 手工降低使用率的方法: Alter database datafile ‘数据文件的路径’ resize **M; 另一种情况: 当前的文件是开启自扩展的,但是要扩展的数据文件已经到达限制值32G了,此时的解决办法: alter tablespace 表空间名 add datafile '新增加数据文件路径' size 5120M;--向表空间中增加数据文件 alter database datafile '新增加数据文件路径' autoextend on next 100M maxsize unlimited;--开启自动扩展 alter database datafile '达到最大值的数据文件路径' AUTOEXTEND off;--关闭之前文件的自扩展
2. 定期检查磁盘的使用情况: 2.1 Windows下检查 执行下面sql,获得数据文件的路径: select from dba_data_files; Windows下直接检查数据文件所在的盘的总大小和可用空间,当使用率为85% 时,清除数据文件所在的盘上无用的数据,或考虑增加硬件。
2.2 Linux或是unix下: Linux或是unix下检查oracle的安装所用的盘,检查变量ORACLE_BASE所在目录的磁盘的使用情况,当使用率大于或等于90%时,需要清除无用的资料或是考虑增加硬件。 例如,linux下用df命令 : [root@rac1 /]# df 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/sda1 10115104 8671272 921724 91% / /dev/sda2 15398476 5604628 8999036 39% /u01/oracle tmpfs 871640 0 871640 0% /dev/shm
3. 常规检查: 3.1 检查是否有无效的对象: select owner as 用户,object_name as 对象名,object_type as 对象类型 Oracle数据库日常检查文档 3 / 7 from dba_objects where status='INVAID'; 目的:若查询有结果,对无效对象需要重新编译。 Alter object_type owner.object_name compile;
3.2 检查不可用的主键: select owner,constraint_name,table_name from dba_constraints where status!='ENABLED' and constraint_type='P';
目的:若查询有数据,执行下面语句的执行结果。 select 'alter table '||owner||'.'||table_name||' enable constraints '||constraint_name||';' from dba_constraints where status!='ENABLED' and constraint_type='P';
3.3 检查不可用的触发器: select owner,trigger_name from dba_triggers where status!='ENABLED';
目的:若查询有数据,执行下面语句的执行结果。 select 'alter trigger '||owner||'.'||trigger_name||' enable;' from dba_triggers where status!='ENABLED';
3.4 检查session和process: 对照当前使用数和参数设置值: Select count(*) from v$session ; Select count(*) from v$process; 数据库设置值: select name,value from v$parameter where name in('sessions','processes');
注:以 ‘v$’开头的表需要是业务高峰时的数据对分析才有作用。 注:现场工程在使用pl/sql developer时,因多个sql窗口会增加sessions和process数,尽量在一个sql窗口操作。 Oracle数据库日常检查文档 4 / 7 3.5 检查job: 检查参数: 当前数据库的并发可执行的job数量: select name,value from v$parameter where name='job_queue_processes';
查询当前数据中所有的job: select * from dba_jobs; 涉及检查项: LOG_USER,提交任务的用户 ; PRIV_USER ,赋予任务权限的用户 ; SCHEMA_USER ,对任务作语法分析的用户模式; THIS_DATE ,表示正在运行任务的开始时间; LAST_DATE:最后一次成功运行完此job的时间; NEXT_DATE:下一次运行job的开始时间; INTERVAL:用于计算下一运行时间的表达式; What:执行任务的PL/SQL块。 结果判断: 1、 若有创建在sys或是system用户下的业务job需要删除,重新创建在业务用户下。 2、 如果Next_date是晚上21点执行的job,在第二天上午9点查询dba_jobs表时,this_date列不为空表示此job仍在执行。那么就需要优化what列显示的存储过程了。 3、 当FAILURE<>0时,job不能执行成功。检查并发可执行的job进程数是否够用,根据next_date判断下次需要并发执行的job数与参数job_queue_processes的设置数比较?若不够, 修改方法: Alter system set job_queue_processes=11 scope=both;
3.6 检查数据文件的状态: select * from v$data status not in('SYSTEM','ONLINE'); 目的:若查询无结果,表示数据文件正常。 Oracle数据库日常检查文档 5 / 7 3.7 检查数据库的模式: Select name,Created, Log_Mode From V$Database; 若log_mode为archive,当value不为空时,检查对应目录下的空间使用情况: select value from v$parameter where name= 'log_archive_dest_1';
若归档日志存在use_db_recovery_下,检查下面视图归档日志的使用情况:
select percent_space_used from v$flash_recovery_area_usage where 'ARCHIVELOG';
当空间使用百分比(percent_space_used)为85%时,需要释放空间。
若使用的是asm 自动存储管理,检查空闲大小是否够用: select group_number,name,total_MB as 总大小,free_MB as 空闲大小 from v$asm_diskgroup;
3.8 检查锁的情况:
检查是否发生阻塞: select /*+ ordered*/ sql_text, spid, p.pid, s.sid, s.username, s.program, process from v$sqlarea q, v$session s, v$process p where q.address = s.sql_address and q.hash_value = s.sql_hash_value and s.paddr = p.addr and exists (select sid from v$lock where block=1 and sid=s.sid); 目的:若有结果,发回sql的执行结果,开发人员检查sql涉及的程序。 导出结果后杀掉session。