??xml version="1.0" encoding="utf-8" standalone="yes"?>国产乱码精品一区二区亚洲,欧美日韩在线一区,久久综合网络一区二区http://www.aygfsteel.com/baoyaer/category/17559.htmljavazh-cnSat, 16 Jan 2010 10:00:42 GMTSat, 16 Jan 2010 10:00:42 GMT60数据库导Q导入表 利器http://www.aygfsteel.com/baoyaer/articles/309363.html大田?/dc:creator>大田?/author>Wed, 13 Jan 2010 13:54:00 GMThttp://www.aygfsteel.com/baoyaer/articles/309363.htmlhttp://www.aygfsteel.com/baoyaer/comments/309363.htmlhttp://www.aygfsteel.com/baoyaer/articles/309363.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/309363.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/309363.html
exp user/password@servername indexes=n grants=n buffer=500000000 direct=y
file=vresolve.dmp tables=(wepp_domain_resolve_table);



导入表利器:(x)

imp user/password@servername ignore=y buffer=500000000 fromuser=epp_formigrate
file=vresolve.dmp tables=(wepp_domain_resolve_table)



结果写入新表利?
create table domain_filter_table as select v.DOMAIN_NAME from epp_domain_unresolve t,epp_ent_all_idxlog_view v where
 t.associate_serial
=v.ASSOCIATE_ENT_SERIAL


]]>
oracle 表解?/title><link>http://www.aygfsteel.com/baoyaer/articles/307654.html</link><dc:creator>大田?/dc:creator><author>大田?/author><pubDate>Tue, 29 Dec 2009 08:52:00 GMT</pubDate><guid>http://www.aygfsteel.com/baoyaer/articles/307654.html</guid><wfw:comment>http://www.aygfsteel.com/baoyaer/comments/307654.html</wfw:comment><comments>http://www.aygfsteel.com/baoyaer/articles/307654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/baoyaer/comments/commentRss/307654.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/baoyaer/services/trackbacks/307654.html</trackback:ping><description><![CDATA[1.兌查询<br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> </span><span style="color: #ff00ff">OBJECT_ID</span><span style="color: #000000">,SESSION_ID,SERIAL#, <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />ORACLE_USERNAME,OS_USER_NAME,S.PROCESS <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">FROM</span><span style="color: #000000"> V$LOCKED_OBJECT A, <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />V$SESSION S </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> A.SESSION_ID</span><span style="color: #808080">=</span><span style="color: #000000">S.SID</span></div> <br /> 2.<br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">alter</span><span style="color: #000000"> system </span><span style="color: #0000ff">kill</span><span style="color: #000000"> session </span><span style="color: #ff0000">'</span><span style="color: #ff0000">sid,serial#</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span></div> <img src ="http://www.aygfsteel.com/baoyaer/aggbug/307654.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/baoyaer/" target="_blank">大田?/a> 2009-12-29 16:52 <a href="http://www.aygfsteel.com/baoyaer/articles/307654.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle奇怪的查询问题http://www.aygfsteel.com/baoyaer/articles/290889.html大田?/dc:creator>大田?/author>Wed, 12 Aug 2009 12:32:00 GMThttp://www.aygfsteel.com/baoyaer/articles/290889.htmlhttp://www.aygfsteel.com/baoyaer/comments/290889.htmlhttp://www.aygfsteel.com/baoyaer/articles/290889.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/290889.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/290889.html今天在用oracleq程中遇C个奇怪的问题
相同的查询语?一U采用绑定参数方式查询,一U采用写ȝsql语句执行Q执行结果不一?br />

select t.*, c.CP_NAME as CP_NAME
  
from (select *
          
from (select row_.*, rownum rownum_
                  
from (select *
                          
from (select *
                                  
from sp_biz_code_order order by order_id)
                         start 
with PARENT_ID = 0
                        connect 
by PRIOR ORDER_ID = PARENT_ID) row_
                 
where rownum <= :1)
         
where rownum_ >:2) t,
       sp_biz_contentprovider c
 
where t.CPID = c.CP_ID(+)
 
order by rownum_

当将Q? 和:(x)2处的参数写死后(80Q?00Q执行得到的l果和绑定参C查询的结果完全不一?br /> 查看执行计划发现两者的执行计划有很多不一L(fng)地方

问题解决方式较ؓ(f)?br /> ibatis的内联参数改为外联参数即可,问题的根源待咨询oracle后再做解{?

]]>
查看执行q的sql oraclehttp://www.aygfsteel.com/baoyaer/articles/290878.html大田?/dc:creator>大田?/author>Wed, 12 Aug 2009 11:07:00 GMThttp://www.aygfsteel.com/baoyaer/articles/290878.htmlhttp://www.aygfsteel.com/baoyaer/comments/290878.htmlhttp://www.aygfsteel.com/baoyaer/articles/290878.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/290878.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/290878.htmlSELECT osuser, username, sql_text from v$session a, v$sqlarea b where a.sql_address =b.address order by address
select   address,piece,sql_text   from   v$session,v$sqltext   where   address=sql_address   
  
and   machine='machinename'   order   by   address,piece;   


]]>
oracle字符集理解:(x)http://www.aygfsteel.com/baoyaer/articles/237364.html大田?/dc:creator>大田?/author>Wed, 29 Oct 2008 05:25:00 GMThttp://www.aygfsteel.com/baoyaer/articles/237364.htmlhttp://www.aygfsteel.com/baoyaer/comments/237364.htmlhttp://www.aygfsteel.com/baoyaer/articles/237364.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/237364.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/237364.htmloracle字符集理?span class="category"> - [Oracle]

版权声明Q{载时请以链接Ş式标明文章原始出处和作者信息及(qing)本声?/a>
http://kimva.blogbus.com/logs/8219967.html

oracle字符集理解:(x)
一Q引a

    ORACLE数据库字W集Q即Oracle全球化支?Globalization Support)Q或卛_家语a支持QNLSQ其作用是用本国语言和格式来存储、处理和索数据。利用全球化支持QORACLE为用h供自q(zhn)的数据库母语环境,诸如日期格式、数字格式和存储序列{。Oracle可以支持多种语言?qing)字W集Q其中oracle8i支持48U语a?6个国家地域?29U字W集Q而oracle9i则支?7U语a?8个国家地域?35U字W集。由于oracle字符集种cdQ且在存储、检索、迁Uoracle数据时多个环节与字符集的讄密切相关Q因此在实际的应用中Q数据库开发和理人员l常?x)遇到有关oracle字符集方面的问题。本文通过以下几个斚w阐述Q对oracle字符集做要分?

二.字符集基本知?

