前言
工作这几年,几乎每天都和数据库打交道。最近花了不少时间,将以前积累的一些数据库巡检时常用的脚本,收集整理了一下。分享给小伙伴们,希望对你们在工作或学习中有所帮助。
sqlplus nologconn as sysdba(或者conn 账号/密码)
复制
set linesize 500;select instance_name,host_name,startup_time,status,database_statusfrom v$instance;
复制
select group#,status,type,member from v$logfile;
复制
select tablespace_name,status from dba_tablespaces;
复制
select name,status from v$datafile;
复制
select owner,object_name,object_typefrom dba_objectswhere status!='VALID' and owner!='SYS' and owner!='SYSTEM';
复制
SELECT owner, object_name, object_typeFROM dba_objectsWHERE status= 'INVALID';
复制
select segment_name,status from dba_rollback_segs;
复制
a.检查Oracle初始化文件中相关的参数值
b.检查数据库连接情况,检查系统磁盘空间
c.检查Oracle各个表空间使用情况,检查一些扩展异常的对象,
d.检查system表空间内的内容,检查对象的下一扩展与表空间的最大扩展值,总共七个部分。
select resource_name,max_utilization,initial_allocation, limit_valuefrom v$resource_limit;
复制
select count(*) from v$session;select sid,serial#,username,program,machine,status from v$session;
复制
alter system kill session 'SID,SERIAL#';
复制
[oracle@local ~]$ df -h
复制
select f.tablespace_name,a.total,f.free,round((f.free a.total) * 100) "% Free"from (select tablespace_name, sum(bytes / (1024 * 1024)) totalfrom dba_data_filesgroup by tablespace_name) a, (select tablespace_name, round(sum(bytes / (1024 * 1024))) freefrom dba_free_spacegroup by tablespace_name) fWHERE a.tablespace_name = f.tablespace_name(+)order by "% Free";
复制
select Segment_Name,Segment_Type,TableSpace_Name, (Extents Max_extents) * 100 PercentFrom sys.DBA_SegmentsWhere Max_Extents != 0and (Extents Max_extents) * 100 >= 95order By Percent;
复制
select distinct (owner)from dba_tableswhere tablespace_name = 'SYSTEM'and owner != 'SYS'and owner != 'SYSTEM'unionselect distinct (owner)from dba_indexeswhere tablespace_name = 'SYSTEM'and owner != 'SYS'and owner != 'SYSTEM';
复制
select a.table_name, a.next_extent, a.tablespace_namefrom all_tables a, (select tablespace_name, max(bytes) as big_chunk from dba_free_space group by tablespace_name) fwhere f.tablespace_name = a.tablespace_name and a.next_extent > f.big_chunkunionselect a.index_name, a.next_extent, a.tablespace_namefrom all_indexes a, (select tablespace_name, max(bytes) as big_chunk from dba_free_space group by tablespace_name) fwhere f.tablespace_name = a.tablespace_name and a.next_extent > f.big_chunk;
复制
a.检查数据库备份日志信息;
b.检查backup卷中文件产生的时间;
c.检查oracle用户的email
#cat backup/hotbackup/hotbackup-09-7-22.log|grep –i error
复制
#ls –lt backup/hotbackup
复制
#tail –n 300 var/mail/oracle
复制
set pages 80set lines 120col event for a40select sid, event, p1, p2, p3, WAIT_TIME, SECONDS_IN_WAITfrom v$session_waitwhere event not like 'SQL%'and event not like 'rdbms%';
复制
SELECT SQL_TEXTFROM (SELECT * FROM V$SQLAREA ORDER BY DISK_READS)WHERE ROWNUM <= 5;
复制
SELECT *FROM (SELECT PARSING_USER_ID EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS, SQL_TEXTFROM V$SQLAREAORDER BY DISK_READS DESC)WHERE ROWNUM < 10;
复制
SELECT *FROM (SELECT *FROM V$SYSTEM_EVENTWHERE EVENT NOT LIKE 'SQL%'ORDER BY TOTAL_WAITS DESC)WHERE ROWNUM <= 5;
复制
COLUMN USERNAME FORMAT A12COLUMN OPNAME FORMAT A16COLUMN PROGRESS FORMAT A8SELECT USERNAME, SID, OPNAME, ROUND(SOFAR * 100 / TOTALWORK, 0) || '%' AS PROGRESS, TIME_REMAINING, SQL_TEXTFROM V$SESSION_LONGOPS, V$SQLWHERE TIME_REMAINING <> 0AND SQL_ADDRESS = ADDRESSAND SQL_HASH_VALUE = HASH_VALUE;
复制
SET LINE 240SET VERIFY OFFCOLUMN SID FORMAT 999COLUMN PID FORMAT 999COLUMN S_# FORMAT 999COLUMN USERNAME FORMAT A9 HEADING "ORA USER"COLUMN PROGRAM FORMAT A29COLUMN SQL FORMAT A60COLUMN OSNAME FORMAT A9 HEADING "OS USER"SELECT P.PID PID, S.SID SID, P.SPID SPID, S.USERNAME USERNAME, S.OSUSER OSNAME, P.SERIAL# S_#, P.TERMINAL, P.PROGRAM PROGRAM, P.BACKGROUND, S.STATUS, RTRIM(SUBSTR(A.SQL_TEXT, 1, 80)) SQLFROM V$PROCESS P, V$SESSION S, V$SQLAREA A WHERE P.ADDR = S.PADDR AND S.SQL_ADDRESS = A.ADDRESS(+) AND P.SPID LIKE '%&1%';
复制
SELECT segment_name table_name, COUNT(*) extentsFROM dba_segmentsWHERE owner NOT IN ('SYS', 'SYSTEM')GROUP BY segment_nameHAVING COUNT(*) = (SELECT MAX(COUNT(*)) FROM dba_segments GROUP BY segment_name);
复制
SELECT DF.TABLESPACE_NAME NAME, DF.FILE_NAME "FILE", F.PHYRDS PYR, F.PHYBLKRD PBR, F.PHYWRTS PYW, F.PHYBLKWRT PBW FROM V$FILESTAT F, DBA_DATA_FILES DF WHERE F.FILE# = DF.FILE_ID ORDER BY DF.TABLESPACE_NAME;
复制
SELECT SUBSTR(A.FILE#, 1, 2) "#", SUBSTR(A.NAME, 1, 30) "NAME", A.STATUS, A.BYTES, B.PHYRDS, B.PHYWRTS FROM V$DATAFILE A, V$FILESTAT B WHERE A.FILE# = B.FILE#;
复制
select sid, serial#, username, SCHEMANAME, osuser, MACHINE, terminal, PROGRAM, owner, object_name, object_type, o.object_id from dba_objects o, v$locked_object l, v$session s where o.object_id = l.object_id and s.sid = l.session_id;
复制
alter system kill session '&sid,&serial#';
复制
#kill -9 pid
复制
#top
复制
# free -m
复制
结果中的蓝色部分表示系统总内存,红色部分表示系统使用的内存,黄色部分表示系统剩余内存,当剩余内存低于总内存的10%时视为异常。
# iostat -k 1 3
复制
#uptime
复制
select spid from v$process where addr not in (select paddr from v$session);
复制
select table_name, num_rows, chain_cntFrom dba_tablesWhere owner = 'CTAIS2'And chain_cnt <> 0;
复制
analyze table tablename list chained rows;
复制
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';delete from sb_zsxx where rowid in (select head_rowid from chained_rows where table_name = 'SB_ZSXX');insert into sb_zsxx select * from chained_row where table_name = 'SB_ZSXX';
复制
Select table_name,num_rows,last_analyzed From user_tables where table_name ='DJ_NSRXX'
复制
exec sys.dbms_stats.gather_schema_stats(ownname=>'CTAIS2',cascade => TRUE,degree => 4);
复制
SELECT a.VALUE + b.VALUE logical_reads, c.VALUE phys_reads, round(100 * (1 - c.value (a.value + b.value)), 4) hit_ratioFROM v$sysstat a, v$sysstat b, v$sysstat cWHERE a.NAME = 'db block gets' AND b.NAME = 'consistent gets' AND c.NAME = 'physical reads';
复制
select sum(pinhits) sum(pins) * 100 from v$librarycache;
复制
select name,value from v$sysstat where name like '%sort%';
复制
select name,value from v$sysstat where name in ('redo entries','redo buffer allocation retries');
复制
# grep -i accepted var/log/secure
复制
# grep -i inval var/log/secure &&grep -i failed var/log/secure
复制
alter user USER_NAME identified by PASSWORD;
复制
exec dbms_workload_repository.create_snapshot();
复制
@?/rdbms/admin/awrrpt.sql
复制
——End——
复制
最后修改时间:2021-04-11 15:27:39
文章转载自SQL数据库开发,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
972次阅读
2025-03-17 11:33:53
Oracle DataGuard高可用性解决方案详解
孙莹
411次阅读
2025-03-26 23:27:33
墨天轮个人数说知识点合集
JiekeXu
355次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
345次阅读
2025-04-08 09:12:48
Oracle SQL 执行计划分析与优化指南
Digital Observer
313次阅读
2025-04-01 11:08:44
Oracle 19c RAC更换IP实战,运维必看!
szrsu
289次阅读
2025-04-08 23:57:08
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
288次阅读
2025-03-24 09:42:53
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
282次阅读
2025-03-19 14:41:51
oracle定时任务常用攻略
virvle
281次阅读
2025-03-25 16:05:19
MySQL 有没有类似 Oracle 的索引监控功能?
JiekeXu
260次阅读
2025-03-19 23:43:22