锘??xml version="1.0" encoding="utf-8" standalone="yes"?> ----------------------------- 鐩墠 DBCP 鏈変袱涓増鏈垎鍒槸 1.3 鍜?1.4銆?/p> DBCP 1.3 鐗堟湰闇瑕佽繍琛屼簬 JDK 1.4-1.5 錛屾敮鎸?JDBC 3銆?/p> DBCP 1.4 鐗堟湰闇瑕佽繍琛屼簬 JDK 1.6 錛屾敮鎸?JDBC 4銆?/p> 1.3鍜?.4鍩轟簬鍚屼竴濂楁簮浠g爜錛屽惈鏈夋墍鏈夌殑bug淇鍜屾柊鐗規с傚洜姝ゅ湪閫夋嫨DBCP鐗堟湰鐨勬椂鍊欙紝瑕佺湅浣犵敤鐨勬槸浠涔圝DK鐗堟湰銆?/p> DBCP1.2鐗堟湰鎬ц兘涓鑸紝姣攃3p0宸尯澶氥侱BCP1.4鍜?.3錛岄厤鍚堬紙渚濊禆錛塩ommons pool 1.6鐨刯ar鍖?鍚勬柟闈㈠姛鑳姐佹ц兘鎺ㄨ繘鍒版柊鐨勯珮宄般傜浉瀵?.2鐗堟湰鎻愰珮涓嶅皯銆傝秴瓚?鎴栫浉褰?浜哻3p0.寤鴻浣跨敤DBCP1.4鎴?.3 + commons pool 1.6 Tomcat7 涓繚鐣橠BCP榪炴帴姹狅紝浠ュ吋瀹瑰凡鏈夊簲鐢ㄣ傚茍鎻愪緵浜嗘柊鐨凾omcat JDBC pool浣滀負DBCP鐨勫彲閫夋浛浠c傛柊鍑虹殑Tomcat JDBC pool錛屾嵁璇存瘮DBCP 1.4瑕佸ソ錛屾湭鎺ヨЕ錛屼篃涓嶅湪鏈枃璁ㄨ鑼冨洿鍐呫?/p> ----------------------------- 涓銆丄pache瀹樻柟DBCP鏂囨。緇欏嚭鐨勯厤緗ず渚嬶細 鍙弬瑙侊細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 JDBC榪炴帴姹犻厤緗ず渚嬶紝鑷姩媯鏌ヨ繛鎺ョ殑鍙敤鎬э紝dbcp瀹氭椂媯嫻嬭繛鎺ワ紝dbcp鑷姩閲嶈繛鐨勯厤緗?/strong> ----------------------------- 榛樿閰嶇疆鐨凞BCP榪炴帴姹狅紝鏄笉瀵規睜涓殑榪炴帴鍋氭祴璇曠殑錛屾湁鏃惰繛鎺ュ凡鏂紑浜嗭紝浣咲BCP榪炴帴姹犱笉鐭ラ亾錛岃繕浠ヤ負榪炴帴鏄ソ鐨勫憿銆?/p> 搴旂敤浠庢睜涓彇鍑鴻繖鏍風殑榪炴帴璁塊棶鏁版嵁搴撲竴瀹氫細鎶ラ敊銆傝繖涔熸槸濂藉浜轟笉鍠滄DBCP鐨勫師鍥犮?/p> 闂渚嬩竴錛?/p> MySQL8灝忔椂闂錛孧ysql鏈嶅姟鍣ㄩ粯璁よ繛鎺ョ殑“wait_timeout”鏄?灝忔椂錛屼篃灝辨槸璇翠竴涓猚onnection絀洪棽瓚呰繃8涓皬鏃訛紝Mysql灝嗚嚜鍔ㄦ柇寮璇?connection銆?/p> 浣嗘槸DBCP榪炴帴姹犲茍涓嶇煡閬撹繛鎺ュ凡緇忔柇寮浜嗭紝濡傛灉紼嬪簭姝e閥浣跨敤鍒拌繖涓凡緇忔柇寮鐨勮繛鎺ワ紝紼嬪簭灝變細鎶ラ敊璇?/p> 闂渚嬩簩錛?/p> 浠ュ墠榪樹嬌鐢⊿ybase鏁版嵁搴擄紝鐢變簬鏌愮鍘熷洜錛屾暟鎹簱姝諱簡鍚庨噸鍚佹垨鏂綉鍚庢仮澶嶃?/p> 絳変簡綰?0鍒嗛挓鍚庯紝DBCP榪炴帴姹犱腑鐨勮繛鎺ヨ繕閮芥槸涓嶈兘浣跨敤鐨勶紙鏂紑鐨勶級錛岃闂暟鎹簲鐢ㄤ竴鐩存姤閿欙紝鏈鍚庡彧鑳介噸鍚疶omcat闂鎵嶈В鍐?銆?/p> 瑙e喅鏂規錛?/p> 鏂規1銆佸畾鏃跺榪炴帴鍋氭祴璇曪紝嫻嬭瘯澶辮觸灝卞叧闂繛鎺ャ?/p> 鏂規2銆佹帶鍒惰繛鎺ョ殑絀洪棽鏃墮棿杈懼埌N鍒嗛挓錛屽氨鍏抽棴榪炴帴錛岋紙鐒跺悗鍙啀鏂板緩榪炴帴錛夈?/p> 浠ヤ笂涓や釜鏂規浣跨敤浠繪剰涓涓氨鍙互瑙e喅浠ヨ堪涓ょ被闂銆傚鏋滃彧浣跨敤鏂規2錛屽緩璁?N <= 5鍒嗛挓銆傝繛鎺ユ柇寮鍚庢渶澶?鍒嗛挓鍚庡彲鎭㈠銆?/p> 涔熷彲娣峰悎浣跨敤涓や釜鏂規錛屽緩璁?N = 30鍒嗛挓銆?/p> 涓嬮潰灝辨槸DBCP榪炴帴姹狅紝鍚屾椂浣跨敤浜嗕互涓婁袱涓柟妗堢殑閰嶇疆閰嶇疆 validationQuery = "SELECT 1" 楠岃瘉榪炴帴鏄惁鍙敤錛屼嬌鐢ㄧ殑SQL璇彞 testWhileIdle = "true" 鎸囨槑榪炴帴鏄惁琚┖闂茶繛鎺ュ洖鏀跺櫒(濡傛灉鏈?榪涜媯楠?濡傛灉媯嫻嬪け璐?鍒欒繛鎺ュ皢琚粠姹犱腑鍘婚櫎. testOnBorrow = "false" 鍊熷嚭榪炴帴鏃朵笉瑕佹祴璇曪紝鍚﹀垯寰堝獎鍝嶆ц兘 timeBetweenEvictionRunsMillis = "30000" 姣?0縐掕繍琛屼竴嬈$┖闂茶繛鎺ュ洖鏀跺櫒 minEvictableIdleTimeMillis = "1800000" 姹犱腑鐨勮繛鎺ョ┖闂?0鍒嗛挓鍚庤鍥炴敹,榛樿鍊煎氨鏄?0鍒嗛挓銆?/p> numTestsPerEvictionRun="3" 鍦ㄦ瘡嬈$┖闂茶繛鎺ュ洖鏀跺櫒綰跨▼(濡傛灉鏈?榪愯鏃舵鏌ョ殑榪炴帴鏁伴噺錛岄粯璁ゅ煎氨鏄?. 瑙i噴錛?/p> 閰嶇疆timeBetweenEvictionRunsMillis = "30000"鍚庯紝姣?0縐掕繍琛屼竴嬈$┖闂茶繛鎺ュ洖鏀跺櫒錛堢嫭绔嬬嚎紼嬶級銆傚茍姣忔媯鏌?涓繛鎺ワ紝濡傛灉榪炴帴絀洪棽鏃墮棿瓚呰繃30鍒嗛挓灝遍攢姣併傞攢姣佽繛鎺ュ悗錛岃繛鎺ユ暟閲忓氨灝戜簡錛屽鏋滃皬浜巑inIdle鏁伴噺錛屽氨鏂板緩榪炴帴錛岀淮鎶ゆ暟閲忎笉灝戜簬minIdle錛岃繃琛屼簡鏂拌佹洿鏇褲?/p> testWhileIdle = "true" 琛ㄧず姣?0縐掞紝鍙栧嚭3鏉¤繛鎺ワ紝浣跨敤validationQuery = "SELECT 1" 涓殑SQL榪涜嫻嬭瘯 錛屾祴璇曚笉鎴愬姛灝遍攢姣佽繛鎺ャ傞攢姣佽繛鎺ュ悗錛岃繛鎺ユ暟閲忓氨灝戜簡錛屽鏋滃皬浜巑inIdle鏁伴噺錛屽氨鏂板緩榪炴帴銆?/p> testOnBorrow = "false" 涓瀹氳閰嶇疆錛屽洜涓哄畠鐨勯粯璁ゅ兼槸true銆俧alse琛ㄧず姣忔浠庤繛鎺ユ睜涓彇鍑鴻繛鎺ユ椂錛屼笉闇瑕佹墽琛寁alidationQuery = "SELECT 1" 涓殑SQL榪涜嫻嬭瘯銆傝嫢閰嶇疆涓簍rue,瀵規ц兘鏈夐潪甯稿ぇ鐨勫獎鍝嶏紝鎬ц兘浼氫笅闄?-10鍊嶃傛墍鍦ㄤ竴瀹氳閰嶇疆涓篺alse. 姣?0縐掞紝鍙栧嚭numTestsPerEvictionRun鏉¤繛鎺ワ紙鏈緥鏄?錛屼篃鏄粯璁ゅ鹼級錛屽彂鍑?SELECT 1" SQL璇彞榪涜嫻嬭瘯 錛屾祴璇曡繃鐨勮繛鎺ヤ笉綆楁槸“琚嬌鐢?#8221;浜嗭紝榪樼畻鏄┖闂茬殑銆傝繛鎺ョ┖闂?0鍒嗛挓鍚庝細琚攢姣併?/p> ----------------------------- maxIdle鍊間笌maxActive鍊煎簲閰嶇疆鐨勬帴榪戙?/p> 鍥犱負錛屽綋榪炴帴鏁拌秴榪噈axIdle鍊煎悗錛屽垰鍒氫嬌鐢ㄥ畬鐨勮繛鎺ワ紙鍒氬垰絀洪棽涓嬫潵錛変細绔嬪嵆琚攢姣併傝屼笉鏄垜鎯寵鐨勭┖闂睲縐掑悗鍐嶉攢姣佽搗涓涓紦鍐蹭綔鐢ㄣ傝繖涓鐐笵BCP鍋氱殑鍙兘涓庝綘鎯沖儚鐨勪笉涓鏍楓?/p> 鑻axIdle涓巑axActive鐩稿樊杈冨ぇ錛屽湪楂樿礋杞界殑緋葷粺涓細瀵艱嚧棰戠箒鐨勫垱寤恒侀攢姣佽繛鎺ワ紝榪炴帴鏁板湪maxIdle涓巑axActive闂村揩閫熼綣佹嘗鍔紝榪欎笉鏄垜鎯寵鐨勩?/p> 楂樿礋杞界郴緇熺殑maxIdle鍊煎彲浠ヨ緗負涓巑axActive鐩稿悓鎴栬緗負-1(-1琛ㄧず涓嶉檺鍒?錛岃榪炴帴鏁伴噺鍦╩inIdle涓巑axIdle闂寸紦鍐叉參閫熸嘗鍔ㄣ?/p> timeBetweenEvictionRunsMillis寤鴻璁劇疆鍊?/p> initialSize="5"錛屼細鍦╰omcat涓鍚姩鏃訛紝鍒涘緩5鏉¤繛鎺ワ紝鏁堟灉寰堢悊鎯熾?/p> 浣嗗悓鏃舵垜浠繕閰嶇疆浜唌inIdle="10"錛屼篃灝辨槸璇達紝鏈灝戣淇濇寔10鏉¤繛鎺ワ紝閭g幇鍦ㄥ彧鏈?鏉¤繛鎺ワ紝鍝粈涔堟椂鍊欏啀鍒涘緩灝戠殑5鏉¤繛鎺ュ憿錛?/p> 1銆佺瓑涓氬姟鍘嬪姏涓婃潵浜嗭紝 DBCP灝變細鍒涘緩鏂扮殑榪炴帴銆?/p> 2銆侀厤緗畉imeBetweenEvictionRunsMillis=“鏃墮棿”,DBCP浼氬惎鐢ㄧ嫭绔嬬殑宸ヤ綔綰跨▼瀹氭椂媯鏌ワ紝琛ヤ笂灝戠殑5鏉¤繛鎺ャ傞攢姣佸浣欑殑榪炴帴涔熸槸鍚岀悊銆?/p> ------------------------------ DBCP鐨勮繛鎺ユ暟浼氬湪 0 - minIdle - maxIdle - maxActive 涔嬮棿鍙樺寲銆傚彉鍖栫殑閫昏緫鎻忚堪濡備笅錛?/p> 榛樿鏈厤緗甶nitialSize(榛樿鍊兼槸0)鍜宼imeBetweenEvictionRunsMillis鍙傛暟鏃訛紝鍒氬惎鍔╰omcat鏃訛紝榪炴帴鏁版槸0銆傚綋搴旂敤鏈変竴涓茍鍙戣闂暟鎹簱鏃禗BCP鍒涘緩涓涓繛鎺ャ?/p> 鐩墠榪炴帴鏁伴噺榪樻湭杈懼埌minIdle錛屼絾DBCP涔熶笉鑷姩鍒涘緩鏂拌繛鎺ュ凡浣挎暟閲忚揪鍒癿inIdle鏁伴噺錛堟病鏈変竴涓嫭绔嬬殑宸ヤ綔綰跨▼鏉ユ鏌ュ拰鍒涘緩錛夈?/p> 闅忕潃搴旂敤騫跺彂璁塊棶鏁版嵁搴撶殑澧炲錛岃繛鎺ユ暟涔熷澶氾紝浣嗛兘涓巑inIdle鍊兼棤鍏籌紝寰堝揩minIdle琚秴瓚婏紝minIdle鍊間竴鐐圭敤閮芥病鏈夈?/p> 鐩村埌榪炴帴鐨勬暟閲忚揪鍒癿axIdle鍊鹼紝榪欐椂鐨勮繛鎺ラ兘鏄彧澧炰笉鍑忕殑銆?鍐嶇戶緇彂灞曪紝榪炴帴鏁板啀澧炲騫惰秴榪噈axIdle鏃訛紝浣跨敤瀹岀殑榪炴帴錛堝垰鍒氱┖闂蹭笅鏉ョ殑錛変細绔嬪嵆鍏抽棴錛屾諱綋榪炴帴鐨勬暟閲忕ǔ瀹氬湪maxIdle浣嗕笉浼氳秴榪噈axIdle銆?/p> 浣嗘椿鍔ㄨ繛鎺ワ紙鍦ㄤ嬌鐢ㄤ腑鐨勮繛鎺ワ級鍙兘鏁伴噺涓婄灛闂磋秴榪噈axIdle錛屼絾姘歌繙涓嶄細瓚呰繃maxActive銆?/p> 榪欐椂濡傛灉搴旂敤涓氬姟鍘嬪姏灝忎簡錛岃闂暟鎹簱鐨勫茍鍙戝皯浜嗭紝榪炴帴鏁頒篃涓嶄細鍑忓皯錛堟病鏈変竴涓嫭绔嬬殑綰跨▼鏉ユ鏌ュ拰閿姣侊級錛屽皢淇濇寔鍦╩axIdle鐨勬暟閲忋?/p> 榛樿鏈厤緗甶nitialSize(榛樿鍊兼槸0)錛屼絾閰嶇疆浜唗imeBetweenEvictionRunsMillis=“30000”錛?0縐掞級鍙傛暟鏃訛紝鍒氬惎鍔╰omcat鏃訛紝榪炴帴鏁版槸0銆傞┈涓婂簲鐢ㄦ湁涓涓茍鍙戣闂暟鎹簱鏃禗BCP鍒涘緩涓涓繛鎺ャ?/p> 鐩墠榪炴帴鏁伴噺榪樻湭杈懼埌minIdle錛屾瘡30縐扗BCP鐨勫伐浣滅嚎紼嬫鏌ヨ繛鎺ユ暟鏄惁灝戜簬minIdle鏁伴噺錛岃嫢灝戜簬灝卞垱寤烘柊榪炴帴鐩村埌杈懼埌minIdle鏁伴噺銆?/p> 闅忕潃搴旂敤騫跺彂璁塊棶鏁版嵁搴撶殑澧炲錛岃繛鎺ユ暟涔熷澶氾紝鐩村埌杈懼埌maxIdle鍊箋傝繖鏈熼棿姣?0縐扗BCP鐨勫伐浣滅嚎紼嬫鏌ヨ繛鎺ユ槸鍚︾┖闂蹭簡30鍒嗛挓錛岃嫢鏄氨閿姣併備絾姝ゆ椂鏄笟鍔$殑楂樺嘲鏈燂紝鏄笉浼氭湁闀胯揪30鍒嗛挓鐨勭┖闂茶繛鎺ョ殑錛屽伐浣滅嚎紼嬫煡浜嗕篃鏄櫧鏌ワ紝浣嗗畠鍦ㄥ伐浣溿傚埌榪欓噷榪炴帴鏁伴噺涓鐩存槸鍛堢幇澧為暱鐨勮秼鍔褲?/p> 褰撹繛鎺ユ暟鍐嶅澶氳秴榪噈axIdle鏃訛紝浣跨敤瀹岀殑榪炴帴(鍒氬垰絀洪棽涓嬫潵)浼氱珛鍗沖叧闂紝鎬諱綋榪炴帴鐨勬暟閲忕ǔ瀹氬湪maxIdle銆傚仠姝簡澧為暱鐨勮秼鍔褲備絾媧誨姩榪炴帴錛堝湪浣跨敤涓殑榪炴帴錛夊彲鑳芥暟閲忎笂鐬棿瓚呰繃maxIdle錛屼絾姘歌繙涓嶄細瓚呰繃maxActive銆?/p> 榪欐椂濡傛灉搴旂敤涓氬姟鍘嬪姏灝忎簡錛岃闂暟鎹簱鐨勫茍鍙戝皯浜嗭紝姣?0縐扗BCP鐨勫伐浣滅嚎紼嬫鏌ヨ繛鎺?榛樿姣忔鏌?鏉?鏄惁絀洪棽杈懼埌30鍒嗛挓(榪欐槸榛樿鍊?錛岃嫢榪炴帴絀洪棽杈懼埌30鍒嗛挓錛屽氨閿姣佽繛鎺ャ傝繖鏃惰繛鎺ユ暟鍑忓皯浜嗭紝鍛堜笅闄嶈秼鍔匡紝灝嗕粠maxIdle璧板悜minIdle銆傚綋灝忎簬minIdle鍊兼椂錛屽垯DBCP鍒涘緩鏂拌繛鎺ュ凡浣挎暟閲忕ǔ瀹氬湪minIdle錛屽茍榪涜鐫鏂拌佹洿鏇褲?/p> 閰嶇疆initialSize=“10”鏃訛紝tomcat涓鍚姩灝卞垱寤?0鏉¤繛鎺ャ傚叾瀹冨悓涓娿?/p> minIdle瑕佷笌timeBetweenEvictionRunsMillis閰嶅悎浣跨敤鎵嶆湁鐢?鍗曠嫭浣跨敤minIdle涓嶄細璧蜂綔鐢ㄣ?/p> ----------------------------- Tomcat鑷甫DBCP鐨勫寘錛屾槸$CATALINA_HOME/lib/tomcat-dbcp.jar銆?/p> tomcat-dbcp.jar鍚湁commons pool銆乧ommons DBCP涓や釜鍖呯殑鍐呭銆備絾鍙惈鏈変笌榪炴帴姹犳湁鍏崇殑綾匯?/p> 鏁版嵁婧愰厤緗湪context.xml鏂囦歡涓紝 瑕佸湪tomcat鐨刲ib鐩綍涓斁jdbc 椹卞姩鍖?/p> 鏁版嵁婧愰厤緗湪server.xml鐨刪ost涓紝涓嶉渶瑕佸湪tomcat鐨刲ib鐩綍涓斁jdbc 椹卞姩鍖咃紝鍙嬌鐢ㄥ伐紼嬩腑鐨刯dbc椹卞姩鍖?/p> JNDI閰嶇疆:鏇存敼tomcat鐨剆erver.xml鎴朿ontext.xml 鍏ㄥ眬鐨勬暟鎹簮錛?/p> 濡傛灉闇瑕侀厤緗叏灞鐨?Resource錛屽垯鍦╯erver.xml鐨凣lobalNamingResources鑺傜偣閲屽姞鍏esource錛屽啀鍦–ontext鑺傜偣閲屽姞鍏esourceLink鐨勯厤緗?/p> 鍏ㄥ眬鐨剅esource鍙槸涓轟簡閲嶇敤錛屾柟渚挎墍鏈夎tomcat涓嬬殑web宸ョ▼鐨勬暟鎹簮綆$悊錛屼絾濡傛灉浣犵殑tomcat涓嶄細鍚屾椂鍔犺澆澶氫釜web宸ョ▼錛屼篃灝辨槸璇翠竴涓猼omcat鍙姞杞戒竴涓獁eb宸ョ▼鏃訛紝鏄病鏈夊繀瑕侀厤緗叏灞鐨剅esource鐨勩?/p> 姣忎釜web宸ョ▼涓涓暟鎹簮錛?/p> 鍦?CATALINA_HOME/conf/context.xml鐨勬牴鑺傜偣Context閲屽姞鍏esource閰嶇疆銆傝繖縐嶉厤緗柟娉曪紝浣犲湪context.xml閰嶇疆浜嗕竴涓暟鎹簮錛屼絾Tomcat涓湁鍚屾椂榪愯鐫5涓伐紼嬶紝閭d簡灝卞潖浜嬪効浜嗭紝榪欎釜鍦═omcat鍚姩鏃舵暟鎹簮琚垱寤轟簡5浠斤紝姣忎釜宸ョ▼1浠芥暟鎹簮銆傝繛鎺ユ暟浼氭槸浣犻厤緗殑鍙傛暟鐨?鍊嶃?/p> 鍙湁鍦ㄤ綘鐨凾omcat鍙姞杞戒竴涓獁eb宸ョ▼鏃?鎵嶅彲浠ョ洿鎺ヤ互context.xml閰嶇疆鏁版嵁婧愩?/p> <Resource name="jdbc/testDB" //鎸囧畾鐨刯ndi鍚嶇О錛屼細鐢ㄤ簬spring鏁版嵁婧恇ean鐨勯厤緗拰ResourceLink鐨勯厤緗?/p> type="javax.sql.DataSource" //鏁版嵁婧愮被鍨嬶紝浣跨敤鏍囧噯鐨刯avax.sql.DataSource driverClassName="com.mysql.jdbc.Driver" //JDBC椹卞姩鍣?nbsp; url="jdbc:mysql://localhost:3306/test" //鏁版嵁搴揢RL鍦板潃 username="test" //鏁版嵁搴撶敤鎴峰悕 password="test" //鏁版嵁搴撳瘑鐮?/p> maxIdle="40" //鏈澶х殑絀洪棽榪炴帴鏁?/p> maxWait="4000" //褰撴睜鐨勬暟鎹簱榪炴帴宸茬粡琚崰鐢ㄧ殑鏃跺欙紝鏈澶х瓑寰呮椂闂?/p> maxActive="40" //榪炴帴姹犲綋涓渶澶х殑鏁版嵁搴撹繛鎺?/p> removeAbandoned="true" removeAbandonedTimeout="180" logAbandoned="true" //琚涪寮冪殑鏁版嵁搴撹繛鎺ユ槸鍚﹀仛璁板綍錛屼互渚胯窡韙?/p> factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" /> 榪欓噷鐨刦actory鎸囩殑鏄Resource 閰嶇疆浣跨敤鐨勬槸鍝釜鏁版嵁婧愰厤緗被錛岃繖閲屼嬌鐢ㄧ殑鏄痶omcat鑷甫鐨勬爣鍑嗘暟鎹簮Resource閰嶇疆綾伙紝榪欎釜綾諱篃鍙互鑷繁鍐欙紝瀹炵幇javax.naming.spi.ObjectFactory 鎺ュ彛鍗沖彲銆傛煇浜涘湴鏂逛嬌鐢ㄧ殑commons-dbcp.jar涓殑org.apache.commons.dbcp.BasicDataSourceFactory錛屽鏋滀嬌鐢ㄨ繖涓氨闇鎶奵ommons-dbcp.jar鍙婂叾渚濊禆鐨刯ar鍖咃紝閮芥斁鍦╰omcat鐨刲ib涓嬶紝鍏夋斁鍦ㄥ伐紼嬬殑WEB-INF/lib涓嬫槸涓嶅鐨勩?/p> ResourceLink 鐨勯厤緗湁澶氱錛?/p> 1)tomcat瀹夎鐩綍涓嬬殑conf/context.xml錛屾妸鍏ㄥ眬鐨剅esource鐩存帴鍏紑緇欒tomcat涓嬬殑鎵鏈墂eb宸ョ▼錛屽湪Context鑺傜偣涓姞鍏ワ細 <ResourceLink global="jdbc/testMDB" name="jdbc/testMDB" type="javax.sql.DataSource"/> 涓嶅緩璁湪姝ゆ枃浠朵腑錛屼笉浣跨敤<ResourceLink/>錛岃屼嬌鐢?lt;Resource/>鐩存帴閰嶇疆鏁版嵁婧愶紝鍘熷洜涓婇潰宸茶鏄庝簡銆? 2)tomcat瀹夎鐩綍涓嬬殑conf/server.xml錛岃鏂規硶鍙互鎸囧畾鎶婂摢浜泂ource緇戝畾鍒板摢涓獁eb宸ョ▼涓嬨?/p> <!-- 鏂板錛岀涓琛屼負鍔犺澆鐨勫伐紼嬮厤緗紝絎簩琛屾槸璇ュ伐紼嬮渶瑕佺殑ResourceLink閰嶇疆 --> <context docBase="/web/webapps/phoenix" path="" reloadable="false"> <ResourceLink global="jdbc/testMDB" name="jdbc/testMDB" type="javax.sql.DataSource"/> </context> 涔熷彲鍦ㄦ鏂囦歡涓紝涓嶄嬌鐢?lt;ResourceLink/>錛岃屼嬌鐢?lt;Resource/>鐩存帴閰嶇疆鏁版嵁婧愩?/p> 3)瀹夎鐩綍涓嬬殑conf/localhost/涓嬪緩绔嬩竴涓獂ml鏂囦歡錛屾枃浠跺悕鏄?lt;yourAppName>.xml銆傛瘮濡傚伐紼嬪悕涓簍est錛屽垯璇ml鍚嶄負test.xml銆?/p> <?xml version="1.0" encoding="UTF-8"?> <Context> <ResourceLink global="jdbc/testMDB" name="jdbc/testMDB" type="javax.sql.DataSource"/> </context> 涔熷彲鍦ㄦ鏂囦歡涓紝涓嶄嬌鐢?lt;ResourceLink/>錛岃屼嬌鐢?lt;Resource/>鐩存帴閰嶇疆鏁版嵁婧愩?/p> 4)tomcat瀹夎鐩綍涓嬬殑\webapps\test\META-INF\context.xml鐨凜ontext鑺傜偣涓鍔? <ResourceLink global="jdbc/testMDB" name="jdbc/testMDB" type="javax.sql.DataSource"/> 涔熷彲鍦ㄦ鏂囦歡涓紝涓嶄嬌鐢?lt;ResourceLink/>錛岃屼嬌鐢?lt;Resource/>鐩存帴閰嶇疆鏁版嵁婧愩?/p> 鏈枃鍐呭閮藉湪tomcat6.0涓婅繍琛屾祴璇曡繃錛岃繕涓嬭澆浜哻ommons DBCP鐨勬簮鐮侊紝鍔犲叆浜嗚窡韙棩蹇楋紝鐢ㄤ簬楠岃瘉鏈枃鐨勭悊璁恒?/p> ----------------------------- Tomcat JDBC pool DBCP 1.4 c3p0 閫熷害涓嶉敊 BoneCP 閫熷害涓嶉敊錛屼絾浼氬惎鐢ㄥ緢澶氶檮鍔犵嚎紼嬪仛鍥炴敹銆佸叧闂伐浣溿?/p> Proxool 鍦ㄩ珮騫跺彂鏃跺嚭鐜板紓甯?/p> DBCP 1.2 DBPool 鏈宸紝鍨簳銆?/p> 鍙傝冩枃妗c奐ava榪炴帴姹犺瘎浼版姤鍛娿?/p> 濡傛灉鏄敤涓婚敭primary鎴栬呭敮涓绱㈠紩unique鍖哄垎浜嗚褰曠殑鍞竴鎬?閬垮厤閲嶅鎻掑叆璁板綍鍙互浣跨敤錛?/p> 浠g爜濡備笅: 浠g爜濡備笅: REPLACE INTO `table_name`(`col_name`, ...) VALUES (...); ...綆楁硶璇存槑錛?/p> REPLACE鐨勮繍琛屼笌INSERT寰堢浉鍍?浣嗘槸濡傛灉鏃ц褰曚笌鏂拌褰曟湁鐩稿悓鐨勫鹼紝鍒欏湪鏂拌褰曡鎻掑叆涔嬪墠錛屾棫璁板綍琚垹闄わ紝鍗籌細 褰撳洜涓哄浜庝富閿垨鍞竴鍏抽敭瀛楀嚭鐜伴噸澶嶅叧閿瓧閿欒鑰岄犳垚鎻掑叆澶辮觸鏃訛細 浠g爜濡備笅: REPLACE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('test569', '99999', '123'); 鍙﹀,鍦?SQL Server 涓彲浠ヨ繖鏍峰鐞嗭細 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' 鏂規涓夛細ON DUPLICATE KEY UPDATE 濡傛灉琛屼綔涓烘柊璁板綍琚彃鍏ワ紝鍒欏彈褰卞搷琛岀殑鍊間負1錛涘鏋滃師鏈夌殑璁板綍琚洿鏂幫紝鍒欏彈褰卞搷琛岀殑鍊間負2銆?/p> 濡傛灉a=1 OR b=2涓庡涓鍚戝尮閰嶏紝鍒欏彧鏈変竴涓琚洿鏂般傞氬父錛屾偍搴旇灝介噺閬垮厤瀵瑰甫鏈夊涓敮涓鍏抽敭瀛楃殑琛ㄤ嬌鐢∣N DUPLICATE KEY瀛愬彞銆?/p> 鏈鍙ヤ笌浠ヤ笅涓や釜璇彞浣滅敤鐩稿悓錛?/p> 娉ㄩ噴錛氬綋鎮ㄤ嬌鐢∣N DUPLICATE KEY UPDATE鏃訛紝DELAYED閫夐」琚拷鐣ャ?/p> 榪欎釜渚嬪瓙鏄垜鍦ㄥ疄闄呴」鐩腑鐢ㄥ埌鐨勶細鏄皢涓涓〃鐨勬暟鎹鍏ュ埌鍙﹀涓涓〃涓紝鏁版嵁鐨勯噸澶嶆у氨寰楄冭檻(濡備笅)錛屽敮涓绱㈠紩涓猴細email錛?/p> INSERT INTO `table_name1` (`title`, `first_name`, `last_name`, `email`, `phone`, `user_id`, `role_id`, `status`, `campaign_id`) 鍐嶈創涓涓緥瀛愶細 INSERT INTO `class` SELECT * FROM `class1` ON DUPLICATE KEY UPDATE `class`.`course`=`class1`.`course` 鍏跺畠鍏抽敭錛欴ELAYED 鍋氫負蹇熸彃鍏ワ紝騫朵笉鏄緢鍏沖績澶辨晥鎬э紝鎻愰珮鎻掑叆鎬ц兘銆?nbsp; php闃叉閲嶅鎻掑叆璁板綍瀹炰緥 鏌ヨ鍙婂垹闄ら噸澶嶈褰曠殑SQL璇彞 2銆佸垹闄よ〃涓浣欑殑閲嶅璁板綍錛岄噸澶嶈褰曟槸鏍規嵁鍗曚釜瀛楁錛坧eopleId錛夋潵鍒ゆ柇錛屽彧鐣欐湁rowid鏈灝忕殑璁板綍 3銆佹煡鎵捐〃涓浣欑殑閲嶅璁板綍錛堝涓瓧孌碉級 4銆佸垹闄よ〃涓浣欑殑閲嶅璁板綍錛堝涓瓧孌碉級錛屽彧鐣欐湁rowid鏈灝忕殑璁板綍 5銆佹煡鎵捐〃涓浣欑殑閲嶅璁板綍錛堝涓瓧孌碉級錛屼笉鍖呭惈rowid鏈灝忕殑璁板綍DBCP榪炴帴姹犱粙緇?/h1>
DBCP榪炴帴姹犻厤緗弬鏁拌瑙?/h1>
DBCP榪炴帴姹犵殑鑷垜媯嫻?/h1>
DBCP榪炴帴姹犻厤緗弬鏁版敞鎰忎簨欏?
榪炴帴閿姣佺殑閫昏緫
Tomcat涓厤緗瓺BCP榪炴帴姹?/h1>
榪炴帴姹犳帓鍚嶏紙綰釜浜虹湅娉曪級
]]> 浠g爜濡備笅 澶嶅埗浠g爜 INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('test9@163.com', '99999', '9999');
榪欐牱褰撴湁閲嶅璁板綍灝變細蹇界暐,鎵ц鍚庤繑鍥炴暟瀛?
榪樻湁涓簲鐢ㄥ氨鏄鍒惰〃,閬垮厤閲嶅璁板綍錛?nbsp;
浠g爜濡備笅: 浠g爜濡備笅 澶嶅埗浠g爜 INSERT IGNORE INTO `table_1` (`name`) SELECT `name` FROM `table_2`;
鏂規浜岋細浣跨敤Replace
璇硶鏍煎紡錛?/p> 浠g爜濡備笅 澶嶅埗浠g爜
REPLACE INTO `table_name` (`col_name`, ...) SELECT ...;
REPLACE INTO `table_name` SET `col_name`='value',
灝濊瘯鎶婃柊琛屾彃鍏ュ埌琛ㄤ腑
浠庤〃涓垹闄ゅ惈鏈夐噸澶嶅叧閿瓧鍊肩殑鍐茬獊琛?nbsp;
鍐嶆灝濊瘯鎶婃柊琛屾彃鍏ュ埌琛ㄤ腑
鏃ц褰曚笌鏂拌褰曟湁鐩稿悓鐨勫肩殑鍒ゆ柇鏍囧噯灝辨槸錛?br />琛ㄦ湁涓涓狿RIMARY KEY鎴朥NIQUE绱㈠紩錛屽惁鍒欙紝浣跨敤涓涓猂EPLACE璇彞娌℃湁鎰忎箟銆傝璇彞浼氫笌INSERT鐩稿悓錛屽洜涓烘病鏈夌儲寮曡鐢ㄤ簬紜畾鏄惁鏂拌澶嶅埗浜嗗叾瀹冪殑琛屻?nbsp;
榪斿洖鍊鹼細
REPLACE璇彞浼氳繑鍥炰竴涓暟錛屾潵鎸囩ず鍙楀獎鍝嶇殑琛岀殑鏁扮洰銆傝鏁版槸琚垹闄ゅ拰琚彃鍏ョ殑琛屾暟鐨勫拰
鍙楀獎鍝嶇殑琛屾暟鍙互瀹規槗鍦扮‘瀹氭槸鍚EPLACE鍙坊鍔犱簡涓琛岋紝鎴栬呮槸鍚EPLACE涔熸浛鎹簡鍏跺畠琛岋細媯鏌ヨ鏁版槸鍚︿負1錛堟坊鍔狅級鎴栨洿澶э紙鏇挎崲錛夈?nbsp;
紺轟緥:
# eg:(phone瀛楁涓哄敮涓绱㈠紩) 浠g爜濡備笅 澶嶅埗浠g爜
浠g爜濡備笅: 浠g爜濡備笅 澶嶅埗浠g爜
濡?#8205;涓婃墍鍐欙紝浣犱篃鍙互鍦↖NSERT INTO…..鍚庨潰鍔犱笂 ON DUPLICATE KEY UPDATE鏂規硶鏉ュ疄鐜般傚鏋滄偍鎸囧畾浜哋N DUPLICATE KEY UPDATE錛屽茍涓旀彃鍏ヨ鍚庝細瀵艱嚧鍦ㄤ竴涓猆NIQUE绱㈠紩鎴朠RIMARY KEY涓嚭鐜伴噸澶嶅鹼紝鍒欐墽琛屾棫琛孶PDATE銆?nbsp;
渚嬪錛屽鏋滃垪a琚畾涔変負UNIQUE錛屽茍涓斿寘鍚?錛屽垯浠ヤ笅涓や釜璇彞鍏鋒湁鐩稿悓鐨勬晥鏋滐細
浠g爜濡備笅: 浠g爜濡備笅 澶嶅埗浠g爜
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;
娉ㄩ噴錛氬鏋滃垪b涔熸槸鍞竴鍒楋紝鍒橧NSERT涓庢UPDATE璇彞鐩稿綋錛?nbsp;
浠g爜濡備笅: 浠g爜濡備笅 澶嶅埗浠g爜 UPDATE `table` SET `c`=`c`+1 WHERE `a`=1 OR `b`=2 LIMIT 1;
鎮ㄥ彲浠ュ湪UPDATE瀛愬彞涓嬌鐢╒ALUES(col_name)鍑芥暟浠嶪NSERT…UPDATE璇彞鐨処NSERT閮ㄥ垎寮曠敤鍒楀箋傛崲鍙ヨ瘽璇達紝濡傛灉娌℃湁鍙戠敓閲嶅鍏抽敭瀛楀啿紿侊紝鍒橴PDATE瀛愬彞涓殑VALUES(col_name)鍙互寮曠敤琚彃鍏ョ殑col_name鐨勫箋傛湰鍑芥暟鐗瑰埆閫傜敤浜庡琛屾彃鍏ャ俈ALUES()鍑芥暟鍙湪INSERT…UPDATE璇彞涓湁鎰忎箟錛屽叾瀹冩椂鍊欎細榪斿洖NULL銆?/p>
浠g爜濡備笅: 浠g爜濡備笅 澶嶅埗浠g爜 INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3), (4, 5, 6) ON DUPLICATE KEY UPDATE `c`=VALUES(`a`)+VALUES(`b`);
浠g爜濡備笅: 浠g爜濡備笅 澶嶅埗浠g爜 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;
紺轟緥錛?/p>
浠g爜濡備笅: 浠g爜濡備笅 澶嶅埗浠g爜
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'
浠g爜濡備笅: 浠g爜濡備笅 澶嶅埗浠g爜
IGNORE 鍙叧娉ㄤ富閿搴旇褰曟槸涓嶅瓨鍦紝鏃犲垯娣誨姞錛屾湁鍒欏拷鐣ャ?/p>
闄勪竴浜涘垹闄ら噸澶嶈褰曠殑鏂規硶
1銆佹煡鎵捐〃涓浣欑殑閲嶅璁板綍錛岄噸澶嶈褰曟槸鏍規嵁鍗曚釜瀛楁錛坧eopleId錛夋潵鍒ゆ柇 浠g爜濡備笅 澶嶅埗浠g爜 select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 浠g爜濡備笅 澶嶅埗浠g爜 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) 浠g爜濡備笅 澶嶅埗浠g爜 select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 浠g爜濡備笅 澶嶅埗浠g爜 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) 浠g爜濡備笅 澶嶅埗浠g爜 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 榪嬌寮鍏蟲棩蹇?br />
sql> alter system switch logfile;
2.forcing checkpoints 寮鴻揩媯鏌?br />
sql> alter system checkpoint;
3.adding online redo log groups 鍔犲叆鑱旀満閲嶅仛鏃ュ織緇?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 钀藉湪綰塊噸鍋氭棩蹇楃粍
sql> alter database drop logfile group 3;
7.drop online redo log members 钀藉湪綰塊噸鍋氭棩蹇楁垚鍛?br />
sql> alter database drop logfile member 'c:/oracle/oradata/redo01.log';
8.clearing online redo log files 緇撶畻鍦ㄧ嚎閲嶅仛鏃ュ織鏂囦歡
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;
絎簩绔?琛ㄧ┖闂寸鐞?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 鍚屾椂琛ㄧ┖闂寸綰挎垨鍦ㄧ嚎
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鑷姩寤墮暱鏁版嵁妗f
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 縐誨姩鏁版嵁妗f:鏀瑰彉琛ㄧ┖闂?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 縐誨姩鏁版嵁妗f:鏀瑰彉鏁版嵁搴?br />
sql> alter database rename file 'c:\oracle\oradata\app_data.dbf'
sql> to 'c:\oracle\app_data.dbf';
絎笁绔?琛?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 縐誨姩琛ㄧ┖闂?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
銆銆絎洓绔?绱㈠紩
1.creating function-based indexes 寤虹珛鍩轟簬鍔熻兘鐨勭儲寮?br />
sql> create index summit.item_quantity on summit.item(quantity-quantity_shipped);
2.create a B-tree index 鍒涢犱竴涓狟鏍戠儲寮?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 鍒嗛厤绱㈠紩絀洪棿
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>
絎簲绔?綰︽潫
1.define constraints as immediate or deferred 鐣屽畾鍒剁害鍗蟲湡鎴栧歡鏈?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 浣垮埗綰?br />
sql> alter table xay enable novalidate constraint xay_id;
5.enable constraints 浣垮埗綰?br />
sql> alter table xay enable validate constraint xay_id;
絎叚绔?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
絎竷绔?鏁版嵁鏁寸悊
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 涓簍rue 鏄紝 琛ㄧず鑷寘鍚?br />
絎叓绔? 瀵嗙爜瀹夊叏涓庤祫婧愮鐞?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;
絎節绔?鐢ㄦ埛綆$悊
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
絎崄绔?鐗規潈綆$悊
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
絎崄涓绔? 瑙勫垯綆$悊鍣?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
絎崄浜岀珷: 澶囦喚涓庢仮澶?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 鐢ㄦ璇彞錛?nbsp;
select top 2 * from test01 灝變細鍙樉紺哄墠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涓細
select * from payment fetch first 5 row only --鏌ュ墠5鏉¤褰?nbsp;
MySQL
select * from Cat limit ?,?
select * from Cat limit 20000,100
浠嶤at琛ㄤ腑絎?0000鏉″紑濮嬪彇鍑?00鏉¤褰曪紝鍗寵褰曞彿涓?0000鍒?0099鐨勮褰?nbsp;
select * from Cat limit ?
select * from Cat limit 100
浠嶤at琛ㄤ腑鍙栧嚭璁板綍鍙蜂負1鍒?00鐨勮褰?nbsp;
select * from Cat order by rand() limit ?
select * from Cat order by rand() limit 100
浠嶤at琛ㄤ腑闅忔満鍙栧嚭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
浠嶤at琛ㄤ腑絎?0000鏉″紑濮嬪彇鍑?00鏉¤褰曪紝鍗寵褰曞彿涓?0000鍒?0099鐨勮褰?nbsp;
select * from Cat where rownum <= ?
select * from Cat where rownum <= 100
浠嶤at琛ㄤ腑鍙栧嚭璁板綍鍙蜂負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
浠嶤at琛ㄤ腑闅忔満鍙栧嚭100鏉¤褰?nbsp;
HSQLDB
select * from Cat limit ? ?
select * from Cat limit 20000 100
浠嶤at琛ㄤ腑絎?0000鏉″紑濮嬪彇鍑?00鏉¤褰曪紝鍗寵褰曞彿涓?0000鍒?0099鐨勮褰?nbsp;
select * from Cat top ?
select * from Cat top 100
浠嶤at琛ㄤ腑鍙栧嚭璁板綍鍙蜂負1鍒?00鐨勮褰?nbsp;
瀛楃涓茬被
CHARSET(str) //榪斿洖瀛椾覆瀛楃闆?br>CONCAT (string2 [,... ]) //榪炴帴瀛椾覆
INSTR (string ,substring ) //榪斿洖substring棣栨鍦╯tring涓嚭鐜扮殑浣嶇疆,涓嶅瓨鍦ㄨ繑鍥? LCASE (string2 ) //杞崲鎴愬皬鍐?br>LEFT (string2 ,length ) //浠巗tring2涓殑宸﹁竟璧峰彇length涓瓧絎?br>LENGTH (string ) //string闀垮害 LOAD_FILE (file_name ) //浠庢枃浠惰鍙栧唴瀹?br>LOCATE (substring , string [,start_position ] ) 鍚孖NSTR,浣嗗彲鎸囧畾寮濮嬩綅緗?br>LPAD (string2 ,length ,pad ) //閲嶅鐢╬ad鍔犲湪string寮澶?鐩村埌瀛椾覆闀垮害涓簂ength LTRIM (string2 ) //鍘婚櫎鍓嶇絀烘牸 REPEAT (string2 ,count ) //閲嶅count嬈?br>REPLACE (str ,search_str ,replace_str ) //鍦╯tr涓敤replace_str鏇挎崲search_str RPAD (string2 ,length ,pad) //鍦╯tr鍚庣敤pad琛ュ厖,鐩村埌闀垮害涓簂ength RTRIM (string2 ) //鍘婚櫎鍚庣絀烘牸 STRCMP (string1 ,string2 ) //閫愬瓧絎︽瘮杈冧袱瀛椾覆澶у皬, SUBSTRING (str , position [,length ]) //浠巗tr鐨刾osition寮濮?鍙杔ength涓瓧絎? TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //鍘婚櫎鎸囧畾浣嶇疆鐨勬寚瀹氬瓧絎?br>UCASE (string2 ) //杞崲鎴愬ぇ鍐?br>RIGHT(string2,length) //鍙杝tring2鏈鍚巐ength涓瓧絎?br>SPACE(count) //鐢熸垚count涓┖鏍?/div> 鏁板綾?/u>
ABS (number2 ) //緇濆鍊?br>BIN (decimal_number ) //鍗佽繘鍒惰漿浜岃繘鍒?br>CEILING (number2 ) //鍚戜笂鍙栨暣 CONV(number2,from_base,to_base) //榪涘埗杞崲 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涓哄皬鏁頒綅鏁癩 SIGN (number2 ) //榪斿洖絎﹀彿,姝h礋鎴? SQRT(number2) //寮騫蟲柟 鏃ユ湡鏃墮棿綾?/u>
ADDTIME (date2 ,time_interval ) //灝唗ime_interval鍔犲埌date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //杞崲鏃跺尯 CURRENT_DATE ( ) //褰撳墠鏃ユ湡 CURRENT_TIME ( ) //褰撳墠鏃墮棿 CURRENT_TIMESTAMP ( ) //褰撳墠鏃墮棿鎴?br>DATE (datetime ) //榪斿洖datetime鐨勬棩鏈熼儴鍒?br>DATE_ADD (date2 , INTERVAL d_value d_type ) //鍦╠ate2涓姞涓婃棩鏈熸垨鏃墮棿 DATE_FORMAT (datetime ,FormatCodes ) //浣跨敤formatcodes鏍煎紡鏄劇ずdatetime DATE_SUB (date2 , INTERVAL d_value d_type ) //鍦╠ate2涓婂噺鍘諱竴涓椂闂?br>DATEDIFF (date1 ,date2 ) //涓や釜鏃ユ湡宸?br>DAY (date ) //榪斿洖鏃ユ湡鐨勫ぉ DAYNAME (date ) //鑻辨枃鏄熸湡 DAYOFWEEK (date ) //鏄熸湡(1-7) ,1涓烘槦鏈熷ぉ DAYOFYEAR (date ) //涓騫翠腑鐨勭鍑犲ぉ EXTRACT (interval_name FROM date ) //浠巇ate涓彁鍙栨棩鏈熺殑鎸囧畾閮ㄥ垎 MAKEDATE (year ,day ) //緇欏嚭騫村強騫翠腑鐨勭鍑犲ぉ,鐢熸垚鏃ユ湡涓?br>MAKETIME (hour ,minute ,second ) //鐢熸垚鏃墮棿涓?br>MONTHNAME (date ) //鑻辨枃鏈堜喚鍚?br>NOW ( ) //褰撳墠鏃墮棿 SEC_TO_TIME (seconds ) //縐掓暟杞垚鏃墮棿 STR_TO_DATE (string ,format ) //瀛椾覆杞垚鏃墮棿,浠ormat鏍煎紡鏄劇ず TIMEDIFF (datetime1 ,datetime2 ) //涓や釜鏃墮棿宸?br>TIME_TO_SEC (time ) //鏃墮棿杞鏁癩 WEEK (date_time [,start_of_week ]) //絎嚑鍛?br>YEAR (datetime ) //騫翠喚 DAYOFMONTH(datetime) //鏈堢殑絎嚑澶?br>HOUR(datetime) //灝忔椂 LAST_DAY(date) //date鐨勬湀鐨勬渶鍚庢棩鏈?br>MICROSECOND(datetime) //寰 MONTH(datetime) //鏈?br>MINUTE(datetime) //鍒?/div> 闄?鍙敤鍦↖NTERVAL涓殑綾誨瀷
DAY ,DAY_HOUR ,DAY_MINUTE ,DAY_SECOND ,HOUR ,HOUR_MINUTE ,HOUR_SECOND ,MINUTE ,MINUTE_SECOND,MONTH ,SECOND ,YEAR |