Oracle DBA 数据库日常维护手册 常用SQL 脚本
oracle维护常用sql语句(主要)

1、oracle表空间利用率SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间大小(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99')||'%' "使用比(%)",F.TOTAL_BYTES "空闲空间(M)",F.MAX_BYTES "最大块(M)"FROM (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTESFROM SYS.DBA_FREE_SPACEGROUP BY TABLESPACE_NAME) F,(SELECT DD.TABLESPACE_NAME,ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DDGROUP BY DD.TABLESPACE_NAME) DWHERE D.TABLESPACE_NAME = F.TABLESPACE_NAMEORDER BY F.TABLESPACE_NAME;查询结果显示:非系统表空间使用和(M)select sum("已使用空间(M)") "已使用空间(M)和" from(SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间大小(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)" ,TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99')||'%' "使用比(%)",F.TOTAL_BYTES "空闲空间(M)",F.MAX_BYTES "最大块(M)"FROM (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTESFROM SYS.DBA_FREE_SPACEGROUP BY TABLESPACE_NAME) F,(SELECT DD.TABLESPACE_NAME,ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DDGROUP BY DD.TABLESPACE_NAME) DWHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME and F.TABLESPACE_NAME NOT IN ('SYSAUX','USERS','UNDOTBS1','SYSTEM'))2、查询当前用户默认表空间的使用情况select tablespacename,sum(totalContent),sum(usecontent),sum(sparecontent),avg(sparepercent) from(SELECT b.file_id as id,b.tablespace_name as tablespacename,b.bytes as totalContent,(b.bytes-sum(nvl(a.bytes,0))) as usecontent,sum(nvl(a.bytes,0)) as sparecontent,sum(nvl(a.bytes,0))/(b.bytes)*100 as sparepercentFROM dba_free_space a,dba_data_files bWHERE a.file_id=b.file_id and b.tablespace_name = (select default_tablespace from dba_users where username = user)group by b.tablespace_name,b.file_name,b.file_id,b.bytes)GROUP BY tablespacename;3、查询所有用户表使用大小的前三十名select * from (select segment_name,bytes from dba_segmentswhere owner = USER order by bytes desc ) where rownum <= 304、查询单张表的使用情况select segment_name,bytes from dba_segments where segment_name = 'RE_STDEVT_FACT_DAY' and owner = USERRE_STDEVT_FACT_DAY是您要查询的表名称5、计算每个用户占用的磁盘空间select owner,sum(bytes)/1024/1024/1024 "Space(G)"from dba_segmentsgroup by ownerorder by 2;6、计算某个用户占用的磁盘空间select owner,sum(bytes)/1024/1024/1024 "Space(G)"from dba_segmentswhere owner='LIAOJL'group by owner;7、查看表空间的名称及大小(分配大小):select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_sizefrom dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name;8、查看表空间物理文件的名称及大小(分配大小):select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name;9、查看回滚段名称及大小:select segment_name, tablespace_name, r.status,(initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,max_extents, v.curext CurExtentFrom dba_rollback_segs r, v$rollstat vWhere r.segment_id = n(+)order by segment_name;10、如何查看某个回滚段里面,跑的什么事物或者正在执行什么sql语句:select d.sql_text,from v$rollname a,v$transaction b,v$session c,v$sqltext dwhere n=b.xidusn and b.addr=c.taddr and c.sql_address=d.address and c.sql_hash_value=d.hash_value and n==2;(备注:你要看哪个,就把usn=?写成几就行了)查看控制文件:SQL>select * from v$controlfile;查看日志文件:SQL> col member format a50SQL>select * from v$logfile;11、如何查看当前SQL*PLUS用户的sid和serial#:SQL>select sid, serial#, status from v$session where audsid=userenv('sessionid');12、怎样识别IO竞争和负载平衡:SQL>col 文件名 format a35SQL>select 文件名,fs.phyrds 读次数,fs.phywrts 写次数,(fs.readtim/decode(fs.phyrds,0,-1,fs.phyrds)) 读时间,(fs.writetim/decode(fs.phywrts,0,-1,fs.phywrts)) 写时间fromv$datafile df,v$filestat fswhere df.file#=fs.file#order by 13、查看有哪些用户连接select s.osuser os_user_name, decode(sign(48 - command), 1, to_char(command),'Action Code #' || to_char(command) ) action, p.program oracle_process,status session_status,s.paddr ddr, s.terminal terminal, s.program program,ername user_name, s.fixed_table_sequence activity_meter, '' query,0 memory, 0 max_memory, 0 cpu_usage, s.sid, s.serial# serial_numFrom v$session s, v$process p Where s.paddr=p.addr and s.type = 'USER'order by ername, s.osuser解析机器名到ipselect utl_inaddr.get_host_address(s.machine) from v$session snetstat -an |grep 152114、查看数据库的版本Select version FROM Product_component_versionWhere SUBSTR(PRODUCT,1,6)='Oracle';15、捕捉运行很久的SQLselect username,sid,opname,round(sofar*100 / totalwork,0) || '%' as progress,time_remaining,sql_textfrom v$session_longops , v$sqlwhere time_remaining <> 0 and sql_address = address and sql_hash_value = hash_value15、查看数据表的参数信息SELECT partition_name, high_value, high_value_length, tablespace_name,pct_free, pct_used, ini_trans, max_trans, initial_extent,next_extent, min_extent, max_extent, pct_increase, FREELISTS,freelist_groups, LOGGING, BUFFER_POOL, num_rows, blocks,empty_blocks, avg_space, chain_cnt, avg_row_len, sample_size,last_analyzedFROM dba_tab_partitions-- WHERE table_name = 'EMP' AND table_owner = 'USER02'ORDER BY partition_position16、如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待,以下的语句可以查询到谁锁了表,而谁在等待。
Oracle数据库维护常用的SQL代码示例

1、求当前会话的SID,SERIAL#1.SELECT Sid, Serial#2.FROM V$session3.WHERE Audsid = Sys_Context('USERENV', 'SESSIONID');2、查询session的OS进程ID1.SELECT p.Spid "OS Thread", "Name-User", s.Program, s.Sid, s.Serial#,2.s.Osuser, s.Machine3.FROM V$process p, V$session s, V$bgprocess b4.WHERE p.Addr = s.Paddr5.AND p.Addr = b.Paddr6.And (s.sid=&1 or p.spid=&1)7.UNION ALL8.SELECT p.Spid "OS Thread", ername "Name-User", s.Program, s.Sid,9.s.Serial#, s.Osuser, s.Machine10.FROM V$process p, V$session s11.WHERE p.Addr = s.Paddr12.And (s.sid=&1 or p.spid=&1)13.AND ername IS NOT NULL;3、根据sid查看对应连接正在运行的sql1.SELECT /*+ PUSH_SUBQ */mand_Type, Sql_Text, Sharable_Mem, Persistent_Mem, Runtime_Mem, Sorts,3.Version_Count, Loaded_Versions, Open_Versions, Users_Opening, Executions,ers_Executing, Loads, First_Load_Time, Invalidations, Parse_Calls,5.Disk_Reads, Buffer_Gets, Rows_Processed, SYSDATE Start_Time,6.SYSDATE Finish_Time, '>' || Address Sql_Address, 'N' Status7.FROM V$sqlarea8.WHERE Address = (SELECT Sql_Address9.FROM V$session10.WHERE Sid = &sid );4、查找object为哪些进程所用1.SELECT p.Spid, s.Sid, s.Serial# Serial_Num, ername User_Name,2. a.TYPE Object_Type, s.Osuser Os_User_Name, a.Owner,3. a.OBJECT Object_Name,4.Decode(Sign(48 - Command), 1, To_Char(Command), 'Action Code #' || To_Char(Command)) Action,5.p.Program Oracle_Process, s.Terminal Terminal, s.Program Program,6.s.Status Session_Status7.FROM V$session s, V$access a, V$process p8.WHERE s.Paddr = p.Addr9.AND s.TYPE = 'USER'10.AND a.Sid = s.Sid11.AND a.OBJECT = '&obj'12.ORDER BY ername, s.Osuser5、查看有哪些用户连接1.SELECT s.Osuser Os_User_Name,2.Decode(Sign(48 - Command),1,To_Char(Command),3.'Action Code #' || To_Char(Command)) Action,4.p.Program Oracle_Process, Status Session_Status, s.Terminal Terminal,5.s.Program Program, ername User_Name,6.s.Fixed_Table_Sequence Activity_Meter, '' Query, 0 Memory,7.0 Max_Memory, 0 Cpu_Usage, s.Sid, s.Serial# Serial_Num8.FROM V$session s, V$process p9.WHERE s.Paddr = p.Addr10.AND s.TYPE = 'USER'11.ORDER BY ername, s.Osuser6、根据v.sid查看对应连接的资源占用等情况1.SELECT , v.VALUE, n.CLASS, n.Statistic#2.FROM V$statname n, V$sesstat v3.WHERE v.Sid = &sid4.AND v.Statistic# = n.Statistic#5.ORDER BY n.CLASS, n.Statistic#7、查询耗资源的进程(top session)1.SELECT s.Schemaname Schema_Name,2.Decode(Sign(48 - Command),3.1, To_Char(Command), 'Action Code #' || To_Char(Command)) Action,4.Status Session_Status, s.Osuser Os_User_Name, s.Sid, p.Spid,5.s.Serial# Serial_Num, Nvl(ername, '[Oracle process]') User_Name,6.s.Terminal Terminal, s.Program Program, St.VALUE Criteria_Value7.FROM V$sesstat St, V$session s, V$process p8.WHERE St.Sid = s.Sid9.AND St.Statistic# = To_Number('38')10.AND ('ALL' = 'ALL' OR s.Status = 'ALL')11.AND p.Addr = s.Paddr12.ORDER BY St.VALUE DESC, p.Spid ASC, ername ASC, s.Osuser ASC8、查看锁(lock)情况1.SELECT /*+ RULE */2.Ls.Osuser Os_User_Name, ername User_Name,3.Decode(Ls.TYPE,4.'RW', 'Row wait enqueue lock', 'TM', 'DML enqueue lock',5.'TX', 'Transaction enqueue lock', 'UL', 'User supplied lock') Lock_Type,6.o.Object_Name OBJECT,7.Decode(Ls.Lmode,8.1, NULL, 2, 'Row Share', 3, 'Row Exclusive',9.4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive',10.NULL) Lock_Mode,11.o.Owner, Ls.Sid, Ls.Serial# Serial_Num, Ls.Id1, Ls.Id212.FROM Sys.Dba_Objects o,13.(SELECT s.Osuser, ername, l.TYPE, l.Lmode, s.Sid, s.Serial#, l.Id1,14.l.Id215.FROM V$session s, V$lock l16.WHERE s.Sid = l.Sid) Ls17.WHERE o.Object_Id = Ls.Id118.AND o.Owner <> 'SYS'19.ORDER BY o.Owner, o.Object_Name9、查看等待(wait)情况1.SELECT Ws.CLASS, Ws.COUNT COUNT, SUM(Ss.VALUE) Sum_Value2.FROM V$waitstat Ws, V$sysstat Ss3.WHERE IN ('db block gets', 'consistent gets')4.GROUP BY Ws.CLASS, Ws.COUNT10、求process/session的状态1.SELECT p.Pid, p.Spid, s.Program, s.Sid, s.Serial#2.FROM V$process p, V$session s3.WHERE s.Paddr = p.Addr;11、求谁阻塞了某个session(10g)1.SELECT Sid, Username, Event, Blocking_Session, Seconds_In_Wait, Wait_Time2.FROM V$session3.WHERE State IN ('WAITING')4.AND Wait_Class != 'Idle';12、查会话的阻塞1.col user_name format a322.SELECT /*+ rule */3.Lpad(' ', Decode(l.Xidusn, 0, 3, 0)) || l.Oracle_Username User_Name,4.o.Owner, o.Object_Name, s.Sid, s.Serial#5.FROM V$locked_Object l, Dba_Objects o, V$session s6.WHERE l.Object_Id = o.Object_Id7.AND l.Session_Id = s.Sid8.ORDER BY o.Object_Id, Xidusn DESC;9.col username format a1510.col lock_level format a811.col owner format a1812.col object_name format a3213.SELECT /*+ rule */ername,15.Decode(l.TYPE, 'tm', 'table lock', 'tx', 'row lock', NULL) Lock_Level,16.o.Owner, o.Object_Name, s.Sid, s.Serial#17.FROM V$session s, V$lock l, Dba_Objects o18.WHERE l.Sid = s.Sid19.AND l.Id1 = o.Object_Id(+)20.AND ername IS NOT NULL;13、求等待的事件及会话信息/求会话的等待及会话信息1.SELECT Se.Sid, ername, Se.Event, Se.Total_Waits, Se.Time_Waited,2.Se.Average_Wait3.FROM V$session s, V$session_Event Se4.WHERE ername IS NOT NULL5.AND Se.Sid = s.Sid6.AND s.Status = 'ACTIVE'7.AND Se.Event NOT LIKE '%SQL*Net%'8.ORDER BY ername;9.SELECT s.Sid, ername, Sw.Event, Sw.Wait_Time, Sw.State,10.Sw.Seconds_In_Wait11.FROM V$session s, V$session_Wait Sw12.WHERE ername IS NOT NULL13.AND Sw.Sid = s.Sid14.AND Sw.Event NOT LIKE '%SQL*Net%'15.ORDER BY ername;14、求会话等待的file_id/block_id1.col event format a242.col p1text format a123.col p2text format a124.col p3text format a125.SELECT Sid, Event, P1text, P1, P2text, P2, P3text, P36.FROM V$session_Wait7.WHERE Event NOT LIKE '%SQL%'8.AND Event NOT LIKE '%rdbms%'9.AND Event NOT LIKE '%mon%'10.ORDER BY Event;11.SELECT NAME, Wait_Time12.FROM V$latch l13.WHERE EXISTS (SELECT 114.FROM (SELECT Sid, Event, P1text, P1, P2text, P2, P3text, P315.FROM V$session_Wait16.WHERE Event NOT LIKE '%SQL%'17.AND Event NOT LIKE '%rdbms%'18.AND Event NOT LIKE '%mon%') x19.WHERE x.P1 = tch#);15、求会话等待的对象1.col owner format a182.col segment_name format a323.col segment_type format a324.SELECT Owner, Segment_Name, Segment_Type5.FROM Dba_Extents6.WHERE File_Id = &File_Id7.AND &Block_Id BETWEEN Block_Id AND Block_Id + Blocks - 1;16、求出某个进程,并对它进行跟踪1.SELECT s.Sid, s.Serial#2.FROM V$session s, V$process p3.WHERE s.Paddr = p.Addr4.AND p.Spid = &1;5.Exec Dbms_System.Set_Sql_Trace_In_Session(&1, &2, TRUE);6.Exec Dbms_System.Set_Sql_Trace_In_Session(&1, &2, FALSE);17、求当前session的跟踪文件1.SELECT P1.VALUE || '/' || P2.VALUE || '_ora_' || p.Spid || '.ora' Filename2.FROM V$process p, V$session s, V$parameter P1, V$parameter P23.WHERE = 'user_dump_dest'4.AND = 'instance_name'5.AND p.Addr = s.Paddr6.AND s.Audsid = Userenv('SESSIONID')7.AND p.Background IS NULL8.AND Instr(p.Program, 'CJQ') = 0;18、求出锁定的对象1.SELECT Do.Object_Name, Session_Id, Process, Locked_Mode2.FROM V$locked_Object Lo, Dba_Objects Do3.WHERE Lo.Object_Id = Do.Object_Id;来源:网络编辑:联动北方技术论坛。
OracleDBA常用SQL语句

sql>select decode(nvl(position,-1),-1,rbo,1,cbo) from plan_table where id=0;
如何查看系统当前最新的scn号:
sql>select max(ktuxescnw * power(2,32) + ktuxescnb) from x$ktuxe;
from v$session where audsid = userenv(sessionid);
end;
查询当前日期:
sql> select to_char(sysdate,yyyy-mm-dd,hh24:mi:ss) from dual;
查看所有表空间对应的数据文件名:
from sys.sm$ts_avail a,sys.sm$ts_used b,sys.sm$ts_free c
where a.tablespace_name=b.tablespace_name and a.tablespace_name=c.tablespace_name;
column tablespace_name format a18;
from (select p.spid from sys.v_$mystat m,sys.v_$session s,
sys.v_$process p where m.statistic# = 1 and
s.sid = m.sid and p.addr = s.paddr) p,(select value from sys.v_$parameter where name =user_dump_dest) d;
查看表空间物理文件的名称及大小:
sql>select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name;
ORACLE深入第一章ORACLEDBA常用语句和脚本

ORACLE深入第一章ORACLEDBA常用语句和脚本ORACLE深入系列,翻译自Thomas Kyte 的 Expert Oracle Database Architecture我的BLOG一, 常用到的设置环境参数的语句设置SCOTT/TIGER的DEMO运行@ORACLE_HOME/sqlplus/demo/demobld.sql (响应的demodrop.sql.是DROP SCOTT的脚本)做一个登陆用的login.sqldefine _editor=viset serveroutput on size 1000000 使DBMS_OUTPUT有效.set trimspool on SPOOL不会以定长来控制,而是以空格来控制set long 5000 LONG或CLOG 显示的长度set linesize 100set pagesize 9999 每9999行后打印HEADcolumn plan_plus_exp format a80 autotrace后explain plan output的格式column global_name new_value gnameset termout offdefine gname=idlecolumn global_name new_value gnameselect lower(user) || ’@’ || substr( global_name, 1,decode( dot, 0, length(global_name), dot-1) ) global_name from (select global_name, instr(global_name,’.’) dot from global_name );set sqlprompt ’&gname>’set termout onset trimspool on; 去除重定向(spool)输出每行的拖尾空格,缺省为off得到username@dbname的提示符. scott@WWMDB>二, 常用到的DBA脚本Runstats 比较两个作相同事情的方法的优劣点。
oracledba常用sql脚本分类文档

Oracle 正常SQL监控SQL1.监控事例的等待:select event,sum(decode(wait_time,0,0,1)) prev, sum(decode(wait_time,0,1,0)) curr,count(*) from v$session_waitgroup by event order by 4;2.回滚段的争用情况:select name,waits,gets,waits/gets ratio from v$rollstat a,v$rollname b where n=n; 3.监控表空间的I/O比例:select df.tablespace_name name,df.file_name "file",f.phyrds pyr,f.phyblkrd pbr,f.phywrts pyw, f.phyblkwrt pbwfrom v$filestat f,dba_data_files dfwhere f.file#=df.file_id4.监空文件系统的I/O比例:select substr(a.file#,1,2) "#”,substr(,1,30) "name”,a.status,a.bytes,b.phyrds,b.phywrtsfrom v$datafile a,v$filestat bwhere a.file#=b.file#5.在某个用户下找所有的索引:select user_indexes.table_name, user_indexes.index_name,uniqueness, column_namefrom user_ind_columns, user_indexeswhere user_ind_columns.index_name = user_indexes.index_nameand user_ind_columns.table_name = user_indexes.table_nameorder by user_indexes.table_type, user_indexes.table_name,user_indexes.index_name, column_position;6.进程监控:select distinct p.spid unix_process,s.terminal,to_char(s.logon_time,'YYYY/MON/DD HH24:MI') Logon_Time, ernamefrom v$process p, v$session swhere p.addr=s.paddr order by 27.监控SGA中字典缓冲区的命中率select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio", (1-(sum(getmisses)/(sum(gets)+sum(getmisses))))*100 "Hit ratio"from v$rowcachewhere gets+getmisses <>0group by parameter, gets, getmisses;8.监控SGA中共享缓存区的命中率,应该小于1%select sum(pins) "Total Pins", sum(reloads) "Total Reloads",sum(reloads)/sum(pins) *100 libcachefrom v$librarycache;select sum(pinhits-reloads)/sum(pins) "hit radio",sum(reloads)/sum(pins) "reload percent" from v$librarycache;9.显示所有数据库对象的类别和大小select count(name) num_instances ,type ,sum(source_size) source_size , sum(parsed_size)parsed_size ,sum(code_size) code_size ,sum(error_size) error_size, sum(source_size) +sum(parsed_size)+sum(code_size) +sum(error_size) size_required from dba_object_sizegroup by type order by 2;10.监控SGA中重做日志缓存区的命中率,应该小于1%SELECT name, gets, misses, immediate_gets, immediate_misses,Decode(gets,0,0,misses/gets*100) ratio1,Decode(immediate_gets+immediate_misses,0,0,immediate_misses/(immediate_gets+immediate_misses)*100) ratio2FROM v$latch WHERE name IN ('redo allocation', 'redo copy');11.监控内存和硬盘的排序比率,最好使它小于.10,增加sort_area_sizeSELECT name, value FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts (disk)');12.监控当前数据库谁在运行什么SQL语句SELECT osuser, username, sql_text from v$session a, v$sqltext bwhere a.sql_address =b.address order by address, piece;13.监控字典缓冲区SELECT (SUM(PINS - RELOADS)) / SUM(PINS) "LIB CACHE" FROM V$LIBRARYCACHE;SELECT (SUM(GETS - GETMISSES - USAGE - FIXED)) / SUM(GETS) "ROW CACHE" FROM V$ROWCACHE;SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM V$LIBRARYCACHE;后者除以前者,此比率小于1%,接近0%为好。
oracleDBA日常维护攻略

linux中oracle的日常维护命令分类:Oracle Basic Knowledge2009-11-10 10:10 2511人阅读评论(0) 收藏举报oraclelinuxsystemsqldatabase数据库1. 检查Oracle的进程$ ps -ef|grep "ora_"|grep -v greporacle 5998 1 0 11:15:59 ? 0:01 ora_j000_PPRD10oracle 2968 1 0 21:16:57 ? 0:00 ora_q000_PPRD10oracle 2927 1 0 21:16:33 ? 0:00 ora_pmon_PPRD10oracle 2933 1 0 21:16:34 ? 0:07 ora_dbw0_PPRD10oracle 2945 1 0 21:16:34 ? 0:02 ora_mmon_PPRD10oracle 2931 1 0 21:16:33 ? 0:00 ora_mman_PPRD10oracle 2949 1 0 21:16:34 ? 0:00 ora_d000_PPRD10oracle 2970 1 0 21:16:57 ? 0:00 ora_q001_PPRD10oracle 2935 1 0 21:16:34 ? 0:05 ora_lgwr_PPRD10oracle 2951 1 0 21:16:34 ? 0:00 ora_s000_PPRD10oracle 2939 1 0 21:16:34 ? 0:06 ora_smon_PPRD10oracle 2957 1 0 21:16:47 ? 0:00 ora_qmnc_PPRD10oracle 2943 1 0 21:16:34 ? 0:05 ora_cjq0_PPRD10oracle 2947 1 0 21:16:34 ? 0:00 ora_mmnl_PPRD10oracle 2937 1 0 21:16:34 ? 0:18 ora_ckpt_PPRD10oracle 2941 1 0 21:16:34 ? 0:00 ora_reco_PPRD10oracle 2929 1 0 21:16:33 ? 0:00 ora_psp0_PPRD10在检查Oracle的进程命令输出后,输出显示至少应包括以下一些进程:? Oracle写数据文件的进程,输出显示为:“ora_dbw0_ORCL”? Oracle写日志文件的进程,输出显示为:“ora_lgwr_ORCL”? Oracle监听实例状态的进程,输出显示为:“ora_smon_ORCL”? Oracle监听客户端连接进程状态的进程,输出显示为:“ora_pmon_ORCL”? Oracle进行归档的进程,输出显示为:“ora_arc0_ORCL”? Oracle进行检查点的进程,输出显示为:“ora_ckpt_ORCL”? Oracle进行[url=javascript:;]恢复[/url]的进程,输出显示为:“ora_reco_ORCL”2 . 查看数据库的实例:SQL> select instance_name,status,version,database_status from v$instance;INSTANCE_NAME STATUS VERSION DATABASE_STATUS---------------- ------------ ----------------- -----------------PPRD10 OPEN 10.2.0.4.0 ACTIVE其中“STATUS”表示Oracle当前的实例状态,必须为“OPEN”;DATABASE_STATUS”表示Oracle当前数据库的状态,必须为“ACTIVE”。
数据库(Oracle)运维工作内容及常用脚本命令

数据库(Oracle)运维⼯作内容及常⽤脚本命令1、系统资源状况:--内存及CPU资源--linux,solaris,aixvmstat 5--说明:1)观察空闲内存的数量多少,以及空闲内存量是否稳定,如果不稳定就得想办法来解决,怎么解决还得看具体情况,⼀般可以通过调整相关内存参数来解决,各种操作系统输出指标、解释及内存调整参数及⽅法不完全⼀样;2)观察CPU资源利⽤情况,⾸先,需要观察CPU上运⾏的任务数,也就是vmstat输出中位于第⼀列上的指标,如果该指标持续⼤于CPU 核⼼数,应该引起注意;如果该指标持续⼤于CPU核⼼数的两倍,那么应该引起重视;如果持续为CPU核⼼数的多倍,系统⼀般会出现应⽤可感知的现象,必须⽴刻想办法解决。
当然,在观察该指标的同时,还要结合CPU利⽤率的指标情况,如:⽤户使⽤百分⽐,系统使⽤百分⽐,空闲百分⽐等指标,如果空闲百分⽐持续低于20%,应该引起注意;如果持续低于10%,应该引起重视;如果持续为0,系统⼀般会出现应⽤可感知的现象,应该⽴刻想办法解决问题;3)CPU⽤户使⽤百分⽐和系统使⽤百分⽐的⽐例,也是应该注意的。
⼀般来说,在⼀个状态正常的系统上,⽤户使⽤百分⽐应该⽐系统使⽤百分⽐⼤很多,⼏倍到⼗⼏倍甚⾄更⾼,如果系统使⽤百分⽐持续接近⽤户使⽤百分⽐,甚⾄⼤于⽤户使⽤百分⽐,说明系统的状态是不正常的,可能是硬件或者操作系统问题,也可能是应⽤问题。
有关vmstat输出中各指标及解释等,可以参照本⼈博客中相关⽂章:。
--IO状况--linux,solarisiostat -dx 5--aixiostat 5--说明:1)该命令主要⽤来观察系统存储设备的负载和性能状况,⾸先,需要观察系统各存储设备的繁忙程度,如果该繁忙程度指标持续超过80%,那么应该引起注意;如果持续超过90%,应该引起重视;如果持续100%,⼀般会出现应⽤感知的现象,应该⽴刻想办法解决问题; 2)其次,需要注意的是系统上各存储设备的IO能⼒,就是每秒钟各存储设备的输⼊、输出的数据量,这个和具体设备的硬件及配置有关,没有⼀个严格的标准,性能好点的能达到每秒上G,甚⾄⼏个G,差的只能到每秒⼏⼗兆甚⾄⼗⼏兆;3)最后,需要观察存储设备完成每次读写操作耗费的时间,这个也是和具体设备硬件和配置相关的,好的设备可能不到1毫秒,差的能到⼏⼗毫秒甚⾄上百毫秒;iostat的输出,在各种操作系统上的输出和解释也不尽相同,具体可以参照本⼈博客的相关⽂章:。
Oracle DBA 常用技巧、脚本、操作命令

