PLSQL执⾏sql的⼏种⽅法
plsql很⽅便我们执⾏sql。下⾯就简单介绍我常⽤的⼏种(当然每次svn的分⽀也可以ant脚本⾃动执⾏某个⽂件下的所以sql⽂件)⾸先打开plsq的命令窗⼝
1)执⾏sql⽂件(可以把需要执⾏的sql放⼀个⽂件中)
输⼊ @''
在单引号中输⼊sql⽂件的路径既可,⽐如D:\db下的acle.sql⽂件,见下图(sql⽂件内容是select * from system_menu r u_name='销售订单' ;)
2)导⼊dmp⽂件。导⼊dmp⽂件前先删除对应的user(下⾯以test_user为例)
plsql12配置数据库连接drop user test_user cascade;
$ impdp directory=data_pump_dir schemas=test_user dumpfile=date.DMP
REMAP_SCHEMA=test_user:test_userTABLE_EXISTS_ACTION=replace logfile=imp.log;
alter user test_user identified by 123456;
3)当需要重新从正式版到数据到测试版时,我们需要重启测试版服务器或者kill掉应⽤程序服务器(⽐如tomcat)的session连接v$session 这张表可以查到连接 oracle 数据库的应⽤程序基本信息。因此可以通过该表来kill掉相应程序的session
如果你想kill到连接到⽤户 test_user ,可以执⾏下⾯的sql: select * from v$session r where r.USERNAME=‘test_user’ ;
然后kill对应的session'就⾏了,参考下⾯的截图:
⽐如你要kill 第⼀条;就执⾏下⾯的sql : alter system kill session '21,77' ; //因为sid, serial#.这2列很唯⼀的。
下⾯补充⼀些连接oracle的应⽤程序信息和oracle 操作 session 情况。
1.查到连接 oracle 数据库的应⽤程序基本信息。
select sid, serial#,
username, --连接⽤户名
program, --应⽤程序名
machine, --机器名
osuser, --操作系统⽤户
logon_time --登录时间
from v$session;
2.如何查看session级的等待事件?
当我们对数据库的性能进⾏调整时,⼀个最重要的参考指标就是系统等待事件。$system_event,v$session_event,v$session_wait这三
个视图⾥记录的就是系统级和session级的等待事件,通过查询这些视图你可以发现数据库的⼀些操作到底在等待什么?是磁盘I/O,缓冲区
忙,还是插锁等等。
通过如下sql你可以查询你的每个应⽤程序到底在等待什么,从⽽针对这些信息对数据库的性能进⾏调整。
Select s.username,s.program,s.status,se.al_al_timeouts,se.time_waited,se.average_wait
from v$session s, v$session_event se
Where s.sid=se.sid And se.event not like 'SQl*Net%' And s.status ='ACTIVE'And s.username is not null
SELECT A.OWNER,A.OBJECT_NAME,B.XIDUSN,B.XIDSLOT,B.XIDSQN,B.SESSION_ID,B.ORACLE_USERNAME,
B.OS_USER_NAME,B.PROCESS, B.LOCKED_MODE,
C.MACHINE,C.STATUS,C.SERVER,C.SID,C.SERIAL#,C.PROGRAM
FROM ALL_OBJECTS A,V$LOCKED_OBJECT B,SYS.GV_$SESSION C
WHERE ( A.OBJECT_ID = B.OBJECT_ID ) AND (B.PROCESS = C.PROCESS ) ORDER BY 1,2
释放session Sql:
alter system killsession'sid,serial#'
alter systemkillsession'379,21132'
alter systemkillsession'374,6938'
4.查看占⽤系统io较⼤的session
SELECT
se.sid,se.serial#,pr.SPID,se.username,se.inal,se.program,se.MODULE,se.sql_address,st.event,st.p1text,si.physical_read FROM v$session se, v$session_wait st,v$sess_io si,v$process pr
WHERE st.sid=se.sid AND st.sid=si.sid AND se.PADDR=pr.ADDR AND se.sid>6 AND st.wait_time=0 AND st.event NOT
LIKE '%SQL%' ORDER BY physical_reads DESC
5.出耗cpu较多的session
select a.sid,spid,status,substr(a.program,1,40) inal,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where c.statisti=12 and c.sid=a.sid and a.paddr=b.addr order by value desc
6.另外oracle是否运⾏可以⽤sql语句查出:
select status from v$instance;
其中,status可能返回三种值:open(数据库打开),mount(数据库已经加载,但还没有打开),started(数据库进程已经启动,但是还没
有加载),这个数据字典可以在数据库没有打开的情况下查询,但是需要⽤sys⽤户执⾏。
反应时间,请求数需要具体说明到底是那个参数。你可以参考字典;v$status,v$session(看当前有多少个连接⽤户等).
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论