2006-6-11 22:52
闲云
Oracle维护常用脚本
和置顶的一个帖子有类似的地方,但是我觉得自己的脚本写得简洁些:lu2:
[b]更改C:\oracle\ora92\sqlplus\admin\glogin.sql文件[/b]
为了sqlplus连到数据库时,显示实例名和主机名,可在glogin.sql文件中增加以下内容。
[code]
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
[/code]
[b]conn.sql[/b]
[code]
--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
[/code]
[[i] 本帖最后由 闲云 于 2006-6-11 23:18 编辑 [/i]]
2006-6-11 22:56
闲云
[b]wait.sql[/b]
[code]
-- 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';
[/code]
Oracle等待事件是衡量Oracle运行状况的重要依据和指标,分空闲等待事件和非空闲等待事件。空闲事件指Oracle正等待某种工作,在诊断和优化数据库的时候,可以不用过多注意这部分事件。'smon timer'、'pmon timer'、'rdbms ipc message'、'lock manager wait for remote message' 以及与’SQL’匹配的事件,就属于空闲事件。
视图v$session_wait提供最详细的底层信息,它是ORACLE所碰到的所有等待事件的直接记录,它的内容动态变化,可以看到在不同时刻关于不同会话的信息,而且在不同的时间点,它们的值也不尽相同,所以要想直观的查看数据库当前的等待状态,得多次刷新此视图。
2006-6-11 22:58
闲云
[b]sess.sql[/b]
[code]
--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);
[/code]
这个脚本是为方便 alter system kill session 'sid,serial#' ;
的执行,而准备的。:lol
[[i] 本帖最后由 闲云 于 2006-6-12 00:18 编辑 [/i]]
2006-6-11 23:03
闲云
[b]lockwait.sql[/b]
[code]
--lockwait.sql
--获取等待锁资源的用户进程信息
select * from v$lock where request>0;
[/code]
通常在那种ERP的应用服务器和数据库服务器资源占用情况都不大,但用户反映速度慢的时候,多半就是发生了锁等待,这时候就应该找出造成锁等待的进程,并将它kill掉,就行了。
2006-6-11 23:07
闲云
[b]locksrc.sql[/b]
[code]
--locksrc.sql
--获取造成锁等待的用户进程信息
select * from v$lock where block>0 and id1 in(select id1 from v$lock where request>0);
[/code]
[[i] 本帖最后由 闲云 于 2006-7-17 09:36 编辑 [/i]]
2006-6-11 23:10
闲云
[b]getsql.sql[/b]
[code]
--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;
[/code]
2006-6-11 23:12
闲云
[b]pid2sid.sql[/b]
[code]
--pid2sid.sql
--通过操作系统的pid查找sid
select * from v$session
where paddr=(select addr from v$process where spid=&spid);
[/code]
2006-6-11 23:15
闲云
[b]sid2pid.sql[/b]
[code]
--sid2pid.sql
--通过sid查找spid
select * from v$process
where addr = (select paddr from v$session where sid = &sid);
[/code]
2006-6-15 09:54
wangr
厉害,还有吗?
2006-7-8 15:01
永杰
:)闲云mm写的的确更好用:victory:
2006-9-5 11:40
ekinrose
好呀!;P
页:
[1]
Powered by Discuz! Archiver 5.5.0
© 2001-2006 Comsenz Inc.