Oracle life _ DBA的一天

D1:活动状态检查
1.1 实例状态
select instance_name,status from v$instance;
查询返回实例名称、状态、正常状态为 Open 。
1.2 会话信息
select sessions_current,session_highwater from v$license 
辅助查询,实例当前会话数和启动最高连接会话数量。
select inst_id,username,count(*) from gv$session group by inst_id,username;
查询数据库连接数以实例和用户组。
1.3参数检查
select value from v$parameter where name='open_cursors 
查询给定参数的设置值,示例参数缺省值为300,通常中等规模数据库 推荐设置为 1000.
1.4 参数修改
alter system set undo_retention=3600  commit='default 900' sid='*' scope=both 
修改给定的初始化参数, RAC 环境需要注意 SID 参数。
1.5 隐含参数
alter  system  set "_optimizer_use_feedback"=false scope = spfile;
为了解决特殊问题,有时需要设置下划线开头的隐含参数
1.6实例异常
当连接数据库实例出现缓慢、挂起等现象,需要进行诊断和分析,甚至可能需要重新启动数据库实例。
  1.6.1 信息采集
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 跟踪
SQL> alter session set events '10046 trace name context foreve,level 12';
SQL > shutdown immediate;
SQL >startup mount;
SQL > alter session set events '10046 trace namecontext forever,level 12 ';
如果在数据库关闭、启动时遇到阻塞、挂起等,可以通过师范命令进行跟踪,获取跟踪文件进行分析;
1.6.3 安全停库
SQL >altersystem checkpoint ;
SQL > alter system aechivelog current;
SQL >shutdown immediate;
如果数据库出现异常需要重新启动,可以通过示范命令执行检查点、归档命令,然后尝试以立即方式关闭数据库。
1.6.4 强制停库
SQL > shutdown abort ;
SQL > startup nomount;
SQL > alter database mount;
SQL > alter database open;
如果立即方式不能顺利关闭数据库,强制的关闭方式为abort  示范命令可以通过分步骤的方式执行数据库启动。
1.7 连接异常
当连接数据库出现异常,需要检测包括网络连通性,监听器状态等信息。
1.7.1连通性
tnsping tns_name
在安装具有ORACLE 客户端的环境,可以通过tnsping  工具测试配置的服务名称,观察网络是否联通以及以及响应时间,
1.7.2 监听器
lsnrctl status listener 
lsnrctl status listener_scan1 
lsnrctl  service 
在数据库服务器上,可以通过lsnrctl  工具检查监听状态和服务信息,具体的监听服务器名称可以在最后定义修改;
1.7.3 监听 日志检查
adrci > show alert 
在服务器上 可以通过 adrci 工具,显示各类告警文件,检查监听器日志,可以诊断监听问题;

D2 日志信息检查
日志信息检查
日志状态检查数据库各类日志信息,确认数据库实例、集群等是否出现错误,告警,如存在问题,需要进一步分析和应对。
2.1 告警日志
$ORACLE_BASE/diag/rdbms//$ORACLE_SID/trace/alert_$ORACLE_SID.log

SQL > show parameter background_dump_dest
根据实例找到告警日志,检查实例是否存在 ORA - 错误提示等。
2.2 集群日志
$GRID_HOME/log//alert.log
$GRID_HOME/log//(cssd  crsd evmd  ohasd)/
在相应路劲找到RAC 集群日志,检查是否存在错误提示信息等。
2.3 ASM 日志
$GRID_HOME/diag /asm/+asm//trace/alert_log
在相应的路劲找到ASM日志,检查是否存在错误提示信息等。

2.4 trace 文件
SQL > select value from v$diag_info where name='Default Trace File';
SQL > show parameter user_dump_dest 
获取会话产生或全局转储位置,在诊断时需要检查最近日期文件内容。

2.5 集群状态
$ crsctl status resource -t 
确保资源状态显示在线
2.6 errorstacl 分析 
当遇到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  错误设置跟踪,并关闭。