2.1字符?br />     实质是按照一定的字符~码Ҏ(gu)Q对一l特定的W号Q分别赋予不同数值编码的集合。Oracle数据库最早支持的~码Ҏ(gu)是US7ASCII?br />     Oracle的字W集命名遵@以下命名规则:
    <Language><bit size><encoding>
    ?  <语言><比特位数><~码>
    比如: ZHS16GBK表示采用GBK~码格式?6位(两个字节Q简体中文字W集

2.2字符~码Ҏ(gu)
2.2.1 单字节编?br />     Q?Q单字节7位字W集Q可以定?28个字W,最常用的字W集为US7ASCII
    Q?Q单字节8位字W集Q可以定?56个字W,适合于欧z大部分国家
    例如QWE8ISO8859P1(西欧?位、ISO标准8859P1~码)
2.2.2 多字节编?br />     Q?Q变长多字节~码
    某些字符用一个字节表C,其它字符用两个或多个字符表示Q变长多字节~码常用于对亚洲语言的支持,   例如日语、汉语、印地语{?br />     例如QAL32UTF8Q其中AL代表ALL,指适用于所有语aQ、zhs16cgb231280
    Q?Q定长多字节~码
    每一个字W都使用固定长度字节的编码方案,目前oracle唯一支持的定长多字节~码是AF16UTF16Q也是仅用于国家字符?br /> 2.2.3 unicode~码
    Unicode是一个涵盖了目前全世界用的所有已知字W的单一~码Ҏ(gu)Q也是说Unicode为每一个字W提供唯一的编码。UTF-16是unicode?6位编码方式,是一U定长多字节~码Q用2个字节表CZ个unicode字符QAF16UTF16是UTF-16~码字符集?br />     UTF-8是unicode?位编码方式,是一U变长多字节~码Q这U编码可以用1??个字节表CZ个unicode字符QAL32UTF8QUTF8、UTFE是UTF-8~码字符?

2.3 字符集超U?br />     当一U字W集Q字W集AQ的~码数值包含所有另一U字W集Q字W集BQ的~码数|q且两种字符集相同编码数g表相同的字符Ӟ则字W集A是字W集B的超U,或称字符集B是字W集A的子集?br />     Oracle8i和oracle9i官方文档资料中备有子?对照表(subset-superset pairsQ,例如QWE8ISO8859P1是WE8MSWIN1252的子集。由于US7ASCII是最早的Oracle数据库编码格式,因此有许多字W集是US7ASCII的超集,例如WE8ISO8859P1、ZHS16CGB231280、ZHS16GBK都是US7ASCII的超集?

2.4 数据库字W集Qoracle服务器端字符集)
    数据库字W集在创建数据库时指定,在创建后通常不能更改。在创徏数据库时Q可以指定字W集(CHARACTER SET)和国家字W集(NATIONAL CHARACTER SET)?br /> 2.4.1字符?br />     (1)用来存储CHAR, VARCHAR2, CLOB, LONG{类型数?br />     (2)用来标示诸如表名、列名以?qing)PL/SQL变量{?br />     (3)用来存储SQL和PL/SQLE序单元{?br /> 2.4.2国家字符集:(x)
    (1)用以存储NCHAR, NVARCHAR2, NCLOB{类型数?br />     (2)国家字符集实质上是ؓ(f)oracle选择的附加字W集Q主要作用是Z增强oracle的字W处理能力,因ؓ(f)NCHAR数据cd可以提供对亚z用定长多字节~码的支持,而数据库字符集则不能。国家字W集在oracle9i中进行了重新定义Q只能在unicode~码中的AF16UTF16和UTF8中选择Q默认值是AF16UTF16
2.4.3查询字符集参?br />     可以查询以下数据字典或视图查看字W集讄情况
    nls_database_parameters、props$、v$nls_parameters
    查询l果中NLS_CHARACTERSET表示字符集,NLS_NCHAR_CHARACTERSET表示国家字符?br /> 2.4.4修改数据库字W集
    按照上文所_(d)数据库字W集在创建后原则上不能更攏V如果需要修改字W集Q通常需要导出数据库数据Q重建数据库Q再导入数据库数据的方式来{换,或通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字W集是有限制的,只有新的字符集是当前字符集的集时才能修Ҏ(gu)据库字符集,例如UTF8是US7ASCII的超集,修改数据库字W集可用ALTER DATABASE CHARACTER SET UTF8。正的修改Ҏ(gu)如下:
  $sqlplus /nolog
  SQL>conn / as sysdba;
  若此时数据库服务器已启动Q则先执行SHUTDOWN IMMEDIATE命o(h)关闭数据库服务器Q然后执行以下命?
  SQL>STARTUP MOUNT;
  SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
  SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
  SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
  SQL>ALTER DATABASE OPEN;
  SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
  SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;
  SQL>SHUTDOWN IMMEDIATE;
  SQL>STARTUP

2.5 客户端字W集QNLS_LANG参数Q?br /> 2.5.1客户端字W集含义
    客户端字W集定义了客L(fng)字符数据的编码方式,M发自或发往客户端的字符数据均用客L(fng)定义的字W集~码,客户端可以看作是能与数据库直接连接的各种应用Q例如sqlplus,exp/imp{。客L(fng)字符集是通过讄NLS_LANG参数来设定的?br /> 2.5.2 NLS_LANG参数格式
    NLS_LANG=<language>_<territory>.<client character set>
    Language:昄oracle消息,校验Q日期命?br />     TerritoryQ指定默认日期、数字、货币等格式
    Client character setQ指定客L(fng)用的字符?br />     例如QNLS_LANG=AMERICAN_AMERICA.US7ASCII 
    AMERICAN是语aQAMERICA是地区,US7ASCII是客L(fng)字符?br /> 2.5.3客户端字W集讄Ҏ(gu)
     1)UNIX环境
         $NLS_LANG=“simplified chinese”_china.zhs16gbk
         $export NLS_LANG
         ~辑oracle用户的profile文g
    2)Windows环境
         ~辑注册?br />          Regedit.exe---HKEY_LOCAL_MACHINE---SOFTWARE---ORACLE—HOME0
2.5.4 NLS参数查询
    Oracle提供若干NLS参数定制数据库和用户Z适应本地格式Q例如有NLS_LANGUAGE,NLS_DATE_FORMAT,NLS_CALENDER{,可以通过查询以下数据字典或v$视图查看?br />     NLS_DATABASE_PARAMETERS--昄数据库当前NLS参数取|包括数据库字W集取?br />     NLS_SESSION_PARAMETERS--昄由NLS_LANG 讄的参敎ͼ或经qalter session 改变后的参数|不包括由NLS_LANG 讄的客L(fng)字符集)
    NLS_INSTANCE_PARAMETE--昄由参数文件init<SID>.ora 定义的参数V$NLS_PARAMETERS--昄数据库当前NLS参数取?br /> 2.5.5修改NLS参数
    使用下列Ҏ(gu)可以修改NLS参数
    Q?Q修改实例启动时使用的初始化参数文g
    Q?Q修改环境变量NLS_LANG
    Q?Q用ALTER SESSION语句Q在oracle?x)话中修?br />     Q?Q用某些SQL函数
    NLS作用优先U别QSql function>alter session>环境变量或注册表>参数文g>数据库默认参?

三.导入/导出与字W集转换

3.1 EXP/IMP
    Export ?Import 是一对读写Oracle数据的工兗Export ?Oracle 数据库中的数据输出到操作pȝ文g? Import 把这些文件中的数据读到Oracle 数据库中Q由于用exp/impq行数据q移Ӟ数据从源数据库到目标数据库的q程中有四个环节涉及(qing)到字W集Q如果这四个环节的字W集不一_(d)会(x)发生字符集{换?

EXP                       

IMP                       

    四个字符集是
   Q?Q源数据库字W集
   Q?QExportq程中用户会(x)话字W集Q通过NLS_LANG讑֮Q?br />    Q?QImportq程中用户会(x)话字W集Q通过NLS_LANG讑֮Q?br />    Q?Q目标数据库字符?

3.2导出的{换过E?br />     在Exportq程中,如果源数据库字符集与Export用户?x)话字符集不一_(d)?x)发生字W集转换Qƈ在导出文件的头部几个字节中存储Export用户?x)话字符集的ID受在q个转换q程中可能发生数据的丢失?br /> ?如果源数据库使用ZHS16GBKQ而Export用户?x)话字符集用US7ASCIIQ由于ZHS16GBK?6位字W集,而US7ASCII?位字W集Q这个{换过E中Q中文字W在US7ASCII中不能够扑ֈ对等的字W,所以所有中文字W都?x)丢p变?#8220;?? ”形式Q这栯{换后生成的Dmp文g已经发生了数据丢失?br /> 因此如果x导出源数据库数据,则Exportq程中用户会(x)话字W集应等于源数据库字W集或是源数据库字符集的集
3.2.1 修改dmp文g字符?br />   上文说过Qdmp文g的第2W?字节记录了字W集信息Q因此直接修改dmp文g的第2W?字节的内容就可以‘?#8217;qoracle的检查。这样做理论上也仅是从子集到集可以修改Q但很多情况下在没有子集和超集关pȝ情况下也可以修改Q我们常用的一些字W集Q如US7ASCIIQW(xu)E8ISO8859P1QZHS16CGB231280QZHS16GBK基本都可以改。因为改的只是dmp文gQ所以媄响不大?br />   具体的修Ҏ(gu)法比较多Q最单的是直接用UltraEdit修改dmp文g的第2和第3个字节。比如想dmp文g的字W集改ؓ(f)ZHS16GBKQ可以用以下SQL查出该种字符集对应的16q制代码:
  SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;
  0354
  然后dmp文g??字节修改?354卛_?br />   如果dmp文g很大Q用ue无法打开Q就需要用E序的方法了。网上有人用java存储q程写了转换的程?用java存储q程的好处是通用性教好,~点是比较麻?。我在windows下测试通过。但要求oracle数据库一定要安装JVM选项。有兴趣的朋友可以研I一下程序代?

3.3导入的{换过E?br />     Q?Q确定导出数据库字符集环?br />     通过d导出文g_(d)可以获得导出文g的字W集讄
    Q?Q确定导入session的字W集Q即导入Session使用的NLS_LANG环境变量
    Q?QIMPd导出文g
    d导出文g字符集IDQ和导入q程的NLS_LANGq行比较
    Q?Q如果导出文件字W集和导入Session字符集相同,那么在这一步骤内就不需要{换,如果不同Q就需要把数据转换为导入Session使用的字W集。可以看出,导入数据到数据库q程中发生两ơ字W集转换
    W一?导入文g字符集与导入Session使用的字W集之间的{换,如果q个转换q程不能正确完成QImport向目标数据库的导入过E也׃能完成?br />     W二?导入Session字符集与数据库字W集之间的{换?br />     然?oracle8i的这U{换只能在单字节字W集之间q行,oracle8i导入Session不支持多字节字符集之间的转换Q因此ؓ(f)了避免第一ơ{换,导入Session使用的NLS_LANG与导出文件字W集相同Q第二次转换Q通过SQL*NetQ支持Q何两U字W集。以上情况在Oracle9i中略有不?

四.q问题

    oracle在数据存储、迁U过E中l常发生字符q问题Q归根到底是׃字符集用不当引赗下面以使用客户端sqlplus向数据库插入数据和导?导出QEXP/IMPQ过Eؓ(f)例,说明q产生的原因?

4.1使用客户端sqlplus向数据库存储数据
    q个q程存在3个字W集讄
    Q?Q客L(fng)应用字符?br />     Q?Q客L(fng)NLS_LANG参数讄
    Q?Q服务器端数据库字符?Character Set)讄
    客户端应用sqlplus中能够显CZ么样的字W取决于客户端操作系l语a环境(客户端应用字W集)Q但在应用中录入q些字符后,q些字符能否在数据库中正常存储,q与另外两个字符集设|紧密相养I其中客户端NLS_LANG参数主要用于字符数据传输q程中的转换判断。常见的q大致有两U情形:(x)
    Q?Q汉字变成问?#8220;Q?#8221;Q?br /> 当从字符集A 转换成字W集BӞ如果转换字符之间不存在对应关p,NLS_LANG使用替代字符“Q?#8221;替代无法映射的字W?br />     Q?Q汉字变成未知字W(虽然有些是汉字,但与原字W含义不同)
转换存在对应关系Q但字符集A 中的字符~码与字W集B 中的字符~码代表不同含义

4.2发生q原因 
    q产生是由于几个字W集之间转换不匹配造成Q分以下几种情况Q?br />     Q注Q字W集之间如果不存在子集、超集对应关pL的情况不予考虑Q因U情况下字符集之间{换必产生qQ?nbsp;  
    1Q服务器端数据库字符集与客户端应用字W集相同Q与客户端NLS_LANG参数讄不同
    如果客户端NLS_LANG字符集是其它两种字符集的子集Q{换过E将出现q?br />     解决Ҏ(gu)Q将三种字符集设|成同一字符集,或NLS_LANG字符集是其它两种字符集的集
    2Q服务器端数据库字符集与客户端NLS_LANG参数讄相同Q与客户端应用字W集不同
    如果客户端应用字W集是其它两U字W集的超集时Q{换过E将出现qQ但对于单字节编码存储中文问题,可参看本文第5章节的分?br />     3Q客L(fng)应用字符集、客L(fng)NLS_LANG参数讄、服务器端数据库字符集互不相?br />     此种情况较ؓ(f)复杂Q但三种字符集之间只要有不能转换的字W,则必产生q

4.3导入/导出q程出现q原因
    q个q程存在4个字W集讄Q在3.1章节中已分析
   Q?Q源数据库字W集
   Q?QEXPq程中NLS_LANG参数
   Q?QIMPq程中NLS_LANG参数
   Q?Q目标数据库字符?br />     出现q原因
    1Q当源数据库字符集不{于EXPq程中NLS_LANG参数Q且源数据库字符集是EXPq程中NLS_LANG的子集,才能保证导出文g正确Q其他情况则导出文g字符q
    2QEXPq程中NLS_LANG字符集不{于IMPq程中NLS_LANG字符集,且EXPq程中NLS_LANG字符集是IMPq程中NLS_LANG字符集的子, 才能保证W一ơ{换正常,否则W一ơ{换中出现q?br />     3Q如果第一ơ{换正常,IMPq程中NLS_LANG字符集是目标数据库字W集的子集或相同Q才能保证第二次转换正常Q否则则W二ơ{换中出现q

五.单字节编码存储中文问?

    ׃历史的原因,早期的oracle没有中文字符集(如oracle6、oracle7、oracle7.1Q?但有的用户从那时起就使用数据库了Qƈ用US7ASCII字符集存储了中文Q或是有的用户在创徏数据库时Q不考虑清楚Q随意选择一个默认的字符集,如WE8ISO8859P1或US7ASCIIQ而这两个字符集都没有汉字~码Q虽然有些时候选用q种字符集好象也能正怋用,但用q种字符集存储汉字信息从原则上说是错误的,它会(x)l数据库的用与l护带来一pd的麻烦?br />     正常情况下,要将汉字存入数据库,数据库字W集必须支持中文Q而将数据库字W集讄为US7ASCII{单字节字符集是不合适的。US7ASCII字符集只定义?28个符Pq不支持汉字。另外,如果在SQL*PLUS中能够输入中文,操作pȝ~省应该是支持中文的Q但如果在NLS_LANG中的字符集设|ؓ(f)US7ASCIIQ显然也是不正确的,它没有反映客L(fng)的实际情c(din)但在实际应用中汉字昄却是正确的,q主要是因ؓ(f)Oracle查数据库与客L(fng)的字W集讄是同L(fng)Q那么数据在客户与数据库之间的存取过E中不发生M转换Q但是这实际上导致了数据库标识的字符集与实际存入的内Ҏ(gu)不相W的。而在SELECT的过E中QOracle同样查发现数据库与客L(fng)的字W集讄是相同的Q所以它也将存入的内容原不动地传送到客户端,而客L(fng)操作pȝ识别是汉字编码所以能够正显C?br />     在这个例子中Q数据库与客L(fng)都没有设|成中文字符集,但却能正常显CZ文,从应用的角度看好象没问题。然而这里面却存在着极大的隐(zhn),比如在应用length或substr{字W串函数Ӟ可能得到意外的l果?br />     对于早期使用US7ASCII字符集数据库的数据迁Udoracle8i/9i中(使用zhs16gbkQ,׃原始数据已经按照US7ASCII格式存储Q对于这U情况,可以通过使用Oracle8i的导出工P讄导出字符集ؓ(f)US7ASCIIQ导出后使用UltraEdit{工h开dmp文gQ修改第二、三字符Q修?0001 ?354,q样可以将US7ASCII字符集的数据正确导入到ZHS16GBK的数据库中?

六.l束?

    Z避免在数据库q移q程中由于字W集不同D的数据损失,oracle提供了字W集扫描工具Qcharacter set scannerQ,通过q个工具我们可以试在数据迁U过E中׃字符集{换可能带来的问题Q然后根据测试结果,定数据q移q程中最?jng)_W集解决Ҏ(gu)?



]]>
oracle JOB 的创建列?/title><link>http://www.aygfsteel.com/baoyaer/articles/236802.html</link><dc:creator>大田?/dc:creator><author>大田?/author><pubDate>Mon, 27 Oct 2008 02:06:00 GMT</pubDate><guid>http://www.aygfsteel.com/baoyaer/articles/236802.html</guid><wfw:comment>http://www.aygfsteel.com/baoyaer/comments/236802.html</wfw:comment><comments>http://www.aygfsteel.com/baoyaer/articles/236802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/baoyaer/comments/commentRss/236802.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/baoyaer/services/trackbacks/236802.html</trackback:ping><description><![CDATA[<strong>创徏</strong><br /> <br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000"> variable job_feeid_create  </span><span style="font-weight: bold; color: #000000">NUMBER</span><span style="color: #000000">;<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /> </span><span style="color: #0000ff">begin</span><span style="color: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />    sys.dbms_job.submit(:job_feeid_create,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">wlk_check_fee;</span><span style="color: #ff0000">'</span><span style="color: #000000">,sysdate,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">TRUNC(SYSDATE+1)</span><span style="color: #ff0000">'</span><span style="color: #000000">);<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /> </span><span style="color: #0000ff">commit</span><span style="color: #000000">;<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /> </span><span style="color: #0000ff">end</span><span style="color: #000000">;</span></div> 在命令控制台中这样就可以Z一个作业了。sysdate表示当前作业来执行的时_(d)sysdate+1表示调用频率?br /> <br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000">描述                    INTERVAL参数?nbsp;<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />每天午夜12?nbsp;           </span><span style="color: #ff0000">'</span><span style="color: #ff0000">TRUNC(SYSDATE + 1)</span><span style="color: #ff0000">'</span><span style="color: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />每天早上8?0?nbsp;        </span><span style="color: #ff0000">'</span><span style="color: #ff0000">TRUNC(SYSDATE + 1) + Q?*60+30Q?(24*60)</span><span style="color: #ff0000">'</span><span style="color: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />每星期二中午12?nbsp;        </span><span style="color: #ff0000">'</span><span style="color: #ff0000">NEXT_DAY(TRUNC(SYSDATE ), </span><span style="color: #ff0000">''</span><span style="color: #ff0000">TUESDAY</span><span style="color: #ff0000">''</span><span style="color: #ff0000"> ) + 12/24</span><span style="color: #ff0000">'</span><span style="color: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />每个月第一天的午夜12?nbsp;   </span><span style="color: #ff0000">'</span><span style="color: #ff0000">TRUNC(LAST_DAY(SYSDATE ) + 1)</span><span style="color: #ff0000">'</span><span style="color: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />每个季度最后一天的晚上11?nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), </span><span style="color: #ff0000">'</span><span style="color: #000000">Q</span><span style="color: #ff0000">'</span><span style="color: #ff0000"> ) -1/24</span><span style="color: #ff0000">'</span><span style="color: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />每星期六和日早上6?0?nbsp;   </span><span style="color: #ff0000">'</span><span style="color: #ff0000">TRUNC(LEAST(NEXT_DAY(SYSDATE, </span><span style="color: #ff0000">''</span><span style="color: #ff0000">SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + Q?×60+10Q?Q?4×60Q?/span><span style="color: #ff0000">'</span><span style="color: #000000"> </span></div> <br /> <br /> <strong>q行</strong><br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /> </span><span style="color: #0000ff">begin</span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />  dbms_job.run(:job_feeid_create);<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />  </span><span style="color: #0000ff">end</span><span style="color: #000000">;</span></div> <br /> <strong>查询作业记录</strong><br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">select</span><span style="color: #000000">   </span><span style="color: #808080">*</span><span style="color: #000000">   </span><span style="color: #0000ff">from</span><span style="color: #000000">   user_jobs</span></div> <br /> <strong>具体讲解Q?br /> </strong>       <em>1Q确保Oracle的工作模式允许启动Q务队列管理器 <br /> </em>             Oracle定时执行“Job Queue”的后台程序是SNPq程Q而要启动SNPq程Q首先要保整个pȝ的模式是可以启动SNPq程的,q需要以    DBA的n份去执行如下命o(h)Q?<br />               svrmgrl>; alter system enable restricted session; <br />              或sql>; alter system disenable restricted session; <br />              利用如上命o(h)更改pȝ的会(x)话方式ؓ(f)disenable restrictedQؓ(f)SNP的启动创造条件?br /> <br />     <em>  2Q确保Oracle的系l已l配|了d队列理器的启动参数 <br /> </em>            SNP的启动参C于Oracle的初始化文g中,该文件放在$ORACLE_HOME/dbs路径下,如果Oracle的SID是myora8的话Q则初始化文件就?nbsp;  initmyora8.oraQ在文g中对SNP启动参数的描q部分如下:(x) <br />             job_queue_process=n <br />             job_queue_interval=N <br />             W一行定义SNPq程的启动个Cؓ(f)n。系l缺省gؓ(f)0Q正常定义范围ؓ(f)0?6Q根据Q务的多少Q可以配|不同的数倹{?nbsp;<br />             W二行定义系l每隔NU唤醒该q程一ơ。系l缺省gؓ(f)60U,正常范围??600U。事实上Q该q程执行完当前Q务后Q就q入睡眠?态,睡眠一D|间后Q由pȝ的L负责其唤醒?<br />             如果该文件中没有上面两行Q请按照如上配置d。配|完成后Q需要重新启动数据库Q其生效。注意:(x)如果d要求执行的间隔很短的 话,N的配|也要相应地一炏V?<br />     <em>   3Q将d加入到数据库的Q务队列中</em> <br />               用Oracle的dbms_job包中的存储过E,Q务加入到d队列中:(x) <br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000">dbms_job.submit( job out binary_integer, <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />what       </span><span style="color: #808080">in</span><span style="color: #000000">   archar2, <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />next_date     </span><span style="color: #808080">in</span><span style="color: #000000">   dateQ?nbsp;<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />interval     </span><span style="color: #808080">in</span><span style="color: #000000">   </span><span style="font-weight: bold; color: #000000">varchar2</span><span style="color: #000000">, <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />no_parse     </span><span style="color: #808080">in</span><span style="color: #000000">   boolean) </span></div> <br /> 其中Q?<br />          ●jobQ输出变量,是此d在Q务队列中的编P <br />          ●whatQ执行的d的名U及(qing)其输入参敎ͼ <br />          ●next_dateQQ务执行的旉Q?<br />          ●intervalQQ务执行的旉间隔?<br />          下面详细讨论一下dbms_job.submit中的参数interval。严格地Ԍinterval是指上一ơ执行结束到下一ơ开始执行的旉间隔Q当interval讄为null Ӟ该job执行l束后,p从队列中删除。假如我们需要该job周期性地执行Q则要用‘sysdateQm’表示?nbsp; <br />          Q务加入到d队列之前Q要定执行d的数据库用户Q若用户是scott, 则需要确保该用户拥有执行包dbms_job的权限;若没有,需要以   DBA的n份将权利授予scott用户Q?<br />          svrmgrl>; grant execute on dbms_job to scott; <br /> <br /> <em>     4Q将要执行的d写成存储q程或其他的数据库可执行的pl/sqlE序D?/em> <br /> <br />             例如Q我们已l徏立了一个存储过E,其名UCؓ(f)my_jobQ在sql/plus中以scott用户w䆾dQ执行如下命令:(x) <br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000">sql</span><span style="color: #808080">></span><span style="color: #000000">; variable n </span><span style="font-weight: bold; color: #000000">number</span><span style="color: #000000">; <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />sql</span><span style="color: #808080">></span><span style="color: #000000">; </span><span style="color: #0000ff">begin</span><span style="color: #000000"> <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />dbms_job.submit(:n‘my_job;’,sysdate, <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />‘sysdateQ?/span><span style="font-weight: bold; color: #800000">1</span><span style="color: #808080">/</span><span style="font-weight: bold; color: #800000">360</span><span style="color: #000000">’); <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">commit</span><span style="color: #000000">; <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">end</span><span style="color: #000000">; <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #808080">/</span><span style="color: #000000"> </span></div>           pȝ提示执行成功?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000">Sql</span><span style="color: #808080">></span><span style="color: #000000">; </span><span style="color: #0000ff">print</span><span style="color: #000000"> :n; </span></div>          pȝ打印此Q务的~号Q例如结果ؓ(f)300?nbsp;<br />          如上Q我们创Z一个每?分钟执行一ơ的d号ؓ(f)300的Q务。可以通过Oracle提供的数据字典user_jobs察看该Q务的执行情况Q?nbsp;<br />   <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000">sql</span><span style="color: #808080">></span><span style="color: #000000">; </span><span style="color: #0000ff">select</span><span style="color: #000000"> job,next_date,next_sec,failures,broken </span><span style="color: #0000ff">from</span><span style="color: #000000"> user_jobs; </span></div>          执行l果如下Q?br />          job next_date next_sec failures broken <br />          300 2000/10/10 11:45:15 0 N <br /> <br />          q表CZQ务号?00的Q务,下一ơ将?000/10/10 11:45:15执行Q此d的执行失败记录ؓ(f)0ơ。注意:(x)当执行job出现错误ӞOracle其记录在日志里Q失败次数每ơ自动加1。当执行p|ơ数辑ֈ16ӞOracle将该job标志为broken。此后,Oracle不再l箋执行它,直到用户调用q程dbms_job.brokenQ重新设|ؓ(f)not brokenQ或强制调用dbms_job.run来重新执行它?<br />          除了以上我们讨论的submit存储q程之外QOracleq提供了其他许多存储q程来操作Q务。例如:(x)dbms_job.change ?dbms_job.what、dbms_job.interval可以用来修改提交的Q务。要惛_除该dQ只需q行dbms_job.remove(n)卛_Q其中nZQ务号?<br /> <br /> <br /> <br /> <br /> <br /> <img src ="http://www.aygfsteel.com/baoyaer/aggbug/236802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/baoyaer/" target="_blank">大田?/a> 2008-10-27 10:06 <a href="http://www.aygfsteel.com/baoyaer/articles/236802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 创徏dblink创徏语句http://www.aygfsteel.com/baoyaer/articles/235853.html大田?/dc:creator>大田?/author>Wed, 22 Oct 2008 01:40:00 GMThttp://www.aygfsteel.com/baoyaer/articles/235853.htmlhttp://www.aygfsteel.com/baoyaer/comments/235853.htmlhttp://www.aygfsteel.com/baoyaer/articles/235853.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/235853.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/235853.html 

create database link XXX_LINK
  connect 
to name identified by pwd    using '
      (DESCRIPTION = 
          (ADDRESS_LIST = 
              (ADDRESS = 
                 (PROTOCOL = TCP)
                 (HOST = XXX.XXX.XXX)
                 (PORT = 1521)) ) 
              (CONNECT_DATA = 
                  (SERVICE_NAME = XXXX)
         ) )
';


]]>
Mysql的启动解d?/title><link>http://www.aygfsteel.com/baoyaer/articles/210482.html</link><dc:creator>大田?/dc:creator><author>大田?/author><pubDate>Wed, 25 Jun 2008 03:52:00 GMT</pubDate><guid>http://www.aygfsteel.com/baoyaer/articles/210482.html</guid><wfw:comment>http://www.aygfsteel.com/baoyaer/comments/210482.html</wfw:comment><comments>http://www.aygfsteel.com/baoyaer/articles/210482.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/baoyaer/comments/commentRss/210482.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/baoyaer/services/trackbacks/210482.html</trackback:ping><description><![CDATA[<div id="wmqeeuq" class="t_msgfont" id="postmessage_3979086">Mysql的启动其实不复杂,我的理解是d配置文gQ传递参敎ͼ启动?br /> <br /> 说的比较单,其实q里是有关部|的事情Q配|文件的部v需要了解,我们看看默认的my.cnf的说明:(x) <div id="wmqeeuq" class="quote"> <h5>引用:</h5> <blockquote># You can copy this file to<br /> # /etc/my.cnf to set global options,<br /> # mysql-data-dir/my.cnf to set server-specific options (in this<br /> # installation this directory is /Data/apps/mysql/var) or<br /> # ~/.my.cnf to set user-specific options.<br /> <br /> # www.aslibra.com by hqlulu</blockquote></div> 也就是说Q放?/etc/my.cnf 是服务器的全局讄<br /> 然后是启动的数据库的my.cnfQ然后是用户目录?.my.cnf 文g<br /> 最后其实就是启动命令指定的参数Q下面自己可以找到方法一步一步验证,我们用port的变化来说明Q?br /> <br /> <strong>1 默认的一般启动Ş式是如下Q?/strong> <div id="wmqeeuq" class="blockcode"><span id="wmqeeuq" class="headactions" onclick="copycode($('code0'));">复制内容到剪贴板</span> <h5>代码:</h5> <code id="code0">/Data/apps/mysql/bin/mysqld_safe --user=mysql &<br /> <br /> 停止命o(h)Q?br /> <br /> mysqladmin   -u   root   -pyourpassword     shutdown   </code></div> 如果没有 /etc/my.cnf 的情况下Q默认是打开mysql安装目录?var文g夹,d权限配置<br /> 如果没有相应的表Q那׃(x)提示出错Q? <div id="wmqeeuq" class="quote"> <h5>引用:</h5> <blockquote>080502 04:12:23  mysqld started<br /> 080502  4:12:23 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist<br /> 080502 04:12:23  mysqld ended</blockquote></div> 可以使用bin/mysql_install_db新装一个数据库默认?br /> 如果是表的所有者不是mysqlQ那?x)提C:(x) <div id="wmqeeuq" class="quote"> <h5>引用:</h5> <blockquote>080502 04:15:37  mysqld started<br /> 080502  4:15:37 [ERROR] /Data/apps/mysql/libexec/mysqld: Can't find file: './mysql/host.frm' (errno: 13)<br /> 080502  4:15:37 [ERROR] /Data/apps/mysql/libexec/mysqld: Can't find file: './mysql/host.frm' (errno: 13)<br /> 080502  4:15:37 [ERROR] Fatal error: Can't open and lock privilege tables: Can't find file: './mysql/host.frm' (errno: 13)<br /> 080502 04:15:37  mysqld ended</blockquote></div> 启动后,看到使用的是 3306端口?br /> <br /> <strong>2 如果复制一个配|文档到 /etc/my.cnf q且修改port参数试试Q?/strong> <div id="wmqeeuq" class="blockcode"><span id="wmqeeuq" class="headactions" onclick="copycode($('code1'));">复制内容到剪贴板</span> <h5>代码:</h5> <code id="code1">[mysqld]<br /> port            = 3307<br /> socket          = /tmp/mysql.sock</code></div> 同样语句启动后,?307端口?br /> <br /> <strong>3 复制一个文件到 var 目录</strong> <div id="wmqeeuq" class="blockcode"><span id="wmqeeuq" class="headactions" onclick="copycode($('code2'));">复制内容到剪贴板</span> <h5>代码:</h5> <code id="code2">[mysqld]<br /> port            = 3308<br /> socket          = /tmp/mysql.sock</code></div> 同样语句启动后,?308端口?br /> <br /> <strong>4 复制一个my.cnf到用户mysql的根目录</strong><br /> <br /> cat /etc/passwd 知道Q?br /> mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash<br /> <br /> 复制一个到 /var/lib/mysql/.my.cnf <div id="wmqeeuq" class="blockcode"><span id="wmqeeuq" class="headactions" onclick="copycode($('code3'));">复制内容到剪贴板</span> <h5>代码:</h5> <code id="code3">[mysqld]<br /> port            = 3309<br /> socket          = /tmp/mysql.sock</code></div> 同样语句启动后,?308端口P看来q个不太成立<br /> <br /> 5 指定配置文g<br /> <br /> 复制一?my_setting.cnf Q修改ؓ(f)3340 <div id="wmqeeuq" class="blockcode"><span id="wmqeeuq" class="headactions" onclick="copycode($('code4'));">复制内容到剪贴板</span> <h5>代码:</h5> <code id="code4">/Data/apps/mysql/bin/mysqld_safe --defaults-file=/Data/apps/mysql/var/my_setting.cnf --user=mysql &</code></div> 注意Q指定配|文件的参数应该需要在W一个位|出玎ͼ互换两个参数的位|会(x)出错了,启动后,实?340<br /> <br /> <strong>6 修改启动参数</strong> <div id="wmqeeuq" class="blockcode"><span id="wmqeeuq" class="headactions" onclick="copycode($('code5'));">复制内容到剪贴板</span> <h5>代码:</h5> <code id="code5">/Data/apps/mysql/bin/mysqld_safe --defaults-file=/Data/apps/mysql/var/my_setting.cnf --user=mysql --port=3341 &</code></div> 启动后是 3341端口<br /> <br /> <strong>阿权的ȝQ?/strong><br /> <br /> 1 mysql有默认的一些参敎ͼ如果没有指定Q则取默认?br /> 2 mysql试d /etc/my.cnf 做默认?br /> 3 mysql试d数据目录?my.cnf Q取代相应的?br /> 4 mysql的用L(fng)录似乎无效,不太清楚?<img alt="" src="http://bbs.blueidea.com/images/smilies/default/smile.gif" border="0" smilieid="1" /><br /> 5 mysql启动参数可以指定配置文g位置Q优先ơ高<br /> 6 也可以直接指定具体的参数Q优先最?br /> <br /> <font face="Verdana" color="#535000" size="2">  <div><span style="color: #000000">.</span><span style="color: #808080">/</span><span style="color: #000000">mysql </span><span style="color: #808080">-</span><span style="color: #000000">umarduk </span><span style="color: #808080">-</span><span style="color: #000000">pmarduk cnaudit </span><span style="color: #808080"><</span><span style="color: #000000">cnbak0902.sql </span></div> <div> </div> <div><span style="color: #000000"><span style="color: #000000">mysql</span><span style="color: #808080">></span><span style="color: #000000">source d:\aiker_db.sql</span></span></div> </font><br /> </div> <img src ="http://www.aygfsteel.com/baoyaer/aggbug/210482.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/baoyaer/" target="_blank">大田?/a> 2008-06-25 11:52 <a href="http://www.aygfsteel.com/baoyaer/articles/210482.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL配置文gmy.cnf讄 http://www.aygfsteel.com/baoyaer/articles/209466.html大田?/dc:creator>大田?/author>Fri, 20 Jun 2008 07:37:00 GMThttp://www.aygfsteel.com/baoyaer/articles/209466.htmlhttp://www.aygfsteel.com/baoyaer/comments/209466.htmlhttp://www.aygfsteel.com/baoyaer/articles/209466.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/209466.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/209466.html 

 

 

  讄:

  对于单台q行的WEB服务?加上:

  skip-locking

  skip-name-resolve

  skip-networking

  在PHP链接数据库时使用"LOCALHOST".q样MySQL 客户端库覆盖之q尝试连接到本地套接?(

  我们可以从PHP.INI?/p>

  代码:

  ; Default socket name for local MySQL connects. If empty, uses the built-in

  ; MySQL defaults.

  mysql.default_socket = /tmp/mysql.sock看出 默认情况?UNIX 访?tmp/mysql.sock)

  以下是部分选项解释:

  my.cnf默认是不存在?你可以在/usr/local/share/mysql/下看?

  my-huge.cnf

  my-innodb-heavy-4G.cnf

  my-large.cnf

  my-medium.cnf

  my-small.cnf

  {文?其中合适你机器配置的文件拷贝到/etc/my.cnf或mysql data目录/my.cnf(/var/db/mysql)下或~/.my.cnf.文g内都有详l的说明

  [mysqld]

  port = 3306

  serverid = 1

  socket = /tmp/mysql.sock

  skip-locking

  # 避免MySQL的外部锁定,减少出错几率增强E_性?/p>

  skip-name-resolve

  止MySQL对外部连接进行DNS解析Q用这一选项可以消除MySQLq行DNS解析的时间。但需要注意,如果开启该选项Q则所有远E主接授权都要用IP地址方式Q否则MySQL无法正常处理连接请?

  back_log = 384

  指定MySQL可能的连接数量。当MySQLȝE在很短的时间内接收到非常多的连接请求,该参数生效,ȝE花费很短的旉查连接ƈ且启动一个新U程?/p>

  back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。如果系l在一个短旉内有很多q接Q则需要增大该参数的|该参数值指定到来的TCP/IPq接的侦听队列的大小。不同的操作pȝ在这个队列大上有它自己的限制?/p>

  试图讑֮back_log高于你的操作pȝ的限制将是无效的。默认gؓ(f)50。对于Linuxpȝ推荐讄为小?12的整数?/p>

  key_buffer_size = 256M

  # key_buffer_size指定用于索引的缓冲区大小Q增加它可得到更好的索引处理性能?/p>

  对于内存?GB左右的服务器该参数可讄?56M?84M?/p>

  注意Q该参数D|的q大反而会(x)是服务器整体效率降低!

  max_allowed_packet = 4M

  thread_stack = 256K

  table_cache = 128K

  sort_buffer_size = 6M

  查询排序时所能用的~冲区大。注意:(x)该参数对应的分配内存是每q接独占!如果?00个连接,那么实际分配的d排序~冲区大ؓ(f)100 × 6 = 600MB。所以,对于内存?GB左右的服务器推荐讄?-8M?/p>

  read_buffer_size = 4M

  L询操作所能用的~冲区大。和sort_buffer_size一P该参数对应的分配内存也是每连接独?

  join_buffer_size = 8M

  联合查询操作所能用的~冲区大,和sort_buffer_size一P该参数对应的分配内存也是每连接独?

  myisam_sort_buffer_size = 64M

  table_cache = 512

  thread_cache_size = 64

  query_cache_size = 64M

  指定MySQL查询~冲区的大小。可以通过在MySQL控制台执行以下命令观察:(x)

  代码:

  # > SHOW VARIABLES LIKE '%query_cache%';

  # > SHOW STATUS LIKE 'Qcache%';如果Q(jng)cache_lowmem_prunes的值非常大Q则表明l常出现~冲不够的情?

  如果Q(jng)cache_hits的值非常大Q则表明查询~冲使用非常频繁Q如果该D?yu)反而会(x)影响效率Q那么可以考虑不用查询~冲;Qcache_free_blocksQ如果该值非常大Q则表明~冲Z片很多?/p>

  tmp_table_size = 256M

  max_connections = 768

  指定MySQL允许的最大连接进E数。如果在讉K论坛时经常出现Too Many Connections的错误提 C,则需要增大该参数倹{?/p>

  max_connect_errors = 10000000

  wait_timeout = 10

  指定一个请求的最大连接时_(d)对于4GB左右内存的服务器可以讄?-10?/p>

  thread_concurrency = 8

  该参数取gؓ(f)服务器逻辑CPU数量×2Q在本例中,服务器有2颗物理CPUQ而每颗物理CPU又支持H.T线E,所以实际取gؓ(f)4 × 2 = 8

  skip-networking

  开启该选项可以d关闭MySQL的TCP/IPq接方式Q如果WEB服务器是以远E连接的方式讉KMySQL数据库服务器则不要开启该选项!否则无法正常连?





一?nbsp;       关于MySQL5
MySQL5pd数据?/span>是MySQL的最新版本的数据库,比较行的发行版是mysql-5.0.18。MySQL        英文官方|站?a target="_blank">http://www.mysql.com

二?nbsp;       获得MySQL5
所有的关于MySQL数据库的E序Q都可以在它的英文官方网?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E4%B8%8B%E8%BD%BD">下蝲
刎ͼ但是Q鉴于不不是所有h的英文都很好Q所以徏议大家尽量区MySQL的中文官方网站下载自己所需的程序,如果找不刎ͼ再去找英文的|站?br /> MySQL5?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E5%AE%89%E8%A3%85">安装版和免安?/span>版之分,֐思义Q安装版是需要安装以后才可以使用Q免安装版的MySQL下蝲下来之后可以用,或者进行简单的讄可以用?br /> MySQL5安装版下载地址Q?br /> Windows版本Q?a target="_blank">http://download.mysql.cn/src/2006/0218/199.html
Linux版本Q源码包Q:(x)http://download.mysql.cn/src/2006/0208/62.html
MySQL5免安装版下蝲地址Q?br /> Windows版本Q?a target="_blank">http://download.mysql.cn/src/2006/0302/205.html

三?nbsp;       MySQL5安装
Windows版安装手册:(x)http://bbs.mysql.cn/thread-261-1-1.html
Linux版本Q源码包Q安装手册:(x)http://bbs.mysql.cn/thread-493-1-2.html

MySQL有安装版本和免安装版本,免安装版本解压后的文件夹内没有安装程序,可以直接使用?br /> Windows免安装版本用手册:(x)http://bbs.mysql.cn/thread-552-1-1.html

四?nbsp;       备䆾与恢?br /> 常规备䆾命o(h)是mysqldump,q里以tm数据库ؓ(f)例,做简单介l,详细资料参?br /> http://info.mysql.cn/install/2006/0410/5521.html
备䆾Q?br /> #mysqldump -u root -p tm > tm_20060101.sql  
按提C入密码,q就把tm数据库所有的表结构和数据备䆾到tm_20060101.sql了,因ؓ(f)要总进行备份工作,如果数据量大?x)占用很大空_(d)
q是可以利用gzip压羃数据Q命令如下:(x)
#mysqldump -u root -p tm | gzip > tm_20060101.sql.gz
q可以备份到q程机器Q用-h制定Q如
#mysqldump -u root -p tm > tm_20060101.sql -h xxx.xxx.xxx.xxx
可以直接备䆾到IP地址为xxx.xxx.xxx.xxx的远E计机?br /> pȝ崩溃Q重建系l,或恢复数据库Ӟ可以q样恢复数据Q?br /> #mysql -u root -p tm < tm_20060101.sql
从压~文件直接恢复:(x)
#gunzip < tm_20060101.sql.gz | mysql -u root -p tm

五?nbsp;       FAQ

QQؓ(f)什么我下在?#8220;安装E序”里面没有安装文g?
AQ你下蝲的可能是免安装版本。请l出详细的版本信息?br />
QQ如何启动和关闭mysql?
AQlinux下:(x)比如我的mysql是用源码方式安装?usr/local/mysql
自动Q将/usr/local/mysql/share/mysql/mysql.server拯?etc/rc.d/init.d/下,然后
chkconfig --add mysql.server可以开机就启动mysql服务了?br /> 手动Q以rootw䆾执行/usr/local/mysql/bin/mysqld_safe --user=mysql
windows下:(x)
自动Q?br /> 用cmd方式Q到mysql安装路径的bin文g夹下Q执行:(x)mysqld-nt --install
手动Q直接到到mysql安装路径的bin文g夹下执行net start mysql卛_?br /> 如果不想让mysql在计机启动时候就启动服务Q执行:(x)mysqld-nt --remove
也可以在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services中删除对应服务ƈ重启计算机?br /> 关闭mysqlQmysqladmin -uroot -p shutdown
启动mysqlQ?br /> mysqld-nt --install
net start mysql

QQ如何修改mysql?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E7%94%A8%E6%88%B7">用户
密码?
A Q在q里请区分连接mysql数据库的用户密码和系l的用户密码Q!

mysql -uroot -p
输入密码
#dmysql
>use mysql
>update user set password=password("new_pass") where user="userName";  #userName换成你要修改的用户名的密码,比如root
>flush privileges;
>exit;

QQ如何登录mysql?
AQmysql -uroot -p回R后,输入密码Q再回R卛_。如果自己没有修改的话,默认密码为空?br />
QQmysql如何很好的变成图形化数据库呢?自n有自带的囑Ş化工h?
AQmysql自带一个字W的客户端,但是q有好多的像mysql_center、SQLyog、phpMyAdmin、Mysql Query BrowserQMysql Administrator、mysqlccq样好的囑Ş工具?br /> mysql_centerd在本站的下蝲地址Q?a target="_blank">http://bbs.mysql.cn/thread-517-1-1.html
SQLyogȝ上搜索,很多的,SQLyog407版本不错?br /> phpMyAdmin下蝲地址Q?a target="_blank">http://download.mysql.cn/opencode/2006/0207/55.html
mysql.com提供的管?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E8%BD%AF%E4%BB%B6">软g下蝲地址Q?a target="_blank">http://dev.mysql.com/downloads/gui-tools/5.0.html
其它的我׃一一提供下蝲地址Q自己到|上搜烦下蝲?br />
Q:Z么用mysql  -uusername -pdmysql服务器时出现如下提示Q?br />      Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server!("xxx.xxx.xxx.xxx"代表要登录的服务?/span>)
AQ这是因Z要登录的mysql服务器不允许用户username从xxx.xxx.xxx.xxxq个ip地址d?br /> 解决办法是在服务器登录mysqlQ操作步骤ؓ(f)Q?br /> mysql -uroot -p
(输入密码)
use mysql
update user set Host="%" where User="username";
flush privileges;

QQ什么是phpMyAdminQ?br /> AQphpMyAdmin 是一个用PHP~写的,可以通过互联|控制和操作MySQL。通过phpMyAdmin可以完全Ҏ(gu)据库q行操作Q例如徏立、复?删除数据{等?br /> 有了phpMyAdmin 可以完全不使用mysql命o(h),直接使用phpMyAdminp理mysql的所有数据和数据?br />
QQ如何用phpMyAdminQ?br /> AQ要使用phpMyAdminQ下载后Q把它释攑ֈweb服务器的根目录下Q取个名字,比如叫phpMyAdminQ然后在览器的地址栏输?
http://X.X.X.X/phpMyAdmin/index.php
可以了?br /> 如果是phpMyAdmin 2.8.0.2以上版本的,q样使用?x)报错,因?f)默认没有q个软g需要的配置文gconfig.default.php,?.6.X版本下都有这个文Ӟ只是口o(h)不对。对?.6.X版本的,可以直接用文本编辑器打开q个文gQ把其中W一?cfg中内容修Ҏ(gu)自己的用户名?qing)密码就可以了?x)
$cfg['Servers'][$i]['auth_type']     = 'config';    // Authentication method (config, http or cookie based)?
$cfg['Servers'][$i]['user']          = 'root';      // MySQL user
$cfg['Servers'][$i]['password']      = '自己的密?;
不设|密码的话,pȝ?x)提C:(x)
Access denied for user 'root'@'localhost' (using password: NO)

如果?.8.0.2版本的,E序?x)提Cq行scripts/setup.php或者index.phpq样的文件进行配|以生成config.inc.php文g?br />
QQؓ(f)什么我使用mysql出现qQ?br /> AQ安装mysql5旉认的字符集是瑞典~码latin1Q不支持中文。ƈ且出Cؕ码的原因很多Q徏议到bbs.mysql.cn论坛L{案。发贴的话请详细说明自己的环境、安?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E8%BF%87%E7%A8%8B">q程
?qing)用的信息Q以便大家能快速分析你的问题?br />
QQ如何修改字W集Q?br /> AQ?br /> mysql -uroot -p
输入密码
选择你的目标数据?br /> mysql> use dbname
昄当前字符?br /> mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | gb2312                                 |
| character_set_connection | gb2312                                 |
| character_set_database   | gb2312                                 |
| character_set_results    | gb2312                                 |
| character_set_server     | gb2312                                 |
| character_set_system     | utf8                                   |
| character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
7 rows in set (0.00 sec)
最好是保持字符集统一。如果你要修改哪个字W集Q用set命o(h)Q如Q?br /> mysql> set character_set_client gbk;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | gbk                                    |
| character_set_connection | gb2312                                 |
| character_set_database   | gb2312                                 |
| character_set_results    | gb2312                                 |
| character_set_server     | gb2312                                 |
| character_set_system     | utf8                                   |
| character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
再改回来Q?br /> mysql> set character_set_client=gb2312;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%char%';
+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | gb2312                                 |
| character_set_connection | gb2312                                 |
| character_set_database   | gb2312                                 |
| character_set_results    | gb2312                                 |
| character_set_server     | gb2312                                 |
| character_set_system     | utf8                                   |
| character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
7 rows in set (0.00 sec)
自己试试q道了?br />
QQؓ(f)什么我的phpmyadmin提示不能载入mysql扩展Q?br /> AQ?一、看下你的PHP目录和PHP\EXT下有没有php_mysql.dllq个文g?br />       二、配制一下环境变量把php_mysql.dll所在的目录加入的PATH里?br />       三、有的php安装E序安装好以后,在安装\径下Qƈ没有ext文g夹(不知道ؓ(f)什么)Q最好下载个配置的phpQ然后,exe文gҎ(gu)贝到安装目录下,再进行相应的配置?br />       四、看一下c:\winnt 或者是 c:\windows下的php.ini文g里的php_mysql.dll前面的;Q分P是否L了,如果没有L请去掉,然后Q将mysql安装路径下bin文g夹下的libmysql.dll攑֜安装php的根目录一般ؓ(f)CQ\php Q同时也?C:\windows 下也攑֐一个,之后重新启动IIS或者是APACHE。有的时候Lh一,即L分号也还是不能蝲入mysql扩展Q最后新打开一个窗口,再试?br />
QQؓ(f)什么提C:(x)"没有发现 PHP 的扩展设|mbstringQ?而当前系l好像在使用宽字W集。没?mbstring 扩展?phpMyAdmin 不能正确识别字符Ԍ可能产生不可意料的结?"
AQ因Z没有打开mbstring在扩展,解决办法Q打开php的配|文件php.iniQ将
extension=php_mbstring.dll前面的分?;"LQƈ改到正确的\径,一般ؓ(f)
ext/php_mbstring.dll

QQؓ(f)什么PHPq接mysql?x)有下面的提C?
       Fatal error: Call to undefined function mysql_connect() ……
AQ很有可能是没有载入mysql扩展Q如何解冻I请参考上面的Ҏ(gu)?br /> 因ؓ(f)如果你的pȝ没有载入mysql扩展的话Qphpmyadmin能给出提C,而一般的E序则不能给出?br /> 如果phpmyadmin没有l出提示Q而你恰好用的apache服务器,试一下方法:(x)
首先是去?extension=php_mysql.dll前面?#8220;;”Q?为注释)
W二步是C:\php\ext中的php_mysql.dll复制到C:\WINDOWSQC:\WINNTQ中卛_Q?br /> q起Apache?br />
QQؓ(f)什么我不能看孵化池资料Q?br /> AQMYSQL.CN的孵化池是专门ؓ(f)初学者提供学?fn)的地方Q这里我׃多介l了Q详情请讉KQ?a target="_blank">http://bbs.mysql.cn/thread-369-1-1.html?br />
QQ能中文数据库名UCQ?br /> AQ可以,但是不推荐,用v来不方便?br />
QQ如果我忘记?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=root%E5%AF%86%E7%A0%81">root密码Q怎么办?
AQ?br /> 在windows下:(x)
打开命o(h)行窗口,停止mysql服务Q?nbsp;       Net stop mysql
启动mysqlQ一般到mysql的安装\径,扑ֈ mysqld-nt.exe
执行Qmysqld-nt --skip-grant-tables
另外打开一个命令行H口Q执行mysql
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
>exit
用Ctrl+Alt+DelQ找到mysqld-nt的进E杀掉它Q在重新启动mysql-nt服务Q就可以用新密码d?br />
在linux下:(x)
如果 MySQL 正在q行Q首先杀之:(x) killall -TERM mysqld?
启动 MySQL Qbin/safe_mysqld --skip-grant-tables &
可以不需要密码就q入 MySQL 了?
然后是
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
重新杀 MySQL Q用正常Ҏ(gu)启动 MySQL ?br />
QQؓ(f)什么出现如下的提示Q?br /> [root@0-8-2-df-fa-ee ~]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
注:(x)也可能是其它路径下的mysql.sock
AQ说明mysql服务没有启动Qmysql.sock是mysql服务启动后启动生成的文gQ?br /> 一般先杀掉mysql服务Qkillall mysql
然后Q再Ҏ(gu)自己的安装情况启动mysql卛_。比如,安装的时候,用的?br /> ./configure --prefix=/usr/local/mysql?br /> 用下面的命o(h)启动Q?br /> /usr/local/mysql/bin/mysqld_safe --user=mysql &
之后再去执行/usr/local/mysql/bin/mysql -u root -p dq入mysql数据?br /> q不行的话,一ơ执行下面的命o(h)Q?br /> sync
reboot                     Q重启计机Q执行时请小心!Q!

Q:Z么出C面的错误
#1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client

AQ你使用的数据库?.1以上Q用命o(h)行连接MySQL数据库后Q执行下面的命o(h)Q?br /> UPDATE mysql.user SET password=OLD_PASSWORD("your_password") WHERE Host="your_host" AND User="your_username" ;
卛_解决?br />
your_passwordQ改成你q接?/span>据库的密码,比如 123
your_hostQ改成你q接数据库的LQ如果是本地的话Q就是localhost
your_usernameQ改成你q接数据库的用户Q比?root

QQؓ(f)什么mysql提示我:(x)Data too long for column ……
AQ首先确保你的数据大符合你的字D大?br /> 再检查你的数据库~码Q数据库的编码是否与操作数据库工L(fng)~码一_(d)


Q:Z么我修改wait_timeout没有生效
AQ?需要同时修?br /> interactive_timeout
wait_timeout
才会(x)生效Qshow variables;Q?br />

不断d中,如有错误Q欢q指正!


]]>
mysql 8时失效问题http://www.aygfsteel.com/baoyaer/articles/209391.html大田?/dc:creator>大田?/author>Fri, 20 Jun 2008 03:29:00 GMThttp://www.aygfsteel.com/baoyaer/articles/209391.htmlhttp://www.aygfsteel.com/baoyaer/comments/209391.htmlhttp://www.aygfsteel.com/baoyaer/articles/209391.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/209391.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/209391.html mysql gone-away

从Mysql 5.x的某个版本之后,MySQL的自动关闭空闲连接的Ҏ(gu)被修改了,假如一个连接空闲到时旉(默认28000U?时)Q再ơ发L(fng)Reconnect重新q接h不会(x)被接受,需要重新徏立新q接Q这导致了SER的重q机制不能正常工作:(x)SER只会(x)在需要操作数据库时去使用同一个连接接口,断开了则发v重新q接hQ而且q个问题短期内SER也不能够解决?/p>

  下文中将具体讲述处理的方法:(x)

  1.使用Mysql 4.0?.1版本Q如果没有用到Mysql 5的一些新Ҏ(gu)比如存储过E触发器之类?/p>

  2.定时重启Mysql服务器或Ser(׃本问题可能同样会(x)影响到其它一些需要Mysql支持的服务器E序Q所以重启Mysql服务器ؓ(f)好,但需要检Mysql服务器不被用的一个时间重启比较难定)

  3.讄my.cnfQ有mysqld字段内增加参敎ͼ(x)

  [mysqld]port = 3306socket = /tmp/mysql.sockwait_timeout= 500000interactive_timeout = 500000(500000U约五六天的时旉Q可Ҏ(gu)实际需要选择一个数据库可能I闲的最长时间稍大的旉倹{?重启Mysqld应用卛_Q也可以在执行mysqld时加-o wait_timeout=500000参数同样效果?/p>

  在MySQL客户端show variable时应该可以看到最后一条从默认的wait_time=28000变成500000了?/p>

  (假如重启Mysqld不生效,可以重启机子)

 



]]>
sql语句优化【z?/title><link>http://www.aygfsteel.com/baoyaer/articles/206919.html</link><dc:creator>大田?/dc:creator><author>大田?/author><pubDate>Tue, 10 Jun 2008 05:47:00 GMT</pubDate><guid>http://www.aygfsteel.com/baoyaer/articles/206919.html</guid><wfw:comment>http://www.aygfsteel.com/baoyaer/comments/206919.html</wfw:comment><comments>http://www.aygfsteel.com/baoyaer/articles/206919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/baoyaer/comments/commentRss/206919.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/baoyaer/services/trackbacks/206919.html</trackback:ping><description><![CDATA[<p> <table cellspacing="2" cellpadding="2" width="500" border="0"> <tbody> <tr> <td>ȝ1 选择索引</td> </tr> </tbody> </table> <br /> ~省情况下徏立的索引是非聚集索引Q但有时它ƈ不是最佳的Q合理的索引设计要徏立在对各U查询的分析和预上。一般来?/p> <ol> <li>有大量重复倹{且l常有范围查询(between, >,< Q?gt;=,< =Q和order by、group by发生的列Q考虑建立聚集索引Q?/li> <li>l常同时存取多列Q且每列都含有重复值可考虑建立l合索引Q在条g表达式中l常用到的不同D多的列上建立索,在不同值少的列上不要徏立烦引?/li> </ol> <p>                 比如在雇员表?#8220;性别”列上只有“?#8221;?#8220;?#8221;两个不同|因此无必要建立索引。如果徏立烦引不但不?x)提高查询效率?br />                  反而会(x)  严重降低更新速度?br />     3     l合索引要尽量关键查询形成索引覆盖Q其前导列一定是使用最频繁的列?br /> <br /> <table cellspacing="2" cellpadding="2" width="500" border="0"> <tbody> <tr> <td>ȝ2   避免使用不兼容的数据cd</td> </tr> </tbody> </table> <br />            例如float和INt、char和varchar、bINary和varbINary是不兼容的。数据类型的不兼容可能优化器无法执行一些本来可以进行的优化操作。例?<br /> SELECT name FROM employee WHERE salary Q?nbsp;60000<br /> 在这条语句中,如salary字段是money型的,则优化器很难对其q行优化,因ؓ(f)60000是个整型数。我们应当在~程时将整型转化成ؓ(f)钱币?而不要等到运行时转化?br /> <br /> <table cellspacing="2" cellpadding="2" width="500" border="0"> <tbody> <tr> <td>ȝ3  IS NULL 与IS NOT NULL</td> </tr> </tbody> </table> <br />         不能用null作烦引,M包含null值的列都不?x)被包含在烦引中。即使烦引有多列q样的情况下Q只要这些列中有一列含有nullQ该列就?x)从索引中排除。也是说如果某列存在空|即对该列徏索引也不?x)提高性能。Q何在WHERE子句中用is null或is not null的语句优化器是不允许使用索引的?br /> <br /> <table cellspacing="2" cellpadding="2" width="500" border="0"> <tbody> <tr> <td>ȝ4   IN和EXISTS</td> </tr> </tbody> </table> <br /> EXISTS要远比IN的效率高。里面关pdfull table scan和range scan。几乎所有的IN操作W子查询都可以改写ؓ(f)使用EXISTS的子查询?/p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> dname, deptno </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> dept<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> deptno </span><span style="color: #808080">NOT</span><span style="color: #000000"> </span><span style="color: #808080">IN</span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />(</span><span style="color: #0000ff">SELECT</span><span style="color: #000000"> deptno </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> emp);<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span></div> <p>改ؓ(f)</p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> dname, deptno </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> dept<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> </span><span style="color: #808080">NOT</span><span style="color: #000000"> </span><span style="color: #808080">EXISTS</span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />(</span><span style="color: #0000ff">SELECT</span><span style="color: #000000"> deptno </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> emp<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> dept.deptno </span><span style="color: #808080">=</span><span style="color: #000000"> emp.deptno);</span></div> <p><br /> 因ؓ(f)1中对empq行了full table scan,q是很浪Ҏ(gu)间的操作。而且1中没有用到emp的INdexQ?br /> 因ؓ(f)没有WHERE子句。?中的语句对empq行的是range scan?br /> <table cellspacing="2" cellpadding="2" width="500" border="0"> <tbody> <tr> <td>ȝ5  IN、OR子句怼(x)使用工作表,使烦引失?/td> </tr> </tbody> </table> <br /> 如果不生大量重复|可以考虑把子句拆开。拆开的子句中应该包含索引?br /> <br /> <table cellspacing="2" cellpadding="2" width="500" border="0"> <tbody> <tr> <td>ȝ6  避免或简化排?/td> </tr> </tbody> </table> <br /> 应当化或避免对大型表q行重复的排序。当能够利用索引自动以适当的次序生输出时Q优化器避免了排序的步骤。以下是一些媄响因素:(x)<br />        索引中不包括一个或几个待排序的列;<br />        group by或order by子句中列的次序与索引的次序不一P<br />        排序的列来自不同的表?br /> <br /> Z避免不必要的排序Q就要正地增徏索引Q合理地合ƈ数据库表Q尽有时可能媄响表的规范化Q但相对于效率的提高是值得的)。如果排序不可避免,那么应当试图化它Q如~小排序的列的范围等?br /> <br /> <table cellspacing="2" cellpadding="2" width="500" border="0"> <tbody> <tr> <td>ȝ7  消除对大型表行数据的序存取</td> </tr> </tbody> </table> <br /> 在嵌套查询中Q对表的序存取Ҏ(gu)询效率可能生致命的影响。比如采用顺序存取策略,一个嵌?层的查询Q如果每层都查询1000行,那么q个查询p查询 10亿行数据。避免这U情늚主要Ҏ(gu)是对连接的列进行烦引。例如,两个表:(x)学生表(学号、姓名、年??Q和选课表(学号、课E号、成l)。如果两个表要做q接Q就要在“学号”q个q接字段上徏立烦引?br /> q可以用ƈ集来避免序存取。尽在所有的查列上都有烦引,但某些Ş式的WHERE子句优化器用顺序存取。下面的查询强q对orders表执行顺序操作:(x)<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> Q?nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000"> orders </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> (customer_num</span><span style="color: #808080">=</span><span style="font-weight: bold; color: #800000">104</span><span style="color: #000000"> </span><span style="color: #808080">AND</span><span style="color: #000000"> order_num</span><span style="color: #808080">></span><span style="font-weight: bold; color: #800000">1001</span><span style="color: #000000">) </span><span style="color: #808080">OR</span><span style="color: #000000"> order_num</span><span style="color: #808080">=</span><span style="font-weight: bold; color: #800000">1008</span></div> <p><br /> 虽然在customer_num和order_num上徏有烦引,但是在上面的语句中优化器q是使用序存取路径扫描整个表。因个语句要索的是分ȝ行的集合Q所以应该改为如下语句:(x)<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> Q?nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000"> orders </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> customer_num</span><span style="color: #808080">=</span><span style="font-weight: bold; color: #800000">104</span><span style="color: #000000"> </span><span style="color: #808080">AND</span><span style="color: #000000"> order_num</span><span style="color: #808080">></span><span style="font-weight: bold; color: #800000">1001</span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">UNION</span><span style="color: #000000"><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">SELECT</span><span style="color: #000000"> Q?nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000"> orders </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> order_num</span><span style="color: #808080">=</span><span style="font-weight: bold; color: #800000">1008</span></div> <p>q样p利用索引路径处理查询?br /> <br /> <table cellspacing="2" cellpadding="2" width="500" border="0"> <tbody> <tr> <td>ȝ8  避免相关子查?/td> </tr> </tbody> </table> <br />         一个列的标{֐时在L询和W(xu)HERE子句中的查询中出玎ͼ那么很可能当L询中的列值改变之后,子查询必重新查询一ơ。查询嵌套层ơ越多,效率低Q因此应当尽量避免子查询。如果子查询不可避免Q那么要在子查询中过滤掉可能多的行?br /> <table cellspacing="2" cellpadding="2" width="500" border="0"> <tbody> <tr> <td>ȝ9  避免困难的正规表辑ּ</td> </tr> </tbody> </table> <br /> MATCHES和LIKE关键字支持通配W匹配,技术上叫正规表辑ּ。但q种匚w特别耗费旉。例如:(x)</p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> Q?nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000"> customer </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> zipcode </span><span style="color: #808080">LIKE</span><span style="color: #000000"> “98_ _ _”</span></div> <p><br /> 即在zipcode字段上徏立了索引Q在q种情况下也q是采用序扫描的方式。如果把语句改ؓ(f)<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> Q?nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000"> customer </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> zipcode </span><span style="color: #808080">></span><span style="color: #000000">“</span><span style="font-weight: bold; color: #800000">98000</span><span style="color: #000000">”Q?/span></div> <p>在执行查询时׃(x)利用索引来查询,昄?x)大大提高速度?br /> 另外Q还要避免非开始的子串。例如语句:(x)</p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> Q?nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000"> customer </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> zipcode</span><span style="color: #ff0000">[</span><span style="color: #ff0000">2Q?</span><span style="color: #ff0000">]</span><span style="color: #000000"> </span><span style="color: #808080">></span><span style="color: #000000">“</span><span style="font-weight: bold; color: #800000">80</span><span style="color: #000000">”Q?/span></div> <p>在WHERE子句中采用了非开始子Ԍ因而这个语句也不会(x)使用索引?br /> <table cellspacing="2" cellpadding="2" width="500" border="0"> <tbody> <tr> <td>不充份的q接条g</td> </tr> </tbody> </table> <br /> 例:(x)表card?896行,在card_no上有一个非聚集索引Q表account?91122行,在account_no上有一个非聚集索引Q试看在不同的表q接条g下,两个SQL的执行情况:(x)<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> </span><span style="color: #ff00ff">sum</span><span style="color: #000000">(a.amount) </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> account a,card b </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> a.card_no </span><span style="color: #808080">=</span><span style="color: #000000"> b.card_no<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span></div> <p>20S<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> </span><span style="color: #ff00ff">sum</span><span style="color: #000000">(a.amount) </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> account a,card b </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> a.card_no </span><span style="color: #808080">=</span><span style="color: #000000"> b.card_no </span><span style="color: #808080">and</span><span style="color: #000000"> a.account_no</span><span style="color: #808080">=</span><span style="color: #000000">b.account_no<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span></div> <p><1S<br /> 分析Q?br /> 在第一个连接条件下Q最x询方案是account作外层表Qcard作内层表Q利用card上的索引Q其I/Oơ数可由以下公式估算为:(x)<br /> 外层表account上的22541?Q外层表account?91122?内层表card上对应外层表W一行所要查扄3)=595907ơI/O<br /> 在第二个q接条g下,最x询方案是card作外层表Qaccount作内层表Q利用account上的索引Q其I/Oơ数可由以下公式估算为:(x)<br /> 外层表card上的1944?Q外层表card?896?内层表account上对应外层表每一行所要查扄4)= 33528ơI/O<br /> <br /> 可见Q只有充份的q接条gQ真正的最x案才?x)被执行?br /> 多表操作在被实际执行前,查询优化器会(x)Ҏ(gu)q接条gQ列出几l可能的q接Ҏ(gu)q从中找出系l开销最的最x案。连接条件要充䆾考虑带有索引的表、行数多的表Q内外表的选择可由公式Q外层表中的匚w行数*内层表中每一ơ查扄ơ数定Q乘U最ؓ(f)最x案?br /> 不可优化的WHERE子句<br /> ?<br /> 下列SQL条g语句中的列都建有恰当的烦引,但执行速度却非常慢Q?br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> </span><span style="color: #808080">*</span><span style="color: #000000"> </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> record </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> </span><span style="color: #ff00ff">substrINg</span><span style="color: #000000">(card_no,</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">4</span><span style="color: #000000">)</span><span style="color: #808080">=</span><span style="color: #ff0000">'</span><span style="color: #ff0000">5378</span><span style="color: #ff0000">'</span></div> <p><br /> (13U?<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> </span><span style="color: #808080">*</span><span style="color: #000000"> </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> record </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> amount</span><span style="color: #808080">/</span><span style="font-weight: bold; color: #800000">30</span><span style="color: #808080"><</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">1000</span></div> <p><br /> Q?1U)<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> </span><span style="color: #808080">*</span><span style="color: #000000"> </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> record </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> </span><span style="color: #ff00ff">convert</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #000000">char</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">),date,</span><span style="font-weight: bold; color: #800000">112</span><span style="color: #000000">)</span><span style="color: #808080">=</span><span style="color: #ff0000">'</span><span style="color: #ff0000">19991201</span><span style="color: #ff0000">'</span></div> <p><br /> Q?0U)<br /> 分析Q?br /> WHERE子句中对列的M操作l果都是在SQLq行旉列计算得到的,因此它不得不q行表搜索,而没有用该列上面的索引Q如果这些结果在查询~译时就能得刎ͼ那么可以被SQL优化器优化,使用索引Q避免表搜烦Q因此将SQL重写成下面这P(x)<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> </span><span style="color: #808080">*</span><span style="color: #000000"> </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> record </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> card_no </span><span style="color: #808080">like</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000">5378%</span><span style="color: #ff0000">'</span></div> <p><br /> Q?lt; 1U)<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> </span><span style="color: #808080">*</span><span style="color: #000000"> </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> record </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> amount</span><span style="color: #808080"><</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">1000</span><span style="color: #808080">*</span><span style="font-weight: bold; color: #800000">30</span></div> <p><br /> Q?lt; 1U)<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> </span><span style="color: #808080">*</span><span style="color: #000000"> </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> record </span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> date</span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000">1999/12/01</span><span style="color: #ff0000">'</span></div> <p><br /> Q?lt; 1U)<br /> <table cellspacing="2" cellpadding="2" width="500" border="0"> <tbody> <tr> <td>存储q程中,采用临时表优化查?/td> </tr> </tbody> </table> <br /> ?br /> 1Q从parven表中按vendor_num的次序读数据Q?br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> part_numQvendor_numQprice </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> parven </span><span style="color: #0000ff">ORDER</span><span style="color: #000000"> </span><span style="color: #0000ff">BY</span><span style="color: #000000"> vendor_num<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">INTO</span><span style="color: #000000"> </span><span style="color: #0000ff">temp</span><span style="color: #000000"> pv_by_vn</span></div> <p><br /> q个语句序读parvenQ?0)Q写一个(f)时表Q?0)Qƈ排序。假定排序的开销?00,d?00c(din)?br /> <br /> 2Q把临时表和vendor表连接,把结果输出到一个(f)时表Qƈ按part_num排序Q?br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> pv_by_vnQ* vendor.vendor_num </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> pv_by_vnQvendor<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> pv_by_vn.vendor_num</span><span style="color: #808080">=</span><span style="color: #000000">vendor.vendor_num<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">ORDER</span><span style="color: #000000"> </span><span style="color: #0000ff">BY</span><span style="color: #000000"> pv_by_vn.part_num<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">INTO</span><span style="color: #000000"> TMP pvvn_by_pn<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">DROP</span><span style="color: #000000"> </span><span style="color: #0000ff">TABLE</span><span style="color: #000000"> pv_by_vn</span></div> <p><br /> q个查询dpv_by_vn(50?Q它通过索引存取vendor?.5万次Q但׃按vendor_numơ序排列Q实际上只是通过索引序地读 vendor表(40Q?=42)Q输出的表每늺95行,?60c(din)写q存取这些页引发5Q?60=800ơ的dQ烦引共d892c(din)?br /> 3Q把输出和partq接得到最后的l果Q?br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> pvvn_by_pn.Q,part.part_desc </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> pvvn_by_pnQpart<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> pvvn_by_pn.part_num</span><span style="color: #808080">=</span><span style="color: #000000">part.part_num<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">DROP</span><span style="color: #000000"> </span><span style="color: #0000ff">TABLE</span><span style="color: #000000"> pvvn_by_pn</span></div> <p><br /> q样Q查询顺序地读pvvn_by_pn(160?Q通过索引读part?.5万次Q由于徏有烦引,所以实际上q行1772ơ磁盘读写,优化比例?0??br /> <br /> 好了Q搞定?br /> <br /> <br /> <table cellspacing="2" cellpadding="2" width="500" border="0"> <tbody> <tr> <td>帔R优化Q?/td> </tr> </tbody> </table> <br /> 帔R的计是在语句被优化时一ơ性完成,而不是在每次执行时。下面是索月薪大?000的的表达式:(x)<br /> sal > 24000/12<br /> sal > 2000<br /> sal*12 > 24000<br /> 如果SQL语句包括W一U情况,优化器会(x)单地把它转变成第二种?br /> 优化器不?x)简化跨比较符的表辑ּQ例如第三条语句Q鉴于此Q应量写用帔R跟字D|较检索的表达式,而不要将字段|于表达式当中。否则没有办法优化,比如如果sal上有索引Q第一和第二就可以使用Q第三就难以使用?br /> <br /> <table cellspacing="2" cellpadding="2" width="500" border="0"> <tbody> <tr> <td>操作W优?/td> </tr> </tbody> </table> 优化器把使用LIKE操作W和一个没有通配W的表达式组成的索表辑ּ转换Z?#8220;=”操作W表辑ּ?br /> 例如Q优化器?x)把表达式ename LIKE 'SMITH'转换为ename = 'SMITH'<br /> 优化器只能{换涉?qing)到可变长数据类型的表达式,前一个例子中Q如果ENAME字段的类型是CHAR(10)Q?nbsp;那么优化器将不做M转换?br /> 一般来讲LIKE比较难以优化?br /> <br /> 其中Q?br /> ~~ IN 操作W优化:(x)<br />     优化器把使用IN比较W的索表辑ּ替换为等L(fng)使用“=”?#8220;OR”操作W的索表辑ּ?br />     例如Q优化器?x)把表达式ename IN ('SMITH','KING','JONES')替换?br /> ename = 'SMITH' OR ename = 'KING' OR ename = 'JONES‘<br /> <br /> ~~ ANY和SOME 操作W优?<br />     优化器将跟随值列表的ANY和SOME索条件用{h(hun)的同{操作符?#8220;OR”l成的表辑ּ替换?br />     例如Q优化器如下所C的W一条语句用W二条语句替换:(x)<br />     sal > ANY (:first_sal, :second_sal)<br />     sal > :first_sal OR sal > :second_sal<br />     优化器将跟随子查询的ANY和SOME索条件{换成?#8220;EXISTS”和一个相应的子查询组成的索表辑ּ?br />     例如Q优化器如下所C的W一条语句用W二条语句替换:(x)<br />     x > ANY (SELECT sal FROM emp WHERE job = 'ANALYST')<br />     EXISTS (SELECT sal FROM emp WHERE job = 'ANALYST' AND x > sal)<br /> <br /> ~~ ALL操作W优?<br />     优化器将跟随值列表的ALL操作W用{h(hun)?#8220;=”?#8220;AND”l成的表辑ּ替换。例如:(x)<br />     sal > ALL (:first_sal, :second_sal)表达式会(x)被替换ؓ(f)Q?br />     sal > :first_sal AND sal > :second_sal<br />     对于跟随子查询的ALL表达式,优化器用ANY和另外一个合适的比较W组成的表达式替换。例?br />     x > ALL (SELECT sal FROM emp WHERE deptno = 10) 替换为:(x)<br />     NOT (x <= ANY (SELECT sal FROM emp WHERE deptno = 10))<br />     接下来优化器?x)把W二个表辑ּ适用ANY表达式的转换规则转换Z面的表达式:(x)<br />     NOT EXISTS (SELECT sal FROM emp WHERE deptno = 10 AND x <= sal)<br /> <br /> ~~ BETWEEN 操作W优?<br />     优化器L?#8220;>=”?#8220;<=”比较W来{h(hun)的代替BETWEEN操作W?br />     例如Q优化器?x)把表达式sal BETWEEN 2000 AND 3000用sal >= 2000 AND sal <= 3000来代ѝ?br /> <br /> ~~ NOT 操作W优?<br />     优化器L试图化检索条件以消除“NOT”逻辑操作W的影响Q这涉?qing)?#8220;NOT”操作W的消除以及(qing)代以相应的比较运符?br />     例如Q优化器下面的W一条语句用W二条语句代替:(x)<br />     NOT deptno = (SELECT deptno FROM emp WHERE ename = 'TAYLOR')<br />     deptno <> (SELECT deptno FROM emp WHERE ename = 'TAYLOR')<br />     通常情况下一个含有NOT操作W的语句有很多不同的写法Q优化器的{换原则是?#8220;NOT”操作W后边的子句可能的单,即可能?x)ɾl果表达式包含了更多?#8220;NOT”操作W?br />     例如Q优化器如下所C的W一条语句用W二条语句代替:(x)<br />     NOT (sal < 1000 OR comm IS NULL)<br />     NOT sal < 1000 AND comm IS NOT NULL sal >= 1000 AND comm IS NOT NULL<br /> <br /> <br /> <table cellspacing="2" cellpadding="2" width="500" border="0"> <tbody> <tr> <td>合理的烦引设?/td> </tr> </tbody> </table> <br /> <br /> 例:(x)表record?20000行,试看在不同的索引下,下面几个SQL的运行情况:(x)<br /> 语句A<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> </span><span style="color: #ff00ff">count</span><span style="color: #000000">(</span><span style="color: #808080">*</span><span style="color: #000000">) </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> record<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> date </span><span style="color: #808080">></span><span style="color: #ff0000">'</span><span style="color: #ff0000">19991201</span><span style="color: #ff0000">'</span><span style="color: #000000"> </span><span style="color: #808080">and</span><span style="color: #000000"> date </span><span style="color: #808080"><</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000">19991214‘ and amount >2000</span></div> <p><br /> <br /> 语句B<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> </span><span style="color: #ff00ff">count</span><span style="color: #000000">(</span><span style="color: #808080">*</span><span style="color: #000000">) </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> record<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">WHERE</span><span style="color: #000000"> date </span><span style="color: #808080">></span><span style="color: #ff0000">'</span><span style="color: #ff0000">19990901</span><span style="color: #ff0000">'</span><span style="color: #000000"> </span><span style="color: #808080">and</span><span style="color: #000000"> place </span><span style="color: #808080">IN</span><span style="color: #000000"> (</span><span style="color: #ff0000">'</span><span style="color: #ff0000">BJ</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">SH</span><span style="color: #ff0000">'</span><span style="color: #000000">)</span></div> <p><br /> <br /> 语句C<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">SELECT</span><span style="color: #000000"> date,</span><span style="color: #ff00ff">sum</span><span style="color: #000000">(amount) </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> record<br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">group</span><span style="color: #000000"> </span><span style="color: #0000ff">by</span><span style="color: #000000"> date</span></div> <p><br /> 1 在date上徏有一个非聚集索引<br /> AQ?25U?<br /> BQ?27U?<br /> CQ?55U?<br /> 分析Q?br /> date上有大量的重复|在非聚集索引下,数据在物理上随机存放在数据页上,在范围查找时Q必L行一ơ表扫描才能扑ֈq一范围内的全部行?br /> 2 在date上的一个聚集烦?br /> AQ(14U)<br /> BQ(14U)<br /> CQ(28U)<br /> 分析Q?br /> 在聚集烦引下Q数据在物理上按序在数据页上,重复g排列在一P因而在范围查找Ӟ可以先找到这个范围的h点,且只在这个范围内扫描数据,避免了大范围扫描Q提高了查询速度?br /> 3 在placeQdateQamount上的l合索引<br /> AQ(26U)<br /> CQ(27U)<br /> BQ(< 1U)<br /> 分析Q?br /> q是一个不很合理的l合索引Q因为它的前导列是placeQ第一和第二条SQL没有引用placeQ因此也没有利用上烦引;W三个SQL使用了placeQ且引用的所有列都包含在l合索引中,形成了烦引覆盖,所以它的速度是非常快的?br /> 4 在dateQplaceQamount上的l合索引<br /> AQ?nbsp;(< 1U?<br /> BQ(< 1U)<br /> CQ(11U)<br /> 分析Q?br /> q是一个合理的l合索引。它?yu)date作ؓ(f)前导列,使每个SQL都可以利用烦引,q且在第一和第三个SQL中Ş成了索引覆盖Q因而性能辑ֈ了最优?br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> </p> <img src ="http://www.aygfsteel.com/baoyaer/aggbug/206919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/baoyaer/" target="_blank">大田?/a> 2008-06-10 13:47 <a href="http://www.aygfsteel.com/baoyaer/articles/206919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ҏ(gu)据表中大字段的处理方?/title><link>http://www.aygfsteel.com/baoyaer/articles/203996.html</link><dc:creator>大田?/dc:creator><author>大田?/author><pubDate>Fri, 30 May 2008 01:00:00 GMT</pubDate><guid>http://www.aygfsteel.com/baoyaer/articles/203996.html</guid><wfw:comment>http://www.aygfsteel.com/baoyaer/comments/203996.html</wfw:comment><comments>http://www.aygfsteel.com/baoyaer/articles/203996.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/baoyaer/comments/commentRss/203996.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/baoyaer/services/trackbacks/203996.html</trackback:ping><description><![CDATA[在数据库中,l常需要用到大字段cdQ如oracle中long/blob/clob,sqlserver中text/imageQmysql中的text/longtext/clob/blob?<br /> 存储的信息大概主要是两类Q一cL长文本,如大D늚文字Q普通的varchar最长只能存?000个汉字,已经不能满要求Q另一cL存储二进制信息,如上传的文g{?<br />  <br /> 那么假如现在有一个表Q记录某人发布的文档信息Q字D包括:(x)发布人,发布旉Q文档标题,文档内容(实际中还?x)有其它字?Q一般徏表如?sqlserver)Q?<br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">create</span><span style="color: #000000"> </span><span style="color: #0000ff">table</span><span style="color: #000000"> document( <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />id </span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000"> </span><span style="color: #ff00ff">identity</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">) </span><span style="color: #808080">not</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">, <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />createuser_id </span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">, <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />document_title </span><span style="font-weight: bold; color: #000000">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">255</span><span style="color: #000000">), <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" />document_context </span><span style="font-weight: bold; color: #000000">text</span><span style="color: #000000">); </span></div> <br /> q张表的l构Q表面上看v来,从数据库设计角度和对应的JAVAcȝ设计来讲Q都是没有问题的?<br /> 但实际上Q这里面隐藏着两个比较严重的问题! <br /> 一、不能完全跨数据?<br /> <br />  why?问题出在需要查?distinct)的时候?<br />   在需要查重时Q采用纯jdbc技术,则可以自定义要查重的字段Q如select distinct id,createuser_id,document_title from document。而当采用hibernateӞ若不惌已创q个新的Pojo或者用Object[]方式来处理数据,则只能用select distinct d from document as dq样的语句,而hibernate?x)将其解析?f)cMQselect distinct id,createuser_id,document_title,document_context from document?<br />   问题出在这个document_context字段上! <br />   对于mysql来讲Qhibernate生成的sql是可以执行的。但对于sqlserver来讲Q是不允许在text/image列上q行distinct查询的!oracle中同样不可以对clob/blobq行distinct查询?<br />   因此pȝ在sqlserver/oracle上部|时Q当需要查重时则会(x)出错。当然如果你用不到查重语句,是一点不受媄响的?<br /> <br /> 二、严重媄响列表显C和l计的效?<br />   影响一张表的查询速度的,除了行数Q还包括表所占的物理I间的大。此表在数据量较?yu)时Q在查询斚w感觉不到明显的差异。但是如果document_context字段所存储的数据都是大D|本或较大的文件时Q会(x)D表的物理I间q速变大,该字D|占用的空间有可能辑ֈ整表所占空间的90%以上。在此基上,如果行数再增加到数十万、上百万U时Q整个表所占的I间达C个惊人的数字?<br />   保守估计Q一条记录占用的I间q_?0K的话Q一万条记录占?00M的空_(d)一百万条记录将占用10GQ在此表上的CRUD操作Q亦变慢,查询的速度亦会(x)受到非常大的影响 。当焉过提高服务器本w的g性能和优化烦引,可以提高查询速度Q但面对无法预知的巨大洪_(d)单纯加固堤坝是不保险的?br />  <br /> <br /> 解决的方式? <br />   曄处理q公司内的一个老系l,表的行数辑ֈ十万左右Q由于采用上面的设计方式Q虽然已l尽可能优化了烦引,但查询分|Q仍焉要十U左叟뀂我单独Z一个新表,document_contextq个字段Ud新表中,在原表中加一个对应的外键列,l过处理后,分页昄响应旉降到毫秒U以内。(二进制数据的转移是无法用普?的数据导入导出方式的Q我的方法是复制该表Q然后再修改复制后的表结构) <br />   因ؓ(f)q个大字D,在最常用的列表显CZ是根本不需要关心的Q仅当用户需要查看某一记录的具体信息时Q才需要调入该字段信息。因此分表后Q显著提高了分页性能?<br /> <br /> <p>在我现在开发的所有的pȝ中,我都采用了上q的方式Q这样做属于未雨l缪Q一旦系l部|后再修改,可能来不及(qing)了?</p> <p>补充Q近日公司的另一套CMSpȝQ已l出?了上q问题。clob字段直接|于业务表中Q现业务表记录已?0余万Q查询的速度非常~慢Q被q采用各U方式来解决。如果当初设计时p虑到这斚w׃?x)有q样的问题了?<br /> PSQ解x案之一是,可以在Pojo中加入构造函敎ͼ参数中包含除clob字段外的所有其它字D,通过select new Pojo(field1,field2,.....) from Pojo的方式来处理。但要注意,fieldx不能为集合类型,只能为基本数据类型或Pocd。如public Pojo(Long id,String name,User usr,Date createDate){} </p> <br /> <img src ="http://www.aygfsteel.com/baoyaer/aggbug/203996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/baoyaer/" target="_blank">大田?/a> 2008-05-30 09:00 <a href="http://www.aygfsteel.com/baoyaer/articles/203996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle内置函数大全http://www.aygfsteel.com/baoyaer/articles/194847.html大田?/dc:creator>大田?/author>Tue, 22 Apr 2008 10:10:00 GMThttp://www.aygfsteel.com/baoyaer/articles/194847.htmlhttp://www.aygfsteel.com/baoyaer/comments/194847.htmlhttp://www.aygfsteel.com/baoyaer/articles/194847.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/194847.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/194847.html阅读全文

]]>
_plsql/oracle客户端安?/title><link>http://www.aygfsteel.com/baoyaer/articles/193401.html</link><dc:creator>大田?/dc:creator><author>大田?/author><pubDate>Wed, 16 Apr 2008 05:22:00 GMT</pubDate><guid>http://www.aygfsteel.com/baoyaer/articles/193401.html</guid><wfw:comment>http://www.aygfsteel.com/baoyaer/comments/193401.html</wfw:comment><comments>http://www.aygfsteel.com/baoyaer/articles/193401.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/baoyaer/comments/commentRss/193401.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/baoyaer/services/trackbacks/193401.html</trackback:ping><description><![CDATA[<p>1.下蝲软g</p> <p>oracle.part1.rar、oracle.part2.rar、oracle.part3.rar</p> <p>2.安装软g</p> <p>分别安装“Oracle客户?#8221;?#8220;PLSQL Developer”软g?/p> <p>3.配置</p> <p>Oracle客户端的配制文gQ默认会(x)安装?#8220;C:\Oracle\ora90\network\ADMIN”目录下,名ؓ(f)“tnsnames.ora”参考格式如下:(x)</p> <p>ORCL_192.168.1.246 =<br />   (DESCRIPTION =<br />     (ADDRESS_LIST =<br />       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.246)(PORT = 1521))<br />     )<br />     (CONNECT_DATA =<br />       (SID = orcl)<br />       (SERVER = DEDICATED)<br />     )<br />   )<br /> </p> <img src ="http://www.aygfsteel.com/baoyaer/aggbug/193401.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/baoyaer/" target="_blank">大田?/a> 2008-04-16 13:22 <a href="http://www.aygfsteel.com/baoyaer/articles/193401.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> MySQL数据库单一表突?G限制的实现方? http://www.aygfsteel.com/baoyaer/articles/175440.html大田?/dc:creator>大田?/author>Tue, 15 Jan 2008 05:00:00 GMThttp://www.aygfsteel.com/baoyaer/articles/175440.htmlhttp://www.aygfsteel.com/baoyaer/comments/175440.htmlhttp://www.aygfsteel.com/baoyaer/articles/175440.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/175440.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/175440.html
2008-01-15 10:28:19 发表, 已被览? 7 )?nbsp;?推荐到内|?/a>?首页 ?查看评论  

zt, for MYISAM tables of older Mysql versions.

    q日Q一位Discuz!老用L(fng)论坛在发表回复时出现“The table is full”的提C,字面意义上是数据表已满的意思。因为很有开发者遭遇单一表超q?G的情况,因此朋友间的讨论只能提供一些外围的信息。ؓ(f)解决此问题,我翻阅了很多资料Q本文将以我此次问题的解册E,介绍问题发生的原因及(qing)对策?/p>

  Ҏ(gu)l验QThe table is full提示往往出现在以下两U情况:(x)

  1. 表中讄了MAX_ROWS|单的_(d)若MAX_ROWS讄?00Q而程序试囑ֆ入第101条记录,?x)出现此错误?/p>

  2. 表满。这U情冉|本文讨论的重炏V?/p>

  我们认ؓ(f)MySQL在存取表的时候,存在一U定位分配规律。这个规律在默认的情况下Q可以寻址4G以内的数据。超q这个大,数据库将不能Ҏ(gu)据定位,因而也无法q行d。经q实验,q个限制是完全可以被H破的?/p>

  本例中,用户的系l环境ؓ(f)双Athlon处理器、SCSI盘72G?G内存Q用L(fng)帖子表数据尺ؓ(f)4294963640Q接q?G(4G的实际字节数?294967296)?/p>

  首先SSHd后,查看用户的系l信息:(x)

  # uname -a

  Linux zichen.com 2.4.20-8smp #1 SMP Thu Mar 13 16:43:01 EST 2003 i686 athlon i386 GNU/Linux

  证明是LinuxpȝQ根据内核版?.4.20-8smpQ加上国内用的常见pȝQ估计应该是redhat 9发行包?/p>

  # cat /etc/*release*

  Red Hat Linux release 9 (Shrike)

  q也证明了我们对pȝ版本的猜惟?/p>

  然后看一下用的是什么文件系l。因用户q高手Q估计在装系l的时候就是一路回车下来,redhat 9默认的应该是EXT3Q不q我们还是看一下:(x)

  # parted

  GNU Parted 1.6.3

  Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.

This program is free software, covered by the GNU General Public License.

  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of

  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

  Using /dev/sda

  Information: The operating system thinks the geometry on /dev/sda is 8942/255/63. Therefore, cylinder 1024 ends at 8032.499M.

  (parted) print

  Disk geometry for /dev/sda: 0.000-70149.507 megabytes

  Disk label type: msdos

  Minor Start End Type Filesystem Flags

  1 0.031 101.975 primary ext3 boot

  2 101.975 10103.378 primary linux-swap

  证明实是这样子。随后我们翻阅了EXT3文gpȝ的相x术参敎ͼEXT3是在EXT2基础上演变而来?font color="#ff0000">EXT2所支持最大单一文g长度?GQ这个是很蹩脚的一个限制。EXT3做的很大一个改善就是将q个限制攑֤C2TBQ由此稍松一口气Qv码不是操作系l上的限制?/p>

  l过朋友的开|了解到单一文g大小有如下几个因素:(x)

  1. 文gpȝ的限?如刚存所说EXT3?TB限制)

  2. 某一E序q程所能存取的W一文g最大尺?例如apache在Linux EXT3下能存取的最大尺ؓ(f)2GQ诸如日?

  初步判断瓉在上述其中W二V随后找到myisamchk来显CZ下表信息Q证明了瓉在MySQL本n的存取上?/p>

  # myisamchk -dv cdb_posts

  l果׃贴了Q其中有一Max datafile length的值恰好就?G。由此生了瓉?/p>

  后来阅了N多资料,q行了N多尝试,也走了不弯路,最l觉得还是官Ҏ(gu)档比较可靠。比较老的文档里写道这是由于tmp_table_size的值造成的,也有提到用BIG-TABLESq个参数。事实证明这些都是歧途。大晚上的确实很累,q里只给出最l的解决Ҏ(gu)吧,中间的就不罗嗦了?/p>

 q到mysql客户端?/p>

  # mysql -uroot -p

  Enter password: ******

  Welcome to the MySQL monitor. Commands end with ; or g.

  Your MySQL connection id is 59411 to server version: 4.0.18-standard

  Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

  mysql> use ******

  Database changed

  mysql> ALTER TABLE cdb_posts MAX_ROWS=1000000000 AVG_ROW_LENGTH=15000;

  因ؓ(f)q个表非常大Q执行时间在双Athlon的专业服务器上竟然花?0分钟Q?/p>

  之后再通过myisamchk查看该表的信息:(x)

  # myisamchk -dv cdb_posts

  MyISAM file: cdb_posts

  Record format: Packed

  Character set: latin1 (8)

  File-version: 1

  Creation time: 2004-08-30 22:19:48

  Recover time: 2004-08-30 22:42:47

  Status: open,changed

  Auto increment key: 1 Last value: 1063143

  Data records: 619904 Deleted blocks: 5

  Datafile parts: 619909 Deleted data: 323872

  Datafile pointer (bytes): 6 Keyfile pointer (bytes): 4

  Datafile length: 4295287332 Keyfile length: 40421376

  Max datafile length: 281474976710654 Max keyfile length: 4398046510079

  Recordlength: 149

  table description:

  Key Start Len Index Type Rec/key Root Blocksize

  1 1 4 unique unsigned long 1 4535296 1024

  2 5 2 multip. unsigned short 13776 12540928 1024

  3 111 4 multip. unsigned long 1 18854912 1024

  4 28 3 multip. uint24 18 24546304 1024

  5 7 3 multip. uint24 7 32827392 1024

  111 4 unsigned long 1

  6 7 3 multip. uint24 7 40418304 1024

  28 3 uint24

  令h振奋的事情发生了Q该表的 Max datafile length: 281474976710654 Max keyfile length: 4398046510079Q即最大数据尺?MYD文g)辑ֈ?TBQ最大烦引尺?MYI)仍然?G?/p>

  由此默认?G限制被突破了。关于其中的原理Q其实很单:(x)假设你有一个日记本Q上面有10늺可以写东西,~排目录只需?个字?因ؓ(f)0?够?。如果你把这本子又塞q两张纸Q变?2,1个字节的目录I间无法寻址到后面的两页中,q而生了错误。上面那个ALTER语句中的数值都是我Z证成功,取的比较大的?因ؓ(f)ALTER一ơ实在是太慢了,没时间在那ؕ试验)Q相当于告诉数据库,q个本子?000000000,每页q_?15000个字节。这h据库便知道这是很大的一个本子,因此不遗余力的拿Z100?假设?做目录编排,q样q个新的目录可以寻址到日记本的所有内容了。错误消失?/p>

  惟一的缺点就是,目录占用的空间多了一些,但已l微乎其微了Q做了这U改变其?G的文件尺寸大只增大?M多,非常令h振奋?/p>

]]>
l护oracle10g的回收站(转自eygle的网?http://www.aygfsteel.com/baoyaer/articles/172736.html大田?/dc:creator>大田?/author>Fri, 04 Jan 2008 06:31:00 GMThttp://www.aygfsteel.com/baoyaer/articles/172736.htmlhttp://www.aygfsteel.com/baoyaer/comments/172736.htmlhttp://www.aygfsteel.com/baoyaer/articles/172736.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/172736.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/172736.html 

从Oracle10g开始,Oracle引入?a >flashback drop的新Ҏ(gu)?/font>Q这个新Ҏ(gu),允许你从当前数据库中恢复一个被drop了的对象。在执行drop操作Ӟ现在Oracle不是真正删除它,而是该对象自动放入回收站。对于一个对象的删除Q其实仅仅就是简单的重o(h)名操作?


所谓的回收站,是一个虚拟的容器Q用于存放所有被删除的对象。在回收站中Q被删除的对象将占用创徏时的同样的空_(d)你甚臌可以对已l删除的表查询,也可以利用flashback功能来恢复它Q?q个是flashback drop功能?

q个功能虽然可以极大的简化误dropD的恢复操作,但是长时间的U篏可能?x)导致大量的I间占用(虽然Oracleh自己的清理机?Q很多时候我们需要手工介入去清理回收站。本文主要介l清理回收站的几U方?

 1.大量累计的空间占?

Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 
Connected as SYS

SQL> col owner for a12
SQL> select owner,object_name,CREATETIME,DROPTIME from dba_recyclebin
  2  order by droptime
  3  /
OWNER        OBJECT_NAME                    CREATETIME          DROPTIME
------------ ------------------------------ ------------------- -------------------
COMMON       BIN$AHsQ+pi+Kb/gRAADumkBdQ==$0 2005-08-29:16:42:19 2005-09-11:15:36:17
COMMON       BIN$AHsQ+pi9Kb/gRAADumkBdQ==$0 2005-08-29:16:42:19 2005-09-11:15:36:17
PDA          BIN$AdEb4zqqUcTgRAADumkBdQ==$0 2005-09-05:10:31:01 2005-09-28:15:40:39
......
BJLAIS_RUN   BIN$BtkGRT0dSwfgRAADumkBdQ==$0 2005-11-30:10:54:07 2005-12-01:16:13:17
BJLAIS_RUN   BIN$BtkGRT0cSwfgRAADumkBdQ==$0 2005-11-30:10:54:07 2005-12-01:16:13:17
750 rows selected
SQL> 

2.不同用户在回收站的对?

SQL> select owner,count(*) from dba_recyclebin group by owner;   
OWNER                  COUNT(*)
-------------------- ----------
BJLAIS_RUN                   44
COMMON                        8
MMSBLOG                     618
MMSHAWA_RUN                   2
PDA                           8
RING_RUN                     70
6 rows selected.

3.我们可以指定删除某些特定对象

SQL> purge table common.T_SERVICE_CODE_INFO;

Table purged.

4.指定清除某个表空间的所有回收站对象

SQL> purge tablespace common;
Tablespace purged.
SQL> select owner,count(*) from dba_recyclebin group by owner;   
OWNER                  COUNT(*)
-------------------- ----------
BJLAIS_RUN                   44
MMSBLOG                     618
MMSHAWA_RUN                   2
PDA                           8
RING_RUN                     70

5.以SYSDBAw䆾可以清除所有回收站对象

SQL> purge dba_recyclebin;

DBA Recyclebin purged.

SQL> select owner,count(*) from dba_recyclebin group by owner;  

no rows selected

6.用recyclebin

 

如果我们不希望用Oracle的recyclebin,可以通过参数用q个Ҏ(gu)?

在Oracle10gR1中,通过修改一个隐含参?_recyclebin 为False可以用q个Ҏ(gu)?

SQL> set linesize 132
SQL> column name format a30
SQL> column value format a25
SQL> select
  2    x.ksppinm  name,
  y.ksppstvl  value,
  3    y.ksppstdf  isdefault,
  4    5    decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE')  ismod,
  6    decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE')  isadj
  7  from
  8    sys.x$ksppi x,
  9    sys.x$ksppcv y
 10  where
 11    x.inst_id = userenv('Instance') and
 12    y.inst_id = userenv('Instance') and
 13    x.indx = y.indx and
 14    x.ksppinm like '%&par%'
 15  order by
 16    translate(x.ksppinm, ' _', ' ')
 17  /
Enter value for par: recyclebin
old  14:   x.ksppinm like '%&par%'
new  14:   x.ksppinm like '%recyclebin%'
NAME                           VALUE                     ISDEFAULT ISMOD      ISADJ
------------------------------ ------------------------- --------- ---------- -----
_recyclebin                    TRUE                      TRUE      FALSE      FALSE
1 row selected.

在Oracle10gR2中,recyclebin变成了一个常规参敎ͼ可以在session/systemU动态修?

[oracle@danaly ~]$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Dec 12 15:34:56 2005
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
SQL> show parameter recyclebin 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      on
SQL> alter session set recyclebin=off;
Session altered.
SQL> alter session set recyclebin=on
  2  /
Session altered.
SQL> alter system set recyclebin=off;
System altered.
SQL> alter system set recyclebin=on;
System altered.

 



]]>
sqlserver 创徏数据库:(x)http://www.aygfsteel.com/baoyaer/articles/171110.html大田?/dc:creator>大田?/author>Fri, 28 Dec 2007 02:56:00 GMThttp://www.aygfsteel.com/baoyaer/articles/171110.htmlhttp://www.aygfsteel.com/baoyaer/comments/171110.htmlhttp://www.aygfsteel.com/baoyaer/articles/171110.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/171110.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/171110.html
if exists (select * From master.dbo.sysdatabases where name='$SQLSERVER_DB_NAME$' and status<>512)
drop database $SQLSERVER_DB_NAME$;
if not exists (select * From master.dbo.sysdatabases where name='$SQLSERVER_DB_NAME$' and status<>512)
create database $SQLSERVER_DB_NAME$;




]]>
手工创徏oracle数据?/title><link>http://www.aygfsteel.com/baoyaer/articles/171098.html</link><dc:creator>大田?/dc:creator><author>大田?/author><pubDate>Fri, 28 Dec 2007 02:34:00 GMT</pubDate><guid>http://www.aygfsteel.com/baoyaer/articles/171098.html</guid><wfw:comment>http://www.aygfsteel.com/baoyaer/comments/171098.html</wfw:comment><comments>http://www.aygfsteel.com/baoyaer/articles/171098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/baoyaer/comments/commentRss/171098.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/baoyaer/services/trackbacks/171098.html</trackback:ping><description><![CDATA[<p class="date"> </p> <div> <p>一直就xq篇文章加进来,只可以一直没有时间。刚好今天给我在试机器上来了个误操作rm * backup/*,把正在运行的数据库中的数据文件全部删除了Q真是郁Pq好q个是给我们Ch们测试玩的,要不然就d了!在此也做一个提醒,<strong>wؓ(f)DBA,要永q记住甚用或者禁止用rm命o(h)Q万不得以的情况下,使用时在敲enter也要看了又看、慎重又慎重才行Q?/strong>好了Q费话不说了Q下面请看我的过E?/p> <br /> <p><strong><span lang="EN-US" style="font-size: 9pt">Red Hat Enterprise 3 + Oracle 10g Release 2</span></strong></p> <p><strong><span lang="EN-US" style="font-size: 9pt">$su – oracle</span></strong></p> <p><strong><span lang="EN-US" style="font-size: 9pt">1--- </span></strong><strong><span style="font-size: 9pt; font-family: 宋体">讄pȝ环境变量Q?/span></strong></p> <p><span lang="EN-US" style="font-size: 9pt">ORACLE_HOME=/opt/oracle/product/10.2</span></p> <p><span lang="EN-US" style="font-size: 9pt">ORACLE_BASE=/opt/oracle</span></p> <p><span lang="EN-US" style="font-size: 9pt">ORACLE_SID=dbtest</span></p> <p><span lang="EN-US" style="font-size: 9pt">......</span></p> <p><strong><span lang="EN-US" style="font-size: 9pt">2--- </span></strong><strong><span style="font-size: 9pt; font-family: 宋体">pȝ规划Q?/span></strong></p> <p><span style="font-size: 9pt; font-family: 宋体">实例名称</span><span lang="EN-US" style="font-size: 9pt">ORACLE_SID=dbtest</span></p> <p><span style="font-size: 9pt; font-family: 宋体">数据库名U?/span><span lang="EN-US" style="font-size: 9pt">DB_NAME=dbtest</span></p> <p><strong><span lang="EN-US" style="font-size: 9pt">3--- </span></strong><strong><span style="font-size: 9pt; font-family: 宋体">手工创徏如下目录Q?/span></strong></p> <p><span lang="EN-US" style="font-size: 9pt">/opt/oracle/admin/dbtest/cdump</span></p> <p><span lang="EN-US" style="font-size: 9pt">/opt/oracle/admin/dbtest/bdump</span></p> <p><span lang="EN-US" style="font-size: 9pt">/opt/oracle/admin/dbtest/udump</span></p> <p><span lang="EN-US" style="font-size: 9pt">/opt/oracle/admin/dbtest/pfile</span></p> <p><span lang="EN-US" style="font-size: 9pt">/opt/oracle/oradata/dbtest/</span></p> <p><span lang="EN-US" style="font-size: 9pt">/opt/oracle/oradata/dbtest/archive</span></p> <p><strong><span lang="EN-US" style="font-size: 9pt">4--- </span></strong><strong><span style="font-size: 9pt; font-family: 宋体">建立密码文gQ?/span></strong></p> <p><span lang="EN-US" style="font-size: 9pt">orapwd file=/opt/oracle/product/10.2/dbs/orapwd_dbtest password=superman</span></p> <p><strong><span lang="EN-US" style="font-size: 9pt">5---</span></strong><strong><span style="font-size: 9pt; font-family: 宋体">修改参数文gQ?/span></strong></p> <p><span style="font-size: 9pt; font-family: 宋体">格式Q?/span><span lang="EN-US" style="font-size: 9pt">/opt/oracle/product/10.2/dbs/init.ora</span></p> <p><span style="font-size: 9pt; font-family: 宋体">实例Q?/span><span lang="EN-US" style="font-size: 9pt">/opt/oracle/product/10.2/dbs/initdbtest.ora</span></p> <p><span style="font-size: 9pt; font-family: 宋体">内容如下Q?/span></p> <span style="font-size: 9pt; font-family: 宋体"><font face="宋体, MS Song"><font size="3"> <p>---------------------------------------------------</p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">dbtest.__db_cache_size=331350016</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">dbtest.__java_pool_size=4194304</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">dbtest.__large_pool_size=8388608</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">dbtest.__shared_pool_size=138412032</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">dbtest.__streams_pool_size=0</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*._kgl_large_heap_warning_threshold=8388608</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.audit_file_dest='/opt/oracle/admin/dbtest/adump'</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.background_dump_dest='/opt/oracle/admin/dbtest/bdump'</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.compatible='10.2.0.1.0'</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.control_files='/opt/oracle/oradata/dbtest/control01.ctl','/opt/oracle/oradata/dbtest/control02.ctl','/opt/oracle/oradata/dbtest/control03.ctl'</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.core_dump_dest='/opt/oracle/admin/dbtest/cdump'</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.db_2k_cache_size=33554432</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.db_block_size=8192</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.db_domain=''</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.db_file_multiblock_read_count=128</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.db_files=4000</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.db_name='dbtest'</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.db_recovery_file_dest_size=4294967296</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.db_recovery_file_dest=''</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.log_archive_dest='/opt/oracle/oradata/dbtest/archive'</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.log_checkpoints_to_alert=FALSE</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.open_cursors=300</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.parallel_execution_message_size=65535</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.parallel_max_servers=128</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.pga_aggregate_target=209715200</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.processes=150</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.recyclebin='OFF'</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.remote_login_passwordfile='EXCLUSIVE'</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.replication_dependency_tracking=FALSE</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.session_cached_cursors=100</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.sga_target=500m</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.shared_pool_size=100m</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.undo_management='AUTO'</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.undo_retention=0</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.undo_tablespace='UNDOTS'</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.user_dump_dest='/opt/oracle/admin/dbtest/udump'</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">*.workarea_size_policy='AUTO'</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">_allow_resetlogs_corruption=true</font></span></p> <p> <p>---------------------------------------------------</p> <p> <p><strong><span style="font-size: 9pt; font-family: 宋体">可将此文件复制到Q?/span></strong><strong><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">/opt/oracle/admin/dbtest/pfile/init.ora</font></span></strong></p> <p><strong><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">6--- </font></span></strong><strong><span style="font-size: 9pt; font-family: 宋体">登陆</span></strong><strong><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">oracle</font></span></strong><strong><span style="font-size: 9pt; font-family: 宋体">Q?/span></strong></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">> sqlplus “/ as sysdba”</font></span></p> <p><strong><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">7--- </font></span></strong><strong><span style="font-size: 9pt; font-family: 宋体">启动实例Q?/span></strong></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">SQL> startup nomount pfile=/opt/oracle/admin/dbtest/pfile/init.ora</font></span></p> <p><strong><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">8--- </font></span></strong><strong><span style="font-size: 9pt; font-family: 宋体">创徏数据库的脚本Q?/span></strong></p> <p><strong><span style="font-size: 9pt; font-family: 宋体">-----------------------------------------------------------</span></strong></p> <span style="font-size: 9pt; font-family: 宋体"> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">CREATE DATABASE dbtest</font></span></p> <p><font face="Times New Roman"><span lang="EN-US" style="font-size: 9pt">LOGFILE</span></font></p> <p style="text-indent: 40.5pt"><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">GROUP 1 ('/opt/oracle/oradata/dbtest/redo01.log','/opt/oracle/oradata/dbtest/redo01_1.log') size 100m reuse, </font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">GROUP 2 ('/opt/oracle/oradata/dbtest/redo02.log','/opt/oracle/oradata/dbtest/redo02_1.log') size 100m reuse, </font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">GROUP 3 ('/opt/oracle/oradata/dbtest/redo03.log','/opt/oracle/oradata/dbtest/redo03_1.log') size 100m reuse</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">MAXLOGFILES 50</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">MAXLOGMEMBERS 5</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">MAXLOGHISTORY 200</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">MAXDATAFILES 500</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">MAXINSTANCES 5</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">ARCHIVELOG</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">CHARACTER SET UTF8</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">NATIONAL CHARACTER SET UTF8</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">DATAFILE '/opt/oracle/oradata/dbtest/system01.dbf' SIZE 1000M EXTENT MANAGEMENT LOCAL </font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">SYSAUX DATAFILE '/opt/oracle/oradata/dbtest/sysaux01.dbf' SIZE 1000M</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">UNDO TABLESPACE UNDOTS DATAFILE '/opt/oracle/oradata/dbtest/undo.dbf' SIZE 500M</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/opt/oracle/oradata/dbtest/temp.dbf' SIZE 500M</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">;</font></span></p> <p><strong><span style="font-size: 9pt; font-family: 宋体">-----------------------------------------------------------</span></strong></p> <span style="font-size: 9pt; font-family: 宋体"> <p><span><strong><font face="Times New Roman">9--- </font>q行如下文g<font face="Times New Roman">(</font>安装下面的先后顺?font face="Times New Roman">)</font>Q?/strong></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">/opt/oracle/product/10.2/rdbms/admin/catalog.sql</font></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">/opt/oracle/product/10.2/rdbms/admin/catproc.sql</font></span></p> <p><span><strong><font face="Times New Roman">10--- </font>创徏相关表空间与用户Q?/strong></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">CREATE TABLESPACE USERS DATAFILE '/opt/oracle/oradata/dbtest/users01.dbf' SIZE 1000M;---</font></span><span style="font-size: 9pt; font-family: 宋体">数据表空?/span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">CREATE TABLESPACE INDX DATAFILE '/opt/oracle/oradata/dbtest/indx01.dbf' SIZE 1000M;---</font></span><span style="font-size: 9pt; font-family: 宋体">在徏立烦引的时候把此表I间作ؓ(f)存储I间Q即单独用一个表I间来存储烦引,q是个好?fn)惯Q虽然我们没有办法徏立一个默认的索引表空_(d)</span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">CREATE USER test IDENTIFIED BY test DEFAULT TABLESPACE users ;---</font></span><span style="font-size: 9pt; font-family: 宋体">试用户</span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">GRANT CONNECT,RESOURCE TO test;</font></span></p> <p><span><strong><font face="Times New Roman">11--- </font>一Ҏ(gu)意的地方Q?/strong></span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">1>.</font></span><span style="font-size: 9pt; font-family: 宋体">相关文g的目录要讄正确Q有数据文gQ控制文Ӟ参数文g{,q有是它们的位|要与控制文件中指定的要一致?/span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">2>.init.ora</font></span><span style="font-size: 9pt; font-family: 宋体">中的</span><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">undo_tablespace</font></span><span style="font-size: 9pt; font-family: 宋体">的名字必要?/span><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">create database</font></span><span style="font-size: 9pt; font-family: 宋体">的相同,包括大小写等注意。否则很ȝQ报的错误你都不知道是不是在忽?zhn)你!MQ一句话Q控制文件中的内容要?/span><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">init</font></span><span style="font-size: 9pt; font-family: 宋体">文g中的内容以及(qing)要和实际文g的实际情况要相同?/span></p> <p><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">3>.</font></span><span style="font-size: 9pt; font-family: 宋体">分析数据库出错可以到</span><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">/opt/oracle/admin/dbtest/bdump/alert_dbtest.log</font></span><span style="font-size: 9pt; font-family: 宋体">中查找?/span></span></span></font></font></span></p> </div> <img src ="http://www.aygfsteel.com/baoyaer/aggbug/171098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/baoyaer/" target="_blank">大田?/a> 2007-12-28 10:34 <a href="http://www.aygfsteel.com/baoyaer/articles/171098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>乐观锁和(zhn)观?/title><link>http://www.aygfsteel.com/baoyaer/articles/167458.html</link><dc:creator>大田?/dc:creator><author>大田?/author><pubDate>Thu, 13 Dec 2007 04:03:00 GMT</pubDate><guid>http://www.aygfsteel.com/baoyaer/articles/167458.html</guid><wfw:comment>http://www.aygfsteel.com/baoyaer/comments/167458.html</wfw:comment><comments>http://www.aygfsteel.com/baoyaer/articles/167458.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/baoyaer/comments/commentRss/167458.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/baoyaer/services/trackbacks/167458.html</trackback:ping><description><![CDATA[<p>数据的锁定分ZU方法,W一U叫做?zhn)观锁Q第二种叫做乐观锁。什么叫(zhn)观锁呢Q?zhn)观锁֐思义Q就是对数据的冲H采取一U?zhn)观的态度Q也是说假设数据肯定会(x)冲突Q所以在数据开始读取的时候就把数据锁定住。而乐观锁是认ؓ(f)数据一般情况下不会(x)造成冲突Q所以在数据q行提交更新的时候,才会(x)正式Ҏ(gu)据的冲突与否q行,如果发现冲突了,则让用户q回错误的信息,让用户决定如何去做?strong> <br /> </strong></p> <p><strong></strong> </p> <p><strong>所谓?zhn)观?br /> </strong>先从(zhn)观锁开始说。在SqlServer{其余很多数据库中,数据的锁定通常采用锁的方式Q也是说对一张表内的数据是一U串行化的更新插入机Ӟ在Q何时间同一张表只会(x)?条数据,别的x入的数据要等到这一条数据插完以后才能依ơ插入。带来的后果是性能的降低,在多用户q发讉K的时候,当对一张表q行频繁操作Ӟ?x)发现响应效率很低,数据库经常处于一U假ȝ态。而Oracle用的是行U锁Q只是对想锁定的数据才进行锁定,其余的数据不相干Q所以在对Oracle表中q发插数据的时候,基本上不?x)有M影响?<br /> <br /> <span style="color: red">注:(x)对于(zhn)观锁是针对q发的可能性比较大Q而一般在我们的应用中用乐观锁以?/span> <br /> <br /> Oracle的?zhn)观锁需要利用一条现有的q接Q分成两U方式,从SQL语句的区别来看,是一U是for updateQ一U是for update nowait的Ş式。比如我们看一个例子。首先徏立测试用的数据库表?<br /> <br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">CREATE</span><span style="color: #000000"> </span><span style="color: #0000ff">TABLE</span><span style="color: #000000"> TEST(ID,NAME,LOCATION,VALUE,</span><span style="color: #0000ff">CONSTRAINT</span><span style="color: #000000"> test_pk </span><span style="color: #0000ff">PRIMARY</span><span style="color: #000000"> </span><span style="color: #0000ff">KEY</span><span style="color: #000000">(ID))</span><span style="color: #0000ff">AS</span><span style="color: #000000"> </span><span style="color: #0000ff">SELECT</span><span style="color: #000000"> deptno, dname, loc, </span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000"> </span><span style="color: #0000ff">FROM</span><span style="color: #000000"> scott.dept <br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><br /> <img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span></div> <p><br /> q里我们利用了Oracle的Sample的scott用户的表Q把数据copy到我们的test表中。首先我们看一下for update锁定方式。首先我们执行如下的select for update语句?<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">select</span><span style="color: #000000"> </span><span style="color: #808080">*</span><span style="color: #000000"> </span><span style="color: #0000ff">from</span><span style="color: #000000"> test </span><span style="color: #0000ff">where</span><span style="color: #000000"> id </span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000"> </span><span style="color: #0000ff">for</span><span style="color: #000000"> </span><span style="color: #0000ff">update</span><span style="color: #000000"> </span></div> <p><br /> 通过q条索语句锁定以后,再开另外一个sql*plusH口q行操作Q再把上面这条sql语句执行一便,你会(x)发现sqlplus好像d那里了,好像索不到数据的样子Q但是也不返回Q何结果,属于卡在那里的感觉。这个时候是什么原因呢Q就是一开始的W一个Session中的select for update语句把数据锁定住了。由于这里锁定的机制是wait的状?只要不表Cnowait那就是wait)Q所以第二个Session(也就是卡住的那个sql*plus)中当前这个检索就处于{待状态。当W一个session最后commit或者rollback之后Q第二个session中的索结果就是自动蟩出来Qƈ且也把数据锁定住。不q如果你W二个session中你的检索语句如下所C?<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">select</span><span style="color: #000000"> </span><span style="color: #808080">*</span><span style="color: #000000"> </span><span style="color: #0000ff">from</span><span style="color: #000000"> test </span><span style="color: #0000ff">where</span><span style="color: #000000"> id </span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000"> </span></div> <p>也就是没有for updateq种锁定数据的语句的话,׃?x)造成d了。另外一U情况,是当数据库数据被锁定的时候,也就是执行刚才for update那条sql以后Q我们在另外一个session中执行for update nowait后又是什么样呢。比如如下的sql语句?׃q条语句中是制定采用nowait方式来进行检索,所以当发现数据被别的session锁定中的时候,׃(x)q速返回ORA-00054错误Q内Ҏ(gu)资源正忙, 但指定以 NOWAIT 方式获取资源。所以在E序中我们可以采用nowait方式q速判断当前数据是否被锁定中,如果锁定中的话,p采取相应的业务措施进行处理?<br /> <br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">select</span><span style="color: #000000"> </span><span style="color: #808080">*</span><span style="color: #000000"> </span><span style="color: #0000ff">from</span><span style="color: #000000"> test </span><span style="color: #0000ff">where</span><span style="color: #000000"> id </span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000"> </span><span style="color: #0000ff">for</span><span style="color: #000000"> </span><span style="color: #0000ff">update</span><span style="color: #000000"> nowait </span></div> <p>那这里另外一个问题,是当我们锁定住数据的时候,我们Ҏ(gu)据进行更新和删除的话?x)是什么样呢。比如同P我们让第一个Session锁定住id=10的那条数据,我们在第二个session中执行如下语句?<br /> </p> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">update</span><span style="color: #000000"> test </span><span style="color: #0000ff">set</span><span style="color: #000000"> value</span><span style="color: #808080">=</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000"> </span><span style="color: #0000ff">where</span><span style="color: #000000"> id </span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000"> </span></div> <p>q个时候我们发现update语句好像select for update语句一样也停住卡在q里Q当你第一个session攑ּ锁定以后update才能正常q行。当你updateq行后,数据又被你update语句锁定住了Q这个时候只要你update后还没有commitQ别的session照样不能Ҏ(gu)据进行锁定更新等{?<br /> <br /> <br /> MQOracle中的(zhn)观锁就是利用Oracle的ConnectionҎ(gu)据进行锁定。在Oracle中,用这U行U锁带来的性能损失是很的Q只是要注意E序逻辑Q不要给你一不小心搞成死锁了好。而且׃数据的及(qing)旉定,在数据提交时候就不呼出现冲突Q可以省d多恼人的数据冲突处理。缺点就是你必须要始l有一条数据库q接Q就是说在整个锁定到最后放开锁的q程中,你的数据库联接要始终保持住。与(zhn)观锁相对的Q我们有了乐观锁。乐观锁一开始也说了Q就是一开始假设不?x)造成数据冲突Q在最后提交的时候再q行数据冲突?br /> <br /> </p> <p><strong>所谓乐观锁<br /> </strong>在乐观锁中,我们?U?<br /> </p> <p>W一U乐观锁的做法就是采用版本戳Q这个在Hibernate中得C使用。采用版本戳的话Q首先需要在你有乐观锁的数据库table上徏立一个新的columnQ比如ؓ(f)number型,当你数据每更Cơ的时候,版本数就?x)往上增?。比如同h2个session同样Ҏ(gu)条数据进行操作。两者都取到当前的数据的版本号ؓ(f)1Q当W一个sessionq行数据更新后,在提交的时候查看到当前数据的版本还?Q和自己一开始取到的版本相同。就正式提交Q然后把版本号增?Q这个时候当前数据的版本?。当W二个session也更C数据提交的时候,发现数据库中版本?Q和一开始这个session取到的版本号不一_(d)q道别人更新过此条数据Q这?</p> <p>时候再q行业务处理Q比如整个Transaction都Rollback{等操作。在用版本戳的时候,可以在应用程序侧使用版本戳的验证Q也可以在数据库侧采用Trigger(触发?来进行验证。不q数据库的Trigger的性能开销q是比较的大Q所以能在应用侧q行验证的话q是推荐不用Trigger?</p> <p>W二U做法和W二U做法有点类|是也新增一个Table的ColumnQ不q这ơ这个column是采用timestamp型,存储数据最后更新的旉。在Oracle9i以后可以采用新的数据cdQ也是timestamp with time zonecd来做旉戟뀂这UTimestamp的数据精度在Oracle的时间类型中是最高的Q精到微秒(q没与到U秒的?Q一般来_(d)加上数据库处理时间和人的思考动作时_(d)微秒U别是非帔R常够了,其实只要_到毫U甚至秒都应该没有什么问题。和刚才的版本戳cMQ也是在更新提交的时候检查当前数据库中数据的旉戛_自己更新前取到的旉戌行对比,如果一致则OKQ否则就是版本冲H。如果不x代码写在E序中或者由于别的原因无法把代码写在现有的程序中Q也可以把这个时间戳乐观锁逻辑写在Trigger或者存储过E中?</p> <p><br /> 是基于应用的版本机制来实现的。一般会(x)在表里面设计一个版本字DvQ我一般会(x)把这个字D设为timestampQ。一般的update场景是这P(x)<br /> 1 select a, v from tb where id=1;   <br /> 假设得到数据是:(x)['xxx', 11111] </p> <p>2 update tb set a='yyyy', v=systimestamp where v=11111; //注意, v一般不?x)在业务操作的时候修?br /> <br /> q要求每一ơupdate操作都变更版本字Dc(din)否则还是要q程间的数据q是?x)被怺覆盖?</p> <p>乐观锁无法锁定其他应用对数据的操作?br /> </p> <img src ="http://www.aygfsteel.com/baoyaer/aggbug/167458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/baoyaer/" target="_blank">大田?/a> 2007-12-13 12:03 <a href="http://www.aygfsteel.com/baoyaer/articles/167458.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle数据q移到SQL Server结 http://www.aygfsteel.com/baoyaer/articles/155017.html大田?/dc:creator>大田?/author>Mon, 22 Oct 2007 08:14:00 GMThttp://www.aygfsteel.com/baoyaer/articles/155017.htmlhttp://www.aygfsteel.com/baoyaer/comments/155017.htmlhttp://www.aygfsteel.com/baoyaer/articles/155017.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/155017.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/155017.html前两个月接了一个公安局的项目,q段旉l于接近֣了,E序也基本没什么问题了。但数据q移的需求摆C我的面前Q因为目前他们正在用一套基于Oracle的C/SpȝQ这套系l里面有到目前ؓ(f)止所有的人员和案件信息,他们不想重新录入Q所以需要从Oracle中迁Ud目前的SQL Server中?br /> 1.我先在本机安装了一个高版本的Oracle数据?9i),试熟?zhn)了一下,学习(fn)了一下数据的导入导出{等功能Q然后从服务器上现有的数据库导出ƈDownload下来Q在本地数据库中建立相同的用P导入q本地数据库?br /> 2.׃Oracle转到SQL Server比较ȝQ所以我使用了现成的工具Full Convert Enterprise软gQ很方便的将Oracle数据转移CSQl ServerQ只有一条数据出C错误Q这炚w误可以忽略不计?br /> 3.转移q来之后Q查看数据库Q发现绝大部分的字段都是varcharcdQ就是因为都是这U类型带来了一些问题,比如日期Q竟然有1940-04-00Q晕MQ怪不得L出现smalldatetime转换溢出Q日起非法的问题Q可以用IsDate函数来检查一下,正确q回1Q非法返?
4.原系l设计中最大的问题是Q犯|h员可以重复添加进去,D不同的案件相同的人员却有多个人员记录Q冗余大。这q不,w䆾证和出生日期可以为空Q就更麻烦了Q根本无法识别哪些是同一人员Q对于迁Ud新系l中来说很麻烦,没办法,只能修改原系l的数据库结构,唯一性去掉?br /> 5.原系l中q有几点不好的地方就是,专门有一个表用来存放词典Q而且比较大,几万条,案别Q类别,省市区等{都放进去,最让我痛恨的是他省市区不是分开的,而且攑֜一L(fng)Q比如江苏南京,南京江宁Q南京鼓|光这样都三条了,不大家可以推一下全国会(x)出现多少条,不仅如此Q他q没有分割称P比如省、市、区、县、自d{等。都没有Q有的话q可以切分。新pȝ使用的省市区是分ȝQ所以我暂时没想到好的办法解冻I把原系l中的省市区加到了新pȝ的详l地址里面M?/p>

]]>
sqlserver 无法删除用户http://www.aygfsteel.com/baoyaer/articles/143891.html大田?/dc:creator>大田?/author>Mon, 10 Sep 2007 01:49:00 GMThttp://www.aygfsteel.com/baoyaer/articles/143891.htmlhttp://www.aygfsteel.com/baoyaer/comments/143891.htmlhttp://www.aygfsteel.com/baoyaer/articles/143891.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/143891.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/143891.html
sp_changeobjectowner 'can.WCMDocQuoteImage','dbo'
注意Q这里can是要删除的用P同时它拥有对?-WCMDocQuoteImageQ最后我们改变成让dbo拥有q个对象?nbsp;


    
  通过执行   sp_addloginQ把d   janetl   改名?  dbo?   
  sp_addlogin   'janetl',   'dbo'  
   
  备䆾数据库。在本例中,备䆾   Northwind?   
  BACKUP   DATABASE   Northwind  
  TO   DISK   =   'c:\mssql\backup\northwnd'  
   
  除去刚刚备䆾的数据库?   
  DROP   DATABASE   Northwind  
   
  除去d?   
  sp_droplogin   'janetl'  
   
  q原备䆾的数据库?   
  RESTORE   DATABASE   Northwind  
  FROM   DISK   =   'c:\mssql\backup\northwnd'  
   
  janetl   d不能讉K   Northwind   数据库,除非允许   guest   d。尽?  janetl   d已经删除Q它仍然Q作Z个孤立行Q显C在   sysusers   表中Q? 
   
  USE   Northwind  
  SELECT   *  
  FROM   sysusers  
  WHERE   name   =   'janetl'  
   
  解决孤立用户问题    
   
  ?  sp_addlogin   d一个(f)时登录。ؓ(f)孤立用户指定安全标识W?  (SID)Q从   sysusersQ?   
  sp_addlogin   @loginame   =   'nancyd',  
          @sid   =   0x32C864A70427D211B4DD00104B9E8A00  
   
  ?  sp_dropalias   除去属于别名   SID   的(f)时别名?   
  sp_dropalias   'nancyd'  
   
  ?  sp_dropuser   除去原始用户Q即现在的孤立用P?   
  sp_dropuser   'janetl'  
   
  ?  sp_dropuser   除去原始d?   
  sp_droplogin   'nancyd'  

]]>
sqlserver /oracle 判断?索引 存在语句http://www.aygfsteel.com/baoyaer/articles/134092.html大田?/dc:creator>大田?/author>Thu, 02 Aug 2007 10:47:00 GMThttp://www.aygfsteel.com/baoyaer/articles/134092.htmlhttp://www.aygfsteel.com/baoyaer/comments/134092.htmlhttp://www.aygfsteel.com/baoyaer/articles/134092.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/134092.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/134092.html
if not exists (select * from dbo.sysobjects
    
where id = object_id(N'[WCMDocQuoteImage]'and OBJECTPROPERTY(id, N'IsUserTable'= 1)
create table WCMDocQuoteImage(
    DocId  
int,
    QuoteImageId 
int
);

if not exists (select * from dbo.sysindexes where name='IX_WCMDocQuoteImage')
 
create index IX_WCMDocQuoteImage on WCMDocQuoteImage(DocId, QuoteImageId);


oracle:
declare nFlowRuleCount number(10);
begin
    
SELECT count(*into nFlowRuleCount FROM USER_OBJECTS
    
WHERE object_name = 'WCMDOCQUOTEIMAGE' ;
    
if nFlowRuleCount =0 then
        dbms_output.put_line(
'create table WCMDOCQUOTEIMAGE(
    DocId  int,
    QuoteImageId int
)
');
        
execute immediate('create table WCMDOCQUOTEIMAGE(
    DocId  int,
    QuoteImageId int
)
');
    
end if;
end;


q里要注意的是:(x)
oracle对表名大写的区分,创徏的时候无论是什么Ş式,创徏表后oracle都会(x)名U{换ؓ(f)大写Q我在写语句时就因ؓ(f)q个问题而导致执行时L报错?br>

]]>
Dbunit的?/title><link>http://www.aygfsteel.com/baoyaer/articles/112196.html</link><dc:creator>大田?/dc:creator><author>大田?/author><pubDate>Fri, 20 Apr 2007 06:31:00 GMT</pubDate><guid>http://www.aygfsteel.com/baoyaer/articles/112196.html</guid><wfw:comment>http://www.aygfsteel.com/baoyaer/comments/112196.html</wfw:comment><comments>http://www.aygfsteel.com/baoyaer/articles/112196.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/baoyaer/comments/commentRss/112196.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/baoyaer/services/trackbacks/112196.html</trackback:ping><description><![CDATA[     摘要: dbunit是一个基于junit扩展的数据库试框架。它提供了大量的cd与数据库相关的操作进行了抽象和封装,虽然?0%的情况,你只需使用它极的api。它通过使用用户自定义的数据集以?qing)相x作数据库处于一U可知的状态,从而得测试自动化、可重复和相对独立。虽然不用dbunit也可以达到这U目的,但是我们必须为此付出代h(hun)Q编写大量代码,试?qing)维护)Q既然有了这么优U的开源框Ӟ我们又何必再造轮?..  <a href='http://www.aygfsteel.com/baoyaer/articles/112196.html'>阅读全文</a><img src ="http://www.aygfsteel.com/baoyaer/aggbug/112196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/baoyaer/" target="_blank">大田?/a> 2007-04-20 14:31 <a href="http://www.aygfsteel.com/baoyaer/articles/112196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql osql命o(h)http://www.aygfsteel.com/baoyaer/articles/107423.html大田?/dc:creator>大田?/author>Fri, 30 Mar 2007 02:17:00 GMThttp://www.aygfsteel.com/baoyaer/articles/107423.htmlhttp://www.aygfsteel.com/baoyaer/comments/107423.htmlhttp://www.aygfsteel.com/baoyaer/articles/107423.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/107423.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/107423.htmlC:\>osql /?
用法: osql              [-U login id]          [-P password]
  [-S server]            [-H hostname]          [-E trusted connection]
  [-d use database name] [-l login timeout]     [-t query timeout]
  [-h headers]           [-s colseparator]      [-w columnwidth]
  [-a packetsize]        [-e echo input]        [-I Enable Quoted Identifiers]
  [-L list servers]      [-c cmdend]            [-D ODBC DSN name]
  [-q "cmdline query"]   [-Q "cmdline query" and exit]
  [-n remove numbering]  [-m errorlevel]
  [-r msgs to stderr]    [-V severitylevel]
  [-i inputfile]         [-o outputfile]
  [-p print statistics]  [-b On error batch abort]
  [-O use Old ISQL behavior disables the following]
      <EOF> 正在q行批处?br />      控制台宽度自动调?br />      宽消?br />      默认错误U别??1 ?1
  [-? show syntax summary]

Windows集成w䆾登陆>>>
C:\>osql -E
1>
登陆后执行系l存储过E?br />1> sp_password NULL,"newpass","sa"
2> go
密码已更攏V?br />1> exit

再来看看sa混合模式登陆>>>
C:\>osql -SLocalhost -Usa -Pnewpass
1>
出现1>提示W表C登陆成?

再来看看osql命o(h)行下查询C:\>osql -SLocalhost -Usa -Pnewpass
1> use qz
2> Select count(*) from crjsj where kh=0
3> go

 -----------
           0

Q? 行受到媄响)
1>
查询pȝ?br />
1> select name from sysobjects where xtype='U'
2> go
 name



]]>
schema解释http://www.aygfsteel.com/baoyaer/articles/102542.html大田?/dc:creator>大田?/author>Thu, 08 Mar 2007 01:53:00 GMThttp://www.aygfsteel.com/baoyaer/articles/102542.htmlhttp://www.aygfsteel.com/baoyaer/comments/102542.htmlhttp://www.aygfsteel.com/baoyaer/articles/102542.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/102542.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/102542.htmlschema是用户和用户所拥有的对象的集合.是相当于Ms sql server的一个数据库Q可以理解ؓ(f)schema是用户
每创Z个用P都会(x)为它创徏一个同名的schema.


