DBA一天干的活

简介:

一.检查活动状态

通过查询基本视图,确认数据库和实例处于正常运行状态,可以对外提供数据服务。

1.1实例状态

1
SELECT instance_name,status FROM v$instance;

 

查询返回实例名称、状态,正常状态应为Open。

 

1.2会话信息

1
2
SELECT 
SESSIONS_CURRENT,SESSIONS_HIGHWATER FROM v$license;

 

辅助查询,实例当前会话数和启动最高连接会话数量。

 

 

1
2
SELECT inst_id,username,COUNT(*)
FROM gv$session GROUP BYinst_id,username;

 

查询数据库连接数以实例和用户分组。

 

 

1.3参数检查

1
2
SELECT value FROM v$parameter 
WHERE name= 'open_cursors' ;

 

查询给定参数的设置值,示例参数缺省值为300,通常中等规模数据库推荐设置为1000。

 

1.4参数修改     

1
ALTER SYSTEM SET undo_retention=3600 COMMENT= 'default 900'  SID= '*'  SCOPE=both;

 

修改给定的初始化参数,RAC环境需要注意SID参数。

 

1.5隐含参数    

1
ALTER SYSTEM SET  "_optimizer_use_feedback" =FALSE SCOPE=spfile;

 

为了解决特殊问题,有时需要设置以下划线开头的隐含参数。

示例关闭了11.2版本中引入的Cardinality Feedback - 基数反馈特性。

 

1.6实例异常

当连接数据库实例出现缓慢、挂起等现象,需要进行诊断和分析,甚至可能需要重新启动数据库实例。

 

1.6.1信息采集

 

1
2
3
4
5
6
7
8
SQL>sqlplus -prelim / as sysdba
SQL>oradebug setmypid
SQL>oradebug unlimit
SQL>oradebug hanganalyze 3
SQL>oradebug dump systemstate 266
<间隔一定时间,如20秒,执行下一次数据采样. >
SQL>oradebug hanganalyze 3
SQL>oradebug dump systemstate 266

 

示范命令,通过采集系统的Hang信息、系统状态信息等,可以分析系统挂起的原因,间隔采样,可以用于对比变化,辅助分析。

 

 

1.6.2 跟踪

 

1
2
3
4
5
SQL>alter session set events  '10046 trace name context forever,level 12' ;
SQL>shutdown immedaite;          
SQL>startup mount;
SQL>alter session set events  '10046 trace name context forever,level 12' ;
SQL>alter database open;

 

如果在数据库关闭、启动时遇到阻塞、挂起等,可以通过示范命令进行跟踪,获取跟踪文件进行分析。

 

1.6.3 安全停库

 

1
2
3
SQL>alter  system  checkpoint;
SQL>alter  system  archive  log  current;
SQL>shutdown immediate;

 

如果数据库出现异常需要重新启动,可以通过示范命令执行检查点、归档命令,然后尝试以立即方式关闭数据库。

 

1.6.4 强制停库

 

1
2
3
4
SQL>shutdown  abort ;
SQL>startup nomount;
SQL>alter database mount;
SQL>alter database open;

 

如果立即方式不能顺利关闭数据库,强制的关闭方式为abort。示范命令可以通过分步骤的方式执行数据库启动。

1.7连接异常

当连接数据库出现异常,需要检测包括网络连通性,监听器状态等信息。           

1.7.1连通性

1
tnsping tns_name

 

在安装具有Oracle客户端的环境,可以通过tnsping工具测试配置的服务名称,观察网络是否连通以及响应时间。

 

 

1.7.2监听器

 

1
2
3
lsnrctl status LISTENER
lsnrctl status LISTENER_SCAN1
lsnrctl service

 

在数据库服务器上,可以通过lsnrctl工具检查监听状态和服务信息,具体的监听服务名称可以在最后定义修改。

 

1.7.3监听日志检查

1
adrci>showalert

 

在服务器上,可以通过adrci工具,显示各类告警文件,检查监听器日志,可以诊断监听问题。

二.检查日志信息

日志状态检查检查数据库各类日志信息,确认数据库实例、集群等是否出现错误、告警,如存在问题,则需要进一步分析和应对。

 

 

2.1告警日志

 

1
2
3
$ORACLE_BASE/diag/rdbms/<db_name>/$ORACLE_SID/
trace/alert_$ORACLE_SID. log     
SQL>show parameter background_dump_dest

 

根据示例找到告警日志,检查实例是否存在 ORA- 错误提示等。

 

2.2集群日志

11G:

 

1
2
$GRID_HOME/ log /<nodename>/alert<nodename>. log
$GRID_HOME/ log /<nodename>/(crsd、cssd、evmd、ohasd)/

12C:

 