D3 重做日志维护
重做日志维护
Oracle redo 日志是数据库的核心组件,检查其状态,维护其成员,监控其归档,审核其性能,是DBA的重要工作。
3.2 REDO 成员
select  group#,member from v$log_file;
查看日志组合成员信息
3.3 增加日志组或成员
SQL > alter database add logfile group 10 ('/u01/app/oracle/oradata/ENMOEDU/log2c.rdo') size 500m; 
SQL > alter databese add logfile member '/u01/app/oracle/oradata/ENMOEDU/log3c.rdo' to group 10;
在日志切换频繁时,可能需要增加日志组或者加大日志
可以查看alert 日志 
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';  
select * from (select b.recid,b.first_time,a.first_time last_time,round((a.first_time-b.first_time)*24*60,2) minates  
from v$log_history a,v$log_history b  
where a.recid=b.recid +1   
order by a.first_time desc) 
where rownum<120
3.4 切换日志
SQL > alter system switch logfile;
切换日志组,开始写入下一组日志;
3.5 执行归档
alter system archivelog current
对当前的日志组执行归档,切换到下一个日志组,
在RAC 会对所有实例执行归档,
3.6 删除日志组或者成员
 SQL > alter database drop logfile group 1;
SQL > alter database drop logfile member '/u01/app/oracle/dbs/redo03.log';
删除指定日志组或日志成员,注意只有对 inactive 状态的日志执行删除操作。
3.7 归档检查
SQL > archive log list;
检查数据库是否处于归档模式。
3.8 归档状态变更;
SQL > alter database archivelog | noarchivelog;
在mount  状态下变更归档模式,之一启动归档模式之后
务必制定备份归档的日常策略,防止磁盘空间被耗尽。
3.8 调整归档路径
SQL >alter system set log_aechive_dest_2='location=&path' sid = '&sid';

D4 空间信息检索
空间信息检索
确保数据存储空间可用,定期检查表空间余量,进行表空间和文件维护。
4.1 空间使用查询
SQL > select * from  sys.sm$ts_used;
SQL > select * from sys.sm$ts_free;
查看数据库表空间的剩余空间。
4.2 文件信息
SQL > select tablespace_name,file_name from dba_data_files;
查看数据表空间的数据文件信息。

4.3 文件维护
alter database datafile '& path‘ resize 900m;
alter tablespace  & tbs_name add datafile & path size 900m;
对数据库的表空间容量进行扩容。

D5 锁/闩信息检查
锁/闩 信息检查
lock / latch  是数据库控制并发的核心手段,检查相关信息可以监控数据库的事务和运行状况。
5.1 锁信息
SQL >select sid,type,lmode,ctime,block from v$lock where type in ('MR','AE');
查看锁会话ID 类型,持有时间等,
注意 如果blick >1 可能意味着阻塞了其他会话。
5.2 锁故障排查
在数据库出现锁竞争和阻塞时,需要排查和处理锁定,必要时通过KILL 阻塞进程消除锁定。
5.2.1 查询阻塞会话
SQL > select sid,sql_id,status,blocking_session from v$session where sid in (select session_id from v$locked_object);
查询当前锁事务中阻塞会话与被阻塞会话的sid ,sql_id 和状态信息
5.2.2 阻塞 SQL 文本
SQL > select sql_id,sql_text from v$sqltext where sql_id = '&sql_id' order by piece;
通过sql_id 查询得到sql w文本,例如通过sql_id 查询出阻塞的SQL 语句
5.2.3 锁阻塞对象信息
SQL > selectowner,object_name,object_type from dba_objects
where object_id in (select object_id from v$locked_object);
通过sql_id 查询阻塞对象的详细信息如对象名称,所属用户等;
5.2.4 杀阻塞会话
SQL >alter system kill session 'sid,serial#';
在oracle 实例内杀死阻塞的会话进程,其中sid ,serial # 为中止会话对应信息,来自v$session 
5.2.5 杀系统进程
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 中止
注意 无论何时 需要认真分析,并且避免误杀重要后台进程。

5.3 闩检查
select name,gets,misses,immediate_gets,spin_gets from v$latch order by 2;
检查数据库闩的使用情况,misses 、spin_gets 统计高的 需要关注。
5.3.1 闩使用检查
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 ;

D6 等待和统计数据
等待和统计数据
wait 和statistics  数据分别代表了数据库的等待和运行数据,观察这些数据以了解数据库的等待瓶颈 和健康程度。
6.1 等待事件查询
select sid,event,wait_time_micro from v$session_wait order by 3;
通过等待时间和等待时间 ,了解数据库当前连接会话的等待情况。
注意 如果会话众多 需要限定查询输出行数。
6.2 TOP 10 等待时间
SQL>select * from (select event,total_waits,average_wait,time_waited from v$system_event where wait_class<>'ldle'
ORDER BY time_waited desc ) where rownum<=10;
查看当前数据中 TOP 10 等待时间,需要分析和关注非空闲的显著等待。
6.3 会话统计数据
SQL > select s.sid,s.statistic#,n.name,s.value from v$sesstat s, v$statname n
where s.statistics#=n.statistics# and n.name='redo size' and sid ='&dis';
查询数据库会话的统计信息数据,示例查询了  redo  的大小,sid 需要提供;
6.4 系统级统计数据
SQL> select * from v$sysstat where name = 'redo size';
查询整个系统的统计数据,示例显示数据库实例启动以来的redo 日志生成量 