schema是用户和用户所拥有的对象的集合.?OEM 中创Z个用P此时实际上已l有了一个同名的schema.但是如果
该用h有对象,则在oem中看不到q个 schema。一旦创Z用户的对象,比如表,那么oem中就可以看到了?br />
我用MTP_CO登陆数据库,q行select * from MTP_TEST.login
报错:"table or view does not exist"
其中MTP_TEST是个QIEQIQAQ?br />怎么解释q个错误Q是用户MTP_CO没有MTP_TESTq个QIEQIQA引v的吗Q?br />

schema和你的徏的user name是一L(fng)。当你用q个user创徏tableӞ把该用户徏的table存放在这个schema?/font>



]]>
Oracle监听在服务中失效的处?/title><link>http://www.aygfsteel.com/baoyaer/articles/102174.html</link><dc:creator>大田?/dc:creator><author>大田?/author><pubDate>Tue, 06 Mar 2007 07:17:00 GMT</pubDate><guid>http://www.aygfsteel.com/baoyaer/articles/102174.html</guid><wfw:comment>http://www.aygfsteel.com/baoyaer/comments/102174.html</wfw:comment><comments>http://www.aygfsteel.com/baoyaer/articles/102174.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/baoyaer/comments/commentRss/102174.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/baoyaer/services/trackbacks/102174.html</trackback:ping><description><![CDATA[ <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: center" align="center"> <b style="mso-bidi-font-weight: normal"> <span lang="EN-US" style="FONT-SIZE: 16pt; mso-fareast-font-family: 楷体_GB2312">Oracle</span> </b> <b style="mso-bidi-font-weight: normal"> <span style="FONT-SIZE: 16pt; FONT-FAMILY: 楷体_GB2312; mso-ascii-font-family: 'Times New Roman'">监听在服务中失效的处?/span> </b> <b style="mso-bidi-font-weight: normal"> <span lang="EN-US" style="FONT-SIZE: 16pt; mso-fareast-font-family: 楷体_GB2312"> <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?> <o:p> </o:p> </span> </b> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: right" align="right"> <font size="3"> <span lang="EN-US"> <span style="mso-tab-count: 11">                                                                          </span> </span> </font> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <span style="mso-tab-count: 1">    </span> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <span style="mso-tab-count: 1"> </span> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <span style="mso-tab-count: 1">    </span>如果Q你?b style="mso-bidi-font-weight: normal">控制面板/理工具/服务</b>中双?yn)L开<b style="mso-bidi-font-weight: normal">OracleOraHome92TNSListener</b>的服务看到其?b style="mso-bidi-font-weight: normal">可执行文件的路径</b>”一栏ؓ(f)I时的处理方法:(x)<o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 12pt; TEXT-ALIGN: center; mso-pagination: widow-orphan" align="center"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?> <v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"> <v:stroke joinstyle="miter"> </v:stroke> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"> </v:f> <v:f eqn="sum @0 1 0"> </v:f> <v:f eqn="sum 0 0 @1"> </v:f> <v:f eqn="prod @2 1 2"> </v:f> <v:f eqn="prod @3 21600 pixelWidth"> </v:f> <v:f eqn="prod @3 21600 pixelHeight"> </v:f> <v:f eqn="sum @0 0 1"> </v:f> <v:f eqn="prod @6 1 2"> </v:f> <v:f eqn="prod @7 21600 pixelWidth"> </v:f> <v:f eqn="sum @8 21600 0"> </v:f> <v:f eqn="prod @7 21600 pixelHeight"> </v:f> <v:f eqn="sum @10 21600 0"> </v:f> </v:formulas> <v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"> </v:path> <o:lock aspectratio="t" v:ext="edit"> </o:lock> </v:shapetype> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <span style="mso-tab-count: 1">    </span>首先q行regedit.exe启动注册表编辑器Q在<b style="mso-bidi-font-weight: normal">HKEY_LOCAL_MACHINE/SYSTEM/ControlSet002/</b>下的<b style="mso-bidi-font-weight: normal">Services和CurrentControlSet/Services</b>下找?b style="mso-bidi-font-weight: normal">OracleOraHome92TNSListener</b>,在右边窗口按右键Q?b style="mso-bidi-font-weight: normal">新徏/字符?/b>Q取?b style="mso-bidi-font-weight: normal">ImagePath</b>?o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 12pt; TEXT-ALIGN: center; mso-pagination: widow-orphan" align="center"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <span style="mso-tab-count: 1">    </span>双击新见的徏Q在“数值数据”项输入D:\oracle\ora92\bin\TNSLSNR.EXEQ根据你自己的实际情况进行修改)Q确定完成?/span> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <span style="mso-tab-count: 1">    </span> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 12pt; TEXT-ALIGN: center; mso-pagination: widow-orphan" align="center"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <span style="mso-tab-count: 1">    </span>再次在服务中双击打开<b style="mso-bidi-font-weight: normal">OracleOraHome92TNSListener</b>的服务看到其?b style="mso-bidi-font-weight: normal">可执行文件的路径</b>”一栏已l显CZ其正的倹{这时你可以启动监听了?o:p></o:p></span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 12pt; TEXT-ALIGN: center; mso-pagination: widow-orphan" align="center"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 12pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> <span style="mso-tab-count: 1">    </span>同样也可以对<b style="mso-bidi-font-weight: normal">OracleServiceKKDB</b>q行操作Q不q将<b style="mso-bidi-font-weight: normal">ImagePath</b>的值改?b style="mso-bidi-font-weight: normal">D:\oracle\ora92\bin\oracle.exe KKDB</b>卛_?o:p></o:p></span> </p> <img src ="http://www.aygfsteel.com/baoyaer/aggbug/102174.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/baoyaer/" target="_blank">大田?/a> 2007-03-06 15:17 <a href="http://www.aygfsteel.com/baoyaer/articles/102174.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle数据库备份与恢复http://www.aygfsteel.com/baoyaer/articles/99029.html大田?/dc:creator>大田?/author>Fri, 09 Feb 2007 08:07:00 GMThttp://www.aygfsteel.com/baoyaer/articles/99029.htmlhttp://www.aygfsteel.com/baoyaer/comments/99029.htmlhttp://www.aygfsteel.com/baoyaer/articles/99029.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/99029.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/99029.html一?导出Q导入(ExportQImportQ?
利用Export可将数据从数据库中提取出来,利用Import则可提取出来的数据送回到Oracle数据库中厅R?
Q?单导出数据(ExportQ和导入数据QImportQ?
Oracle支持三种方式cd的输出:(x)
Q1Q、表方式QT方式Q,指定表的数据导出?
Q2Q、用h式(U方式Q,指定用L(fng)所有对象及(qing)数据导出?
Q3Q、全库方式(F(tun)ull方式Q,瘉|据库中的所有对象导出?
数据导入QImportQ的q程是数据导出(ExportQ的逆过E,分别数据文件导入数据库和将数据库数据导出到数据文g?
Q?增量导出Q导?
增量导出是一U常用的数据备䆾Ҏ(gu)Q它只能Ҏ(gu)个数据库来实施,q且必须作ؓ(f)SYSTEM来导出。在q行此种导出Ӟpȝ不要求回{Q何问题。导出文件名~省为export.dmpQ如果不希望自己的输出文件定名ؓ(f)export.dmpQ必d命o(h)行中指出要用的文件名?
增量导出包括三种cdQ?
Q1Q、“完全”增量导出(CompleteQ?
卛_份三个数据库Q比如:(x)
exp system/manager inctype=complete file=040731.dmp
Q2Q、“增量型”增量导?
备䆾上一ơ备份后改变的数据,比如Q?
exp system/manager inctype=incremental file=040731.dmp
Q3Q、“篏U型”增量导?
累计型导出方式是导出自上ơ“完全”导Z后数据库中变化了的信息。比如:(x)
exp system/manager inctype=cumulative file=040731.dmp
数据库管理员可以排定一个备份日E表Q用数据导出的三个不同方式合理高效的完成?
比如数据库的被封d可以做如下安排:(x)
星期一Q完全备份(AQ?
星期二:(x)增量导出QBQ?
星期三:(x)增量导出QCQ?
星期四:(x)增量导出QDQ?
星期五:(x)累计导出QEQ?
星期六:(x)增量导出QF(tun)Q?
星期日:(x)增量导出QGQ?
如果在星期日Q数据库遭到意外破坏Q数据库理员可按一下步骤来回复数据库:(x)
W一步:(x)用命令CREATE DATABASE重新生成数据库结构;
W二步:(x)创徏一个够大的附加回滚?
W三步:(x)完全增量导入AQ?
imp system/manager inctype=RESTORE FULL=y FILE=A
W四步:(x)累计增量导入EQ?
imp system/manager inctype=RESTORE FULL=Y FILE=E
W五步:(x)最q增量导入FQ?
imp system/manager inctype=RESTORE FULL=Y FILE=F
二?冷备?
冷备份发生在数据库已l正常关闭的情况下,当正常关闭时?x)提供给我们一个完整的数据库。冷备䆾时将关键性文件拷贝到另外的位|的一U说法。对于备份Oracle信息而言Q冷备䆾时最快和最安全的方法。冷备䆾的优Ҏ(gu)Q?
Q?是非常快速的备䆾Ҏ(gu)Q只需hӞ
Q?Ҏ(gu)归档Q简单拷贝即可)
Q?Ҏ(gu)恢复到某个时间点上(只需文件再拯回去Q?
Q?能与归档Ҏ(gu)相结合,做数据库“最佳状态”的恢复?
Q?低度l护Q高度安全?
但冷备䆾也有如下不Q?
Q?单独使用Ӟ只能提供到“某一旉点上”的恢复?
Q?再实施备份的全过E中Q数据库必须要作备䆾而不能作其他工作。也是_(d)在冷备䆾q程中,数据库必L关闭状态?
Q?若磁盘空间有限,只能拯到磁带等其他外部存储讑֤上,速度?x)很慢?
Q?不能按表或按用户恢复?
如果可能的话Q主要看效率Q,应将信息备䆾到磁盘上Q然后启动数据库Q用户可以工作Qƈ备份的信息拯到磁带上Q拷贝的同时Q数据库也可以工作)。冷备䆾中必L贝的文g包括Q?
Q?所有数据文?
Q?所有控制文?
Q?所有联机REDO LOG文g
Q?Init.ora文gQ可选)
值得注意的冷备份必d数据库关闭的情况下进行,当数据库处于打开状态时Q执行数据库文gpȝ备䆾是无效的?
下面是作冷备份的完整例子?
Q?Q?关闭数据?
sqlplus /nolog
sql>connect /as sysdba
sql>shutdown normal;
Q?Q?用拷贝命令备份全部的旉文g、重做日志文件、控制文件、初始化参数文g
sql>cp <file> <backup directory>
Q?Q?重启Oracle数据?
sql>startup
三?热备?
热备份是在数据库q行的情况下Q采用archivelog mode方式备䆾数据库的Ҏ(gu)。所以,如果你有昨天夜里的一个冷备䆾而且又有今天的热备䆾文gQ在发生问题Ӟ可以利用这些资料恢复更多的信息。热备䆾要求数据库在Archivelog方式下操作,q要大量的档案I间。一旦数据库q行在archivelog状态下Q就可以做备份了。热备䆾的命令文件由三部分组成:(x)
1Q?数据文g一个表I间一个表I间的备份?
Q?Q?讄表空间ؓ(f)备䆾状?
Q?Q?备䆾表空间的数据文g
Q?Q?回复表空间ؓ(f)正常状?
2Q?备䆾归档log文g
Q?Q?临时停止归档q程
Q?Q?log下那些在archive rede log目标目录中的文g
Q?Q?重新启动archiveq程
Q?Q?备䆾归档的redo log文g
3Q?用alter database bachup controlfile命o(h)来备份控制文?
热备份的优点是:(x)
1Q?可在表空间或数据库文件备䆾Q备份的旉短?
2Q?备䆾时数据库仍可使用?
3Q?可达到秒U恢复(恢复到某一旉点上Q?
4Q?可对几乎所有数据库实体做恢?
5Q?恢复是快速的Q在大多数情况下爱数据库仍工作时恢复?
热备份的不是:(x)
1Q?不能出错Q否则后果严?
2Q?若热备䆾不成功,所得结果不可用于时间点的恢?
3Q?因难于维护,所以要特别仔细心Q不允许“以p|告终”?img src ="http://www.aygfsteel.com/baoyaer/aggbug/99029.html" width = "1" height = "1" />

]]>
oracle语句拾贝http://www.aygfsteel.com/baoyaer/articles/83068.html大田?/dc:creator>大田?/author>Thu, 23 Nov 2006 08:27:00 GMThttp://www.aygfsteel.com/baoyaer/articles/83068.htmlhttp://www.aygfsteel.com/baoyaer/comments/83068.htmlhttp://www.aygfsteel.com/baoyaer/articles/83068.html#Feedback0http://www.aygfsteel.com/baoyaer/comments/commentRss/83068.htmlhttp://www.aygfsteel.com/baoyaer/services/trackbacks/83068.html阅读全文

]]>
oracle select语句学习(fn)http://www.aygfsteel.com/baoyaer/articles/82721.html大田?/dc:creator>大田?/author>Wed, 22 Nov 2006 03:39:00 GMThttp://www.aygfsteel.com/baoyaer/articles/82721.html>字符处理