1
2
$GRID_BASE/diag/crs/dg2/crs/trace/alter||nodename. log
$GRID_HOME/ log /<nodename>/(crsd、cssd、evmd、ohasd)/

在相应路径找到RAC集群日志,检查是否存在错误提示信息等。

 

2.3ASM日志

 

1
$GRID_HOME/diag/asm/+asm/<ASM_instance_name>/trace/alert_<instance_name>. log

 

在相应路径找到ASM日志,检查是否存在错误提示信息等。

2.4Trace文件

 

1
2
SQL>SELECT value FROM v$diag_info WHERE name= 'Default Trace File' ;
SQL>show parameter user_dump_dest

 

获取会话产生或全局转储位置,在诊断时需检查最近日期文件内容。

2.5集群状态

1
$crsctl status resource -t

 

确保资源状态显示在线。

2.6 errorstack分析

当遇到 ORA- 错误,而数据库的输出信息不足时,可以采用errorstack进行跟踪,采集更详细的转储信息。

 

1
2
3
4
SQL> alter  system  set events='600 trace name
errorstack forever, level 10';
SQL>alter  system  set events='600 trace name
errorstack off';

 

示例显示了对ORA-600错误设置跟踪,并关闭。

三.重做日志维护

Oracle REDO日志是数据库的核心组件,检查其状态,维护其成员,监控其归档,审核其性能,是DBA的重要工作。

 

3.1REDO组

1
SELECT group#,sequence#,archived,status FROM v$ log ;

 

查询日志组号、序号,是否归档完成和状态信息,如多组日志显示ACTIVE状态,则可能说明数据库存在IO方面的性能问题。

 

3.2REDO成员

SELECT group#,member FROM v$logfile;

查看日志组和成员信息。

3.3增加日志组或成员

 

1
2
3
4
SQL>ALTER DATABASE ADD LOGFILE GROUP 10
( '/oracle/dbs/log1c.rdo' , '/oracle/dbs/log2c.rdo' ) SIZE 500M;
SQL>ALTER DATABASE ADD LOGFILE MEMBER
'/oracle/dbs/log3c.rdo' TO GROUP 10;

 

在日志切换频繁时,可能需要增加日志组或者加大日志大小。

 

3.4切换日志

1
SQL>ALTER SYSTEM SWITCH LOGFILE;

 

切换日志组,开始写入下一个日志组。

 

3.5执行归档

1
SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;

 

对当前日志组执行归档,切换到下一个日志组,

在RAC会对所有实例执行归档,Thread参数指定归档实例。

 

3.6删除日志组或成员

 

1
2
SQL>ALTER DATABASE DROP LOGFILE GROUP 10;
SQL>ALTER DATABASE DROP LOGFILE MEMBER  '/oracle/dbs/redo03.log' ;

 

删除指定日志组或日志成员,注意只能对INACTIVE状态的日志执行删除操作。

 

3.7归档检查

1
SQL>archive  log  list;

 

检查数据库是否处于归档模式。

 

3.8归档状态变更

1
SQL>alter database archivelog | noarchivelog;

 

示例步骤在MOUNT状态改变归档模式,注意启动归档模式之后

务必制订备份归档的日常策略,防止磁盘空间被耗尽。

 

3.9调整归档路径

1
SQL>alter  system  set log_archive_dest_2= 'location=&path'  sid= '&sid' ;

 

如果数据库因归档耗尽空间,可以指定另外的归档路径,以尽快归档日志,恢复数据库运行。

 

四.检查空间信息

确保数据存储空间可用,定期检查表空间余量,进行表空间和文件维护。

 

4.1 空间使用查询

1
SQL> SELECT * FROM sys.sm$ts_used;

 

查看数据库表空间的使用信息。

 

 

1
SQL> SELECT * FROM sys.sm$ts_free;

 

查看数据库表空间的剩余空间。

 

4.2 文件信息

 

1
SELECT tablespace_name,file_name FROM dba_data_files;

   

查看数据库表空间的数据文件信息。

 

4.3 文件维护

 

1
2
alter database datafile  '&path'  resize 900M;
alter tablespace &tbs_name add datafile  '&path'  size 900M;

 

对数据库的表空间容量进行扩容。

五.锁/闩信息检查

Lock/Latch是数据库控制并发的核心手段,检查相关信息可以监控数据库的事务和运行状况。

 

5.1锁信息

 

1
SQL>SELECT sid, type, lmode,  ctime , block FROMv$lock WHERE type not in ( 'MR' , 'AE' );

 

查看锁会话ID,类型,持有时间等,

注意如果block >1,可能意味着阻塞了其他会话。

 

5.2锁故障排查

在数据库出现锁竞争和阻塞时,需要排查和处理锁定,必要时通过Kill阻塞进程消除锁定。

 