D7 对象检查
对象检查
表、索引、分区、约束等是数据库的核心存储对象,其核心信息和对象维护是DBA重要的日常工作。
7.1 表信息数据
SQL > select * from (select owner,table_name,num_rows from dba_tables order by num_rows desc nulls last)
where rownum < 11;
查看表的基本信息数据:属主,表名,记录行数等。
7.2 表结构查询
SQL > set long 12000
SQL > select dbms_metadata.get_ddl('table','&table_name','&user')
from dual;
根据提供的表名用户(需大写) 查询表的表结构信息(建表语句)。
7.3 表统计信息
SQL > select owner,table_name,last_analyzed from dba_statistics where owner='&owner' and table_name='&table_name';
查询给定用户。给定表,查询最后的统计信息分析收集时间。统计信息影响执行计划。当SQL 执行异常是,需要重点分析统计信息;
7.4表统计信息的收集
SQL > exec dbms_stats.gather_table_stats (ownername=>&owner',tablename=>'&table_name');
收集统计信息时一项复杂任务,需要详细设计,示例对给出用户、表名的对象采集统计信息。
7.5 索引信息数据
SQL > select * from (select index_name,table_name,num_rows,leaf_blocks,clustering_factor
from dba_indexes order by 5 desc null last)
where rownum<11;
查询索引的基本信息,示例输出包括叶块数和聚簇因子等 ,如聚簇因子 过高接近行数可能代表索引效率不高。
7.6 索引定义查询
SQL > set log 12000
SQL > select dbms_metadata.get_ddl ('index','&table_name','&user')
from dual;
根据提供的表名和用户名,查询索引的建立语句;
7.7 索引统计信息及收集的方法
SQL> select owner,index_name,last_analyzed from dba_ind_statistics 
where owner='&owner'and table__name='&table_name';
根据给定的用户名,表用户(需大写),查询索引信息,尤其应关注最后分析时间。
SQL > exec dbms_stats.gather_table_stats ('user','index');
收集统计信息时一项复杂任务,实例对给出用户、索引名的对象采集统计信息。
7.8 分区对象检查
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;
查看分区表的基本信息;分区类型,数量。边界值等 ;
7.9 
分区表定义查询
SQL > select dbms_metadata_ddl('table','&part_table_name','user')from dual 
根据给定的分区表名、用户(需大写) 查询表分区的结构信息(建表语句)。
7.10 分区统计信息相关
SQL> select owner,table_namepartition_name,last_analyzed from dba_tab_statistics
where owner = '&owner'and table_name ='&table_name';
SQL >   exec dbms_stats.gather_table_stats('owner','table_name')
查看分区表的统计信息收集时间,以及对分区表进行手工收集统计信息,逐一分区表统计信息收集非常复杂,需要深入研究做出正确策略;示例只是提供简单的收集命令;
7.11 约束信息
SQL>select constrsint_name,constraint_type from dba_constraints
where table_name='&table_name';
查询指定表数据表的约束信息,包括名称和类型;

7.12 失效对象检查
SQL > select owner,object_name,object_type,status from dba_objects where status <>'valid'
order by owner,object_name;
检查数据库中的失效对象信息,通常运行健康的数据库不应有失效的对象。
7.13 闪回查询
7. 13.1 时间闪回
SQL > select * from &table_name as of timestapt to timestamp('2015-5-25 21:02:00','yyyy-mm-dd hh24:mi:ss');
闪回表数据,基于时间点的表数据闪回查询。
7.13.2 SCN  闪回
SQL >select * from table_name as of scn & scn :
闪回表数据,基于SCN 的表数据查询,需要提供SCN 
7.13.3 闪回 drop 
SQL > falshback table & table to before drop rename to & new_table;
闪回删除操作,对已经删除的表进行闪回回复并重命名;

D8 AWR 报告检查
AWR 报告检查
通过AWR 报告交接日常高峰时段数据库各项指标和运行状况。通过对比观察和基线的变化。通过趋势分析持续关注数据库日常运行状态。
8.1 本地AWR
SQL >@?/rdbms/admin/awrrpt
生成本地AWR 报告信息。需要根据提示输入相应的信息。
8.2 指定实例AWR 
SQL> @?/rdbms/admin/awrrpti
8.3 AWR 对比报告
SQL > @?/rdbms/admin/awrddrpt
生成本地AWR 时间段对比报告
8.4 指定实例对比
SQL>@?/rdbms/admin/awrddrpi
生成指定实例AWR时间段对比报告
8.5 AWR信息提取
SQL > @?/rdbms/admin/awrextr
使用awrextr脚本将AWR 性能数据导出,可用与留错或者异地分析。
8.6AWR 信息分析
SQL> @?/rdbms/admin/awrload
通过AWRLOAD 可以将导出的AWR 性能数据导入到其他数据库中。便于集中分析。


D9 SQL报告检查
对TOP SQL进行持续关注和分析,通过SQL报告分析SQL的效率、性能,并做出报告和优化建议等。
9.1 本地SQLReport
SQL> @?/rdbms/admin/awrsqrpt
生成本地SQLReport报告
9.2 指定实例SQLReport
SQL>@?/rdbms/admin/awrsqrpi
生成指定实例SQLRerport报告
9.3 当前会话SQL Monitor Report
SELECT
dbms_sqltune.report_sql_monitor(session_id=> '&sid',
report_level=> 'ALL', TYPE=> '&type') as report
FROM dual;
生成当前会话的SQL Monitor Report
9.4 指定SQLID SQL Monitor Report
SELECT
dbms_sqltune.report_sql_monitor(sql_id=> '&sql_id',
report_level=> 'ALL', TYPE=> '&type') as report FROM dual;
生成指定SQL_ID的SQL Monitor Report
9.5 Explain SQL执行计划
explain plan for
SELECT count(*) FROM user_objects;
SELECT * FROM table(dbms_xplan.display);
示例通过explain plan for方法获取SQL执行计划
9.6 Autotrace SQL执行计划
SQL>set autotrace traceonly explain;
SQL>SELECT count(*) FROM user_objects;
SQL>set autotrace off;
通过SQL*Plus的 autotrace 功能获取SQL执行计划。
9.7 DBMS_XPLAN SQL执行计划
SQL> SELECT * FROM
table(dbms_xplan.display_cursor('&sql_id',null,'advanced');
通过DBMS_XPLAN包获取SQL执行计划,sql_id 需要提供。
9.8 10053事件跟踪
SQL>alter session set tracefile_identifier='10053';
SQL> alter session set events '10053 trace name context forever ,level 1';
SQL>
 session set events '10053 trace name context off';
通过10053事件来查看执行计划和详细的SQL解析过程,trace文件提供了Oracle如何选择执行计划的原因。

9.9 绑定变量
SELECT
dbms_sqltune.extract_bind(bind_data, 1).value_string
FROM wrh$_sqlstat WHERE sql_id ='&sql_id';
SELECT snap_id,name,position,value_string
FROM dba_hist_sqlbind WHERE sql_id= '&sql_id';
查询SQL语句的绑定变量以及历史绑定变量值信息,需要给定SQL_ID信息。

D10 定时任务检查

检查数据库定时任务执行情况,确保后台任务正确执行,尤其应关注统计信息收集等核心任务。
10.1用户定时任务
SQL> SELECTjob,log_user,last_date,next_date,interval,broken,failures
FROM dba_jobs;
查询用户的定时任务(job)信息,确保任务在期望的时间成功执行,这是DBA的重要工作之一。
10.2系统定时任务
SQL> SELECTjob_name,start_date,repeat_interval
FROM dba_scheduler_jobs
查询系统定时调度信息,查询显示了任务名称、初始启动日期以及重复间隔。
10.3系统定时任务-11g
SQL> SELECTclient_name,mean_job_duration
FROM dba_autotask_client;
11g之后增加的字典表,记录每个在7天和30天维护任务的统计信息,查询显示名称和平均执行时间。
10.4启停统计信息任务-10g
SQL>execdbms_scheduler.disable('SYS.GATHER_STATS_JOB');
SQL>execdbms_scheduler.enable('SYS.GATHER_STATS_JOB');
关闭和开启oralce 10g 统计信息自动采集任务
10.5启停统计信息任务-11g
SQL> exec DBMS_AUTO_TASK_ADMIN.DISABLE(client_name=> 'auto
optimizerstats collection', operation => NULL, window_name => NULL);
SQL> execDBMS_AUTO_TASK_ADMIN.ENABLE(client_name => 'auto
optimizer stats collection', operation=> NULL, window_name => NULL);
关闭和开启Oralce 11g 统计信息自动采集任务

数据备份重于一切,日常应检查备份执行情况,并检查备份的有效性,确保备份能够保障数据安全,备份安全加密也应兼顾。

D11 备份
11.1全库exp/imp

$ exp system/managerfile=/full.dmp log=/full.log full=y

$ imp system/managerfile=/full.dmp log=/full.log full=y

将数据库全库导出导入(示例以及以下示例显示的是非Windows环境),

通过提供的用户,执行全库导出。需要注意存储位置和空间。

11.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

将数据库按指定用户导出

11.3表模式exp/imp

$ exp enmo/enmo file=/tables.dmplog=/tables.log tables=table_name

$ imp enmo/enmo file=/tables.dmplog=/tables.log tables=table_name

将数据库按指定表导出

11.4全库模式expdp/impdp

$ expdp system/managerdirectory=svr_dir dumpfile=full.dmp full=y;

$ impdb system/managerdirectory=svr_dir dumpfile=full.dmp full=y;

将数据库全库导出导入, 注意directory是数据库中创建的对象,指定服务器上的存储位置。

11.5用户模式-expdp/impdp

$ expdp system/manager directory=svr_dirschemas=scott

dumpfile=expdp.dmp ;

$ impdp system/managerdirectory=svr_dir schemas=scott

dumpfile=expdp.dmpremap_schema=scott:enmo

remap_tablespace=users:testtbs;

将数据库进行按用户导出和导入示例,impdp示例中,分别重新映射了导入的Schema和表空间。

11.6表模式-expdp/impdp

$ expdp scott/tiger directory=svr_dirtables=emp,dept

dumpfile=tables.dmp;

$ impdp scott/tigerdirectory=svr_dir dumpfile=tables.dmp

tables=emp,dept;

将数据库进行按表导出和导入

11.7物理备份检查

SQL> SELECTbackup_type,start_time,completion_time,block_size

FROM v$backup_set;

检查备份集信息,确保备份有效和及时是DBA的重要工作之一。RMAN的备份信息记录在控制文件中。

11.8自动控制文件备份

RMAN> show all;

RMAN> CONFIGURE CONTROLFILEAUTOBACKUP ON;

控制文件对数据库十分重要,建议启动控制文件的自动备份,示范显示的是通过RMAN的设置。

11.9手动控制文件备份

RMAN> backup currentcontrolfile;

SQL> alter database backupcontrolfile to '/back/control.bak';

通过RMAN或者SQL命令手动备份控制文件,备份的是控制文件的二进制拷贝。

11.10转储控制文件

SQL> alter session set events'immediate trace name controlf level 8';

通过以上命令转储控制文件二进制信息到文本,研究这些信息,可以极大加深对于数据库的了解。

SQL> alter database backupcontrolfile to trace;

通过SQL命令转储控制文件到文本,可以用于重建控制文件。

11.11RMAN备份数据库

RMAN> backup format'/data/backup/%U' database plus archivelog;

对于DBA备份是第一重要的工作,在归档模式下,

执行全库备份可以简化为示例的一个命令(需要根据容量进行分片)。

D12 基本信息检查

基本信息包括版本、组件、补丁集等信息,定期检查数据库信息并登记在案是数据库生命周期管理的重要内容之一。

12.1版本检查

SQL> SELECT * FROM v$version;

查看数据库的版本信息

12.2组件检查

SQL> SELECT * FROM v$option;

查看数据库的组件信息

12.3容量检查

# asmcmd
ASMCMD>lsdg

SELECT group_number,disk_number,
mount_status,total_mb,free_mb
FROM v$asm_disk;

SELECT group_number,name,state,total_mb,free_mb
FROM v$asm_diskgroup;

如果使用了ASM管理,可以通过示例查看ASM磁盘及磁盘组容量等信息。

12.4PSU检查

SQL> SELECT * FROM dba_registry_history;

查询数据库的版本升级历史信息。

# $ORACLE_HOME/OPatch/opatchlsinventory

查询数据库补丁历史信息,是系统级的命令工具。

QL> 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30176559/viewspace-1672863/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30176559/viewspace-1672863/

你可能感兴趣的:(Oracle life _ DBA的一天)