upper(str)---字W串str全部转换成大?br /> lower(str)---字W串str全部转换成小?br /> initcap(str)---字W串中每个单词的首字母大?br /> concat(str1,str2)---字W串str1与str2q接h(也可以通过'||'L(fng)接相q?
substr(str,a,b)---取字W串str中的指定字符Q从位置a(chn)开始取长度为b的字W串Q假如a为正则从左边开始,否则从右边开?br /> instr(str,'z')---取得str字符串中从左边开始每一ơ出现z字符的下标位|?下标?开?
lpad(str,12,'*')---左填充,卛_字符串str长度填充?2Q假如其不12位则在左边以*号填?br /> rpad(str,12,'*')---叛_充,同上
length(str)---计算字符串str的长?br />
2>数字函数

round(45.926,2)---前一C留指定的数位,q四舍五?45.93)Q假如指定位是负数则意ؓ(f)在小数点左边保留指定?如round(45.923,-1)=50,rount(45.923,0)=46,round(45.93,-2)=0,round(55.93,-2)=100
trunc(45.926,2)---同上Q得不四舍五?45.92)
mod(1600,300)---求余(100)

3>日期型函?br />
oracle中默认的格式是:(x)DD-MON-RR?br /> oracle中有个到当前pȝ旉--sysdateQ如Q?br /> select sysdate from dual

