软讯网络 > 冲浪宝典 > 网络资源 > Oracle维护常用脚本
【标 题】:Oracle维护常用脚本
【关键字】:
Oracle
【来 源】:http://www.cublog.cn/u/21174/showart.php?id=188615
Oracle维护常用脚本
非常棒的oracle维护脚本。本人无意中看到。希望能和大家共享
1.
更改C:\oracle\ora92\sqlplus\admin\glogin.sql文件
为了sqlplus连到数据库时,显示实例名和主机名,可在glogin.sql文件中增加以下内容。
set linesize 1000
COLUMN instance_name new_value gname
COLUMN host_name new_value hname
set termout off
select instance_name from v$instance;
select host_name from v$instance;
set sqlprompt '&gname@&hname>';
set termout on
2.conn.sql
--SQL>@conn sys@sid
--如果在sqlplus中,执行connect,就只显示SQL>,不显示sid和hostname.
set verify off
set termout off
COLUMN instance_name new_value gname
COLUMN host_name new_value hname
connect &1 as sysdba;
select instance_name from v$instance;
select host_name from v$instance;
set sqlprompt '&gname@&hname>';
set termout on
set verify on
3.
wait.sql
-- wait.sql
col event for a40
col p1text for a25
col p2text for a20
col p3text for a20
select * from v$session_wait
where event not like 'SQL%'
and event != 'lock manager wait for remote message'
and event != 'rdbms ipc message'
and event != 'pmon timer'
and event != 'smon timer';
Oracle等待事件是衡量Oracle运行状况的重要依据和指标,分空闲等待事件和非空闲等待事件。空闲事件指Oracle正等待某种工作,在诊断和优化数据库的时候,可以不用过多注意这部分事件。'smon timer'、'pmon timer'、'rdbms ipc message'、'lock manager wait for remote message' 以及与’SQL’匹配的事件,就属于空闲事件。
视图v$session_wait提供最详细的底层信息,它是ORACLE所碰到的所有等待事件的直接记录,它的内容动态变化,可以看到在不同时刻关于不同会话的信息,而且在不同的时间点,它们的值也不尽相同,所以要想直观的查看数据库当前的等待状态,得多次刷新此视图。
4.
sess.sql
--sess.sql
--根据sid查询session
col sid_serial for a20
col username for a20
col osuser for a15
col machine for a30
col terminal for a30
col program for a40
select trim(''''||sid||','||serial#||'''') sid_serial,username,status,osuser,machine,terminal,program,sql_address,PREV_SQL_ADDR,LOGON_TIME,paddr
from v$session
where sid in (&sid);
这个脚本是为方便 alter system kill session 'sid,serial#' ;
的执行,而准备的。
5.lockwait.sql
--lockwait.sql
--获取等待锁资源的用户进程信息
select * from v$lock where request>0;
通常在那种ERP的应用服务器和数据库服务器资源占用情况都不大,但用户反映速度慢的时候,多半就是发生了锁等待,这时候就应该找出造成锁等待的进程,并将它kill掉,就行了。
6.locksrc.sql
--locksrc.sql
--获取造成锁等待的用户进程信息
select * from v$lock where block>0 and id1 in(select id1 from v$lock where request>0);
7.
getsql.sql
--getsql.sql
--通过sid,获取session正在执行的sql语句
SELECT sql_text FROM v$sqltext
WHERE address = (select sql_address from v$session where sid = &sid)
ORDER BY piece;
pid2sid.sql
--pid2sid.sql
--通过操作系统的pid查找sid
select * from v$session
where paddr=(select addr from v$process where spid=&spid);
sid2pid.sql
--sid2pid.sql
--通过sid查找spid
select * from v$process
where addr = (select paddr from v$session where sid = &sid);