1、活动状态检查 css
经过查询基本视图,确认数据库和实例处于正常运行状态,能够对外提供数据服务。
node
1.实例状态:sql
SQL> SELECT instance_name,status FROM v$instance;
查询返回实例名称、状态,正常状态应为open。
复制代码
2.链接用户:
数据库
SQL> SELECT inst_id,username,COUNT(*) FROM gv$session GROUP BY inst_id,username;
查询数据库以用户分组链接数。
复制代码
3.会话信息:
c#
SQL> SELECT sessions_current,sessions_highwater FROM v$license;
实例当前会话数和启动最高链接会话数量。
复制代码
4.参数检查:windows
SQL> SELECT value FROM v$parameter WHERE name='open_cursors';
查询给定参数的设置值,示例参数缺省值为300,一般中等规模数据库推荐设置为1000。复制代码
5.参数修改: 安全
SQL> ALTER SYSTEM SET undo_retention=3600 COMMENT='default 900' SID='*' SCOPE=both;
修改给定的初始化参数,RAC环境须要注意SID参数复制代码
6.隐含参数:
bash
SQL> ALTER SYSTEM SET "_optimizer_use_feedback"=FALSE SCOPE=spfile;
应对特殊问题,有时需设置如下划线开头的隐含参数。示例关闭了11.2中引入的Cardinality Feedback -基数反馈特性。实例异常:当链接数据库实例出现缓慢、挂起等现象,须要进行诊断和分析,甚至可能须要从新启动数据库实例。
<1>信息采集:
SQL> sqlplus -prelim / as sysdba
SQL> oradebug setmypid
SQL> oradebug unlimitSQL> oradebug hanganalyze 3
SQL> oradebug dump systemstate 266<<<<<间隔必定时间,如20秒,执行下一次数据库采样。>>>>>
SQL> oradebug hanganalyze 3SQL> oradebug dump systemstate 266示范命令,经过采集系统的Hang信息、系统状态信息等,能够分析系统挂起的缘由,间隔采样,能够用于对比变化,辅助分析
<2>跟踪:
SQL> alter session set events '10046 trace name context forever,level 12';
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter session set events '10046 trace name context forever,level 12';
SQL> alter database open;
若是在数据库关闭、启动时遇到阻塞、挂起等,能够经过示范命令进行跟踪,获取跟踪文件进行分析。
<3>安全停库:SQL> alter system checkpoint;
SQL> alter system archive log current;
SQL> shutdown immediate;
若是数据库出现异常须要从新启动,能够经过示范命令执行检查点、归档命令,而后尝试以当即方式关闭数据库。
<4>强制停库:
SQL> shutdown abort;
SQL> startup nomount;
SQL> alter database mount;
SQL> alter database open;
若是当即方式不能顺利关闭数据库,强制的关闭方式为abort。示范命令能够经过分步骤的方式执行数据库启动。链接异常:当链接数据库出现异常,须要检测包括网络连通性,监听器状态等信息。
<1>连通性:# tnsping tns_name 经过tnsping工具测试配置的服务名称,观察网络是否连通以及响应时间。
<2>监听器:# lsnrctl status LISTENER# lsnrctl status LISTENER_SCAN1# lsnrctl service在数据库服务器上,经过lsnrctl工具检查监听状态和服务信息。
<3>监听日志检查:adrci> show alert在服务器上,能够经过adrci工具,显示各种告警文件,检查监听器日志,能够诊断监听问题。复制代码
2、日志信息检查服务器
检查数据库各种日志信息,确认数据库实例、集群等是否出现错误、告警,如存在问题,则须要进一步分析和应对。网络
1.日志:
告警日志:$ORACLE_BASE/diag/rdbms/<db_name>/$ORACLE_SID/trace/alert_$ORACLE_SID.log
SQL> show parameter background_dump_dest;
根据示例找到告警日志,检查实例是否存在ORA-错误提示等。
集群日志:$GRID_HOME/log/<nodename>/alert<nodename>.log$GRID_HOME/log/<nodename>/(crsd、cssd、evmd、ohasd)/在相应路径找到RAC集群日志,检查是否存在错误提示信息等。
ASM日志:$GRID_HOME/diag/asm/+asm/<ASM_instance_name>/trace/alert_<instance_name>.log在相应路径找到ASM日志,检查是否存在错误提示信息等。复制代码
2.Trace文件检查:
SQL> SELECT value FROM v$diag_info WHERE name='Default Trace File';
SQL> show parameter user_dump_dest;
获取会话或全局转储位置,诊断时需查相应文件内容。复制代码
3.监听日志检查:
<1>监听器:# lsnrctl status LISTENER# lsnrctl status LISTENER_SCAN1# lsnrctl service
在数据库服务器上,经过lsnrctl工具检查监听状态和服务信息。
<2>监听日志检查:adrci> show alert
在服务器上,能够经过adrci工具,显示各种告警文件,检查监听器日志,能够诊断监听问题。复制代码
4.集群状态:
$crsctl status resource -t -----确保资源状态显示在线
errorstack分析
当遇到ORA-错误,而数据库的输出信息不足时,能够采用errorstack进行跟踪,采集更详细的转储信息。
SQL> alter system set events='600 trace name errorstack forever,level 10';
SQL> alter system set events='600 trace name errorstack off';
示例显示了对ORA-600错误设置跟踪,并关闭。
复制代码
3、重作日志维护
Oracle REDO日志是数据库的核心组件,检查其状态,维护其成员,监控其归档,审核其性能,是DBA的重要工做。
1.REDO组和成员:
SQL> SELECT group#,sequence#,archived,status FROM v$log;
查询日志组号、序号,是否归档完成和状态信息。
如多组日志显示ACTIVE状态,则可能说明数据库存在IO方面的性能问题。
SQL> SELECT group#,member FROM v$logfile;
查看日志组和成员信息。
复制代码
2.REDO维护:
SQL> ALTER DATABASE ADD LOGFILE GROUP 10 ('/oracle/dbs/log1c.rdo') size 500M;
SQL> ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2c.rdo' TO GROUP 10;
在日志切换频繁时,可能须要增长日志组或者加大日志大小。
SQL> ALTER DATABASE DROP LOGFILE GROUP 10;
SQL> ALTER DATABASE DROP LOGFILE MEMBER '/oracle/dbs/redo03.log';
删除指定日志组或日志成员,注意只能对INACTIVE状态的日志执行删除操做。复制代码
3.切换日志:
SQL> alter system switch logfile;
切换日志组,开始写入下一个日志组。
复制代码
4.归档维护:
SQL> archive log list; -----检查数据库是否处于归档模式。
SQL> startup mount;
SQL> alter database archivelog | noarchivelog;
在MOUNT状态改变归档模式,启动归档模式以后,务必制订备份归档的平常策略,防止磁盘空间被耗尽。
复制代码
5.执行归档:
SQL> alter system archive log current;
对当前日志组执行归档,切换到下一个日志组,在RAC会对全部实例执行归档,Thread参数指定归档实例。
复制代码
6.调整归档路径:
SQL> alter system set log_archive_dest_2='location=&path ' sid='&sid ';
若是数据库因归档耗尽空间,能够指定另外的归档路径,以尽快归档日志,恢复数据库运行。
复制代码
4、空间信息检查
确保数据存储空间可用,按期检查表空间余量,进行表空间和文件维护。
1.空间使用:
SQL> select * from sys.sm$ts_used;查看数据库表空间的使用信息。
SQL> select * from sys.sm$ts_free;查看数据库表空间的剩余空间。复制代码
2.文件信息:
SQL> select tablespace_name,file_name from dba_data_files;
查看数据库表空间的数据文件信息。
复制代码
3.文件维护:
SQL> alter database datafile '&path' resize 900M;
SQL> alter tablespace &tbs_name add datafile '&path' size 900M;
对数据库的表空间进行扩容。复制代码
5、锁闩信息检查
Lock/Latch是数据库控制并发的核心手段,检查相关信息能够监控数据库的事务和运行情况。
1.锁信息:
SQL> select sid,type,lmode,ctime,block from v$lock where type not in ('MR','AE');
查看锁会话ID,类型,持有时间等,注意若是block>1,可能意味着阻塞了其余会话。锁故障排查:在数据库出现锁竞争和阻塞时,须要排查和处理锁定,必要时经过KILL阻塞进程消除锁定。
查询阻塞会话:
SQL> select sid,sql_id,status,blocking_session from v$session where sid in (select session_id from v$locked_object);
查询当前锁事务中阻塞会话与被阻塞会话的sid,sql_id核状态信息。
阻塞SQL文本:
SQL> select sql_id,sql_text from v$sqltext where sql_id='&sql_id' order by piece;
经过sql_id查询获得SQL文本,例如经过sql_id查询出阻塞的SQL语句。
锁阻塞对象信息:
SQL> select owner,object_name,object_type from dba_objects where object_id in (select object_id from v$locked_object);
经过sid查询阻塞对象的详细信息如对象名称,所属用户等。
查询阻塞会话:
SQL> alter system kill session 'sid,serial#';
在oracle实例内杀死阻塞的会话进程,其中sid,serial#为停止会话对应信息,来自v$session。
杀系统进程:
SQL> select pro.spid,pro.program from v$session ses,v$process pro where ses.sid='&sid' and ses.paddr=pro.addr;
# kill -9 spid有时对于活动进程,在系统层面停止更为快速安全,示例找到系统进程号,而后kill停止。注意:不管什么时候,须要认真分析,而且避免误杀重要后台进程。复制代码
2.闩检查:
SQL> select name,gets,misses,immediate_gets,spin_gets from v$latch order by 2;
检查数据库闩的使用状况,misses、spin_gets统计高的,须要关注。复制代码
3.闩使用检查:
SQL> select addr,gets from v$latch_children where name='cache buffers chains';
SQL> select hladdr,file#,dbablk from x$bh where hladdr in (select addr from v$latch_children where addr='&addr');
仅供学习:经过得到latch的地址,找到该latch守护的X$BH中相关的Buffer。
复制代码
6、等待统计数据
Wait和Statistics数据分别表明了数据库的等待和运行数据,观察这些数据以了解数据库的等待瓶颈和健康程度。
1.等待时间查询:
SQL> select sid,event,wait_time_micro from v$session_wait order by 3;
经过等待事件和等待时间,了解数据库当前链接会话的等待状况。
注意:若是会话众多,须要限定查询输出的行数。复制代码
2.TOP10等待事件:
SQL> select * from (select event,total_waits,average_wait,time_waited from v$system_event where wait_class<>'Idle' order by time_waited desc) where rownum<=10;
查看当前数据中TOP10等待事件信息,须要分析和关注非空闲的显著等待。
复制代码
3.会话统计数据:
SQL> select s.sid,s.statistic#,n.name,s.value from v$sesstat s,v$statname n where s.statistic#=n.statistic# and n.name='redo size' and sid='&sid';
查询数据库会话的统计信息数据,示例查询了REDO的大小,SID须要提供。复制代码
4.系统级统计数据:
SQL> select * from v$sysstat where name='redo size';
查询整个系统的统计数据,示例显示数据库实例启动以来的REDO日志生成量。
复制代码
7、对象检查
表、索引、分区、约束等是数据库的核心存储对象,其核心信息和对象维护是DBA重要的平常工做。
1.表:
表信息数据:
SQL> SELECT * FROM (SELECT owner,table_name,num_rows FROM dba_tables ORDER BY num_rows desc nulls last) WHERE rownum<11;
查看表的基本信息数据:属主,表名,记录行数等。
表统计信息:
SQL> SELECT owner,table_name,last_analyzed FROM dba_tab_statistics WHERE owner='&owner' and table_name='&table_name';
查询给定用户,表名称(需大写),查询最后的统计信息分析收集时间。
索引统计信息:
SQL> SELECT owner,index_name,last_analyzed FROM dba_ind_statistics WHERE owner='&owner' and table_name='&table_name';
查询给定用户名,表名称(需大写),查询索引信息,尤为关注最后分析时间。
统计信息影响执行计划,当SQL执行异常时,须要重点分析统计信息。
复制代码
2.索引信息数据:
SQL> SELECT * FROM (SELECT index_name,table_name,num_rows,leaf_blocks,clustering_factor FROM dba_indexes ORDER BY 5 desc nulls last) WHERE rownum<11;
索引的基本信息,输出包括叶块数和聚簇因子等,如聚簇因子接近行数可能表明索引效率不高。复制代码
3.分区对象检查:
SQL> SELECT table_name,partitioning_type,partition_count,status FROM dba_part_tables;
SQL> SELECT table_name,partition_name,high_value FROM dba_tab_partitions WHERE rownum<11;
查看分区表的基本信息:分区类型,数量,边界值等。复制代码
4.结构信息:
SQL> set long 12000
SQL> SELECT dbms_metadata.get_ddl('&obj_type','&table_name','&user') FROM dual;
根据提供的对象类型(TABLE,INDEX)和用户(需大写),获取结构信息。
复制代码
5.分区定义查询:
SQL> set long 12000
SQL> SELECT dbms_metadata.get_ddl('TABLE','&part_table_name','&user') FROM dual;
查询给定的分区表名,用户(需大写),查询分区表的结构信息(建表语句)。复制代码
6.统计信息收集:
SQL> exec dbms_stats.gather_table_stats(ownname=>'&owner',tablename=>'&table_name');
SQL> exec dbms_stats.gather_index_stats(ownname=>'&owner',indexname=>'&index_name');
收集统计信息是一项复杂任务,需谨慎,示例对给出用户、索引名的对象采集统计信息。
复制代码
7.分区统计信息相关:
SQL> SELECT owner,table_name,partition_name,last_analyzed FROM dba_tab_statistics WHERE owner='&owner' and table_name='&table_name';
SQL> exec dbms_stats.gather_table_stats(ownname=>'&owner',tablename=>'&table_name');
查看分区表的统计信息收集时间,以及对分区表进行手工收集统计信息,注意分区表统计信息收集很是复杂,须要深刻研究作出正确策略,示例仅提供最简单的采集命令。复制代码
8.约束信息:
SQL> SELECT constraint_name,constraint_type FROM dba_constraints WHERE table_name='&table_name';
查询指定数据表的约束信息,包括名称和类型。复制代码
9.失效对象检查:
SQL> SELECT owner,object_name,object_type,status FROM dba_objects WHERE status<>'VALID' ORDER BY owner,object_name;
检查数据库中的失效对象信息,一般运行健康的数据库中不该有失效的对象。复制代码
10.闪回查询:
闪回查询功能对于恢复DML及部分DDL误操做很是便利,DBA必备技能。
时间闪回:
SQL> SELECT * FROM &table_name as of timestamp to_timestamp('2015-02-04 00:02:09','yyyy-mm-dd hh24:mi:ss');
闪回表数据,基于时间点的表数据闪回查询。SCN闪回:
SQL> SELECT * FROM &table_name as of scn&scn;
闪回表数据,基于SCN的表数据查询,须要提供SCN,若是不明确SCN,能够经过时间点闪回查询。
闪回DROP:
SQL> flashback table &old_table to before drop rename to &new_table;
闪回删除操做,对已经删除的表进行闪回恢复并重命名。复制代码
8、AWR报告检查
经过AWR报告了解平常高峰时段数据库各项指标和运行情况,经过对比报告观察和基线的变化,经过趋势分析持续关注数据库平常状态
1.本地AWR:
SQL> @?/rdbms/admin/awrrpt
生成本地AWR报告信息,须要根据提示输入相应的信息。
复制代码
2.指定实例AWR:
SQL> @?/rdbms/admin/awrrpti生成指定实例AWR报告。复制代码
3.AWR对比报告:
SQL> @?/rdbms/admin/awrddrpt生成本地AWR时间段对比报告复制代码
4.指定实例对比:
SQL> @?/rdbms/admin/awrddrpi生成指定实例AWR时间段对比报告复制代码
5.AWR信息提取:
SQL> @?/rdbms/admin/awrextr使用awrextr脚本将AWR性能数据导出,能够用以留错或者异地分析复制代码
6.AWR信息加载:
SQL> @?/rdbms/admin/awrload经过awrload,能够将导出的AWR性能数据导入到其余数据库中,便于集中和分析。复制代码
9、SQL报告检查
对Top SQL进行持续关注和分析,经过SQL报告分析SQL的效率、性能,并作出报告和优化建议。
1.Explain SQL执行计划:
SQL> explain plan for SELECT count(*) FROM user_objects;
SQL> SELECT * FROM table(dbms_xplan.display);
示例经过explain plan for 方法获取SQL执行计划。复制代码
2.Autotrace SQL执行计划:
SQL> set autotrace traceonly explain;
SQL> SELECT count(*) FROM user_objects;
SQL> set autotrace off;
经过SQL*Plus的autotrace功能获取SQL执行计划。
复制代码
3.DBMS_XPLAN SQL执行计划:
SQL> SELECT * FROM table(dbms_xplan.display_cursor('&sql_id',null,'advanced'));
经过DBMS_XPLAN包获取SQL执行计划,sql_id须要提供。
复制代码
4.10053事件跟踪:
SQL> alter session set tracefile_identifier='10053';
SQL> alter session set events '10053 trace name context forever,level 1';
SQL> <execute sql statements>
SQL> alter session set events '10053 trace name context off';
经过10053事件来查看执行计划和详细的SQL解析过程,trace文件提供了Oracle如何选择执行计划的缘由。复制代码
5.绑定变量:
SQL> SELECT dbms_sqltune.extract_bind(bind_data,1).value_string FROM wrh$_sqlstat WHERE sql_id='&sql_id';
SQL> SELECT snap_id,name,position,value_string FROM dba_hist_sqlbind WHERE sql_id='&sql_id';
查询SQL语句的绑定变量以及历史绑定变量值信息,须要给定sql_id信息。复制代码
6.SQL报告:
SQL> @?/rdbms/admin/awrsqrpt
SQL> @?/rdbms/admin/awrsqrpi
复制代码
7.指定SQL的监控报告:
SQL> SELECT dbms_sqltune.report_sql_monitor(sql_id=>'&sql_id',report_level=>'ALL',TYPE=>'&type') as report FROM dual;
生成指定sql_id的SQL Monitor Report
复制代码
8.当前会话的监控报告:
SQL> SELECT dbms_sqltune.report_sql_monitor(session_id=>'&sid',report_level=>'ALL',TYPE=>'&type') as report FROM DUAL;
生成当前会话的SQL Monitor Report复制代码
10、定时任务检查
检查数据库定时任务执行状况,确保后台任务正确执行,尤为应关注统计信息收集等核心任务。
1.用户定时任务:
SQL> SELECT job,log_user,last_date,next_date,interval,broken,failures FROM dba_jobs;
查询用户的定时任务(job)信息,确保任务在指望的时间成功执行,这是DBA的重要工做之一。
复制代码
2.系统定时任务:
SQL> SELECT job_name,start_date,repeat_interval FROM dba_scheduler_jobs;
查询系统定时调度信息,查询显示了任务名称、初始启动日期以及重复间隔。复制代码
3.系统定时任务--11g+:
SQL> SELECT client_name,mean_job_duration FROM dba_autotask_client;
11g以后增长的字典表,记录每一个在7天和30天维护任务的统计信息,查询显示名称和平均执行时间。复制代码
4.启停统计信息任务--10g:
SQL> exec dbms_scheduler.disable('SYS.GATHER_STATS_JOB');
SQL> exec dbms_scheduler.enable('SYS.GATHER_STATS_JOB');
关闭和开启Oracle10g统计信息自动采集任务。复制代码
5.启动统计信息任务--11g:
SQL> exec DBMS_AUTO_TASK_ADMIN.DISABLE(client_name=>'auto optimizer stats collection',operation=>NULL,window_name=>NULL);
SQL> exec DBMS_AUTO_TASK_ADMIN.ENABLE(client_name=>'auto optimizer stats collection',operation=>NULL,window_name=>NULL);
关闭和开启Oracle11g统计信息自动采集任务。复制代码
11、备份
数据备份重于一切,平常应检查备份执行状况,并检查备份的有效性,确保备份可以保障数据安全,备份安全加密也应兼顾。
1.全库exp/imp:
$ exp system/manager file=/full.dmp log=/full.log full=y
$ imp system/manager file=/full.dmp log=/full.log full=y
将数据库全库导出导入(示例以及如下示例显示的是非windows环境),经过提供的用户,执行全库导出。须要注意存储位置和空间。复制代码
2.用户模式exp/imp:
$ exp enmo/enmo file=/enmo.dmp log=/enmo.log owner=enmo
$ imp enmo/enmo file=/enmo.dmp log=/enmo.log fromuser=enmo touser=enmo
将数据按指定用户导出。复制代码
3.表模式exp/imp:
$ exp enmo/enmo file=/tables.dmp log=/tables.log tables=table_name
$ imp enmo/enmo file=/tables.dmp log=/tables.log tables=table_name
将数据库按指定表导出。
复制代码
4.全库模式expdp/impdp:
$ expdp system/manager directory=svr_dir dumpfile=full.dmp full=y;
$ impdp system/manager directory=svr_dir dumpfile=full.dmp full=y;
将数据库全库导出导入,注意directory是数据库中建立的对象,指定服务器上的存储位置。
复制代码
5.用户模式-expdp/impdp:
$ expdp system/manager directory =svr_dir schemas=scott dumpfile=expdp.dmp;
$ impdp system/manager directory=svr_dir schemas=scott dumpfile=expdp.dmp remap_schema=scott:enmo remap_tablespace=users:testtbs;
将数据库进行按用户导出和导入示例,impdp示例中,分别从新映射了导入的Schema和表空间。
复制代码
6.表模式-expdp/impdp:
$ expdp scott/tiger directory=svr_dir tables=emp.dept dumpfile=tables.dmp;
$ impdp scott/tiger directory=svr_dir dumpfile=tables.dmp tables=emp,dept;
将数据库进行按表导出和导入。复制代码
7.物理备份检查:
SQL> SELECT backup_type,start_time,completion_time,block_size FROM v$backp_set;
检查备份集信息,确保备份有效和及时是DBA的重要工做之一,RMAN的备份信息记录在控制文件中。复制代码
8.自动控制文件备份:
RMAN> show all;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
控制文件对数据库十分重要,建议启动控制文件的自动备份,示范显示的是经过RMAN的设置。复制代码
9.手动控制文件备份:
RMAN> backup current controlfile;
SQL> alter database backup controlfile to '/tmp/control.bak';
经过RMAN或者SQL命令手动备份控制文件,备份的是控制文件的二进制拷贝。复制代码
10.转储控制文件:
SQL> alter session set events 'immediate trace name controlf level 8';
经过以上命令转储控制文件二进制信息到文本,研究这些信息,能够极大加深对于数据库的了解。复制代码
11.RMAN备份数据库:
RMAN> backup format '/data/backup/%U' database plus archivelog;
对于DBA备份是第一重要的工做,在归档模式下,执行全库备份能够简化为示例的下一个命令(须要根据容量进行分片)。复制代码
12、基本信息检查
基本信息包括版本、组件、补丁集等信息,按期检查数据库信息并登记在案是数据库生命周期管理的重要内容之一。
1.版本组件:
SQL> SELECT * FROM v$version;
查看数据库的版本信息。
SQL> SELECT * FROM v$option;
查看数据库的组件信息。
复制代码
2.容量检查:
# asmcmd
ASMCMD> lsdg
SQL> SELECT group_number,disk_number,mount_status,total_mb,free_mb FROM v$asm_disk;
SQL> SELECT group_number,name,state,total_mb,free_mb FROM v$asm_diskgroup;
若是使用了ASM管理,能够经过示例查看ASM磁盘及磁盘组容量等信息。
复制代码
3.PSU检查:
SQL> SELECT * FROM dba_registry_history;
查询数据库的版本升级历史信息。
# $ORACLE_HOME/OPatch/opatchlsinventory
查询数据库补丁历史信息,是系统级的命令工具。复制代码
转载:来自 “ ITPUB博客 ” ,连接:http://blog.itpub.net/29475508/viewspace-2120797/
复制代码