5.2.1查询阻塞会话

 

1
SQL>SELECT sid,sql_id,status,blocking_session FROMv$session WHERE sid in(SELECT session_id FROM v$locked_object);

 

查询当前锁事物中阻塞会话与被阻塞会话的sid,sql_id和状态信息

 

5.2.2阻塞SQL文本

1
SQL> SELECT sql_id,sql_text FROMv$sqltext WHERE sql_id= '&sql_id'  ORDER BY piece;

 

通过sql_id查询得到SQL文本,例如通过sql_id查询出阻塞的SQL语句。

 

5.2.3锁阻塞对象信息

 

1
2
SQL>SELECT owner,object_name,object_type FROM dba_objects
WHEREobject_id in (SELECT object_id FROM v$locked_object);

 

通过sid查询阻塞对象的详细信息如对象名称,所属用户等

 

5.2.4杀阻塞会话

1
SQL>altersystem kill session  'sid,serial#' ;

 

在Oracle实例内杀死阻塞的会话进程,其中sid,serial# 为中止会话对应信息,来自v$session。

 

5.2.5杀系统进程

 

1
2
3
4
SQL>SELECTpro.spid,pro.program
FROMv$session ses,v$process pro
WHEREses.sid=&sid and ses.paddr=pro.addr;
#kill -9 spid

 

有时对于活动进程,在系统层面中止更为快速安全,示例找到系统进程号,然后kill中止。

注意:无论何时,需要认真分析,并且避免误杀重要后台进程。

 

5.3闩检查

 

1
2
SELECTname, gets ,misses,immediate_gets,spin_gets
FROMv$latch ORDER BY 2;

 

检查数据库闩的使用情况,misses、SPIN_GETS统计高的,需要关注。

 

5.3.1 闩使用检查

 

 

1
2
3
4
SQL>SELECT addr, gets  FROM v$latch_children
WHEREname= 'cache buffers chains' ;
SQL>SELECT hladdr,file#,dbablk FROM x$bh
WHEREhladdr in (SELECT addr FROM v$latch_children WHERE addr= '&addr' );

 

仅供学习:通过获得Latch的地址,找到该Latch守护的X$BH中相关的Buffer。

六.等待和统计数据

Wait和Statistics数据分别代表了数据库的等待和运行数据,观察这些数据以了解数据库的等待瓶颈和健康程度。

 

6.1等待事件查询

 

1
2
SELECT sid,event,wait_time_micro
FROM v$session_wait ORDER BY 3;

 

通过等待事件和等待时间,了解数据库当前连接会话的等待情况。

注意,如果会话众多,需要限定查询输出行数。

 

6.2TOP10等待事件

 

1
2
3
4
SQL> SELECT * FROM (
SELECTEVENT,TOTAL_WAITS,AVERAGE_WAIT,TIME_WAITED
FROM v$system_event WHEREwait_class<> 'Idle'
ORDER BY time_waited desc)  WHERE rownum<=10;

 

查看当前数据中TOP10等待事件信息,需要分析和关注非空闲的显著等待。

 

6.3会话统计数据

 

1
2
3
SQL>SELECT s.sid,s.statistic#,n.name,s.value
FROM v$sesstat s,v$statname n
WHERE s.statistic#=n.statistic# andn.name= 'redo size'  and sid= '&sid' ;

 

查询数据库会话的统计信息数据,示例查询了Redo的大小,SID需要提供。

 


本文转自 张冲andy 博客园博客,原文链接:http://www.cnblogs.com/andy6/p/5840540.html   ,如需转载请自行联系原作者

相关文章
|
SQL 架构师 关系型数据库
一个奇怪的MySQL慢查询,打懵了一群不懂业务的DBA!
表上的字段既然都有索引,那么按照之前的文章分析,是两个字段都可以走上索引的。既然能够利用索引,表的总大小也就是200M左右,那么为什么形成了慢查呢?我们查看执行计划,去掉limit 后,发现他选择了走全表扫描。
|
运维 安全 程序员
|
数据库管理
db如何快速回滚+恢复,DBA的神技能
技术人如果经常线上操作DB,河边走久了,难免出现纰漏,咋办?找DBA恢复数据呗,即使恢复不了,锅总得有人背呀。
685 0
|
Oracle 关系型数据库 程序员
|
存储 关系型数据库 数据库
|
关系型数据库 数据库管理
|
数据库管理
从删库到跑路,DBA 如何防止被淘汰?
从删库到跑路,DBA 如何防止被淘汰? 之前一段曾刷爆朋友圈的一张图,广大 DBA 玩的不亦乐乎。删库与跑路,一时成为业内的热门话题,并由此派生出很多 “创意删”,“经典跑 “等。
2262 0

热门文章

最新文章