谁可相欹 发表于 2015-1-16 22:22:01

MYSQL编程:找到并停止Oracle9i里被锁定的会话

MySQL采用双重授权(DualLicensed),它们是GPL和MySQLAB制定的商业许可协议。因为Oracle有外部锁定(的机制),因而有些时分它关于找到并停止Oracle里锁定命据库资本的会话很有效。起首,你必要找到一切的Oracle会话。上面是一段剧本,用来显现Oracle内一切会话的细节。
remsession.sql-displaysallconnectedsessions
setechooff;
settermouton;
setlinesize80;
setpagesize60;
setnewpage0;
select
rpad(c.name||:,11)||rpad(currentlogons=||
(to_number(b.sessions_current)),20)||cumulativelogons=||
rpad(substr(a.value,1,10),10)||highwatermark=||
b.sessions_highwaterInformation
from
v$sysstata,
v$licenseb,
v$databasec
where
a.name=logonscumulative
;
ttitle"dbnameDatabase|UNIX/OracleSessions";
setheadingoff;
selectSessionsondatabase||substr(name,1,8)fromv$database;
setheadingon;
select
substr(a.spid,1,9)pid,
substr(b.sid,1,5)sid,
substr(b.serial#,1,5)ser#,
substr(b.machine,1,6)box,
substr(b.username,1,10)username,
substr(b.osuser,1,8)os_user,
substr(b.program,1,30)program
from
v$sessionb,
v$processa
where
b.paddr=a.addr
and
type=USER
orderby
spid;
ttitleoff;
setheadingoff;
selectTokill,enterSQLPLUS>ALTERSYSTEMKILLSESSION,
||SID,SER#||||;fromdual;
spooloff;

TueMar19page11
dbnameDatabase
UNIX/OracleSessions
PIDSIDSER#BOXUSERNAMEOS_USERPROGRAM
-------------------------------------------------------------------------
623051251MWCCOAPPSTEilersS:ORANTBINF50RUN32.EXE
6233692729MWCCOAPPSTEilersS:ORANTBINR30RBE32.exe
682375661corp-hAPPSapplmgrf45runm@corp-hp1(TNSV1-V3)
682385317corp-hAPPSapplmgr
7791221307corp-hAPPSapplmgr
932211624245A_10APPSlmichelF50RUN32.EXE
933067440corp-hAPPSapplmgr
一旦我们找到了Oracle里一切的会话,那末下一步就是运转一个剧本来检测一切已被锁定的会话。这是由于,Oracle大概没法以充足快的速率检测到一个不举动(dead)的会话,用以避免对数据会见的阻断(blockage)。你能够运转上面的剧本以定位那些控制着锁定资本的会话。
select
sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from
v$locked_objectlo,
dba_objectsao,
v$sessionsess
where
ao.object_id=lo.object_id
and
lo.session_id=s.sid;
TueMar19page1
Locked
objects
OracleOSObject
sidser#userUserNameLOCKED_MODE
-----------------------------------------------------------------------
2156APPSapplmgrFND_CONCURRENT_REQUESTS2
77535APPSapplmgrMTL_SYSTEM_ITEMS2
126161APPSoracleSO_LINES_ALL2
一旦定位了已锁定的会话,你就能够利用上面的剧本来主动地创立ALTERSESSION句法,用来停止你所但愿停止的会话,如许就可以够将锁定的会话从Oracle里扫除失落。
spoolrun_nuke.sql
select
altersystemkillsession||
sess.sid||,||sess.serial#||;
from
v$locked_objectlo,
dba_objectsao,
v$sessionsess
where
ao.object_id=lo.object_id
and
lo.session_id=s.sid;
在创立完run_nuke.sql文件以后,你就能够敏捷地选择那些要被停止的会话并独自地运转它们。


人们常说“成功孕育成功”,这种说法明显非常适合MySQL的情况。MySQL学习教程这个开源数据库号称在全世界有超过110万份的完全安装。

admin 发表于 2015-1-19 09:32:59

现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.

乐观 发表于 2015-1-24 15:46:25

一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。

透明 发表于 2015-2-2 06:06:32

where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

精灵巫婆 发表于 2015-2-7 17:17:50

同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。

愤怒的大鸟 发表于 2015-2-22 20:07:59

从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。

飘灵儿 发表于 2015-3-7 02:01:55

每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。

因胸联盟 发表于 2015-3-14 07:52:57

如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。

变相怪杰 发表于 2015-3-21 01:31:05

比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。
页: [1]
查看完整版本: MYSQL编程:找到并停止Oracle9i里被锁定的会话