I一些小技巧A)dba常用工具TOAD 功能之一:获取重建表的脚本putty:连接ssh的服务器的工具Xmanager:这个恐怕不用说了,不过使用的机会并不多,主要是做数据库安装和升级的时候Ultraedit:ultraedit的最大优点是打开的文件变化时能够捕捉到变化,并重新更新。
因此经常使用ultraedit来读取netterm的session log文件Cygwin:一个可以在WINDOWS下模拟LIUNX的软件,在这个软件里可以在WINDOWS下使用LINUX的命令,比如dd,awk,gc++等等,直接在windows下用awk调用ass分析systemstate dump是十分有用的,有时候需要写个简单的c程序,也可以用cygwin来调试Wincvs,可能听说的朋友比较少,cvs是著名的文档版本管理软件,用来管理文档的Firefox+scrapboo:知识库收集工具,在网上看到喝什么好的文档,立即拉到知识库里B)制作sql脚本的注意事项01复制脚本时可能会出现全角空格,全角空格会导致脚本执行失败解决方法:用word查找全角空格并替换为半角,全角空格的代码是^u1228802用vi作为sqlplus编辑器,最后不能以“;”分号结尾。
应该以“/”作为结束符号C)表重建的方法首先通过工具取出建表的相关脚本(使用TOAD或者类似的工具)然后将表RENAME(包含所有索引)然后重建表再将数据用INSERT /*+ APPEND */ SELECT...的方法从原表中导入数据。
D)控制文件和数据文件头中的SCN相关信息以及在数据库启动检查中的作用控制文件中存在4种与SCN有关的信息:●system checkpoint SCN●datafile CNT●datafile checkpoint SCN (在数据库启动过程的一系列检查中不起作用)●datafile stop SCN数据文件头中保存了:●datafile CNT●datafile checkpoint SCN (区别于控制文件,被称为start SCN,实际上跟控制文件中的datafile checkpoint SCN始终保持一致)各类SCN信息的作用:system checkpoint SCN:系统检查点SCN,表示整个数据库位于逻辑时钟的哪个时间点上。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle数据库日常维护【版本整理日期:2011/02/26 】版本整理人:1634068400@本文档包含以下内容:1.Oracle数据库日常维护2.Oracle DBA 常用管理脚本3.Oracle DB 常用SQL 语句/******************************************************** (若跳转不成功,请复制到浏览器或联系Q) /item.htm?id=7437120468Metalink Sharing ********************************************************/在Oracle数据库运行期间,DBA应该对数据库的运行日志及表空间的使用情况进行监控,及早发现数据库中存在的问题。
一、Oracle警告日志文件监控Oracle在运行过程中,会在警告日志文件(alert_SID.log)中记录数据库的一些运行情况:l数据库的启动、关闭,启动时的非缺省参数;l数据库的重做日志切换情况,记录每次切换的时间,及如果因为检查点(checkpoint)操作没有执行完成造成不能切换,会记录不能切换的原因;l对数据库进行的某些操作,如创建或删除表空间、增加数据文件;l数据库发生的错误,如表空间不够、出现坏块、数据库内部错误(ORA -600)DBA 应该定期检查日志文件,根据日志中发现的问题及时进行处理问题处理 启动参数不对 检查初始化参数文件因为检查点操作或归档操作没有完成造成重做日志不能切换 如果经常发生这样的情况,可以考虑增加重做日志文件组;想办法提高检查点或归档操作的效率;有人未经授权删除了表空间 检查数据库的安全问题,是否密码太简单;如有必要,撤消某些用户的系统权限出现坏块 检查是否是硬件问题(如磁盘本生有坏块),如果不是,检查是那个数据库对象出现了坏块,对这个对象进行重建表空间不够增加数据文件到相应的表空间 出现ORA-600 根据日志文件的内容查看相应的TRC文件,如果是Oracle 的bug ,要及时打上相应的补丁二、数据库表空间使用情况监控(字典管理表空间)数据库运行了一段时间后,由于不断的在表空间上创建和删除对象,会在表空间上产生大量的碎片,DBA 应该及时了解表空间的碎片和可用空间情况,以决定是否要对碎片进行整理或为表空间增加数据文件。
select tablespace_name,count(*) chunks ,max(bytes/1024/1024) max_chunkfrom dba_free_spacegroup by tablespace_name;上面的SQL列出了数据库中每个表空间的空闲块情况,如下所示:TABLESPACE_NAME CHUNKS MAX_CHUNK-------------------- ---------- ----------INDX 1 57.9921875RBS 3 490.992188RMAN_TS 1 16.515625SYSTEM 1 207.296875TEMP 20 70.8046875TOOLS 1 11.8359375USERS 67 71.3671875其中,CHUNKS列表示表空间中有多少可用的空闲块(每个空闲块是由一些连续的Oracle数据块组成),如果这样的空闲块过多,比如平均到每个数据文件上超过了100个,那么该表空间的碎片状况就比较严重了,可以尝试用以下的SQL命令进行表空间相邻碎片的接合:alter tablespace 表空间名 cascade;此处是有误吧,coalesce;然后再执行查看表空间碎片的SQL语句,看表空间的碎片有没有减少。
如果没有效果,并且表空间的碎片已经严重影响到了数据库的运行,则考虑对该表空间进行重建。
MAX_CHUNK列的结果是表空间上最大的可用块大小,如果该表空间上的对象所需分配的空间(NEXT值)大于可用块的大小的话,就会提示ORA-1652、ORA-1653、ORA-1654的错误信息,DBA应该及时对表空间的空间进行扩充,以避免这些错误发生。
对表空间的扩充对表空间的数据文件大小进行扩展,或向表空间增加数据文件,具体操作见“存储管理”部份。
三、查看数据库的连接情况DBA要定时对数据库的连接情况进行检查,看与数据库建立的会话数目是不是正常,如果建立了过多的连接,会消耗数据库的资源。
同时,对一些“挂死”的连接,可能会需要DBA手工进行清理。
以下的SQL语句列出当前数据库建立的会话情况:select sid,serial#,username,program,machine,statusfrom v$session;输出结果为:SID SERIAL# USERNAME PROGRAM MACHINE STATUS---- ------- ---------- ----------- --------------- --------1 1 ORACLE.EXE WORK3 ACTIVE2 1 ORACLE.EXE WORK3 ACTIVE3 1 ORACLE.EXE WORK3 ACTIVE4 1 ORACLE.EXE WORK3 ACTIVE5 3 ORACLE.EXE WORK3 ACTIVE6 1 ORACLE.EXE WORK3 ACTIVE7 1 ORACLE.EXE WORK3 ACTIVE8 27 SYS SQLPLUS.EXE WORKGROUP\WORK3 ACTIVE11 5 DBSNMP dbsnmp.exe WORKGROUP\WORK3 INACTIVE其中,SID 会话(session)的ID号;SERIAL# 会话的序列号,和SID一起用来唯一标识一个会话;USERNAME 建立该会话的用户名;PROGRAM 这个会话是用什么工具连接到数据库的;STATUS 当前这个会话的状态,ACTIVE表示会话正在执行某些任务,INACTIVE表示当前会话没有执行任何操作;如果DBA要手工断开某个会话,则执行:alter system kill session 'SID,SERIAL#';注意,上例中SID为1到7(USERNAME列为空)的会话,是Oracle的后台进程,不要对这些会话进行任何操作。
四、控制文件的备份在数据库结构发生变化时,如增加了表空间,增加了数据文件或重做日志文件这些操作,都会造成Oracle数据库控制文件的变化,DBA应及进行控制文件的备份,备份方法是:执行SQL语句:alter databasebackup controlfile to '/home/backup/control.bak';或:alter databasebackup controlfile to trace;这样,会在USER_DUMP_DEST(初始化参数文件中指定)目录下生成创建控制文件的SQL命令。
五、检查数据库文件的状态DBA要及时查看数据库中数据文件的状态(如被误删除),根据实际情况决定如何进行处理,检查数据文件的状态的SQL如下:select file_name,statusfrom dba_data_files;如果数据文件的STATUS列不是A V AILABLE,那么就要采取相应的措施,如对该数据文件进行恢复操作,或重建该数据文件所在的表空间。
六、检查数据库定时作业的完成情况如果数据库使用了Oracle的JOB来完成一些定时作业,要对这些JOB的运行情况进行检查:select job,log_user,last_date,failuresfrom dba_jobs;如果FAILURES列是一个大于0的数的话,说明JOB运行失败,要进一步的检查。
七、数据库坏块的处理当Oracle数据库出现坏块时,Oracle会在警告日志文件(alert_SID.log)中记录坏块的信息:ORA-01578: ORACLE data block corrupted (file # 7, block # <BLOCK>) ORA-01110: data file <AFN>: '/oracle1/oradata/V920/oradata/V816/users01.dbf'其中,<AFN>代表坏块所在数据文件的绝对文件号,<BLOCK>代表坏块是数据文件上的第几个数据块出现这种情况时,应该首先检查是否是硬件及操作系统上的故障导致Oracle数据库出现坏块。
在排除了数据库以外的原因后,再对发生坏块的数据库对象进行处理。
1.确定发生坏块的数据库对象SELECT tablespace_name,segment_type,owner,segment_nameFROM dba_extentsWHERE file_id = <AFN>AND <BLOCK>between block_id AND block_id+blocks-1;2.决定修复方法如果发生坏块的对象是一个索引,那么可以直接把索引DROP掉后,再根据表里的记录进行重建;如果发生坏块的表的记录可以根据其它表的记录生成的话,那么可以直接把这个表DROP掉后重建;如果有数据库的备份,则恢复数据库的方法来进行修复;如果表里的记录没有其它办法恢复,那么坏块上的记录就丢失了,只能把表中其它数据块上的记录取出来,然后对这个表进行重建。
3.用Oracle提供的DBMS_REPAIR包标记出坏块exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('<schema>','<tablename>');4.使用Create table as select命令将表中其它块上的记录保存到另一张表上create table corrupt_table_bakasselect * from corrupt_table;5.用DROP TABLE命令删除有坏块的表drop table corrupt_table;6.用alter table rename命令恢复原来的表alter table corrupt_table_bakrename to corrupt_table;7.如果表上存在索引,则要重建表上的索引八、操作系统相关维护DBA要注意对操作系统的监控:l文件系统的空间使用情况(df -k),必要时对Oracle的警告日志及TRC文件进行清理l如果Oracle提供网络服务,检查网络连接是否正常l检查操作系统的资源使用情况是否正常l检查数据库服务器有没有硬件故障,如磁盘、内存报错.数据字典和动态性能视图数据字典是oracle数据库的最重要的组成部分,它提供了数据库的相关系统信息;动态性能视图记载了例程启动以来的相关性能信息。