??xml version="1.0" encoding="utf-8" standalone="yes"?>
错误分析Q利用Google搜烦扑ֈ了原因,
oracle是大写敏感的,如果定义表名U或列名U的时候没有用引号引v来的?oracle会把他们全部转换为大写,q时׃出现错误了?br />
解决ҎQ将语句改ؓ"Select * from "QueryHistory" 或是语句全部大写?br />
q个错误?drop 用户时生的Q用h?drop。既然如此,d该用户删除其中的procedureQ结果也出现了该错误。有个帖子介l说q是 Oracle 的一?bugQNo. 2422726Q?/span>Qƈl出了解军_法。这里记录一下:
1. 错误现象Q?br />
SQL> show user
USER ?SYS"
SQL> select * from v$version;
BANNER
------------------------------------------------------------
Oracle8i Release 8.1.6.0.0 - Production
PL/SQL Release 8.1.6.0.0 - Production
CORE 8.1.6.0.0 Production
TNS for 32-bit Windows: Version 8.1.6.0.0 - Production
NLSRTL Version 3.4.1.0.0 - Production
SQL> drop user hos_kf_hl cascade;
drop user hos_kf_hl cascade
*
ERROR 位于W?1 ?
ORA-00600: 内部错误代码Q自变量: [16201], [], [], [], [], [], [], []
SQL> conn hos_kf_hl/test@qmyb
已连接?br />
SQL> drop procedure kill_session;
drop procedure kill_session
*
ERROR 位于W?1 ?
ORA-00600: 内部错误代码Q自变量: [16201], [], [], [], [], [], [], []
2. 查询视图 procedure$Q确认该错误Q?br />
SQL> select obj#,owner#,type# from sys.obj$ where name ='KILL_SESSION' and owner#=96;
OBJ# OWNER# TYPE#
---------- ---------- ----------
55491 96 7
SQL> select * from procedure$ where obj# = 55491;
OBJ# AUDIT$ STORAGESIZE OPTIONS
---------- -------------------------------------- ----------- ----------
3. 解决
SQL> insert into procedure$ values (55491, '----------------', null, 2);
1 row inserted
SQL> commit;
Commit complete
SQL> drop procedure kill_session;
q程已丢弃?br />
SQL> conn sys/password@s177 as sysdba
已连接?br />
SQL> drop user hos_kf_hl cascade;
用户已丢?/span>
2.通过囑Ş界面讄?br />
打开Net ManagerQ如下图?#8220;L”Ҏ现在新的机器名,OK啦?/p>
1.q个是查找最q标志ؓ1Q且有多条记录的数据?nbsp;(q个sql查找错误比较有用?
select a.c_ply_no ,count(1) from web_ply_base a
where a.c_latest_mrk='1'
group by a.c_ply_no
having count(1)>1
背景count(*) count(1) 两者比较,主要q是要count(1)所相对应的数据字段Q?nbsp;
如果你的数据表没有主键,那么count(1)比count(*)?nbsp;
如果有主键的话,那主键(联合主键Q作为count的条件也比count(*)要快
如果你的表只有一个字D늚话那count(*)是最快的?br />
如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很的?nbsp;
因ؓcount(*),自动会优化指定到那一个字Dc所以没必要去count(?)Q用count(*),sql会帮你完成优化的.
其他语句Qselect * from 表名 where 条g order by 字段?asc\desc // asc 升序 desc 降序
ORACLE的封锁策略:
1、只有当修改ӞOracle在行U上锁定数据Q不要把锁定上升到块或表U?nbsp;
2、Oracle决不会ؓd而锁定数据,单读取不能在数据行上讄锁定?nbsp;
3、数据的写入器不会阻塞数据读取器?nbsp;
4、只有当另一个数据写入器已经锁定了某行数据后Q才d其他人对该行数据的写入。数据的d器决不会d数据的写入器?/p>
-------------------------------------------------------------------------
Oracleq发处理机制的简单看法?a target="_blank">http://www.51testing.com/html/97/n-131297.html
转蝲内容如下Q?/p>
在Oracle开发过E中Q如果你只是独立地测试你的应用,然后部vQƈ交给数十个ƈ发用户用,很有可能痛苦地遭遇原先未能到的ƈ发问题。例如,2个用户同时修Ҏ张订单,首先他们会查询这张订单存在不存在Q如果存在,那么修改它的状态。在q发操作中,用户1会很奇怪的发现他的修改丢失了。当Ӟ除此之外Q在未能够很好的处理q发问题可能遭遇的情况还有:
◆破坏数据的完整性?/p>
◆随着用户数的增多Q应用的q行速度减慢?/p>
◆不能很好地扩羃应用来支持大量用戗?/p>
册些问题。首先要引入的是ORACLE的锁机制。数据库使用锁(lockQ来保证Ml定时刻最多只有一个事务在修改l定的一D|据。实质上Ԍ正是锁机制才使ƈ发控制成为可能。对ORACLE的锁机制可以查看ORACLE官方文档介绍。以下是对ORACLE锁的一Ҏȝ?/p>
Oracle只在修改时才Ҏ据加行锁。正常情况下不会升到块U锁或表U锁Q不q两D|交期间的一D很短的旉内除外,q是一个不常见的操作)?/p>
◆如果只是读数据QOraclel不会对数据锁定。不会因为简单的L作在数据行上锁定?/p>
◆写入器QwriterQ不会阻塞读取器QreaderQ。换U说法:读(readQ不会被写(writeQ阻塞。这一点几乎与其他所有数据库都不一栗在其他数据库中Q读往往会被写阻塞。尽听上去q个Ҏ似乎很不错Q一般情况下实如此Q,但是Q如果你没有充分理解q个思想Q而且想通过应用逻辑对应用施加完整性约束,极有可能做得不寏V?/p>
◆写入器惛_某行数据Q但另一个写入器已经锁定了这行数据,此时该写入器才会被阻塞。读取器l对不会d写入器?/p>
开发h员要可能的考虑以上因素。而且q要意识到这些事ORACLE独有的。针对其他数据库Q在锁的应用上略有不同?/p>
以DB2Z
1.Oracle通过h意向锁的多粒度封锁机制进行ƈ发控Ӟ保证数据的一致性。其DML锁(数据锁)分ؓ两个层次Q粒度)Q即表和行U。通常的DML操作在表U获得的只是意向锁(RS或RXQ,其真正的锁_度q是在行U;DB2也是通过h意向锁的多粒度封锁机制进行ƈ发控Ӟ保证数据的一致性?/p>
其DML锁(数据锁)分ؓ两个层次Q粒度)Q即表和行U。通常的DML操作在表U获得的只是意向锁(ISQSIX或IXQ,其真正的锁_度也是在行U;另外Q在Oracle数据库中Q单U地L据(SELECTQƈ不加锁,q些都提高了pȝ的ƈ发程度,Oracle的是能够“?#8221;到数据,q且能够快速的q行数据d。而DB2的锁的是“M致?#8221;Q进行读数据QSELECTQ时会根据不同的隔离U别QRRQRSQCSQ而分别加SQISQIS锁,只有在用UR隔离U别时才不加锁。从而保证不同应用程序和用户d的数据是一致的?/p>
2. 在支持高q发度的同时QDB2和Oracle寚w的操U|制有所不同QOracle利用意向锁及数据行上加锁标志位等设计技巧,减小了Oraclel护行锁的开销Q其在数据库ƈ发控制方面有着一定的优势。而DB2中对每个锁会在锁的内存(locklistQ中甌分配一定字节的内存I间Q具体是X?4字节内存QS?2字节内存Q注QDB2 V8之前是X?2字节内存而S?6字节内存Q?/p>
3. Oracle数据库中不存在锁升Q而DB2数据库中当数据库表中行锁的使用过locklist*maxlocks会发生锁升?/p>
4. 在Oracle中当一个session对表q行insertQupdateQdelete时候,另外一个session仍然可以从Orace回滚D|者还原表I间中读取该表的前映象(before imageQ; 而在DB2中当一个session对表q行insertQupdateQdelete时候,另外一个session仍然在读取该表数据时候会处于lock wait状态,除非使用UR隔离U别可以dW一个session的未提交的|所以Oracle同一时刻不同的session有读不一致的现象Q而DB2在同一时刻所有的session都是“M?#8221;的?/p>
posted @ 2009-11-28 17:50 断点 阅读(24) | 评论 (0)
SQL> create table t(a number);
Table created.
1、现在,我们建立一个唯一索引来看看:
SQL> create unique index idx_t on t(a);
Index created.
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='T';
no rows selected
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';
INDEX_NAME INDEX_TYPE TABLESPACE_NAME TABLE_TYPE STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDX_T NORMAL DATA_DYNAMIC TABLE VALID
SQL> insert into t values(1);
1 row created.
SQL> commit;
Commit complete.
2、将索引手工修改为unusable状态(模拟发生索引失效的情况)Q?/span>
SQL> alter index idx_t unusable;
Index altered.
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';
INDEX_NAME INDEX_TYPE TABLESPACE_NAME TABLE_TYPE STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDX_T NORMAL DATA_DYNAMIC TABLE UNUSABLE
我们看到q是Q已l不能正常往表中插入数据Q?br />
SQL> insert into t values(2);
insert into t values(2)
*
ERROR at line 1:
ORA-01502: index 'MISC.IDX_T' or partition of sUCh index is in unusable state
3、首先,我们通过重徏索引Qrebuild indexQ的Ҏ来解决问题:
SQL> alter index idx_t rebuild;
Index altered.
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';
INDEX_NAME INDEX_TYPE TABLESPACE_NAME TABLE_TYPE STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDX_T NORMAL DATA_DYNAMIC TABLE VALID
SQL> insert into t values(2);
1 row created.
SQL> commit;
Commit complete.
SQL>
4、现在我们再ơ模拟烦引失?unusable状?Q?/span>
SQL> alter index idx_t unusable;
Index altered.
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';
INDEX_NAME INDEX_TYPE TABLESPACE_NAME TABLE_TYPE STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDX_T NORMAL DATA_DYNAMIC TABLE UNUSABLE
SQL> insert into t values(3);
insert into t values(3)
*
ERROR at line 1:
ORA-01502: index 'MISC.IDX_T' or partition of such index is in unusable state
5、然后,看看是否可以通过讄参数skip_unusable_indexes=true来解决问题:
SQL> alter session set skip_unusable_indexes=true;
Session altered.
SQL> insert into t values(3);
insert into t values(3)
*
ERROR at line 1:
ORA-01502: index 'MISC.IDX_T' or partition of such index is in unusable state
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';
INDEX_NAME INDEX_TYPE TABLESPACE_NAME TABLE_TYPE STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDX_T NORMAL DATA_DYNAMIC TABLE UNUSABLE
SQL> alter index idx_t rebuild;
Index altered.
SQL> select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='IDX_T';
INDEX_NAME INDEX_TYPE TABLESPACE_NAME TABLE_TYPE STATUS
------------------------------ --------------------------- ------------------------------ ----------- --------
IDX_T NORMAL DATA_DYNAMIC TABLE VALID
SQL> insert into t values(3);
1 row created.
SQL> commit;
Commit complete.
SQL>
ȝQ对于unique indexQ通过单的讄参数是不能解决问题的Q要解决unique index 失效的问题,只能通过重徏索引来实现?/span>
资料引用:http://www.knowsky.com/388811.html
不明?sqlca.sqlcode = 0 是什么意思,搜了搜,记录一下sqlca.sqlcode的各U取值的意义Q?/p>
0 ——最q一ơsql语句执行成功
-1 ——最q一ơsql语句执行p|
100 ——最q一ơsql语句没有q回数据
nvl是个函数Q作用是如果W一个参CؓI|则返回第二个参数的|否则q回W一个参数的倹{?/p>
chr(0)数?转化为字W??/p>
2、Y.YJKSBH=X.ZXKSBH(+) AND Y.ZLXMID=X.ZLXMID(+)
Q?Q表C左q接Q就是在做关联之后,y表中存在而x表中不存在的数据也能查出来?/p>
posted @ 2009-06-13 17:46 断点 阅读(72) | 评论 (0)
解决办法Q?br />
1、重建烦引才是解册c问题的完全的方法?br />
alter index index_name rebuild (online);
2、如果是分区索引只需要重建那个失效的分区 ?br />
alter index index_name rebuild partition partition_name (online);
说明Q?br />
1. alter session set skip_unusable_indexes=true;可以在sessionU别跌无效索引作查询?br />
2.分区索引应适用user_ind_partitions?br />
3.状态分4U:
N/A说明q个是分区烦引需要查user_ind_partitions或者user_ind_subpartitions来确定每个分区是否可用;
VAILD说明q个索引可用Q?br />
UNUSABLE说明q个索引不可用;
USABLE 说明q个索引的分区是可用的?/p>
http://www.sudu.cn/info/html/edu/20071225/20526.html
http://blog.oracle.com.cn/html/65/t-122265.html
numberQpQsQ,其中p表示该number的总长度,s为小C?br /> 如果s敎ͼ则会取相应位数的取整?br /> 例如Q如果numberQ?Q?3Q,则数?234的存储gؓ1000Q如果numberQ?Q?2Q,则数?234的存储gؓ1200?/span>
在对数据库表中的字段讑֮cdӞ要注意:
NUMBER(10,6) Double 带有数
NUMBER(4) Long 为整?/span>
在JDBC中有两个接口对应数据库中的BLOB和CLOBcdQjava.sql.Blob和java.sql.Clob。和你^怋用数据库一样你可以直接通过ResultSet.getBlob()Ҏ来获取该接口的对象。与qx的查扑֔一不同的是得到Blob或Clob的对象后Q我们ƈ没有得到M数据Q但是我们可以这两个接口中的Ҏ得到数据?
例如Q?
Blob b=resultSet.getBlob(1);
InputStream bin=b.getBinaryStream();
Clob c=resultSet.getClob(2);
Reader cReader=c.getCharacterStream():
另外q有一U获取方法,不用数据流Q而是使用数据块?
例如
Blob b=resultSet.getBlob(1);
byte data=b.getByte(0,b.length());
Clob c=resultSet.getClob(2);
String str=c.getSubString(0,c.length());
在这里要说明一下,q个Ҏ其实q不安全Q如果你很细心的话,那很Ҏp发现getByte()和getSubString()两个Ҏ中的W二个参数都是intcd的,而BLOB和CLOB是用来存储大量数据的。而且Bolb.length()和Clob.length()的返回值都是longcd的,所以很不安全?/p>
那么有h肯定要问既然已经有VARCHAR和VARBINARY两中cdQؓ什么还要再使用另外的两U类型呢Q?br />
原因QVARCHAR和VARBINARY两种cd是有自己的局限性的。首先说q两U类型的长度q是有限的不可以过一定的限额Q以VARCHAR在ORA中ؓ例长度不可以过4000Q而LONGVARCHARcd的一个重要缺陷就是不可以使用LIKEq样的条件检索?/p>
另外是在数据库中VARCHAR和VARBINARY的存取是全部内容从全部d或写入,对于100K或者说更大数据来说q样的读写方式,q不如用进行读写来得更现实一些?
如果是小时ؓQ1Q2Q 采取如下格式Qyyyy-mm-dd HH24:MI:SS
insert into test values(to_date('2009-5-7 17:09:37','yyyy-mm-dd HH24:MI:SS'));
原因Q?/p>
当插入数据的长度?000?000内,׃抛出q样的错误?/p>
解决ҎQ?/p>
思\Q将存储的字W串补上I格Q让其超q?000的长度即可,但仅限与紧急解决问题?br />
1、首先在.java文g中引入import org.apache.commons.lang.StringUtils;
2、在?java文g的相应的Ҏ里添加如下判断:
// 处理ora-1461问题(clob长度?000-2000之间会出?
if (xml.length() >= 1000 && xml.length() <= 2000) {
xml = StringUtils.rightPad(xml, 2008);
}
相关知识Q?/p>
LONG: 可变长的字符串数据,最?GQLONGhVARCHAR2列的Ҏ,可以存储长文本一个表中最多一个LONG?
LONG RAW: 可变长二q制数据Q最?G
CLOB: 字符大对象Clob 用来存储单字节的字符数据
NCLOB: 用来存储多字节的字符数据
BLOB: 用于存储二进制数?
BFILE: 存储在文件中的二q制数据Q这个文件中的数据只能被只读ѝ但该文件不包含在数据库内。bfile字段实际的文件存储在文gpȝ?字段中存储的是文件定位指?bfile对oracle来说是只ȝ,也不参与事务性控制和数据恢复?
其中CLOBQNCLOBQBLOB都是内部的LOB(Large Object)cdQ最?GQ没有LONG只能有一列的限制。要保存囄、文本文件、Word文g各自最好采用那E数据类型呢QBLOB最好,LONG RAW也不错,但Long是oracle要废弃的类型,因此用BLOB?/p>
相关链接Q?a href="http://www.tkk7.com/allen-zhe/archive/2008/05/06/198627.html">http://www.tkk7.com/allen-zhe/archive/2008/05/06/198627.html
再一ơ打开oracleӞ数据昄一切正常?/p>
posted @ 2009-04-09 15:08 断点 阅读(118) | 评论 (0)
为此Q我在网上搜索了下,整理了些单TOAD的用技巧,现分享给大家?/p>
常用快捷键:
F8 调出以前执行的sql命o
F9 执行全部sql
Ctrl+t 补全table_name
Ctrl+. 补全table_name
alt+ 头上下 看sql history
Ctrl+Enter 直接执行当前sql
Ctrl+Shift+F 格式化sql语句?/p>
如果q觉得不够用的话Q可以在pȝ菜单I白处点d键,q入menu shortcutsQ自行定义快捷键?/p>
toad下修改表中字D늚|
首先在schema Browser下查扑ֈ相应的表Q在双点击Data栏,然后选中一条记录,再点击Data栏下面的?Edit Record)Q即可修改字D里的|然后点击√(Post edit)Q最后就是Commit了?/p>
posted @ 2009-04-08 20:50 断点 阅读(637) | 评论 (0)
正文Q?/p>
Oracle数据导出Q?br />
如果是导出本机的Oracle数据库:
exp pcisv62/11@ORCL file="d:\pcisv62081226.dmp" full=y
QORCL为本地数据库监听Q?/font>
如果是导出服务器端的Oracle数据Q?br />
exp pcisv62/11@tnsname file="d:\pcisv62081226.dmp" full=y
Qtnsname为COREV6_DBSERVERQSID为COREV6Q主ZؓDBSERVER。)
exp pcisv6_ab/11@COREV6_DBSERVER file=d:\v6100210.dmp rows=y buffer=1024000
注意Q必L DBA 才能执行完整数据库或表空间导出操作?/font>
Oracle数据导入,分以下步骤:
1.先在Oracle9i的Enterprise Manager Console下,以sys/sys及sysdbaw䆾登陆Q在“存储”-->“表空?#8221;下创I间COREV6Q同时给其分配合适的I间?br />
2.?#8220;安全?#8221;-->“用户”下创建用户pcisv62,使用户默认的表空间ؓCOREV6Q同时在“角色”里授予CONNECT、DBA、EXP_FULL_DATABASE、IMP_FULL_DATABASE、RESOURCE?br />
3.导入.dmp文gQ开?->q行cmdQ导入命令:
imp pcisv6_ab/11@ORCL file=d:\v6100210.dmp full=y ignore=y
注意Q如果备份的.dmp文g是以用户pcisv62导出COREV6I间的数据,那么
1.新徏的用h好是pcisv62Q否则命令ؓQ?br />
imp pcisv62/11@ORCL file=d:\v6100210.dmp fromuser=pcisv62 touser=pcisv6_ab full=y ignore=y rows=y tablespaces=corev6
2.与新建用户关联的新徏I间名必MؓCOREV6Q否则Oracle报找不到COREV6I间的错误?/p>
数据成功导入以后Q下一步就是配|Tomcat的server.xml文gQ?br /> 1.如果用到的是本机上的数据Q本地数据源里的部分配置为: username="pcisv62" password="11"
url="jdbc:oracle:thin:@localhost:1521:orcl"
2.如果用到的是服务器上的数据,则数据源里的部分配置为: username="pcisv62" password="11"
url="jdbc:oracle:thin:@dbserver:1521:corev6"Q?/span>dbserver为服务器的名字,corev6为服务器上Oracle的SIDQ?/p>
oracle的安装目录E:\oracle\ora92\network\admin下的tnsnames.oraQ?br />
本地配置Q?br />
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = L?(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
或服务器配置Q?br />
COREV6_DBSERVER =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
)
(CONNECT_DATA =
(SID = COREV6)
(SERVER = DEDICATED)
)
)
以下转蝲Q几U导入导出的命oҎQ以备以后查阅?br />
数据导出Q?br />
exp qhmis/qhmis@qhmis file='d:\backup\qhmis\qhmis20060526.dmp' grants=y full=n
1 数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp?br />
exp system/manager@TEST file=d:\daochu.dmp full=y
2 数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 数据库中的表table1 、table2导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4 数据库中的表table1中的字段filed1?00"打头的数据导?br />
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
数据的导入:
1 D:\daochu.dmp 中的数据导入 TEST数据库中?br />
imp system/manager@TEST file=d:\daochu.dmp
上面可能有点问题Q因为有的表已经存在Q然后它报错,对该表就不进行导入?br />
在后面加?ignore=y 可以了?br />
2 d:\daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
posted @ 2009-03-04 17:06 断点 阅读(1224) | 评论 (0)
]]>
oracle9i 安装到最后,更改了:sys口o:sys system口o:system
现在需要以systemw䆾登陆sql*pulsQ方法有二:
W一U方法:.q入SQL*Plus后在弹出对话框中直接点击“定”Q?nbsp;
误入用户名Qsys as sysdba
误入口令:sys
W二U方法:q入DosH口Q输入一下命令:
c:\>sqlplus /nolog
SQL>conn sys/password as sysdba
注意Qsys的权限最大!是默认的DBAQ一般不在该用户下徏用户表,PACKAGE{!system的权限就差一些?/p>
posted @ 2009-02-27 14:55 断点 阅读(96) | 评论 (0)
1) select * from T1 where exists(select * from T2 where T1.a=T2.a) ;
T1数据量小而T2数据量非常大ӞT1<<T2 Ӟ1) 的查询效率高?/span>
2) select * from T1 where T1.a in (select T2.a from T2) ;
T1数据量非常大而T2数据量小ӞT1>>T2 Ӟ2) 的查询效率高?/span>
exists 用法Q?/font>
1Q句中的“select * from T2 where T1.a=T2.a” 相当于一个关联表查询Q?/font>
相当?/font>“select * from T1,T2 where T1.a=T2.a”Q?/p>
“existsQxxxQ?#8221;它只在乎括号里的数据能不能查扑և来,是否存在q样的记录,如果存在Q这1Q句的where 条g成立?/font> in的用法: 2Q句中的“select * from T1 where T1.a in (select T2.a from T2) ”Q?/font>q里?#8220;in”后面括号里的语句搜烦出来的字D늚内容一定要相对应,一般来_T1和T2q两个表的a字段表达的意义应该是一LQ否则这h没什么意义?/font> --------------------------------------------------------------- +++++++++++++ 下面转蝲 +++++++++++++++++++ --------------------------------------------------------------- 今天市场报告有个sql及慢Q运行需?0多分钟,如下Q?br />
update p_container_decl cd 而我目前的情况适合用in来作查询Q于是我改写了sqlQ如下: 让市Zh员测试,l果q行旉?分钟内。问题解决了Q看来exists和in实是要Ҏ表的数据量来军_使用?/font> --------------------------------------------------------------------------
set cd.ANNUL_FLAG=\'0001\',ANNUL_DATE = sysdate
where exists(
select 1
from (
select tc.decl_no,tc.goods_no
from p_transfer_cont tc,P_AFFIRM_DO ad
where tc.GOODS_DECL_NO = ad.DECL_NO
and ad.DECL_NO = \'sssssssssssssssss\'
) a
where a.decl_no = cd.decl_no
and a.goods_no = cd.goods_no
)
上面涉及?个表的记录数都不,均在百万左右。根据这U情况,我想C前不久看的tom的一文章,说的是exists和in的区别,in 是把外表和那表作hash joinQ而exists是对外表作loopQ每ơloop再对那表q行查询?br />
q样的话Qin适合内外表都很大的情况,exists适合外表l果集很的情况?
update p_container_decl cd
set cd.ANNUL_FLAG=\'0001\',ANNUL_DATE = sysdate
where (decl_no,goods_no) in
(
select tc.decl_no,tc.goods_no
from p_transfer_cont tc,P_AFFIRM_DO ad
where tc.GOODS_DECL_NO = ad.DECL_NO
and ad.DECL_NO = ‘ssssssssssss’
)
posted @ 2009-02-01 17:54 断点 阅读(240) | 评论 (0)
]]>
1.以Administrators w䆾登陆windowspȝ?br />
2.停掉Oracle Service服务?nbsp;
3.通过Oracle installer 卸蝲Morcle产品及组件?
4.删除%ORACLE_base%文档和SYSTEM_DRIVE:\program files下的oracle文档?
5.删除SYSTEM_DRIVE:\Documents and Settings\All Users\「开始」菜单\E式中的oracleV?
6.?#8220;开始菜?#8221;—点“q行”—输?#8220;regedit”打开注册表:
到HKEY_CLASSES_ROOT下,删除以OracleQORAQORCL开头的键;
到HKEY_LOCAL_MACHINE\SOFTWARE下,删除ORACLE键和Apache Group键;
到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下,删除以Oracle开头的键;
到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services \Eventlog\Application下,删除以Oracle开头的键;
到HKEY_CURRENT_USER下,删除Oracle键;
到HKEY_CURRENT_USER\SOFTWARE\ORACLE下,删除以Oracle ?Orcl开头的键(假如有的话)Q?
7.打开pȝpȝ环境变量Q我的电脑->右键Q?gt;pȝ属性->高Q?gt;环境变量Q,在PATH中删除Q何以%ORACLE_HOME%开始的V?
8.重启电脑?/font>