??xml version="1.0" encoding="utf-8" standalone="yes"?> ----------------------------- 目前 DBCP 有两个版本分别是 1.3 ?1.4?/p> DBCP 1.3 版本需要运行于 JDK 1.4-1.5 Q支?JDBC 3?/p> DBCP 1.4 版本需要运行于 JDK 1.6 Q支?JDBC 4?/p> 1.3?.4Z同一套源代码Q含有所有的bug修复和新Ҏ(gu)。因此在选择DBCP版本的时候,要看你用的是什么JDK版本?/p> DBCP1.2版本性能一般,比c3p0差挺多。DBCP1.4?.3Q配合(依赖Qcommons pool 1.6的jar?各方面功能、性能推进到新的高峰。相?.2版本提高不少。超?或相?了c3p0.使用DBCP1.4?.3 + commons pool 1.6 Tomcat7 中保留DBCPq接池,以兼容已有应用。ƈ提供了新的Tomcat JDBC pool作ؓ(f)DBCP的可选替代。新出的Tomcat JDBC poolQ据说比DBCP 1.4要好Q未接触Q也不在本文讨论范围内?/p> ----------------------------- 一、Apache官方DBCP文l出的配|示例:(x) 可参见:(x)http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html <Context> <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/javatest"/> </Context> tomcat JDBCq接池配|示例,自动查连接的可用性,dbcp定时连接,dbcp自动重连的配|?/strong> ----------------------------- 默认配置的DBCPq接池,是不Ҏ(gu)中的q接做测试的Q有时连接已断开了,但DBCPq接池不知道Q还以ؓ(f)q接是好的呢?/p> 应用从池中取L(fng)q接讉K数据库一定会(x)报错。这也是好多Z喜欢DBCP的原因?/p> 问题例一Q?/p> MySQL8时问题QMysql服务器默认连接的“wait_timeout”?时Q也是说一个connectionI闲过8个小ӞMysql自动断开?connection?/p> 但是DBCPq接池ƈ不知道连接已l断开了,如果E序正y使用到这个已l断开的连接,E序׃(x)报错误?/p> 问题例二Q?/p> 以前q用Sybase数据库,׃某种原因Q数据库M后重启、或断网后恢复?/p> {了U?0分钟后,DBCPq接池中的连接还都是不能使用的(断开的)Q访问数据应用一直报错,最后只能重启Tomcat问题才解??/p> 解决Ҏ(gu)Q?/p> Ҏ(gu)1、定时对q接做测试,试p|关闭连接?/p> Ҏ(gu)2、控制连接的I闲旉辑ֈN分钟Q就关闭q接Q(然后可再新徏q接Q?/p> 以上两个Ҏ(gu)使用L一个就可以解决以述两类问题。如果只使用Ҏ(gu)2Q徏?N <= 5分钟。连接断开后最?分钟后可恢复?/p> 也可混合使用两个Ҏ(gu)Q徏?N = 30分钟?/p> 下面是DBCPq接池,同时使用了以上两个方案的配置配置 validationQuery = "SELECT 1" 验证q接是否可用Q用的SQL语句 testWhileIdle = "true" 指明q接是否被空闲连接回收器(如果?q行?如果失?则连接将被从池中去除. testOnBorrow = "false" 借出q接时不要测试,否则很媄响性能 timeBetweenEvictionRunsMillis = "30000" ?0U运行一ơ空闲连接回收器 minEvictableIdleTimeMillis = "1800000" 池中的连接空?0分钟后被回收,默认值就?0分钟?/p> numTestsPerEvictionRun="3" 在每ơ空闲连接回收器U程(如果?q行时检查的q接数量Q默认值就?. 解释Q?/p> 配置timeBetweenEvictionRunsMillis = "30000"后,?0U运行一ơ空闲连接回收器Q独立线E)。ƈ每次?个连接,如果q接I闲旉过30分钟销毁。销毁连接后Q连接数量就了Q如果小于minIdle数量Q就新徏q接Q维护数量不于minIdleQ过行了新老更ѝ?/p> testWhileIdle = "true" 表示?0U,取出3条连接,使用validationQuery = "SELECT 1" 中的SQLq行试 Q测试不成功销毁连接。销毁连接后Q连接数量就了Q如果小于minIdle数量Q就新徏q接?/p> testOnBorrow = "false" 一定要配置Q因为它的默认值是true。false表示每次从连接池中取接时Q不需要执行validationQuery = "SELECT 1" 中的SQLq行试。若配置为true,Ҏ(gu)能有非常大的媄响,性能?x)下?-10倍。所在一定要配置为false. ?0U,取出numTestsPerEvictionRun条连接(本例?Q也是默认|Q发?SELECT 1" SQL语句q行试 Q测试过的连接不是“被?#8221;了,q算是空闲的。连接空?0分钟后会(x)被销毁?/p> ----------------------------- maxIdlegmaxActive值应配置的接q?/p> 因ؓ(f)Q当q接数超qmaxIdle值后Q刚刚用完的连接(刚刚I闲下来Q会(x)立即被销毁。而不是我惌的空闲MU后再销毁v一个缓冲作用。这一点DBCP做的可能与你惛_的不一栗?/p> 若maxIdle与maxActive相差较大Q在高负载的pȝ中会(x)D频繁的创建、销毁连接,q接数在maxIdle与maxActive间快速频JL动,q不是我惌的?/p> 高负载系l的maxIdle值可以设|ؓ(f)与maxActive相同或设|ؓ(f)-1(-1表示不限?Q让q接数量在minIdle与maxIdle间缓冲慢速L动?/p> timeBetweenEvictionRunsMillis讄?/p> initialSize="5"Q会(x)在tomcat一启动Ӟ创徏5条连接,效果很理惟?/p> 但同时我们还配置了minIdle="10"Q也是_(d)最要保持10条连接,那现在只?条连接,哪什么时候再创徏的5条连接呢Q?/p> 1、等业务压力上来了, DBCP׃(x)创徏新的q接?/p> 2、配|timeBetweenEvictionRunsMillis=“旉”,DBCP?x)启用独立的工作U程定时查,补上的5条连接。销毁多余的q接也是同理?/p> ------------------------------ DBCP的连接数?x)? 0 - minIdle - maxIdle - maxActive 之间变化。变化的逻辑描述如下Q?/p> 默认未配|initialSize(默认值是0)和timeBetweenEvictionRunsMillis参数Ӟ刚启动tomcatӞq接数是0。当应用有一个ƈ发访问数据库时DBCP创徏一个连接?/p> 目前q接数量q未辑ֈminIdleQ但DBCP也不自动创徏新连接已使数量达到minIdle数量Q没有一个独立的工作U程来检查和创徏Q?/p> 随着应用q发讉K数据库的增多Q连接数也增多,但都与minIdle值无养I很快minIdle被超,minIdleg点用都没有?/p> 直到q接的数量达到maxIdle|q时的连接都是只增不减的?再l发展,q接数再增多q超qmaxIdleӞ使用完的q接Q刚刚空闲下来的Q会(x)立即关闭QMq接的数量稳定在maxIdle但不?x)超qmaxIdle?/p> 但活动连接(在用中的连接)可能数量上瞬间超qmaxIdleQ但永远不会(x)过maxActive?/p> q时如果应用业务压力了Q访问数据库的ƈ发少了,q接C不会(x)减少Q没有一个独立的U程来检查和销毁)Q将保持在maxIdle的数量?/p> 默认未配|initialSize(默认值是0)Q但配置了timeBetweenEvictionRunsMillis=“30000”Q?0U)参数Ӟ刚启动tomcatӞq接数是0。马上应用有一个ƈ发访问数据库时DBCP创徏一个连接?/p> 目前q接数量q未辑ֈminIdleQ每30UDBCP的工作线E检查连接数是否于minIdle数量Q若于创建新q接直到辑ֈminIdle数量?/p> 随着应用q发讉K数据库的增多Q连接数也增多,直到辑ֈmaxIdle倹{这期间?0UDBCP的工作线E检查连接是否空闲了30分钟Q若是就销毁。但此时是业务的高峰期,是不?x)有长?0分钟的空闲连接的Q工作线E查了也是白查,但它在工作。到q里q接数量一直是呈现增长的趋ѝ?/p> 当连接数再增多超qmaxIdleӞ使用完的q接(刚刚I闲下来)?x)立卛_闭,Mq接的数量稳定在maxIdle。停止了增长的趋ѝ但zdq接Q在使用中的q接Q可能数量上瞬间过maxIdleQ但永远不会(x)过maxActive?/p> q时如果应用业务压力了Q访问数据库的ƈ发少了,?0UDBCP的工作线E检查连?默认每次??是否I闲辑ֈ30分钟(q是默认?Q若q接I闲辑ֈ30分钟Q就销毁连接。这时连接数减少了,呈下降趋势,从maxIdle走向minIdle。当于minIdle值时Q则DBCP创徏新连接已使数量稳定在minIdleQƈq行着新老更ѝ?/p> 配置initialSize=“10”Ӟtomcat一启动创?0条连接。其它同上?/p> minIdle要与timeBetweenEvictionRunsMillis配合使用才有?单独使用minIdle不会(x)起作用?/p> ----------------------------- Tomcat自带DBCP的包Q是$CATALINA_HOME/lib/tomcat-dbcp.jar?/p> tomcat-dbcp.jar含有commons pool、commons DBCP两个包的内容。但只含有与q接池有关的cR?/p> 数据源配|在context.xml文g中, 要在tomcat的lib目录中放jdbc 驱动?/p> 数据源配|在server.xml的host中,不需要在tomcat的lib目录中放jdbc 驱动包,只用工E中的jdbc驱动?/p> JNDI配置:更改tomcat的server.xml或context.xml 全局的数据源Q?/p> 如果需要配|全局?ResourceQ则在server.xml的GlobalNamingResources节点里加入ResourceQ再在Context节点里加入ResourceLink的配|?/p> 全局的resource只是Z重用Q方便所有该tomcat下的web工程的数据源理Q但如果你的tomcat不会(x)同时加蝲多个web工程Q也是说一个tomcat只加载一个web工程Ӟ是没有必要配|全局的resource的?/p> 每个web工程一个数据源Q?/p> ?CATALINA_HOME/conf/context.xml的根节点Context里加入Resource配置。这U配|方法,你在context.xml配置了一个数据源Q但Tomcat中有同时q行着5个工E,那了坏事儿了,q个在Tomcat启动时数据源被创Z5份,每个工程1份数据源。连接数?x)是你配|的参数?倍?/p> 只有在你的Tomcat只加载一个web工程?才可以直接以context.xml配置数据源?/p> <Resource name="jdbc/testDB" //指定的jndi名称Q会(x)用于spring数据源bean的配|和ResourceLink的配|?/p> type="javax.sql.DataSource" //数据源类型,使用标准的javax.sql.DataSource driverClassName="com.mysql.jdbc.Driver" //JDBC驱动?nbsp; url="jdbc:mysql://localhost:3306/test" //数据库URL地址 username="test" //数据库用户名 password="test" //数据库密?/p> maxIdle="40" //最大的I闲q接?/p> maxWait="4000" //当池的数据库q接已经被占用的时候,最大等待时?/p> maxActive="40" //q接池当中最大的数据库连?/p> removeAbandoned="true" removeAbandonedTimeout="180" logAbandoned="true" //被丢弃的数据库连接是否做记录Q以便跟t?/p> factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" /> q里的factory指的是该Resource 配置使用的是哪个数据源配|类Q这里用的是tomcat自带的标准数据源Resource配置c,q个cM可以自己写,实现javax.naming.spi.ObjectFactory 接口卛_。某些地方用的commons-dbcp.jar中的org.apache.commons.dbcp.BasicDataSourceFactoryQ如果用这个就需把commons-dbcp.jar?qing)其依赖的jar包,都放在tomcat的lib下,光放在工E的WEB-INF/lib下是不够的?/p> ResourceLink 的配|有多种Q?/p> 1)tomcat安装目录下的conf/context.xmlQ把全局的resource直接公开l该tomcat下的所有web工程Q在Context节点中加入:(x) <ResourceLink global="jdbc/testMDB" name="jdbc/testMDB" type="javax.sql.DataSource"/> 不徏议在此文件中Q不使用<ResourceLink/>Q而?lt;Resource/>直接配置数据源,原因上面已说明了? 2)tomcat安装目录下的conf/server.xmlQ该Ҏ(gu)可以指定把哪些sourcel定到哪个web工程下?/p> <!-- 新增Q第一行ؓ(f)加蝲的工E配|,W二行是该工E需要的ResourceLink配置 --> <context docBase="/web/webapps/phoenix" path="" reloadable="false"> <ResourceLink global="jdbc/testMDB" name="jdbc/testMDB" type="javax.sql.DataSource"/> </context> 也可在此文g中,不?lt;ResourceLink/>Q而?lt;Resource/>直接配置数据源?/p> 3)安装目录下的conf/localhost/下徏立一个xml文gQ文件名?lt;yourAppName>.xml。比如工E名为testQ则该xml名ؓ(f)test.xml?/p> <?xml version="1.0" encoding="UTF-8"?> <Context> <ResourceLink global="jdbc/testMDB" name="jdbc/testMDB" type="javax.sql.DataSource"/> </context> 也可在此文g中,不?lt;ResourceLink/>Q而?lt;Resource/>直接配置数据源?/p> 4)tomcat安装目录下的\webapps\test\META-INF\context.xml的Context节点中增? <ResourceLink global="jdbc/testMDB" name="jdbc/testMDB" type="javax.sql.DataSource"/> 也可在此文g中,不?lt;ResourceLink/>Q而?lt;Resource/>直接配置数据源?/p> 本文内容都在tomcat6.0上运行测试过Q还下蝲了commons DBCP的源码,加入了跟t日志,用于验证本文的理论?/p> ----------------------------- Tomcat JDBC pool DBCP 1.4 c3p0 速度不错 BoneCP 速度不错Q但?x)启用很多附加线E做回收、关闭工作?/p> Proxool 在高q发时出现异?/p> DBCP 1.2 DBPool 最差,垫底?/p> 参考文《Javaq接池评估报告?/p> 如果是用主键primary或者唯一索引unique区分了记录的唯一?避免重复插入记录可以使用Q?/p> 代码如下: 代码如下: REPLACE INTO `table_name`(`col_name`, ...) VALUES (...); ...法说明Q?/p> REPLACE的运行与INSERT很相?但是如果旧记录与新记录有相同的|则在新记录被插入之前Q旧记录被删除,卻I(x) 当因为对于主键或唯一关键字出现重复关键字错误而造成插入p|Ӟ(x) 代码如下: REPLACE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('test569', '99999', '123'); 另外,?SQL Server 中可以这样处理:(x) if not exists (select phone from t where phone= '1') insert into t(phone, update_time) values('1', getdate()) else update t set update_time = getdate() where phone= '1' Ҏ(gu)三:(x)ON DUPLICATE KEY UPDATE 如果行作为新记录被插入,则受影响行的gؓ(f)1Q如果原有的记录被更斎ͼ则受影响行的gؓ(f)2?/p> 如果a=1 OR b=2与多个行向匹配,则只有一个行被更新。通常Q?zhn)应该量避免对带有多个唯一关键字的表用ON DUPLICATE KEY子句?/p> 本语句与以下两个语句作用相同Q?/p> 注释Q当(zhn)用ON DUPLICATE KEY UPDATEӞDELAYED选项被忽略?/p> q个例子是我在实际项目中用到的:(x)是将一个表的数据导入到另外一个表中,数据的重复性就得考虑(如下)Q唯一索引为:(x)emailQ?/p> INSERT INTO `table_name1` (`title`, `first_name`, `last_name`, `email`, `phone`, `user_id`, `role_id`, `status`, `campaign_id`) 再脓(chung)一个例子:(x) INSERT INTO `class` SELECT * FROM `class1` ON DUPLICATE KEY UPDATE `class`.`course`=`class1`.`course` 其它关键QDELAYED 做ؓ(f)快速插入,q不是很兛_失效性,提高插入性能?nbsp; php防止重复插入记录实例 查询?qing)删除重复记录的SQL语句 2、删除表中多余的重复记录Q重复记录是Ҏ(gu)单个字段QpeopleIdQ来判断Q只留有rowid最的记录 3、查找表中多余的重复记录Q多个字D) 4、删除表中多余的重复记录Q多个字D)Q只留有rowid最的记录 5、查找表中多余的重复记录Q多个字D)Q不包含rowid最的记录DBCPq接池介l?/h1>
DBCPq接池配|参数讲?/h1>
DBCPq接池的自我?/h1>
DBCPq接池配|参数注意事?
q接销毁的逻辑
Tomcat中配|DBCPq接?/h1>
q接池排名(U个人看法)
]]> 代码如下 复制代码 INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('test9@163.com', '99999', '9999');
q样当有重复记录׃(x)忽略,执行后返回数?
q有个应用就是复制表,避免重复记录Q?nbsp;
代码如下: 代码如下 复制代码 INSERT IGNORE INTO `table_1` (`name`) SELECT `name` FROM `table_2`;
Ҏ(gu)二:(x)使用Replace
语法格式Q?/p> 代码如下 复制代码
REPLACE INTO `table_name` (`col_name`, ...) SELECT ...;
REPLACE INTO `table_name` SET `col_name`='value',
试把新行插入到表中
从表中删除含有重复关键字值的冲突?nbsp;
再次试把新行插入到表中
旧记录与新记录有相同的值的判断标准是Q?br />表有一个PRIMARY KEY或UNIQUE索引Q否则,使用一个REPLACE语句没有意义。该语句?x)与INSERT相同Q因为没有烦引被用于定是否新行复制了其它的行?nbsp;
q回|(x)
REPLACE语句?x)返回一个数Q来指示受媄响的行的数目。该数是被删除和被插入的行数的和
受媄响的行数可以Ҏ(gu)地确定是否REPLACE只添加了一行,或者是否REPLACE也替换了其它行:(x)查该数是否ؓ(f)1Q添加)或更大(替换Q?nbsp;
CZ:
# eg:(phone字段为唯一索引) 代码如下 复制代码
代码如下: 代码如下 复制代码
?#8205;上所写,你也可以在INSERT INTO…..后面加上 ON DUPLICATE KEY UPDATEҎ(gu)来实现。如果?zhn)指定了ON DUPLICATE KEY UPDATEQƈ且插入行后会(x)D在一个UNIQUE索引或PRIMARY KEY中出现重复|则执行旧行UPDATE?nbsp;
例如Q如果列a被定义ؓ(f)UNIQUEQƈ且包含?Q则以下两个语句h相同的效果:(x)
代码如下: 代码如下 复制代码
INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE `c`=`c`+1;
UPDATE `table` SET `c`=`c`+1 WHERE `a`=1;
注释Q如果列b也是唯一列,则INSERT与此UPDATE语句相当Q?nbsp;
代码如下: 代码如下 复制代码 UPDATE `table` SET `c`=`c`+1 WHERE `a`=1 OR `b`=2 LIMIT 1;
(zhn)可以在UPDATE子句中用VALUES(col_name)函数从INSERT…UPDATE语句的INSERT部分引用列倹{换句话_(d)如果没有发生重复关键字冲H,则UPDATE子句中的VALUES(col_name)可以引用被插入的col_name的倹{本函数特别适用于多行插入。VALUES()函数只在INSERT…UPDATE语句中有意义Q其它时候会(x)q回NULL?/p>
代码如下: 代码如下 复制代码 INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3), (4, 5, 6) ON DUPLICATE KEY UPDATE `c`=VALUES(`a`)+VALUES(`b`);
代码如下: 代码如下 复制代码 INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE `c`=3;
INSERT INTO `table` (`a`, `b`, `c`) VALUES (4, 5, 6) ON DUPLICATE KEY UPDATE c=9;
CZQ?/p>
代码如下: 代码如下 复制代码
SELECT '', '', '', `table_name2`.`email`, `table_name2`.`phone`, NULL, NULL, 'pending', 29 FROM `table_name2`
WHERE `table_name2`.`status` = 1
ON DUPLICATE KEY UPDATE `table_name1`.`status`='pending'
代码如下: 代码如下 复制代码
IGNORE 只关注主键对应记录是不存在,无则dQ有则忽略?/p>
附一些删除重复记录的Ҏ(gu)
1、查找表中多余的重复记录Q重复记录是Ҏ(gu)单个字段QpeopleIdQ来判断 代码如下 复制代码 select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 代码如下 复制代码 delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1) 代码如下 复制代码 select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 代码如下 复制代码 delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) 代码如下 复制代码 select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
]]>
]]>
1.forcing log switches q开x?br />
sql> alter system switch logfile;
2.forcing checkpoints ?br />
sql> alter system checkpoint;
3.adding online redo log groups 加入联机重做日志l?br />
sql> alter database add logfile [group 4]
sql> ('/disk3/log4a.rdo','/disk4/log4b.rdo') size 1m;
4.adding online redo log members 加入联机重做日志成员
sql> alter database add logfile member
sql> '/disk3/log1b.rdo' to group 1,
sql> '/disk4/log2b.rdo' to group 2;
5.changes the name of the online redo logfile 更改名称的联机重做日?br />
sql> alter database rename file 'c:/oracle/oradata/oradb/redo01.log'
sql> to 'c:/oracle/oradata/redo01.log';
6.drop online redo log groups 落在UK做日志组
sql> alter database drop logfile group 3;
7.drop online redo log members 落在UK做日志成?br />
sql> alter database drop logfile member 'c:/oracle/oradata/redo01.log';
8.clearing online redo log files l算在线重做日志文g
sql> alter database clear [unarchived] logfile 'c:/oracle/log2a.rdo';
9.using logminer analyzing redo logfiles 使用logminer分析重做日志
a. in the init.ora specify utl_file_dir = ' '
b. sql> execute dbms_logmnr_d.build('oradb.ora','c:\oracle\oradb\log');
c. sql> execute dbms_logmnr_add_logfile('c:\oracle\oradata\oradb\redo01.log',
sql> dbms_logmnr.new);
d. sql> execute dbms_logmnr.add_logfile('c:\oracle\oradata\oradb\redo02.log',
sql> dbms_logmnr.addfile);
e. sql> execute dbms_logmnr.start_logmnr(dictfilename=>'c:\oracle\oradb\log\oradb.ora');
f. sql> select * from v$logmnr_contents(v$logmnr_dictionary,v$logmnr_parameters
sql> v$logmnr_logs);
g. sql> execute dbms_logmnr.end_logmnr;
W二?表空间管?br />
1.create tablespaces 创徏表空?br />
sql> create tablespace tablespace_name datafile 'c:\oracle\oradata\file1.dbf' size 100m,
sql> 'c:\oracle\oradata\file2.dbf' size 100m minimum extent 550k [logging/nologging]
sql> default storage (initial 500k next 500k maxextents 500 pctinccease 0)
sql> [online/offline] [permanent/temporary] [extent_management_clause]
2.locally managed tablespace 本地理表空?br />
sql> create tablespace user_data datafile 'c:\oracle\oradata\user_data01.dbf'
sql> size 500m extent management local uniform size 10m;
3.temporary tablespace 临时表空?br />
sql> create temporary tablespace temp tempfile 'c:\oracle\oradata\temp01.dbf'
sql> size 500m extent management local uniform size 10m;
4.change the storage setting 改变存储讄
sql> alter tablespace app_data minimum extent 2m;
sql> alter tablespace app_data default storage(initial 2m next 2m maxextents 999);
5.taking tablespace offline or online 同时表空间离U或在线
sql> alter tablespace app_data offline;
sql> alter tablespace app_data online;
6.read_only tablespace 只读表空?br />
sql> alter tablespace app_data read only|write;
7.droping tablespace 删除表空?br />
sql> drop tablespace app_data including contents;
8.enableing automatic extension of data files enableing自动廉数据案
sql> alter tablespace app_data add datafile 'c:\oracle\oradata\app_data01.dbf' size 200m
sql> autoextend on next 10m maxsize 500m;
9.change the size fo data files manually 寸变化的数据档案手?br />
sql> alter database datafile 'c:\oracle\oradata\app_data.dbf' resize 200m;
10.Moving data files: alter tablespace Ud数据案:改变表空?br />
sql> alter tablespace app_data rename datafile 'c:\oracle\oradata\app_data.dbf'
sql> to 'c:\oracle\app_data.dbf';
11.moving data files:alter database Ud数据档案:改变数据?br />
sql> alter database rename file 'c:\oracle\oradata\app_data.dbf'
sql> to 'c:\oracle\app_data.dbf';
W三??br />
1.create a table 新徏?br />
sql> create table table_name (column datatype,column datatype]....)
sql> tablespace tablespace_name [pctfree integer] [pctused integer]
sql> [initrans integer] [maxtrans integer]
sql> storage(initial 200k next 200k pctincrease 0 maxextents 50)
sql> [logging|nologging] [cache|nocache]
2.copy an existing table 复制一个现有的?br />
sql> create table table_name [logging|nologging] as subquery
3.create temporary table 创徏临时?br />
sql> create global temporary table xay_temp as select * from xay;
on commit preserve rows/on commit delete rows
4.pctfree = (average row size - initial row size) *100 /average row size
pctused = 100-pctfree- (average row size*100/available data space)
5.change storage and block utilization parameter 改变存储和利用块参数
sql> alter table table_name pctfree=30 pctused=50 storage(next 500k
sql> minextents 2 maxextents 100);
6.manually allocating extents
sql> alter table table_name allocate extent(size 500k datafile 'c:/oracle/data.dbf');
7.move tablespace Ud表空?br />
sql> alter table employee move tablespace users;
8.deallocate of unused space deallocate的闲|空?br />
sql> alter table table_name deallocate unused [keep integer]
9.truncate a table 截断?br />
sql> truncate table table_name;
10.drop a table 删除?br />
sql> drop table table_name [cascade constraints];
11.drop a column 删除?br />
sql> alter table table_name drop column comments cascade constraints checkpoint 1000;
alter table table_name drop columns continue;
12.mark a column as unused
sql> alter table table_name set unused column comments cascade constraints;
alter table table_name drop unused columns checkpoint 1000;
alter table orders drop columns continue checkpoint 1000
data_dictionary : dba_unused_col_tabs
W四?索引
1.creating function-based indexes 建立Z功能的烦?br />
sql> create index summit.item_quantity on summit.item(quantity-quantity_shipped);
2.create a B-tree index 创造一个B?wi)烦?br />
sql> create [unique] index index_name on table_name(column,.. asc/desc) tablespace
sql> tablespace_name [pctfree integer] [initrans integer] [maxtrans integer]
sql> [logging | nologging] [nosort] storage(initial 200k next 200k pctincrease 0
sql> maxextents 50);
3.pctfree(index)=(maximum number of rows-initial number of rows)*100/maximum number of rows
4.creating reverse key indexes 创造逆{关键指标
sql> create unique index xay_id on xay(a) reverse pctfree 30 storage(initial 200k
sql> next 200k pctincrease 0 maxextents 50) tablespace indx;
5.create bitmap index 创徏位图索引
sql> create bitmap index xay_id on xay(a) pctfree 30 storage( initial 200k next 200k
sql> pctincrease 0 maxextents 50) tablespace indx;
6.change storage parameter of index 改变存储参数指标
sql> alter index xay_id storage (next 400k maxextents 100);
7.allocating index space 分配索引I间
sql> alter index xay_id allocate extent(size 200k datafile 'c:/oracle/index.dbf');
8.alter index xay_id deallocate unused; 改变指数xay_id deallocate?/p>
W五?U束
1.define constraints as immediate or deferred 界定制约x或g?br />
sql> alter session set constraint[s] = immediate/deferred/default;
set constraint[s] constraint_name/all immediate/deferred;
2. sql> drop table table_name cascade constraints
sql> drop tablespace tablespace_name including contents cascade constraints
3. define constraints while create a table 界定限制,同时创徏一个表
sql> create table xay(id number(7) constraint xay_id primary key deferrable
sql> using index storage(initial 100k next 100k) tablespace indx);
primary key/unique/references table(column)/check
4.enable constraints 使制U?br />
sql> alter table xay enable novalidate constraint xay_id;
5.enable constraints 使制U?br />
sql> alter table xay enable validate constraint xay_id;
W六?LOAD数据
1.loading data using direct_load insert
sql> insert /*+append */ into emp nologging
sql> select * from emp_old;
2.parallel direct-load insert
sql> alter session enable parallel dml;
sql> insert /*+parallel(emp,2) */ into emp nologging
sql> select * from emp_old;
3.using sql*loader
sql> sqlldr scott/tiger \
sql> control = ulcase6.ctl \
sql> log = ulcase6.log direct=true
W七?数据整理
1.using expoty
$exp scott/tiger tables(dept,emp) file=c:\emp.dmp log=exp.log compress=n direct=y
2.using import
$imp scott/tiger tables(dept,emp) file=emp.dmp log=imp.log ignore=y
3.transporting a tablespace
sql>alter tablespace sales_ts read only;
$exp sys/.. file=xay.dmp transport_tablespace=y tablespace=sales_ts
triggers=n constraints=n
$copy datafile
$imp sys/.. file=xay.dmp transport_tablespace=y datafiles=(/disk1/sles01.dbf,/disk2
/sles02.dbf)
sql> alter tablespace sales_ts read write;
4.checking transport set
sql> DBMS_tts.transport_set_check(ts_list =>'sales_ts' ..,incl_constraints=>true);
在表transport_set_violations 中查?br />
sql> dbms_tts.isselfcontained 为true 是, 表示自包?br />
W八? 密码安全与资源管?br />
1.controlling account lock and password
sql> alter user juncky identified by oracle account unlock;
2.user_provided password function
sql> function_name(userid in varchar2(30),password in varchar2(30),
old_password in varchar2(30)) return boolean
3.create a profile : password setting
sql> create profile grace_5 limit failed_login_attempts 3
sql> password_lock_time unlimited password_life_time 30
sql>password_reuse_time 30 password_verify_function verify_function
sql> password_grace_time 5;
4.altering a profile
sql> alter profile default failed_login_attempts 3
sql> password_life_time 60 password_grace_time 10;
5.drop a profile
sql> drop profile grace_5 [cascade];
6.create a profile : resource limit
sql> create profile developer_prof limit sessions_per_user 2
sql> cpu_per_session 10000 idle_time 60 connect_time 480;
7. view => resource_cost : alter resource cost
dba_Users,dba_profiles
8. enable resource limits
sql> alter system set resource_limit=true;
W九(ji)?用户理
1.create a user: database authentication
sql> create user juncky identified by oracle default tablespace users
sql> temporary tablespace temp quota 10m on data password expire
sql> [account lock|unlock] [profile profilename|default];
2.change user quota on tablespace
sql> alter user juncky quota 0 on users;
3.drop a user
sql> drop user juncky [cascade];
4. monitor user
view: dba_users , dba_ts_quotas
W十?Ҏ(gu)理
1.system privileges: view => system_privilege_map ,dba_sys_privs,session_privs
2.grant system privilege
sql> grant create session,create table to managers;
sql> grant create session to scott with admin option;
with admin option can grant or revoke privilege from any user or role;
3.sysdba and sysoper privileges:
sysoper: startup,shutdown,alter database open|mount,alter database backup controlfile,
alter tablespace begin/end backup,recover database
alter database archivelog,restricted session
sysdba: sysoper privileges with admin option,create database,recover database until
4.password file members: view:=> v$pwfile_users
5.O7_dictionary_accessibility =true restriction access to view or tables in other schema
6.revoke system privilege
sql> revoke create table from karen;
sql> revoke create session from scott;
7.grant object privilege
sql> grant execute on dbms_pipe to public;
sql> grant update(first_name,salary) on employee to karen with grant option;
8.display object privilege : view => dba_tab_privs, dba_col_privs
9.revoke object privilege
sql> revoke execute on dbms_pipe from scott [cascade constraints];
10.audit record view :=> sys.aud$
11. protecting the audit trail
sql> audit delete on sys.aud$ by access;
12.statement auditing
sql> audit user;
13.privilege auditing
sql> audit select any table by summit by access;
14.schema object auditing
sql> audit lock on summit.employee by access whenever successful;
15.view audit option : view=> all_def_audit_opts,dba_stmt_audit_opts,dba_priv_audit_opts,dba_obj_audit_opts
16.view audit result: view=> dba_audit_trail,dba_audit_exists,dba_audit_object,dba_audit_session,dba_audit_statement
W十一? 规则理?br />
1.create roles
sql> create role sales_clerk;
sql> create role hr_clerk identified by bonus;
sql> create role hr_manager identified externally;
2.modify role
sql> alter role sales_clerk identified by commission;
sql> alter role hr_clerk identified externally;
sql> alter role hr_manager not identified;
3.assigning roles
sql> grant sales_clerk to scott;
sql> grant hr_clerk to hr_manager;
sql> grant hr_manager to scott with admin option;
4.establish default role
sql> alter user scott default role hr_clerk,sales_clerk;
sql> alter user scott default role all;
sql> alter user scott default role all except hr_clerk;
sql> alter user scott default role none;
5.enable and disable roles
sql> set role hr_clerk;
sql> set role sales_clerk identified by commission;
sql> set role all except sales_clerk;
sql> set role none;
6.remove role from user
sql> revoke sales_clerk from scott;
sql> revoke hr_manager from public;
7.remove role
sql> drop role hr_manager;
8.display role information
view: =>dba_roles,dba_role_privs,role_role_privs,dba_sys_privs,role_sys_privs,role_tab_privs,session_roles
W十二章: 备䆾与恢?br />
1. v$sga,v$instance,v$process,v$bgprocess,v$database,v$datafile,v$sgastat
2. Rman need set dbwr_IO_slaves or backup_tape_IO_slaves and large_pool_size
3. Monitoring Parallel Rollback
> v$fast_start_servers , v$fast_start_transactions
4.perform a closed database backup (noarchivelog)
> shutdown immediate
> cp files /backup/
> startup
5.restore to a different location
> connect system/manager as sysdba
> startup mount
> alter database rename file '/disk1/../user.dbf' to '/disk2/../user.dbf';
> alter database open;
6.recover syntax
--recover a mounted database
>recover database;
>recover datafile '/disk1/data/df2.dbf';
>alter database recover database;
--recover an opened database
>recover tablespace user_data;
>recover datafile 2;
>alter database recover datafile 2;
7.how to apply redo log files automatically
>set autorecovery on
>recover automatic datafile 4;
8.complete recovery:
--method 1(mounted databae)
>copy c:\backup\user.dbf c:\oradata\user.dbf
>startup mount
>recover datafile 'c:\oradata\user.dbf;
>alter database open;
--method 2(opened database,initially opened,not system or rollback datafile)
>copy c:\backup\user.dbf c:\oradata\user.dbf (alter tablespace offline)
>recover datafile 'c:\oradata\user.dbf' or
>recover tablespace user_data;
>alter database datafile 'c:\oradata\user.dbf' online or
>alter tablespace user_data online;
--method 3(opened database,initially closed not system or rollback datafile)
>startup mount
>alter database datafile 'c:\oradata\user.dbf' offline;
>alter database open
>copy c:\backup\user.dbf d:\oradata\user.dbf
>alter database rename file 'c:\oradata\user.dbf' to 'd:\oradata\user.dbf'
>recover datafile 'e:\oradata\user.dbf' or recover tablespace user_data;
>alter tablespace user_data online;
--method 4(loss of data file with no backup and have all archive log)
>alter tablespace user_data offline immediate;
>alter database create datafile 'd:\oradata\user.dbf' as 'c:\oradata\user.dbf''
>recover tablespace user_data;
>alter tablespace user_data online
5.perform an open database backup
> alter tablespace user_data begin backup;
> copy files /backup/
> alter database datafile '/c:/../data.dbf' end backup;
> alter system switch logfile;
6.backup a control file
> alter database backup controlfile to 'control1.bkp';
> alter database backup controlfile to trace;
7.recovery (noarchivelog mode)
> shutdown abort
> cp files
> startup
8.recovery of file in backup mode
>alter database datafile 2 end backup;
9.clearing redo log file
>alter database clear unarchived logfile group 1;
>alter database clear unarchived logfile group 1 unrecoverable datafile;
10.redo log recovery
>alter database add logfile group 3 'c:\oradata\redo03.log' size 1000k;
>alter database drop logfile group 1;
>alter database open;
or >cp c:\oradata\redo02.log' c:\oradata\redo01.log
>alter database clear logfile 'c:\oradata\log01.log';
如在ms sqlserver 用此语句Q?nbsp;
select top 2 * from test01 ׃(x)只显C前2条记录,
MYSQL
select * from your_table where .... limit 2;
使用limit可以了.
Oracle的语?
select * from (select rownum r ,* from test) tt
where tt.r > 50 and tt.r <= 100; (最好用PLSQL游标来解?
DB2中:(x)
select * from payment fetch first 5 row only --查前5条记?nbsp;
MySQL
select * from Cat limit ?,?
select * from Cat limit 20000,100
从Cat表中W?0000条开始取?00条记录,卌录号?0000?0099的记?nbsp;
select * from Cat limit ?
select * from Cat limit 100
从Cat表中取出记录号ؓ(f)1?00的记?nbsp;
select * from Cat order by rand() limit ?
select * from Cat order by rand() limit 100
从Cat表中随机取出100条记?nbsp;
Oracle
select * from (select *, rownum rownum_ from Cat where rownum <= ?) where rownum_ > ?
select * from (select *, rownum rownum_ from Cat where rownum <= 20099) where rownum_ > 19999
从Cat表中W?0000条开始取?00条记录,卌录号?0000?0099的记?nbsp;
select * from Cat where rownum <= ?
select * from Cat where rownum <= 100
从Cat表中取出记录号ؓ(f)1?00的记?nbsp;
select * from (select * from Cat order by dbms_random.value) where rownum < ?
select * from (select * from Cat order by dbms_random.value) where rownum < 100
从Cat表中随机取出100条记?nbsp;
HSQLDB
select * from Cat limit ? ?
select * from Cat limit 20000 100
从Cat表中W?0000条开始取?00条记录,卌录号?0000?0099的记?nbsp;
select * from Cat top ?
select * from Cat top 100
从Cat表中取出记录号ؓ(f)1?00的记?nbsp;
字符串类
CHARSET(str) //q回字串字符?br>CONCAT (string2 [,... ]) //q接字串
INSTR (string ,substring ) //q回substring首次在string中出现的位置,不存在返? LCASE (string2 ) //转换成小?br>LEFT (string2 ,length ) //从string2中的左边起取length个字W?br>LENGTH (string ) //string长度 LOAD_FILE (file_name ) //从文件读取内?br>LOCATE (substring , string [,start_position ] ) 同INSTR,但可指定开始位|?br>LPAD (string2 ,length ,pad ) //重复用pad加在string开?直到字串长度为length LTRIM (string2 ) //去除前端I格 REPEAT (string2 ,count ) //重复count?br>REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str RPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为length RTRIM (string2 ) //去除后端I格 STRCMP (string1 ,string2 ) //逐字W比较两字串大小, SUBSTRING (str , position [,length ]) //从str的position开?取length个字W? TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字W?br>UCASE (string2 ) //转换成大?br>RIGHT(string2,length) //取string2最后length个字W?br>SPACE(count) //生成count个空?/div> 数学c?/u>
ABS (number2 ) //l对?br>BIN (decimal_number ) //十进制{二进?br>CEILING (number2 ) //向上取整 CONV(number2,from_base,to_base) //q制转换 FLOOR (number2 ) //向下取整 FORMAT (number,decimal_places ) //保留数位数 HEX (DecimalNumber ) //转十六进?br>LEAST (number , number2 [,..]) //求最?br>MOD (numerator ,denominator ) //求余 POWER (number ,power ) //求指?br>RAND([seed]) //随机?br>ROUND (number [,decimals ]) //四舍五入,decimals为小C数] SIGN (number2 ) //q回W号,正负? SQRT(number2) //开qx 日期旉c?/u>
ADDTIME (date2 ,time_interval ) //time_interval加到date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区 CURRENT_DATE ( ) //当前日期 CURRENT_TIME ( ) //当前旉 CURRENT_TIMESTAMP ( ) //当前旉?br>DATE (datetime ) //q回datetime的日期部?br>DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或旉 DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式昄datetime DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减M个时?br>DATEDIFF (date1 ,date2 ) //两个日期?br>DAY (date ) //q回日期的天 DAYNAME (date ) //英文星期 DAYOFWEEK (date ) //星期(1-7) ,1为星期天 DAYOFYEAR (date ) //一q中的第几天 EXTRACT (interval_name FROM date ) //从date中提取日期的指定部分 MAKEDATE (year ,day ) //l出q及(qing)q中的第几天,生成日期?br>MAKETIME (hour ,minute ,second ) //生成旉?br>MONTHNAME (date ) //英文月䆾?br>NOW ( ) //当前旉 SEC_TO_TIME (seconds ) //U数转成旉 STR_TO_DATE (string ,format ) //字串转成旉,以format格式昄 TIMEDIFF (datetime1 ,datetime2 ) //两个旉?br>TIME_TO_SEC (time ) //旉转秒数] WEEK (date_time [,start_of_week ]) //W几?br>YEAR (datetime ) //q䆾 DAYOFMONTH(datetime) //月的W几?br>HOUR(datetime) //时 LAST_DAY(date) //date的月的最后日?br>MICROSECOND(datetime) //微秒 MONTH(datetime) //?br>MINUTE(datetime) //?/div> ?可用在INTERVAL中的cd
DAY ,DAY_HOUR ,DAY_MINUTE ,DAY_SECOND ,HOUR ,HOUR_MINUTE ,HOUR_SECOND ,MINUTE ,MINUTE_SECOND,MONTH ,SECOND ,YEAR |