可对日期q行自述q算Q?br /> select (sysdate-mybirthday)/7 from person

months_between('01-sep-95','11-jan-94')---取得二个日期之间的间隔月?19.6774194)
add_months('11-jan-94',6)---l指定日期加上指定的月䆾后得C个新的日?11-jul-94)
next_day('01-sep-85','friday')---取得当前日期中下个周五的日期(01-jul-95)
last_day('01-feb-95')---取得当前日期中月份的最后一?28-feb-95)

roundq行四舍五入Qtrunc则否,以下是我的操作结果:(x)
sysdate为:(x)
SYSDATE
----------
28-7?-06

 select
 round(sysdate,'month') RM,
 round(sysdate,'year') RY,
 trunc(sysdate,'month') TM,
 trunc(sysdate,'year') TY
 from dual;

RM         RY         TM         TY
---------- ---------- ---------- ----------
01-8?-06 01-1?-07 01-7?-06 01-1?-06


4>转换函数

隐式转换:pȝ自动转换,如:(x)
varchar2 or char to number
varchar2 or char to date
number to varchar2
date to varchar2

昑ּ转换QhZ函数加以转换
日期Q字W,数据三者之间可以相互{?日期<-->字符<-->数据
日期格式:YYYY

日期-->字符
select to_char(sysdate,'yyyy-mm-dd') ch from dual

CH
----------
2006-07-28

数字-->字符
to_char(number,'format_model'),oramat_model有如下:(x)
9---用对应数字表C?br /> 0---强制用0表示
$---加一$W号
L---前加本地货币单位表示
.---十进制点
,---千进制点

select to_char(0917,'l9999.99') local from dual
LOCAL
------------------
         RMB917.00

字符-->日期
tselect to_date('19830917','yyyy-mm-dd') bir from dual
BIR
----------
17-9?-83

字符-->数字
select to_number('19821217','999999999') mybr from dual
      MYBR
----------
  19821217

注:(x)所有函数均可以嵌套使用

5>通用函数

nvl(expr1,expr2)---expr1为空则显Cexpr2,否则昄expr1
nvl2(expr1,expr2,expr3)---expr1为空则显Cexpr2,否则昄expr3
nullif(expr1,expr2)---二个相等则显C空W?否则昄expr1
coalesce(expr1,expr2,...,exprn)---从expr1开始依ơ找C为空的exprQ找到就昄Q直到最后,否则?/p>

Cexprn
case表达式,如下?

 

6>多表查询
Ҏ(gu)通的多表查询Q也是不加where条g的时候实际上查询l果是各表的W卡?dng)?br /> 外连接:(x)oracle实现外连接时?L(fng)二边?号就O(jin)KQ当+在左Ҏ(gu)UCؓ(f)双接,反之为左q接,它常常用来当要求未受限制对象的表数据也要求显C时Q如下:(x)
select * from student

