在日常oracle维护过程中,我们不止一次的使用一些SQL或者命令。所以这里给出一个总结(不断更新的总结):
监控所有关键业务系统的数据库系统,以ORACLE数据库为例。主要的监控指标应包括配置信息、故障监控和性能监控。主要工作包括:
1、配置信息管理:数据库配置信息包括数据库名,数据库实例名,版本信息,数据库位数,归档方式,文件目录,表空间信息,内存信息,其他SID.ORA的相关参数信息。
2、故障监控:监控数据库关键的运行状态和进程等进行有效的管理,具体的管理功能应包含:(1)服务器实例的可用性,监控数据库实例的状态;(2)空间监控:监控表空间、Redo日志、Archive日志的使用情况;(3)显示和过滤Alert Log中的报警等;(4)数据库空间、表空间、数据文件占用或空闲的空间;磁盘的使用;表和索引的使用;重做日志Redo logs;内存的使用Memory usage;交换区的使用Swap usage。
3、性能监控:监控数据库的性能,鉴别和消除瓶颈以提高数据库系统的整体性能,包括:
(1)由内存容量引起的数据库响应缓慢;
(2) 由于请求Redo日志空间引起的延迟;
(3)锁资源监控,对阻塞了其它会话的锁进行告警,以及可用的锁;
(4)等待某回滚段完成的事务百分比;
(5)监控SGA、Buffer Cache、I/O等相关的性能数据;(6)监控数据库会话的状况。
应及时变更配置信息并定期(每月)编制数据库监控报告并提交相关部门和人员。
检查实例
1.常规检查
编号 参数名称 描述 参数说明
1 文件自动扩展 正确 数据文件使用裸设备时,文件不可自动扩展(使用文件系统的数据文件也建议不设成自动扩展):
Sql>select file_name,tablespace_name,status,autoextensible from dba_data_files where autoextensible<>'NO';
Sql>alter database datafile '****' autoextend off;;
2 默认表空间 正确 不要使用system表空间作为应用用户的默认表空间:
Sql>Select username,account_status,default_tablespace,temporary_tablespace from dba_Users;
Sql>alter user ctais2bb default tablespace ctais2_dat;
3 历史错误信息 没有错误 搜索oracle各实例的alert文件是否有错误代码出现,如:ORA-00600,ORA-00603等错误:
通过以下sql 找到他的路径
Sql>select value from v$parameter where name ='background_dump_dest';
4 剩余表空间 没有空间压力 Sql>Select a.Tablespace_Name, a.Total || 'M' Total_Space, (a.Total - b.Free) || 'M' Used_Space, To_Char((a.Total - b.Free) / a.Total * 100, '99.99') || '%' Pct_Free
From
(Select Tablespace_Name, Sum(Bytes) / 1024 / 1024 Total From Dba_Data_Files Group By tablespace_Name) a,
(Select Tablespace_Name, Sum(Bytes) / 1024 / 1024 Free From Dba_Free_Space Group By Tablespace_Name) b where a.Tablespace_Name = b.Tablespace_Name;
5 归档模式 已归档
查看数据是否启用归档模式,归档目录是否均已挂接,提醒管理员注意归档文件的备份,以防治归档目录空间不足,以sysdba登陆sqlplus:
SQL> archive log list; (sqlplus下执行)
6 备份策略 注 是否备份spfile文件,控制文件,归档日志文件,备份归档日志文件后是否删除
7 失效对象 有(已处理) Sql>Select object_name,object_type,status From Dba_Objects Where status<>'VALID';
如有则编译失效对象,在非业务处理时间,以sysdba登陆sqlplus:
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
8 行链接/迁移 没有行迁移 是否有行链接/行迁移的情况出现:
Sql>select table_name,num_rows,chain_cnt From dba_tables Where owner='CTAIS2' And chain_cnt<>0;
注:含有long raw列的表有行链接是正常的,找到迁移行保存到chained_rows表中,如没有该表执行../rdbms/admin/utlchain.sql
Sql>analyze table tablename list chained rows;
可通过表chained_rows中table_name,head_rowid看出哪些行是迁移行
如:
Sql>create table aa as select a.* from sb_zsxx a,chained_rows b where a.rowid=b.head_rowid and b.table_name ='SB_ZSXX';
sql>delete from sb_zsxx where rowid in (select head_rowid from chained_rows where table_name = 'SB_ZSXX');
sql>insert into sb_zsxx select * from chained_row where table_name = 'SB_ZSXX';
9 job 没有失败的任务 查看job是否broken,是否有failure
Sql>select job,what,last_date,next_date,failures,broken from dba_jobs Where schema_user='CTAIS2';
如有问题建议重建job,如:
exec sys.dbms_job.remove(1);
commit;
exec sys.dbms_job.isubmit(1,'REFRESH_ALL_SNAPSHOT;',SYSDATE+1/1440,'SYSDATE+4/1440');
commit;
10 统计分析 管理员定期做 对于采用Oracle Cost-Based-Optimizer的系统,需要定期对数据对象的统计信息进行采集更新,使优化器可以根据准备的信息作出正确的explain plan。在以下情况更需要进行统计信息的更新:
1、 应用发生变化
2、 大规模数据迁移、历史数据迁出、其他数据的导入等
3、 数据量发生变化
查看表或索引的统计信息是否需更新,如:
Sql>Select table_name,num_rows,last_analyzed From user_tables where table_name ='DJ_NSRXX'
sql>select count(*) from DJ_NSRXX如num_rows和count(*)
如果行数相差很多,则该表需要更新统计信息,建议一周做一次统计信息收集,如:
Sql>exec sys.dbms_stats.gather_schema_stats(ownname=>'CTAIS2',cascade => TRUE,degree => 4);
11 死锁现象 没有发生过死锁 检查数据库在运行过程中是否有死锁现象,找出被锁住的对象及session ID
Sql>select object_name,s.sid,s.serial# From v$locked_object o,v$session s ,dba_objects c Where o.session_id=s.sid And o.object_id=c.object_id;
oracle级kill掉该session:
sql>alter system kill session 'sid,serial#';
操作系统级kill掉session:
#>kill -9 pid
12 失效的索引 没有失效的索引 检查是否有失效的索引:
注:分区表上的索引status为N/A是正常的
Sql>select index_name,table_name,tablespace_name,status From dba_indexes Where owner='CTAIS2' And status<>'VALID';
如有失效索引则对该索引做rebuild,如:
Sql>alter index INDEX_NAME rebuild tablespace TABLESPACE_NAME;
13 失效的约束 没有失效的约束 检查是否有失效的约束:
Sq>Select constraint_type,constraint_name,table_name,r_owner,r_constraint_name, status From dba_constraints Where owner='CTAIS2' And status<>'ENABLED';
如有失效约束则启用,如:
Sql>alter Table TABLE_NAME Enable Constraints CONSTRAINT_NAME;
14 失效的触发器 没有失效的触发器 检查是否有失效的触发器:
Sql>select trigger_name,table_name,status From dba_triggers Where owner='CTAIS2' And status<>'ENABLED';
如有失效触发器则启用,如:
Sql>alter Trigger TRIGGER_NAME Enable;
15 索引空间浪费 管理员定期管理 索引的空间浪费:只有完全空的索引块才进入空闲列表,找到浪费空间的索引,首先分析索引:
Sql>analyze index indexname validate structure;
然后查询index_stats视图:
Sql>select name,lf_rows,lf_rows_len,del_lf_rows,del_lf_rows_len From index_stats;
lf_rows --当前索引值的数量
lf_rows_len --当前索引值的大小(byte)
del_lf_rows --从索引中删除的值的数量
del_lf_rows_len --从索引中删除的值的大小(byte)
如果del_lf_rows_len达到lf_rows_len的20%则需要rebuild索引了
16 定期修改密码 暂时未使用 在综合征管系统系统的数据库上往往存在很多的用户,如:第三方数据库监控系统,电话申报系统等等,初始安装数据库时的演示用户,管理员用户等等。这些用户的密码往往是写定的,被很多人知道,会被别有用心的人利用来攻击系统甚至进行修改数据。
需要修改密码的用户包括:
数据库管理员用户INTERNAL(ORACLE9I版本中已经废弃了),SYS,SYSTEM,
综合征管系统系统的超级用户CTAIS,CTAIS2,CTAIS_MAINT,
外围软件用户,如银税联网,电话申报等用户。
修改方法:
Sql>alter user USER_NAME identified by PASSWORD;
17 缓冲区命中率 正常 .缓冲区命中率:
Sql>select name, 1-(physical_reads/(db_block_gets+consistent_gets)) "hit_ratio" from v$buffer_pool_statistics where db_block_gets+consistent_gets>0;
如果命中率低于90% 则需加大数据库参数db_cache_size
18 共享池命中率 正常 共享池命中率:
Sql>select sum(pinhits)/sum(pins)*100 from v$librarycache;
如低于95%,则需要调整应用程序使用绑定变量,或者调整数据库参数shared pool的大小
19 排序区 正常 排序区:
Sql>select name,value from v$sysstat where name like '%sort%';
如果disk/(memoty+row)的比例过高,则需要调整sort_area_size(workarea_size_policy=false)或pga_aggregate_target(workarea_size_policy=true)
20 日志缓冲区 正常 日志缓冲区:
Sql>select name,value from v$sysstat where name in ('redo entries','redo buffer allocation retries');
如果redo buffer allocation retries/redo entries 超过1% ,则需要增大log_buffer
21:查询在等待的SQL
select sw.username,
sw.sid,
sw.serial#,
sw.event,
sw.sql_hash_value,
sw.sql_id,
sw.last_call_et "times(s)",
sw.p1,
sw.p2,
sw.p3
from v$session sw
where wait_class <> 'Idle'
order by event,last_call_et asc;
2.数据库参数收集
说明:数据库参数的检查,是否有不合理的配置(数据库服务器的硬件配置及各地业务压力各不相同,涉及到进程及内存的参数仅供参考,使用表格下面的语句检查,够用即可):
select Name,Value from v$parameter order by NAME;
1 参数 2 参数值
processes 2400
timed_statistics TRUE
shared_pool_size 自动管理
sga_max_size 64G
large_pool_size 自动管理
java_pool_size 自动管理
control_files /dev/rzs_control01,
/dev/rzs_control02,
/dev/rzs_control03
db_block_size 8192
db_writer_processes 4
db_cache_size 自动管理
compatible 10.2.0.3.0
log_archive_start false
log_archive_dest_1 LOCATION=/arc1
log_archive_max_processes 5
log_buffer 14131200
db_file_multiblock_read_count(生产) 16
fast_start_mttr_target 0
log_checkpoints_to_alert TRUE
dml_locks 15000
transactions 2909
undo_management AUTO
undo_tablespace UNDOTBS1
undo_retention 10800
remote_login_passwordfile EXCLUSIVE
db_domain
instance_name Sdtais1
cursor_space_for_time(生产) false
session_cached_cursors 300
job_queue_processes 10
cursor_sharing(生产) SIMILAR
hash_join_enabled TRUE
background_dump_dest /oracle/admin/sdtais/bdump
user_dump_dest /oracle/admin/sdtais/udump
core_dump_dest /oracle/admin/sdtais/cdump
sort_area_size 65536
open_cursors 4000
star_transformation_enabled FALSE
query_rewrite_enabled true
pga_aggregate_target 9820M
aq_tm_processes 1 ( odc)
fast_start_parallel_rollback LOW 根据统计值调整
--查看引用的外键
Select B.Table_Name, B.Column_Name
From Dba_Constraints a,
Dba_Cons_Columns b
Where A.Constraint_Name = B.Constraint_Name
And A.R_Constraint_Name = :constraint_name;
-- 查看锁住的表并杀死session
Select S.Sid,
S.Serial#,
S.Machine,
O.Object_Name,
L.Oracle_Username,
L.Locked_Mode,
'ALTER SYSTEM KILL SESSION ''' || S.Sid || ', ' || S.Serial# ||
''';' Command
From V$locked_Object l, V$session s, All_Objects o
Where L.Session_Id = S.Sid
And L.Object_Id = O.Object_Id ;
--根据pid查看sql
select sql_text,spid,v$session.program,process,v$sqlarea.ADDRESS,v$session.sid,v$session.SERIAL#,v$sqlarea.HASH_VALUE,v$process.* from
v$sqlarea,v$session,v$process
where v$sqlarea.address=v$session.sql_address
and v$sqlarea.hash_value=v$session.sql_hash_value
and v$session.paddr=v$process.addr
and v$process.spid in (23345);
--查看占用temp情况
SELECT S.sid || ',' || S.serial# sid_serial,
S.username,
T.blocks * TBS.block_size / 1024 / 1024 mb_used,
T.tablespace,
T.sqladdr address,
Q.hash_value,
Q.sql_text
FROM v$sort_usage T, v$session S, v$sqlarea Q, dba_tablespaces TBS
WHERE T.session_addr = S.saddr
AND T.sqladdr = Q.address(+)
AND T.tablespace = TBS.tablespace_name
ORDER BY S.sid;
--查看数据库中对象的大小
select segment_name,
segment_type,
tablespace_name,
sum(bytes) / 1024 / 1024
FROM dba_segments
/*where tablespace_name=''
*/
group by segment_name, segment_type, tablespace_name
order by 4 desc;
--查看表空间使用情况
Select D.Tablespace_Name,
Space "SUM_SPACE(M)",
Space - Nvl(Free_Space, 0) "USED_SPACE(M)",
Round((1 - Nvl(Free_Space, 0) / Space) * 100, 2) "USED_RATE(%)",
Free_Space "FREE_SPACE(M)",
Blocks Used_Blocks
From (Select Tablespace_Name,
Round(Sum(Bytes) / (1024 * 1024), 2) Space,
Sum(Blocks) Blocks
From Dba_Data_Files
Group By Tablespace_Name) d,
(Select Tablespace_Name,
Round(Sum(Bytes) / (1024 * 1024), 2) Free_Space
From Dba_Free_Space
Group By Tablespace_Name) f
Where D.Tablespace_Name = F.Tablespace_Name(+)
Order By D.Tablespace_Name;
--修改表空间的数据文件的大小
alter Database datafile '全路径的数据文件名称' resize 10240M
--给表空间增加数据文件
Alter Tablespace 表空间名称 Add Datafile '全路径的数据文件名称' Size 10240M
--停止一个定时任务
SQL> exec dbms_job.broken(job_id,true)
--启用一个停止的job
SQL> exec dbms_job.broken(job_id,false)
--连入sga
sqlplus -prelim / as sysdba
从Oracle10g开始,sqlplus提供了一个参数选项-prelim,用这个参数,在系统已经hang的时候。我们可以连接到SGA而不是数据库,也就是说没有session被创建。
但是只能在里面用shutdown abort停库,或者使用oradug,可以参考:http://www.linuxidc.com/Linux/2013-12/93911.htm
--删除归档日志
rman>crosscheck archivelog all;
rman>delete expired archivelog;
--删除过期备份
RMAN> report obsolete;
RMAN> delete obsolete;
--杀死外部链接进程
ps -ef |grep oracle |grep LOCAL=NO |grep -v grep |awk '{print $2}' |xargs kill -9
rac维护管理指令
--查看asm磁盘使用情况
select name,total_mb,free_mb from v$asm_diskgroup;
1、查看状态的命令
$ crs_stat -t /crsctl stat res -t --查看crs及所有的service的状态
$ crsctl check crs --用crsctl命令,检查crs相关服务的状态
$ srvctl status nodeapps -n rac01 (rac02) --使用srvctl查看所有节点上的服务是否正常
$ srvctl status database -d rac --使用srvctl查看数据库状态
2、启动和关闭相关服务的命令
$ crs_start–all --启动所有的crs服务
$ crs_stop–all --停止所有的crs服务
$ crsctl start crs --启动crs服务
$ crsctl stop crs --停止crs服务
$ srvctl start nodeapps -n rac01(rac02) --启动某节点上所有的应用
$ srvctl stop nodeapps -n rac01(rac02) --停止某节点上所有的应用
$ srvctl start listener -n rac01( rac02) --启动某个节点的listener
$ srvctl stop listener -n rac01( rac02) --停止某个节点的listener
$ srvctl start instance–d rac–i db01( rac02) --启动某个instance
$ srvctl stop instance–d rac–i db01( rac02) --停止某个instance
$ srvctl start database–d rac --启动数据库
$ srvctl stop database–d rac --停止数据库
查看一个大事物的完成度
SELECT se.sid,
opname,
TRUNC (sofar / totalwork * 100, 2) pct_work,
elapsed_seconds elapsed,
ROUND (elapsed_seconds * (totalwork - sofar) / sofar) remain_time,
sql_text
FROM v$session_longops sl, v$sqlarea sa, v$session se
WHERE sl.sql_hash_value = sa.hash_value
AND sl.sid = se.sid
AND sofar != totalwork
ORDER BY start_time;
持续更新中。
监控所有关键业务系统的数据库系统,以ORACLE数据库为例。主要的监控指标应包括配置信息、故障监控和性能监控。主要工作包括:
1、配置信息管理:数据库配置信息包括数据库名,数据库实例名,版本信息,数据库位数,归档方式,文件目录,表空间信息,内存信息,其他SID.ORA的相关参数信息。
2、故障监控:监控数据库关键的运行状态和进程等进行有效的管理,具体的管理功能应包含:(1)服务器实例的可用性,监控数据库实例的状态;(2)空间监控:监控表空间、Redo日志、Archive日志的使用情况;(3)显示和过滤Alert Log中的报警等;(4)数据库空间、表空间、数据文件占用或空闲的空间;磁盘的使用;表和索引的使用;重做日志Redo logs;内存的使用Memory usage;交换区的使用Swap usage。
3、性能监控:监控数据库的性能,鉴别和消除瓶颈以提高数据库系统的整体性能,包括:
(1)由内存容量引起的数据库响应缓慢;
(2) 由于请求Redo日志空间引起的延迟;
(3)锁资源监控,对阻塞了其它会话的锁进行告警,以及可用的锁;
(4)等待某回滚段完成的事务百分比;
(5)监控SGA、Buffer Cache、I/O等相关的性能数据;(6)监控数据库会话的状况。
应及时变更配置信息并定期(每月)编制数据库监控报告并提交相关部门和人员。
检查实例
1.常规检查
编号 参数名称 描述 参数说明
1 文件自动扩展 正确 数据文件使用裸设备时,文件不可自动扩展(使用文件系统的数据文件也建议不设成自动扩展):
Sql>select file_name,tablespace_name,status,autoextensible from dba_data_files where autoextensible<>'NO';
Sql>alter database datafile '****' autoextend off;;
2 默认表空间 正确 不要使用system表空间作为应用用户的默认表空间:
Sql>Select username,account_status,default_tablespace,temporary_tablespace from dba_Users;
Sql>alter user ctais2bb default tablespace ctais2_dat;
3 历史错误信息 没有错误 搜索oracle各实例的alert文件是否有错误代码出现,如:ORA-00600,ORA-00603等错误:
通过以下sql 找到他的路径
Sql>select value from v$parameter where name ='background_dump_dest';
4 剩余表空间 没有空间压力 Sql>Select a.Tablespace_Name, a.Total || 'M' Total_Space, (a.Total - b.Free) || 'M' Used_Space, To_Char((a.Total - b.Free) / a.Total * 100, '99.99') || '%' Pct_Free
From
(Select Tablespace_Name, Sum(Bytes) / 1024 / 1024 Total From Dba_Data_Files Group By tablespace_Name) a,
(Select Tablespace_Name, Sum(Bytes) / 1024 / 1024 Free From Dba_Free_Space Group By Tablespace_Name) b where a.Tablespace_Name = b.Tablespace_Name;
5 归档模式 已归档
查看数据是否启用归档模式,归档目录是否均已挂接,提醒管理员注意归档文件的备份,以防治归档目录空间不足,以sysdba登陆sqlplus:
SQL> archive log list; (sqlplus下执行)
6 备份策略 注 是否备份spfile文件,控制文件,归档日志文件,备份归档日志文件后是否删除
7 失效对象 有(已处理) Sql>Select object_name,object_type,status From Dba_Objects Where status<>'VALID';
如有则编译失效对象,在非业务处理时间,以sysdba登陆sqlplus:
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
8 行链接/迁移 没有行迁移 是否有行链接/行迁移的情况出现:
Sql>select table_name,num_rows,chain_cnt From dba_tables Where owner='CTAIS2' And chain_cnt<>0;
注:含有long raw列的表有行链接是正常的,找到迁移行保存到chained_rows表中,如没有该表执行../rdbms/admin/utlchain.sql
Sql>analyze table tablename list chained rows;
可通过表chained_rows中table_name,head_rowid看出哪些行是迁移行
如:
Sql>create table aa as select a.* from sb_zsxx a,chained_rows b where a.rowid=b.head_rowid and b.table_name ='SB_ZSXX';
sql>delete from sb_zsxx where rowid in (select head_rowid from chained_rows where table_name = 'SB_ZSXX');
sql>insert into sb_zsxx select * from chained_row where table_name = 'SB_ZSXX';
9 job 没有失败的任务 查看job是否broken,是否有failure
Sql>select job,what,last_date,next_date,failures,broken from dba_jobs Where schema_user='CTAIS2';
如有问题建议重建job,如:
exec sys.dbms_job.remove(1);
commit;
exec sys.dbms_job.isubmit(1,'REFRESH_ALL_SNAPSHOT;',SYSDATE+1/1440,'SYSDATE+4/1440');
commit;
10 统计分析 管理员定期做 对于采用Oracle Cost-Based-Optimizer的系统,需要定期对数据对象的统计信息进行采集更新,使优化器可以根据准备的信息作出正确的explain plan。在以下情况更需要进行统计信息的更新:
1、 应用发生变化
2、 大规模数据迁移、历史数据迁出、其他数据的导入等
3、 数据量发生变化
查看表或索引的统计信息是否需更新,如:
Sql>Select table_name,num_rows,last_analyzed From user_tables where table_name ='DJ_NSRXX'
sql>select count(*) from DJ_NSRXX如num_rows和count(*)
如果行数相差很多,则该表需要更新统计信息,建议一周做一次统计信息收集,如:
Sql>exec sys.dbms_stats.gather_schema_stats(ownname=>'CTAIS2',cascade => TRUE,degree => 4);
11 死锁现象 没有发生过死锁 检查数据库在运行过程中是否有死锁现象,找出被锁住的对象及session ID
Sql>select object_name,s.sid,s.serial# From v$locked_object o,v$session s ,dba_objects c Where o.session_id=s.sid And o.object_id=c.object_id;
oracle级kill掉该session:
sql>alter system kill session 'sid,serial#';
操作系统级kill掉session:
#>kill -9 pid
12 失效的索引 没有失效的索引 检查是否有失效的索引:
注:分区表上的索引status为N/A是正常的
Sql>select index_name,table_name,tablespace_name,status From dba_indexes Where owner='CTAIS2' And status<>'VALID';
如有失效索引则对该索引做rebuild,如:
Sql>alter index INDEX_NAME rebuild tablespace TABLESPACE_NAME;
13 失效的约束 没有失效的约束 检查是否有失效的约束:
Sq>Select constraint_type,constraint_name,table_name,r_owner,r_constraint_name, status From dba_constraints Where owner='CTAIS2' And status<>'ENABLED';
如有失效约束则启用,如:
Sql>alter Table TABLE_NAME Enable Constraints CONSTRAINT_NAME;
14 失效的触发器 没有失效的触发器 检查是否有失效的触发器:
Sql>select trigger_name,table_name,status From dba_triggers Where owner='CTAIS2' And status<>'ENABLED';
如有失效触发器则启用,如:
Sql>alter Trigger TRIGGER_NAME Enable;
15 索引空间浪费 管理员定期管理 索引的空间浪费:只有完全空的索引块才进入空闲列表,找到浪费空间的索引,首先分析索引:
Sql>analyze index indexname validate structure;
然后查询index_stats视图:
Sql>select name,lf_rows,lf_rows_len,del_lf_rows,del_lf_rows_len From index_stats;
lf_rows --当前索引值的数量
lf_rows_len --当前索引值的大小(byte)
del_lf_rows --从索引中删除的值的数量
del_lf_rows_len --从索引中删除的值的大小(byte)
如果del_lf_rows_len达到lf_rows_len的20%则需要rebuild索引了
16 定期修改密码 暂时未使用 在综合征管系统系统的数据库上往往存在很多的用户,如:第三方数据库监控系统,电话申报系统等等,初始安装数据库时的演示用户,管理员用户等等。这些用户的密码往往是写定的,被很多人知道,会被别有用心的人利用来攻击系统甚至进行修改数据。
需要修改密码的用户包括:
数据库管理员用户INTERNAL(ORACLE9I版本中已经废弃了),SYS,SYSTEM,
综合征管系统系统的超级用户CTAIS,CTAIS2,CTAIS_MAINT,
外围软件用户,如银税联网,电话申报等用户。
修改方法:
Sql>alter user USER_NAME identified by PASSWORD;
17 缓冲区命中率 正常 .缓冲区命中率:
Sql>select name, 1-(physical_reads/(db_block_gets+consistent_gets)) "hit_ratio" from v$buffer_pool_statistics where db_block_gets+consistent_gets>0;
如果命中率低于90% 则需加大数据库参数db_cache_size
18 共享池命中率 正常 共享池命中率:
Sql>select sum(pinhits)/sum(pins)*100 from v$librarycache;
如低于95%,则需要调整应用程序使用绑定变量,或者调整数据库参数shared pool的大小
19 排序区 正常 排序区:
Sql>select name,value from v$sysstat where name like '%sort%';
如果disk/(memoty+row)的比例过高,则需要调整sort_area_size(workarea_size_policy=false)或pga_aggregate_target(workarea_size_policy=true)
20 日志缓冲区 正常 日志缓冲区:
Sql>select name,value from v$sysstat where name in ('redo entries','redo buffer allocation retries');
如果redo buffer allocation retries/redo entries 超过1% ,则需要增大log_buffer
21:查询在等待的SQL
select sw.username,
sw.sid,
sw.serial#,
sw.event,
sw.sql_hash_value,
sw.sql_id,
sw.last_call_et "times(s)",
sw.p1,
sw.p2,
sw.p3
from v$session sw
where wait_class <> 'Idle'
order by event,last_call_et asc;
2.数据库参数收集
说明:数据库参数的检查,是否有不合理的配置(数据库服务器的硬件配置及各地业务压力各不相同,涉及到进程及内存的参数仅供参考,使用表格下面的语句检查,够用即可):
select Name,Value from v$parameter order by NAME;
1 参数 2 参数值
processes 2400
timed_statistics TRUE
shared_pool_size 自动管理
sga_max_size 64G
large_pool_size 自动管理
java_pool_size 自动管理
control_files /dev/rzs_control01,
/dev/rzs_control02,
/dev/rzs_control03
db_block_size 8192
db_writer_processes 4
db_cache_size 自动管理
compatible 10.2.0.3.0
log_archive_start false
log_archive_dest_1 LOCATION=/arc1
log_archive_max_processes 5
log_buffer 14131200
db_file_multiblock_read_count(生产) 16
fast_start_mttr_target 0
log_checkpoints_to_alert TRUE
dml_locks 15000
transactions 2909
undo_management AUTO
undo_tablespace UNDOTBS1
undo_retention 10800
remote_login_passwordfile EXCLUSIVE
db_domain
instance_name Sdtais1
cursor_space_for_time(生产) false
session_cached_cursors 300
job_queue_processes 10
cursor_sharing(生产) SIMILAR
hash_join_enabled TRUE
background_dump_dest /oracle/admin/sdtais/bdump
user_dump_dest /oracle/admin/sdtais/udump
core_dump_dest /oracle/admin/sdtais/cdump
sort_area_size 65536
open_cursors 4000
star_transformation_enabled FALSE
query_rewrite_enabled true
pga_aggregate_target 9820M
aq_tm_processes 1 ( odc)
fast_start_parallel_rollback LOW 根据统计值调整
--查看引用的外键
Select B.Table_Name, B.Column_Name
From Dba_Constraints a,
Dba_Cons_Columns b
Where A.Constraint_Name = B.Constraint_Name
And A.R_Constraint_Name = :constraint_name;
-- 查看锁住的表并杀死session
Select S.Sid,
S.Serial#,
S.Machine,
O.Object_Name,
L.Oracle_Username,
L.Locked_Mode,
'ALTER SYSTEM KILL SESSION ''' || S.Sid || ', ' || S.Serial# ||
''';' Command
From V$locked_Object l, V$session s, All_Objects o
Where L.Session_Id = S.Sid
And L.Object_Id = O.Object_Id ;
--根据pid查看sql
select sql_text,spid,v$session.program,process,v$sqlarea.ADDRESS,v$session.sid,v$session.SERIAL#,v$sqlarea.HASH_VALUE,v$process.* from
v$sqlarea,v$session,v$process
where v$sqlarea.address=v$session.sql_address
and v$sqlarea.hash_value=v$session.sql_hash_value
and v$session.paddr=v$process.addr
and v$process.spid in (23345);
--查看占用temp情况
SELECT S.sid || ',' || S.serial# sid_serial,
S.username,
T.blocks * TBS.block_size / 1024 / 1024 mb_used,
T.tablespace,
T.sqladdr address,
Q.hash_value,
Q.sql_text
FROM v$sort_usage T, v$session S, v$sqlarea Q, dba_tablespaces TBS
WHERE T.session_addr = S.saddr
AND T.sqladdr = Q.address(+)
AND T.tablespace = TBS.tablespace_name
ORDER BY S.sid;
--查看数据库中对象的大小
select segment_name,
segment_type,
tablespace_name,
sum(bytes) / 1024 / 1024
FROM dba_segments
/*where tablespace_name=''
*/
group by segment_name, segment_type, tablespace_name
order by 4 desc;
--查看表空间使用情况
Select D.Tablespace_Name,
Space "SUM_SPACE(M)",
Space - Nvl(Free_Space, 0) "USED_SPACE(M)",
Round((1 - Nvl(Free_Space, 0) / Space) * 100, 2) "USED_RATE(%)",
Free_Space "FREE_SPACE(M)",
Blocks Used_Blocks
From (Select Tablespace_Name,
Round(Sum(Bytes) / (1024 * 1024), 2) Space,
Sum(Blocks) Blocks
From Dba_Data_Files
Group By Tablespace_Name) d,
(Select Tablespace_Name,
Round(Sum(Bytes) / (1024 * 1024), 2) Free_Space
From Dba_Free_Space
Group By Tablespace_Name) f
Where D.Tablespace_Name = F.Tablespace_Name(+)
Order By D.Tablespace_Name;
--修改表空间的数据文件的大小
alter Database datafile '全路径的数据文件名称' resize 10240M
--给表空间增加数据文件
Alter Tablespace 表空间名称 Add Datafile '全路径的数据文件名称' Size 10240M
--停止一个定时任务
SQL> exec dbms_job.broken(job_id,true)
--启用一个停止的job
SQL> exec dbms_job.broken(job_id,false)
--连入sga
sqlplus -prelim / as sysdba
从Oracle10g开始,sqlplus提供了一个参数选项-prelim,用这个参数,在系统已经hang的时候。我们可以连接到SGA而不是数据库,也就是说没有session被创建。
但是只能在里面用shutdown abort停库,或者使用oradug,可以参考:http://www.linuxidc.com/Linux/2013-12/93911.htm
--删除归档日志
rman>crosscheck archivelog all;
rman>delete expired archivelog;
--删除过期备份
RMAN> report obsolete;
RMAN> delete obsolete;
--杀死外部链接进程
ps -ef |grep oracle |grep LOCAL=NO |grep -v grep |awk '{print $2}' |xargs kill -9
rac维护管理指令
--查看asm磁盘使用情况
select name,total_mb,free_mb from v$asm_diskgroup;
1、查看状态的命令
$ crs_stat -t /crsctl stat res -t --查看crs及所有的service的状态
$ crsctl check crs --用crsctl命令,检查crs相关服务的状态
$ srvctl status nodeapps -n rac01 (rac02) --使用srvctl查看所有节点上的服务是否正常
$ srvctl status database -d rac --使用srvctl查看数据库状态
2、启动和关闭相关服务的命令
$ crs_start–all --启动所有的crs服务
$ crs_stop–all --停止所有的crs服务
$ crsctl start crs --启动crs服务
$ crsctl stop crs --停止crs服务
$ srvctl start nodeapps -n rac01(rac02) --启动某节点上所有的应用
$ srvctl stop nodeapps -n rac01(rac02) --停止某节点上所有的应用
$ srvctl start listener -n rac01( rac02) --启动某个节点的listener
$ srvctl stop listener -n rac01( rac02) --停止某个节点的listener
$ srvctl start instance–d rac–i db01( rac02) --启动某个instance
$ srvctl stop instance–d rac–i db01( rac02) --停止某个instance
$ srvctl start database–d rac --启动数据库
$ srvctl stop database–d rac --停止数据库
查看一个大事物的完成度
SELECT se.sid,
opname,
TRUNC (sofar / totalwork * 100, 2) pct_work,
elapsed_seconds elapsed,
ROUND (elapsed_seconds * (totalwork - sofar) / sofar) remain_time,
sql_text
FROM v$session_longops sl, v$sqlarea sa, v$session se
WHERE sl.sql_hash_value = sa.hash_value
AND sl.sid = se.sid
AND sofar != totalwork
ORDER BY start_time;
持续更新中。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28869493/viewspace-2137416/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28869493/viewspace-2137416/