??xml version="1.0" encoding="utf-8" standalone="yes"?> 我昨天犯的错误就是把创徏statement攑ֈ了@环之内,l果Dcursor猛增Q到达了数据库设|的最大数?/font> 2、当通过ResultSet.next()Q移动结果集指针Ӟ此时是否q与数据库发生交互? 创徏试用表 一Q无q回值的存储q程 1、徏立存储过E?br />
CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS 2、相应的JAVAE序 二:有返回值的存储q程Q非列表Q?/span> 1、存储过Eؓ 2、JAVA代码 CREATE OR REPLACE PACKAGE TESTPACKAGE AS 建立存储q程Q存储过EؓQ?br />
create or replace package body TESTPACKAGE as import java.sql.*; public class TestProcedureOne { 特别注意Q?br />
1、在执行前一定要先把oracle的驱动包攑ֈclass路径里?br />
2、Toad在我建立存储q程中搞了很多莫名的错误Q多数是没有创徏成功而不报错Q?br />
或者是创徏有误而不提示Q应当引起重视。所以最好还是在SQL*PLUS玩这些?br />
3、在SQL*PLUS中的换行是无效的Q要换行的时候一定要I格l尾Q特别是你直接复制代码的时候! 2)修改pfile的内?br />修改后主要内容ؓ 3)Ҏpfile启动数据?br />SQL>startup pfile='d:/oracle/product/10.1.0/db_1/database/INITorcl.ORA' 4,http://www.orafaq.com/node/5 What is the difference between a PFILE and SPFILE: A PFILE is a static, client-side text file that must be updated with
a standard text editor like "notepad" or "vi". This file normally
reside on the server, however, you need a local copy if you want to
start Oracle from a remote machine. DBA's commonly refer to this file
as the INIT.ORA file. An SPFILE (Server Parameter File), on the other hand, is a
persistent server-side binary file that can only be modified with the
"ALTER SYSTEM SET" command. This means you no longer need a local copy
of the pfile to start the database from a remote machine. Editing an
SPFILE will corrupt it, and you will not be able to start your database
anymore. 5,怎样查看一个参CҎ否需要重启数据库 select name,value ,ISSYS_MODIFIABLE from v$parameter 6,用命令修改参?/p> alter system set java_pool_size=2 scope=spfile ; scope=spfile 的修Ҏ需要重启数据库 见http://bbs.chinaunix.net/archiver/?tid-974075.html 10, http://www.cnblogs.com/jacktu/archive/2008/02/27/1083232.html http://topic.csdn.net/u/20090227/16/fb3d88ed-f2ca-44ed-8097-dc363054515c.html
用传l的like '%111,%',昄不合适,q样虽然111不存在但是依然能查到该条记录?br />所以应该用以下语句实现Q?br />select * from Table where ','+columA like '%,111,%'
like '%AAA%' q样的左xp查询不能用上烦?Oracle没法通过B-TREE扑ֈ相应的叶子节点,位图索引也是一?br />而like '...%'?Like '%...'是可以走索引的,后者需要reverse一?br />
使用where instr(column_name,'AAA')> 0没有什么效?br />
如果定like部分选择性很强,试试Q?br />select * from xxfl where rowid in (select rowid from xxfl where hphm like '%34443%' ) and jgsj between to_date('xxxx-xx-xx xx:xx:xx','yyyy-mm-dd hh24:mi:ss') and to_date('xxxx-xx-xx xx:xx:xx','yyyy-mm-dd hh24:mi:ss');
参?
http://www.javaeye.com/topic/653713
http://www.itpub.net/viewthread.php?tid=1218563
http://sandish.itpub.net/post/4899/464369
别h的笔?
sql中的like '%xx%'模糊查询无法走烦引,影响执行速度。经试itpub版主ifree的index_ffs+rowidҎ比较有效Q记录一下?br />q里是示例:
scott@ORCL> CREATE INDEX SCOTT.i_dept_name
2 ON SCOTT.DEPT(DNAME)
3 ;
Index created.
scott@ORCL> Analyze Table SCOTT.DEPT Compute Statistics ;
Table analyzed.
scott@ORCL> select * from scott.dept where
2 rowid in (
3 select /*+ index_ffs(a i_dept_dname) */
4 rowid from scott.dept a where dname like '%A%')
5 ;
q个Ҏ要求like查询出的记录不能太多Q在我的应用中,q一Ҏ使sql效率提高了近10倍?img src ="http://www.tkk7.com/leekiang/aggbug/319580.html" width = "1" height = "1" />
]]>
]]>
游标Q当q回一个含有多条记录的l果集时Q游标就像指向结果集中当前记录的指针Q通过游标我们可以处理l果集中的每一条记录?
对于出现ORA-01000 maximum open cursors
exceeded错误q种情况Q单U的加大open_cursorsq不是好办法Q那只是L不治本。实际上Q代码中的隐患ƈ没有解除?
而且Q绝大部分情况下Qopen_cursors只需要设|一个比较小的|p够用了Q除非有非常特别的要求?
从网上查了一下这个错误的原因Q主要还是代码问题引L?
q样的错误很Ҏ出现在Java代码中的主要原因是:Java代码在执?
conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当于在数据库中打开了一?
cursor。尤其是Q如果你的createStatement和prepareStatement是在一个@环里面的话,׃非常Ҏ出现q个问题。因为游标一直在不停的打开Q而且没有关闭?
一般来_我们在写Java代码的时候,createStatement和prepareStatement都应该要攑֜循环外面Q而且使用了这
些Statment后,及时关闭。最好是在执行了一ơexecuteQuery、executeUpdate{之后,如果不需要用结果集
QResultSetQ的数据Q就马上Statment关闭?
我就是在循环里调用con.prepareStatement(sql)D的这个错误?
修改ҎQ?
在遍历完ResutSet?font color="#ff0000">关闭rs和stmt可以了?
转自http://ltc603.javaeye.com/blog/71540
一般来说是游标不够用了?br />
只需在initSID.ora文g中加上一?br />
open_cursors = ****
但是Q很可能是由于你的程序或数据库的l构存在着一些潜伏的问题Q如jlandzpa所_没有关闭游标{?br />
我的E序有一阵一直在报这个错误,把OPEN_CURSOR加大C300甚至1000q在出错Q后来发现是表的STORAGE讄有问题?br />
你查一下自qE序?br />昨天说的有些错误Q应该是physical_attributes_clause语句?br />
我们pȝ的数据量比较大,q?00张表Q有些表一天要插入1000000条左右的数据?br />
表是使用ER/STDIO设计的,然后直接生成的脚本,׃没有讄physical_attributes_clause?br />
句中的徏表参敎ͼ因此使用了默认的参数。好像是INITIAL 10K NEXT 10K PCTFREE 20 PCTUSED 50
׃表的存储I间太小Q在很短的时间内׃装满Q因此ORACLE需要不停ؓ30多张表(数据量较大的Q申L间。于是在E序q行了一D|间后Q开始出现ORA-01000: maximum open cursors exceeded的错误?img src="http://www.itpub.net/images/smilies/35.gif" smilieid="212" alt="" border="0" /> 我将游标大小改到?00Q还是出现错误,改到1000以后开始出CORA-01001:invalid cursors。再怎么加大open_cursors的数量都无济于事?img src="http://www.itpub.net/images/smilies/12.gif" smilieid="210" alt="" border="0" />
使用select * from v$open_cursors查询Q发现有几百条的INSERT语句游标没有释放?img src="http://www.itpub.net/images/smilies/2.gif" smilieid="203" alt="" border="0" />
开始怀疑是E序调用的问题,仔细查程序没有发现问题。但是发现对某张表进行TRUNCATE操作后,Ҏ表进行插入的游标全部释放Q于是开始怀疑是表结构本w的问题?br />
重新讄了徏表参敎ͼ数据量最大的表的INITIAL和NEXT均设|ؓ50M?br />
至今未再出现同样的错误?br />
再次提问ORA-01000: maximum open cursors exceeded问题
q个问题yangtingkun讲的非常详细Q我茅塞顿开Q但我还有一些问题向怽高hh?br />
我这里出的问题也是ORA-01000: maximum open cursors exceeded Q我游标数?00提高?00仍然不能解决q个问题。看了这帖子我非常高兴Q但有一些问题不明白?br />
我用了select * from v$open_cursorq行查询后看不出来哪些游标未被释放。一共有q?000条记录,hash_value字段象特D点Qg几万到几百万都有Q请问怎样判定哪些游标未被释放Q有多少?br />
另外h一下,怎样重新讄了徏表参敎ͼ能指点一下所需命o吗。数据库里表数量极大Q怎样扑ֈ数据量最大的表啊?br />
我是菜鸟Q请不要见笑。不吝赐教?br />
首先通过v$open_cursor中的SQL_TEXT字段可以查出没有释放的SQL是大致是什么语句?br />
׃参数讄不当Q会有很多的INSERT语句无法释放?br />
SELECT * FROM V$OPEN_CURSOR WHERE SQL_TEXT LIKE 'INSERTQ?br />
找一扑֓些表的INSERT语句没有释放的游标比较多?br />
从ALL_TABLES里查看该表的参数是否合适?br />
ALTER TABLE tablename STORAGE( NEXT N);
加入_֍区,我也到同样的问题。也是调整的存储l构Q另外调整了一些烦引和E序Q一直不知道是存储结构的问题Q调整的东西多,׃知道是什么原因了
原帖?becochow ?2009-3-25 18:56 发表
我也出现q样的问题,我现在数据库在运行,可能是存储过E中未关闭游标,
我如何手动关闭呢?查询v$open_cursor 有几千条
今天我也到了这个错?我这么关闭的:
查询v$open_cursor,看哪些是׃"存储q程中未关闭游标"引v的会?扑ֈSID,SERIAL#,然后KILL掉就可以?
以上来源于http://www.itpub.net/viewthread.php?tid=24806
虽然解决了问题,也清楚了游标是何时创建的Q但q有几个问题比较qL?br />1、通过查询QJDBC是将所有的查询l果一ơ性放到ResultSet中,q是一ơ只放一定数目的记录Q例如,查询l果?000条数据,JDBC是一ơ性将2000条数据放到结果集中,q是分批攄呢?
首先l果集resultset在你的javaE序处。其中有个fetchsize讄Q这个表C每ơ从数据库处取多条记录到resultset.
当通过ResultSet.next()Q移动结果集指针Ӟ此时是否q与数据库发生交互?
不发生交互,数据库执行完查询后,已经把查询结果交lResultSet了,以后的操作,和数据库无关?br />交互Q如?个查询有10000条记录,resultset中只有fetchsize条,当next时还会在一定时机去交互
不是查询结果一ơ性放到ResultSet? 而是分批攑օResultSet?一般情况下是每?0条记?
当通过ResultSet.next()Q移动结果集指针Ӟ此时q会与数据库发生交互.
Dmaximum open cursors exceededq个问题一般是代码本n的问?
比如执行一个查询没有关闭游标,或是在存储过E中打开了游标而没有关闭.
特别是出现异常情冉|没有关闭游标Q严重时会导致系l崩?
啊~!~`我刚也犯了这U错?!``看到q里的脓?妹又明白了:"?``原来conn.createStatement()?
conn.prepareStatement()的时候实际上都是相当与在数据库中打开了一个cursor?!"明白了这点过?我就在@环里新徏一?
prepareStatement对象,操作完一?成功q后马上关?q样,循环里每ơ一个insert都新new
一个prepareStatement 操作成功完成之后再马上关?嘎嘎.~q样,cursor׃会溢出拉.
http://www.tkk7.com/snoopy/archive/2005/01/27/744.html
]]>
BEGIN
declare
i number;
begin
/*循环插入*/
FOR i IN ST_NUM .. ED_NUM LOOP
INSERT INTO test_temp values (i, 'test');
END LOOP;
end;
commit;
/*异常处理*/
EXCEPTION
WHEN OTHERS THEN
rollback;
END;
在command window里执行call p_test(1,100);
]]>
会看到至两条记录,其中action列ؓMain session的是plsqldevleper固有的,
每一个SQL Window都会有一个session,action昄?SQL Window - New"
当前window对应的session的STATUS列显CZؓACTIVE,其他昄?INACTIVE",
搞不明白"INACTIVE"的sessionZq会昄Q什么时候不昄?
至于查看当前session的IDQ用 select distinct sid from v$mystat;
Z记录一下v$mystat,v$sesstat和v$sysstat的区?br />按照OracleDocument中的描述Q?/span>v$sysstat存储自数据库实例q行那刻起就开始篏计全实例(instance-wide)的资源用情?
我觉得可以理解ؓ是许多综合性、全局性的指标Q比如ȝ录次?logons cumulative)
如果从v$sysstat查得?47个指标,那么v$mystat(表示当前session的情?相应的也?47个指标,
v$sesstat包括了所有session(包括zd的和不活动的)的指标的|当然也就囊括了v$mystatQ其记录Cؓ347*25(如果?5个session的话)=8675Q?br />至于指标?STATISTIC#"表示的含义,可从v$statname查得?br />
在B/Spȝ中,面UL复杂Q而且l过pȝ长时间运行,如果发现某个session的wait比较严重Q进行sql优化Ӟ很难知道q个sql是用在程
序的哪个模块Q很多时候只能根据开发h员的l验来定位这个sqlQ或者打开E序代码Q搜索。这L效率很低Q这里介l一个方法来快速定位发生问题的sql
的位|?br />
ORACLE提供了DBMS_APPLICATION_INFO包,其中提供了set_client_info、set_module?
set_action、read_module、read_client_info、set_session_longops几个q程Q其中分别用于设|?
客户端信息、设|module信息Q这里同时必设|一个action信息Q、设|action信息、读取module信息Q同时也会得到action?
息)、读取client_info信息和手动设|一个会话ؓlongops?br />exec dbms_application_info.set_client_info('test client info');
exec dbms_application_info.set_module(module_name => 'test module',action_name => 'test action');
http://zhang41082.itpub.net/post/7167/305794
How to trace the connection pool in a Java Web application - DBMS_APPLICATION_INFO
http://stackoverflow.com/questions/829302/how-to-trace-the-connection-pool-in-a-java-web-application-dbmsapplicationinf
http://stackoverflow.com/questions/53379/using-dbmsapplicationinfo-with-jboss
http://www.mailinglistarchive.com/java-dev@lists.apple.com/msg10280.html
使用v$sysstat中的数据
该视图中数据常被用于监控pȝ性能。如buffer cache命中率、Y解析率等都可从该视图数据计算得出?br />该视图中的数据也被用于监控系l资源用情况,以及pȝ资源利用率的变化。正因如此多的性能数据Q检查某区间内系l资源用情况可以这样做Q在一个时间段开始时创徏一个视图数据快照,l束时再创徏一个,二者之间各l计值的不同(end value - begin value)xq一旉D内的资源消耗情c这是oracle工具的常用方法,诸如Statspack以及BSTAT/ESTAT都是如此?br />ZҎ某个区间D늚数据Q源数据可以被格式化Q每ơ事务,每次执行Q每U钟或每ơ登陆)Q格式化后数据更Ҏ从两者中鉴别出差异。这cȝҎ在升U前Q升U后或仅仅想看看一D|间内用户数量增长或数据增加如何媄响资源用方面更加实用?br />你也可以使用v$sysstat数据通过查询v$system_event视图来检查资源消耗和资源回收?br />参见http://www.cnblogs.com/jimeper/archive/2008/03/30/1129431.html
该文后面有这样一句话
人生有三?lnq动,ln学习,ln反省.吸收新知,提高效率,懂得相处,成就自己,也成׃?创造最高h倹{?br />
ORACLE的连接数(sessions)与其参数文g中的q程?process)有关Q它们的关系如下Q?br /> sessions=(1.1*process+5)
但是我们增加process数时Q往往数据库不能启动了。这因ؓ我们q漏调了一个unixpȝ参数Q它?etc/system/ 中semmnsQ这是unixpȝ的信号量参数。每个process会占用一个信号量。semmns调整后,需要重新启动unix 操作pȝ Q参数才能生效。不q它的大会受制?g 的内存或ORACLE SGA。范围可?00-2000不等?br />
semmns的计公式ؓQSEMMNS > processes + instance_processes + system processes = 数据库参数processes的?instance_processes = 5(smon,pmon,dbwr,lgwr,arch)
system=pȝ所占用信号量?br /> pȝ所占用信号量可用下列命令查出:#ipcs -sb
其中列NSEMS昄pȝ已占用信号量?br /> 其它一些跟q接有关的参敎ͼ?licence_max_sessions, licence_sessions_warning {默认设|都为零Q也是没有限制?br />
]]>
]]>
oracle.sql.CharacterSet dbCharset = oracle.sql.CharacterSet.make(oracleId);
cst = (OracleCallableStatement) conn
.prepareCall("begin ?:= pkg_test.f_getList(?); end;");
//String sql = "{?=call PckgStudSltCourse.addStudPreSltCourse(?,?,?,?)}";也可以这样写
//sql="{call sp(?,?,?,?,?)}";//如果无返回?br /> cst.registerOutParameter(1, OracleTypes.ARRAY, "T_ARRAY");//W一个问可C回结?br /> cst.setString(2, userid);//W二个问?br /> cst.executeUpdate();//哪怕是个查询也用executeUpdate
oracle.sql.ARRAY simpleArray = cst.getARRAY(1);//从statement获取Q而不是rs
String[] values = (String[]) simpleArray.getArray();
for (int i = 0; i < values.length; i++) {
oracle.sql.CHAR out_value = new oracle.sql.CHAR(values[i],dbCharset);
System.out.println(out_value.stringValue());
}
注意Q在new oracle.sql.CHAR处,可能会报
java.lang.NoClassDefFoundError: oracle/gss/util/NLSError
at oracle.sql.CharacterSetUnknown.failCharsetUnknown(CharacterSetFactoryThin.java:178)
at oracle.sql.CharacterSetUnknown.convert(CharacterSetFactoryThin.java:145)
at oracle.sql.CHAR.(CHAR.java:147)
即missing some jar file in runtime environment
原因是weblogic没有加蝲web应用下的classes12.jar,而是加蝲了weblogic81\server\lib里的ojdbc14.jar,
而ojdbc14.jar里没有oracle.gss.util.NLSError?br /> 修改classpath先加载classes12.jar,打印出来的是qQ只出现qQ这ơ没有出现类DL异常java.sql.SQLException: Non supported character set: oracle-character-set-850 ?br /> q需要修改classpath先加载nls_charset12.jar;(必须q样Q光攑֜web应用的lib下或光放在weblogic81\server\lib?br /> 不行Qjar包放|或加蝲的这三种方式是有区别?
问题Q如果用的是ojdbc.jar,我觉得可能就不要nls_charset12.jar?q且不需要new oracle.sql.CHAR(values[i],dbCharset)来{?br />
http://topic.csdn.net/t/20051110/17/4385336.html
cL通过cd载器classloader载入的?
~省情况下web容器遵@java的标准标准类载入机制 -- q载入父加载器level的类?
weblogic的web容器的classloaderl承自ejb容器的classloaderQejb容器的classloader又承自 application classloader--该loader负责加蝲classpath下面的类Q所以缺省情况下classpath下面的类会被优先载入Q即使相同的cd在于web应用的lib目录?
可以通过配置文g来修改这U加载顺序,使得lib目录中的cdC先调用,在weblogic 8.1中,Ҏ是在weblogic.xml中加入下面的代码D:
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
weblogic 的加载顺序就是weblogic classpath优先Q?
一下见http://www.javaeye.com/topic/21141
ClassNotFoundException发生在装入阶Dc?br />当应用程序试N过cȝ字符串名Uͼ使用常规的三U方法装入类Q但却找不到指定名称的类定义时就抛出该异常?br />
NoClassDefFoundErrorQ?当目前执行的cdl编译,但是找不到它的定义时
也就是说你如果编译了一个类BQ在cA中调用,~译完成以后Q你又删除掉BQ运行A的时候那么就会出现这个错?
当你使用字符串去转换c,也就是尝试用Class.forName{方法去获得一个类的时候,如果q个cM存在Q就会抛出ClassNotFoundException?br /> 而你~译的类无错Q但是在q行时刻Q缺乏某些必ȝcLQ就是抛出NoClassDefFoundError。这U情冉|常见是你在~译Ӟ在classpath下有q个c,但是在运行时Q你的classpath~少q个cR?
加蝲时从外存储器找不到需要的class出现ClassNotFoundException
q接时从内存找不到需要的class出现NoClassDefFoundError
问题:加蝲和连接的区别CREATETABLE T_TEST(
I_ID NVARCHAR(20),
I_NAME NVARCHAR(20)
)
BEGIN
INSERT INTO T_TEST (I_ID,I_NAME) VALUES (PARA1, PARA2);
END TESTA;
import java.sql.*;
import java.io.OutputStream;
import java.io.Writer;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oracle.jdbc.driver.*;
public class TestProcedureOne {
public TestProcedureOne() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@192.168.10.216:1521:ctbu";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
CallableStatement cstmt = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, "dbname", "password");
CallableStatement proc = null;
proc = conn.prepareCall("{ call dbname.TESTA(?,?) }");
proc.setString(1, "100");
proc.setString(2, "TestOne");
proc.execute();
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(rs != null){
rs.close();
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}
}
catch (SQLException ex1) {
}
}
}
}
CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS
BEGIN
SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;
END TESTB;
public class TestProcedureTWO {
public TestProcedureTWO() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@192.168.10.216:1521:ctbu";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, "dbname", "password");
CallableStatement proc = null;
proc = conn.prepareCall("{ call HYQ.TESTB(?,?) }");
proc.setString(1, "100");
proc.registerOutParameter(2, Types.VARCHAR);
proc.execute();
String testPrint = proc.getString(2);
System.out.println("=testPrint=is="+testPrint);
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(rs != null){
rs.close();
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}
}
catch (SQLException ex1) {
}
}
}
}
}
注意Q这里的proc.getString(2)中的数?qL的,而是和存储过E中的out列对应的Q如果out是在W一个位|,那就?
proc.getString(1)Q如果是W三个位|,是proc.getString(3)Q当然也可以同时有多个返回|那就是再多加几个out
参数了?br />
三:q回列表
׃oracle存储q程没有q回|它的所有返回值都是通过out参数来替代的Q列表同样也不例外,但由于是集合Q所以不能用一般的参数Q必要用pagkage?所以要分两部分?br />
1、在SQL*PLUS中徏一个程序包
TYPE Test_CURSOR IS REF CURSOR;
procedure TESTC(cur_ref out Test_CURSOR);
end TESTPACKAGE;
procedure TESTC(cur_ref out Test_CURSOR) is
begin
OPEN cur_ref FOR SELECT * FROM T_TEST;
end TESTC;
END TESTPACKAGE;
可以看到Q它是把游标Q可以理解ؓ一个指针)Q作Z个out 参数来返回值的?br />
JAVAE序如下Q?/p>
import java.io.OutputStream;
import java.io.Writer;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oracle.jdbc.driver.*;
public TestProcedureOne() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@192.168.10.216:1521:ctbu";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
CallableStatement cstmt = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl,"databasename" "password");
CallableStatement proc = null;
proc = conn.prepareCall("{ call cqsb.TESTA(?,?) }");
proc.setString(1, "100");
proc.setString(2, "TestOne");
proc.execute();
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(rs != null){
rs.close();
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}
}
catch (SQLException ex1) {
}
}
}
}
]]>
1,Select isspecified,count(*) from v$spparameter group by isspecified;
如果isspecified里有trueQ表明用spfileq行了指定配|?br />
如果全ؓfalseQ则表明用pfile启动
2,spfile是二q制?br />
3,http://snakeskin.javaeye.com/blog/155136
db_buffer_size=db_block_buffers*db_block_size, db_block_size为数据库默认? 不要修改
pfile不要有SGA_TARGETq个参数, 也不要有db_cache_sizeq个参数, SGA_MAX_SIZE也不需?br />
1Q创建pfile
SQL>create pfile from spfile
q样在d:/oracle/product/10.1.0/db_1/database目录下面?个文件INITorcl.ORA
或者copy d:/oracle/product/10.1.0/admin/orcl/pfile/init.ora.XXXXXXXXCq目? 名字ҎINITorcl.ORA
init.ora.XXXX也是个pfile文g, 不妨试着用这个文件启动你的数据库
SQL>startup pfile='d:/oracle/product/10.1.0/admin/orcl/pfile/init.ora.XXXXXXXX'
特别是你改动参数D数据库无法启动的情况? 用这个文件恢复你的spfile非常有?br />SQL>create spfile from pfile='d:/oracle/product/10.1.0/admin/orcl/pfile/init.ora.XXXXXXXX'
sga_target=1700000000(1.7G左右)
lock_sga=true
pre_aggregate_tagert=250000000(250M左右)
workarea_size_policy=auto
pre_page_sga=true
sga_max_size=1720000000(1.72G左右)
如果不能启动, 可能是某些参数的原因, 那么׃改INIToracl.ORA的配|文? 直到能正常启动ؓ?
如果ISSYS_MODIFIABLE q回的是falseQ说明该参数无法用alter system语句动态修?需要重启数据库
scope=both 实时生效和写入spfileQ不需要重启数据库
scope=memory 实时生效Q但不写spfileQ这样如果重启数据库Q则恢复原来的参数?br />
每个参数能修改的scope是不一LQ可以查询v$parameter了解参数能被修改的类?/p>
]]>
http://topic.csdn.net/u/20070719/09/13f24bd3-5fc4-43dc-b1e4-5475718031b4.html
]]>
只有OracleDBConsoleh了,才能讉Khttp://127.0.0.1:1158/emQ?br />那么如何知道每一个em的http端口?
有h说在oracle\product\10.2.0\db_1\sysman\config\emca.propertiesQ?br />看了一下只有默认端口DBCONTROL_HTTP_PORT_DEFAULT?158
后来在oracle\product\10.2.0\db_1\install\install\portlist.ini?br />发现了每一个实例的Enterprise Manager Console HTTP 端口
]]>
]]>
2,生成10万条试记录表可以用如下SQLQ?br /> create table myTestTable as
select rownum as id,
to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as inc_datetime,
trunc(dbms_random.value(0, 100)) as random_id,
dbms_random.string('x', 20) random_string
from dual
connect by level <= 100000;
来源:http://blog.csdn.net/yzsind/archive/2009/12/08/4967133.aspx
]]>
http://blog.ccidnet.com/blog-htm-do-showone-uid-4092-itemid-291252-type-blog.html
在我们的pȝ里,不仅不是在一个column上创建bitmap indexQ而是在多个column上联合v来创建bitmap
indexQ从而可以想见,几乎{同于每个bitmap index
entry对应的只有极数的rowidQ即只对应极数的rowQ而且每个bitmap都要创徏一个或多个bitmap
segmentQ相应的QDML操作可能需要频J的lock很多rowsQ媄响ƈ发性(影响也需要修改同样bitmap
entry的用PQ同Ӟ׃pctfree{存储参数媄响indexI间的分配及理Q和׃数据操作D物理地址更改从而修改index
entryQ扩展,链接bitmap index entryQ频J修改导致的盘片Qblock分配链接{。这是空间增长和pȝ性能下降的部分原因?br />
bitmap主要用于数据仓库Qtable有大量的数据q且列上基数很小Q一般是column的distinct
values占rowsL?%以下Q或重复出现过100ơ以上,Oracle此时才可以把该column列ؓ创徏bitmap
index的侯选字D)Q同Ӟq由于数据仓库上q行讉K的事务非常少。bitmap
indexq不适用于OLTP业务QOLTP一般都是有大量的ƈ发事务来修改同样的数据。bitmap主要是设计来ؓ数据仓库服务的,卛_用于低基数超
U大数据量查询服务,而且只用在where clause里包含and ,or,not,或equality
queriesQ比如在and和or条g的查询,在把bit转换成rowid以前Q就能很快的得到相应的boolean操作Q?br />http://bigboar.itpub.net/post/8411/225321
2,位图索引占用的空间很?一?66万行记录的只有两个字D늚表,占用I间U?88M,在该两个字段上徏有一个位囄引,q个位图索引占用I间U?68M
http://bigboar.itpub.net/post/8411/225321
查看各个?包括索引)占用I间大小的sql:
Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name
http://space.itpub.net/193161/viewspace-50292
http://www.ixdba.com/html/y2007/m05/102-bitmap-index-deadlock.html
3QOracle强烈建立QQ何一个应用程序的库表臛_需要创Z个表I间Q其中之一用于存储表数据,而另一个用于存储表索引数据。因为如果将表数据和索引?
据放在一P表数据的I/O操作和烦引的I/O操作生媄响系l性能的I/O竞争Q降低系l的响应效率。将表数据和索引数据存放在不同的表空间中Q如一
个ؓAPP_DATAQ另一个ؓAPP_IDXQ,q在物理层面这两个表空间的数据文g攑֜不同的物理磁盘上Q就可以避免q种竞争了?br />拥有独立的表I间Q就意味着可以独立Cؓ表数据和索引数据提供独立的物理存储参敎ͼ而不会发生相互媄响,毕竟表数据和索引数据拥有不同的特性,而这些特性又直接影响了物理存储参数的讑֮?br />此外Q表数据和烦引数据独立存储,q会带来数据理和维护上的方面。如你在q移一个业务数据库ӞZ降低数据大小Q可以只q出表数据的表空_在目标数据库中通过重徏索引的方式就可以生成索引数据了?br />http://blog.ccidnet.com/blog-htm-do-showone-uid-19759-itemid-341747-type-blog.html
4QB-Tree索引即normal普通烦?img src ="http://www.tkk7.com/leekiang/aggbug/210564.html" width = "1" height = "1" />
]]>
其实dblink和数据库中的view差不多,建dblink的时候需要知道待d数据库的ip地址Qssid以及数据库用户名和密码?br />dblink =database links
创徏可以采用两种方式(自己试验时只有第一U方式可以,不知何故)Q?/p>
1、已l配|本地服?br />以下是引用片D:
create public database
link fwq12 connect to fzept
identified by neu using 'fjept'
CREATE DATABASE LINK数据库链接名CONNECT TO 用户?IDENTIFIED BY 密码 USING ‘本地配|的数据的实例名?
2、未配置本地服务
以下是引用片D:
create database link linkfwq
connect to fzept identified by neu
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = fjept)
)
)';
host=数据库的ip地址Qservice_name=数据库的ssid?/p>
其实两种Ҏ配置dblink是差不多的,我个人感觉还是第二种Ҏ比较好,q样不受本地服务的媄响?/p>
数据库连接字W串可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定?
数据库参数global_name=true时要求数据库链接名称跟远端数据库名称一?/p>
数据库全局名称可以用以下命令查?br /> SELECT * FROM GLOBAL_NAME;
查询q端数据库里的表
SELECT …?FROM 表名@数据库链接名;
查询、删除和插入数据和操作本地的数据库是一LQ只不过表名需要写成“表名@dblink服务器”而已?/p>
附带说下同义词创?
CREATE SYNONYM 同义词名 FOR 表名;
CREATE SYNONYM 同义词名 FOR 表名@数据库链接名;
删除dblinkQDROP PUBLIC DATABASE LINK linkfwq?/p>
如果创徏全局dblinkQ必M用systm或sys用户Q在database前加public?br /> 参考资?
http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14231/ds_admin.htm#i1008271
但在执行insert操作或update操作时如果sql语句中含"&",如何处理Q?/p>
1) update userinfo set pageurl='myjsp?page=1'||'&'||'pagesize=10' where id='test' 2) update userinfo set pageurl='myjsp?page=1'||chr(38)||'pagesize=10' where id='test'其中||是连字符, chr(38)跟ASCII的字W{码是一致的。plsql中还可以set define off来关闭特D字W,q可以用show define来查看有些特D定义的字符
2,慎用where pid!=3{用?q样没有囊括is null的情?要实现同L的可where pid!=3 or pid is null
3,快速从另外一个表复制数据
insert into tablea (id,name) select id,name from tableb
4,查版?br /> select * from PRODUCT_COMPONENT_VERSION;?select * from v$version;
5,nls==National Language Support 国际语言支持
6,PLSQL
HKEY_CURRENT_USER\Software\Allround Automations
HKEY_CURRENT_USER\Software\Microsoft\Security
7,查blob大小
select dbms_lob.getlength(blobfield) from wd_blob
8,改变表空?br /> alter table TB_USER move tablespace myspace;
如果被{U表I间的表含有索引, 表{Ud索引变得不可? 要删除旧索引,建立新烦?font color="#333333">
alter index user_name.index_name rebuild; 主键索引名与主键名相?br />9,导入时表I间错误
导出dmp时的用户的默认表I间必须是表所在的表空_q样导入时才不会出错?br /> 如果dmp,也可用UE打开直接修改表空间?br />
10Q用select into 复制数据
insert into test
(id, name)
select id, name from mis@dblink;
?br /> create table test--需先删?br />as (select * from mis@dblink)
11,中文字段按拼x序:
select username from tab_name order by nlssort(username,'nls_sort=schinese_pinyin_m');
按偏旁部?
select username from tab_name order by nlssort(username,'nls_sort=schinese_radical_m');
按笔?
select username from tab_name order by nlssort(username,'nls_sort=schinese_stroke_m');
12,插入带单引号的字W?/font>
insert into t(a) values ('a'||chr(39)||'b' );
或insert into t(a) varlus ('a''b');
13,如果你连接到数据库后没有在取nextval之后再取currvalQ就会出现ORA-08002出错.
因此Ҏ一个session来说Q应该先用nextvalQ才可以取currval?
14
truncate table mapeventӞ如果Z外键引用(外键所在那张表不一定有数据,有数据就会报另外一个错误了)
则报 ORA-02266:表中的唯一主键被启用的外部关键字引?br />ORA-02266: unique/primary keys in table referenced by enabled foreign keys
(外键所在那张表无数据时delete from table mapevent是可以执行的)
正确的步?
----------------
alter table mapevent disable primary key cascade;
truncate table mapevent;
alter table mapevent enable primary key;
---------------
15
查询某个表被哪些表引?br />select *
from user_constraints t
where t.constraint_type = 'R'
and t.r_constraint_name = '该表的主键名';
16,按中文排序,但中文的一二三四五有问题,可用下面的办?
select * from T_TIME_SETUP order by translate(ccname,'一二三四五','12345')
来源:http://www.itpub.net/226375,1.html
17,误删了怎么?用Oracle中的回闪查询
?0分钟前的数据:
select * from tb_wz as of timestamp(sysdate - 20 / 1440)
http://blog.csdn.net/xuyuan77/archive/2007/06/06/1640757.aspx
18Q导出带有blobh或clobcd字段表时会出?EXP-00003: 未找到段 (8,375419) 的存储定?br /> 原因见http://read.newbooks.com.cn/info/116619.html
19,导出命o
exp Test1/Test1passwd@服务?owner=Test1 file=D:\files\Test1.dmp log=d:\log.log
expq有一个参数full=y
imp aichannel/aichannel@HUST full=y file=test.dmp ignore=y
20Q查oracle的保留字 select * from v$reserved_words
21,修改序列的当前?/p>
alter sequence userseq increment by 500;
select userseq.nextval from dual;
alter sequence userseq increment by 1;
ROWNUM是一个序列,是oracle数据库从数据文g或缓冲区中读取数据的序。它取得W一条记录则rownumgؓ1Q第二条?Q依ơ类推。如果你?gt;,>=,=,between...andq些条gQ因Z~冲区或数据文g中得到的W一条记录的rownum?Q则被删除,接着取下条,可是它的rownumq是1Q又被删除,依次cLQ便没有了数据?/p>
select rownum,c1 from t1 where rownum != 10 Z是返回前9条数据呢Q?br />Z?rownum >1 时查不到一条记录,?rownum >0 ?rownum >=1 却LC所以的记录
M时候想?rownum = 1 q条记录抛弃是不对的Q它在结果集中是不可或缺的,了rownum=1 像IZ楼阁一般不能存在,所以你?rownum 条g要包含到 1
但如果就是想要用 rownum > 10 q种条g的话话就要用嵌套语句,?rownum 先生成,然后对他q行查询?br />select *
from (selet rownum as rnQt1.* from a where ...)
where rn >10
一般代码中对结果集q行分页是q么q的?/p>
另外Qrowid ?rownum 虽都被称Z列,但它们的存在方式是不一LQrowid 可以说是物理存在的,表示记录在表I间中的唯一位置IDQ在DB中唯一。只要记录没被搬动过Qrowid是不变的。rowid 相对于表来说又像表中的一般列Q所以以 rowid 为条件就不会?rownum那些情况发生?/p>详见http://hi.baidu.com/jztchina/blog/item/4cca34971258fe6954fb96d6.html
Oracle在检索的时候,会首先把数据都检索出来,然后在排序段中进行排序。假如你有一个SQL语句如下所C?
在检索的时候,会首先把数据索出来,也就是把EMP表数据都索出来,然后再Order by排序操作。因为ROWNUM 数据是在排序前就索出来的了,所以不能利用ROWNUM来取得排序后的前10条操作。那么应该如何操作呢。其实很单,利用子查询,先排序,再取ROWNUM。如下所C?/p>
hQ?br>SQL> select jno,jname,nval,val,val-nval ccc from jj where ccc > 1;
出现错误:
ORA-00904: "CCC": 标识W无?br>
Z么啊Q查资料select的用法里面没用查到?br>SQL> select jno,jname,nval,val,val-nval ccc from jj where (val-nval)> 1;
q样可以的Q我q想?ccc 排序Q也不行?br>哪位老大指点一下,多谢Q!
where子句中只能直接用栏位或者常量,而不能用栏位的别名Q除非这个别名来自子查询之中Q如Qselect .... from (select col1 ccc from table) where ccc > 1
而order by 则可以直接用别名,如select col1 ccc from table order by ccc
我想Q这和sql 的执行顺序是有关的,where中的部分先执?Q?gt; 如果有group byQ接着执行group by Q?gt; select中的函数计算、别名指定再q行 Q?gt; 最后order by
因此Q字Dc表辑ּ的别名在where子句和group by子句都是不能使用的,而在order by中不仅可以用别名,甚至可以直接使用栏位的下标来q行排序Q如Qorder by 1 desc,2 asc 呵呵
最高整C敎ͼp-s
s正数Q小数点双指定位置开始四舍五?br>s负数Q小数点左边指定位置开始四舍五?br>s?或者未指定Q四舍五入到最q整?br>当p于s时候,表示数字是绝对值小?的数字,且从数点右边开始的前s-p 位必L0Q保留s位小数?br>
p>0Q对s?U情况:
1. s>0
_到小数点双s位,q四舍五入。然后检验有效数位是?lt;=pQ如果s>pQ小数点双臛_有s-p?填充?br>2. s<0
_到小数点左边s位,q四舍五入。然后检验有效数位是?lt;=p+|s|
比如
Value Datatype Stored Value
123.2564 NUMBER 123.2564
1234.9876 NUMBER(6,2) 1234.99
12345.12345 NUMBER(6,2) Error
1234.9876 NUMBER(6) 1235
12345.345 NUMBER(5,-2) 12300
1234567 NUMBER(5,-2) 1234600
12345678 NUMBER(5,-2) Error
123456789 NUMBER(5,-4) 123460000
1234567890 NUMBER(5,-4) Error
12345.58 NUMBER(*, 1) 12345.6
0.1 NUMBER(4,5) Error
0.01234567 NUMBER(4,5) 0.01235
0.09999 NUMBER(4,5) 0.09999
0.099996 NUMBER(4,5) <>