ID NAME                 ADDRESS
-------------------- --------------
1 zhangshan            zhejiang
3 lishi                hangzhou
7 lily                 guangzhou

select * from person

ID NAME                 ADDRESS
- -------------------- -----------
1 zhangshan            zhejiang
3 lishi                hangzhou
7 lily                 guangzhou

select p.id,p.sex,s.id,s.name,s.address from person p ,student s where p.id(+) = s.id

ID SEX          ID NAME                 ADDRESS
-- ---- ---------- -------------------- ------------
 1 boy           1 zhangshan            zhejiang
 3 girl          3 lishi                hangzhou
                 7 lily                 guangzhou

select p.id,p.sex,s.id,s.name,s.address from person p ,student s where p.id = s.id(+)

ID SEX          ID NAME                 ADDRESS
-- ---- ---------- -------------------- --------------
 1 boy           1 zhangshan            zhejiang
 2 girl
 3 girl          3 lishi                hangzhou
 4 boy
 5 girl

self-joinQ就是同一张表q接Q用自连接的时候要注意排除重复的记录(自nQ@环重复等Q,比如说找出student表中所有住在同一个地方的人?br /> select * from student

 ID NAME                 ADDRESS
--- -------------------- ---------
  1 zhangshan            zhejiang
  3 lishi                hangzhou
  7 lily                 guangzhou
  2 name2                guangzhou
  4 name4                guangzhou
  5 name5                hangzhou
  6 name6                shanghai
  8 name8                shanghai

没有排除重复记录时的l果Q?br />  select t1.name,t2.name
 from student t1, student t2
 where t1.address = t2.address

NAME                 NAME
-------------------- --------------
lily                 lily
name2                lily
name4                lily
lily                 name2
name2                name2
name4                name2
lily                 name4
name2                name4
name4                name4
lishi                lishi
name5                lishi

NAME                 NAME
-------------------- --------------
lishi                name5
name5                name5
name6                name6
name8                name6
name6                name8
name8                name8
zhangshan            zhangshan

已选择18?/p>

排除重复与@环记录之后:(x)
select t1.name,t2.name,t1.address
 from student t1, student t2
 where t1.address = t2.address
and t1.id > t2.id

NAME                 NAME                 ADDRESS
-------------------- -------------------- -------------------
lily                 name2                guangzhou
name4                name2                guangzhou
lily                 name4                guangzhou
name5                lishi                hangzhou
name8                name6                shanghai

cross join,无条件连接,实际上跟不带where时一样得到的是笛卡尔?/p>

natural joinQ也可以直接CjoinQ,Ҏ(gu)表中同名栏位来连接记?若表中可能出现多个同名栏位,则用using(col_name)来指定所栏位。colname不能指定表的别名Q限制条件用on来指?br /> select id,p.sex,id,s.name from person p join student s using(id);

  ID SEX          ID NAME
---- ---- ---------- --------------------
   1 boy           1 zhangshan
   2 girl          2 name2
   3 girl          3 lishi
   4 boy           4 name4
   5 girl          5 name5

在sql标准语法???q接用left(right) out join,限制条g用on可以了?/p>

full out join完全外连?֐思义是左外q接与右外连接都?br /> select id,p.sex,id,s.name from person p full join student s using(id);

  ID SEX          ID NAME
---- ---- ---------- ------------------
   1 boy           1 zhangshan
   3 girl          3 lishi
   2 girl          2 name2
   4 boy           4 name4
   5 girl          5 name5
   8               8 name8
   6               6 name6
   7               7 lily

    译自:(x)http://mfm088.itpub.net/post/22599/250400
    在Oracle/PLSQL中,lpad函数左边的字符串填充一些特定的字符Q其语法格式如下Q?nbsp;  

     lpad( string1, padded_length, [ pad_string ] )
     其中string1是需要粘贴字W的字符?br />      padded_length是返回的字符串的数量Q如果这个数量比原字W串的长度要短,lpad函数会(x)把字W串截取?em>padded_length;

     pad_string是个可选参敎ͼq个字符串是要粘贴到string1的左边,如果q个参数未写Qlpad函数会(x)在string1的左边粘贴空根{?br />     例如Q?br />           
lpad('tech', 7); 返? tech'

lpad('tech', 2); 返?te'
lpad('tech', 8, '0'); 返?0000tech'
lpad('tech on the net', 15, 'z'); 返?nbsp;'tech on the net'
lpad('tech on the net', 16, 'z'); 返?nbsp;'ztech on the net'



-----------------------

select a.*, Level from (select * from dlsys.tcUnit order by DisplayOrder) a
     start with a.SeniorUnitID is null
     connect by a.SeniorUnitID = prior a.UnitID



]]>
վ֩ģ壺 | | | ν| ʤ| | ľ| ǫ| | ƽ| | º| ͨ| | | | | | | | | | Ӣ| ͬ| | | | ض| | | | ɽ| ϰˮ| | ˫| Ϲ| ߺ| ƽ| Զ| Ȫ| Ϸ|