??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲乱码日产精品a级毛片久久,亚洲狠狠婷婷综合久久,亚洲日韩区在线电影http://www.tkk7.com/tomjamescn/category/41004.htmlstudy java Platform....J2SE J2MM J2EE...zh-cnTue, 13 Oct 2009 15:09:46 GMTTue, 13 Oct 2009 15:09:46 GMT60struts spring ibatis整合http://www.tkk7.com/tomjamescn/archive/2009/09/25/296451.htmltomjamescntomjamescnFri, 25 Sep 2009 09:13:00 GMThttp://www.tkk7.com/tomjamescn/archive/2009/09/25/296451.htmlhttp://www.tkk7.com/tomjamescn/comments/296451.htmlhttp://www.tkk7.com/tomjamescn/archive/2009/09/25/296451.html#Feedback0http://www.tkk7.com/tomjamescn/comments/commentRss/296451.htmlhttp://www.tkk7.com/tomjamescn/services/trackbacks/296451.html 各个lg的版本号Qstruts2.1 spring2.5 ibatis2.3
struts2.1需要的?/strong>
    首先是struts2.1必须的包Q?br />

    然后是要与spring集成需要的包:struts2-spring-plugin-2.1.6.jar

spring2.5需要的?/strong>
    q里用的是集成了spring所有模块的包:spring.jar

ibatis2.3需要的?/strong>
    ibatis-2.3.*.*.jar

web.xml的配|?/strong>
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
 5     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 6     <filter>
 7         <filter-name>struts2</filter-name>
 8         <filter-class>
 9             org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
10         </filter-class>
11     </filter>
12     <listener>
13         <listener-class>
14             org.springframework.web.context.ContextLoaderListener
15         </listener-class>
16     </listener>
17     <filter-mapping>
18         <filter-name>struts2</filter-name>
19         <url-pattern>/*</url-pattern>
20     </filter-mapping>
21     <welcome-file-list>
22         <welcome-file>login.jsp</welcome-file>
23     </welcome-file-list>
24 </web-app>
25 

applicationContext.xml的配|?/strong>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:aop
="http://www.springframework.org/schema/aop"
        xmlns:tx
="http://www.springframework.org/schema/tx"
        xsi:schemaLocation
="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
>

    
<bean id="dataSource"
        class
="org.springframework.jdbc.datasource.DriverManagerDataSource">
        
<property name="driverClassName">
            
<value>org.gjt.mm.mysql.Driver</value>
        
</property>
        
<property name="url">
            
<value>jdbc:mysql://localhost:3306/test</value>
        
</property>
        
<property name="username">
            
<value>root</value>
        
</property>
        
<property name="password">
            
<value></value>
        
</property>
    
</bean>

    
<bean id="sqlMapClient"
        class
="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        
<property name="dataSource" ref="dataSource" />
        
<property name="configLocation" value="WEB-INF/sql-map-config.xml" />
    
</bean>
    
    
<bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
        
<property name="sqlMapClient" ref="sqlMapClient" />
    
</bean>
    
    
<!-- 其他配置Q如DAOQAction--/>
    
</beans>

sql-map-config.xml的配|?/strong>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"
>
<sqlMapConfig>
    
<settings useStatementNamespaces="true" />
    
<sqlMap resource="ssi/persistance/sqlmap/user_SqlMap.xml" />
</sqlMapConfig>

    具体sql-map文g的配|,q里׃写了Q我也是刚刚学习ibatisQ呵呵,׃最q马上就要开发了Q就找了工具来加快速度Qibatis官方提供的ibatorQ原来叫abatorQ这个工L当猛啊,q在学习?..

    在配|过E当中,特别需要注意各个配|文件的存放位置Q比如对于applicationContext.xml来说Q默认应该存攑֜WEB-INF文g夹中Q如果想攑ֈc\径上去,需要在web.xml里面配置Q一般配|在web.xml的开头部分:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
</param-value>
</context-param>




tomjamescn 2009-09-25 17:13 发表评论
]]>
[转]hsqldb入门http://www.tkk7.com/tomjamescn/archive/2009/09/24/296239.htmltomjamescntomjamescnThu, 24 Sep 2009 01:55:00 GMThttp://www.tkk7.com/tomjamescn/archive/2009/09/24/296239.htmlhttp://www.tkk7.com/tomjamescn/comments/296239.htmlhttp://www.tkk7.com/tomjamescn/archive/2009/09/24/296239.html#Feedback0http://www.tkk7.com/tomjamescn/comments/commentRss/296239.htmlhttp://www.tkk7.com/tomjamescn/services/trackbacks/296239.html来自Qhttp://www.javaeye.com/topic/106626

一、简介:
hsql数据库是一ƄJava~写的免Ҏ(gu)据库Q许可是BSD-style的协议?
相对其他数据库来_其体U小Q才563kb?
仅一个hsqldb.jar文g包括了数据库引擎,数据库驱动,q有其他用户界面操作{内宏V?
下蝲地址Q?a >http://hsqldb.org/

二、用hsql数据库:
1、hsql数据库引擎有几种服务器模式:常用的Server模式、WebServer模式、Servlet模式、Standlone模式、Memory-On&shy;ly数据库?


2、最为常用的Server模式Q?
1)首先却换到l(f)ib文g夹下Q运行java -cp hsqldb.jar
org.hsqldb.Server -database.0 db/mydb -dbname.0 xdb
执行命o后,会在db文g夹下创徏一个数据库mydbQ别名(用于讉K数据库)是xdbQ如果存在mydb数据库,会打开它?
2)q行数据库界面操作工Pjava -cp hsqldb.jar
org.hsqldb.util.DatabaseManager
在Type选项里选上相应的服务器模式Q这里选择HSQL
Database Engine
Server模式QDriver不用修改QURL修改为jdbc:hsqldb:hsql://localhost/xdb
Q主要这里xdb是上面我们讄的别名);user里设|用户名Q第一ơ登录时Q设|的是管理员的用户名Qpassword讄密码。然后点击Ok?
3)W一ơ运行数据库引擎Q创建数据库完毕。好了,你可以打开db文g夹,会发现里面多了几个文件?
mydb.properties文gQ是关于数据库的属性文件?
mydb.scriptQhsql主要保存的表Q这里按hsql的说法是Memory表,是最为常用的Q,里面的格式都是文本格式,可以用文本查看,里面的语&shy;句都是sql语句Q熟(zhn)sql语句的话Q你也可以手动修改它。每ơ运行数据库引擎的话都是从这里加载进内存的?
mydb.lck表示数据库处于打开状态?
其他的请参看hsqldb包里的手册?


3、WebServer模式和Serverq行模式基本一P只是支持了Http{协议,主要用于防火墙,默认端口?001。启动ServerQjava
-cp hsqldb.jar org.hsqldb.WebServer ...剩余的和上面的一致?


4、Servlet模式可以允许你通过Servlet容器来访问数据库Q请查看hsqlServlet.java的源代码Q和WebServercM?


5、另一个值得思考的模式是Standalone模式Q不能通过|络来访问数据库Q主要是在一个JVM中用,那样的话Q访问的速度会更加快。虽然文档里 面提?amp;shy;主要是用于开发时使用Q但是我们可以假设一下,该方法不需要一个引擎类的东西,而类g打开文g的方式,q回一? Connection对象Q?
Connection c = DriverManager.getConnection("jdbc:hsqldb:file:mydb",
"sa", "");
会在当前目录找到mydb数据库相xӞ打开q返回一个Connection对象。该方式有点好处是可以不用引擎,在需要的时候操作数据。所以那 些对?amp;shy;据库不是特别有要求的Q但又需要一个操作数据库的方式的话,可以使用q种Ҏ(gu)。对于那些不想额外在数据库引擎花贚wq话,可以 使用q种Ҏ(gu)。但是不推荐使用?amp;shy;Ҏ(gu)。记得Hibernate里SessionFactory可以使用 openSession(Connecttion
c)来获得一个Session对象的,因此Q在试或者实际应用的话都可以q样使用?


6、Memory-Only
数据库:֐思义Q主要是内存中用,不用于保存数据。可以用于在内存中交换数据?


上面是关于hsqldb的一些基本信息的介绍Q可以看到它的一些优势和Ҏ(gu)?
我们可以把hsqldb内置在webE序中,除考虑Standalone模式外,最好是采用最为常用的Server模式?
那么Server模式如何和webE序合理搭配使用呢?
可以采用两种方式Q?
1Q采用上面提到的Ҏ(gu)Q运行java -cp hsqldb.jar
org.hsqldb.Server -database.0 db/mydb -dbname.0 xdb
来启动dbQ通过讄的URLQjdbc:hsqldb:hsql://localhost/xdb
以达到在E序中访问hsql数据库的
Q注Q设|URL{信息,可以通过hibernate来配|,例如Q?
hibernate.dialect org.hibernate.dialect.HSQLDialect
hibernate.connection.driver_class org.hsqldb.jdbcDriver
hibernate.connection.username sa
hibernate.connection.password
hibernate.connection.url jdbc:hsqldb:hsql://localhost/xdb Q?
2Qؓ了省ȝ一U方法的琐碎Q可以在启动web容器的过E中同时启动hsqldb。具体做法如下:~写一个有关hsql的Listenerc,扩展javax&shy;.servlet.ServletContextListenerQ可以在配置文g中设|dbPath、dbName、port{等hsqldb的信息,启动h&shy;sqldb?
在web.xml中配|?
<listener>


<listener-class>com.iplan.portal.framework.web.HsqlListener</listener-class&shy;>
</listener>
q样在启动web容器的时候,同时启动了hsqldbQ关闭容器的时候同时也shutdown掉hsqldb?



tomjamescn 2009-09-24 09:55 发表评论
]]>
[转]关于Oracle ROWNUM的?/title><link>http://www.tkk7.com/tomjamescn/archive/2009/08/30/293168.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Sun, 30 Aug 2009 03:56:00 GMT</pubDate><guid>http://www.tkk7.com/tomjamescn/archive/2009/08/30/293168.html</guid><wfw:comment>http://www.tkk7.com/tomjamescn/comments/293168.html</wfw:comment><comments>http://www.tkk7.com/tomjamescn/archive/2009/08/30/293168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/tomjamescn/comments/commentRss/293168.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/tomjamescn/services/trackbacks/293168.html</trackback:ping><description><![CDATA[<p><strong title="rownum的概念,rownum是如何工作的?>ROWNUM的概?/strong><br /> ROWNUM? 一个虚假的列。它?yu)被分配?1Q?Q?Q?Q?..NQN 是行的数量。一个ROWNUMg是被怹的分配给一? Q这是最Ҏ(gu)被误解的Q。表中的某一行ƈ没有标号Q你不可以查询ROWNUMgؓ5的行——根本没有这个概c另一个容易搞p涂的问题是ROWNUM值是 何时被分配的。ROWNUM值的分配是在查询的谓词解析之后,M排序和聚合之前进行的。ROWNUM值只有当被分配之后才会增ѝ这是Z么下面的? 询永q都不会q回l果Q?br /> select * from countries where rownum>1;<br /> ROWNUM > 1对于W一行来说ƈ不是真|ROWNUM没有增长?2。所以,没有?大的ROWNUM.永远都不要?#8217;ROWNUM>Q?#8216;?#8217;ROWNUM=2…N’q样的条件?br /> <br /> <strong title="如何用rownum昄排序l果的前N条记?>用rownum昄排序l果的前N条记?/strong><br /> FROM/WHERE子句先被执行.<br /> Ҏ(gu)FROM/WHERE子句输出的行, ROWNUM被分配给他们q自增长.<br /> SELECT 被应?<br /> GROUP BY 被应?<br /> HAVING is 被应?<br /> ORDER BY 被应?<br /> q就是ؓ什么下面的SQL几乎L错误?<br /> select rownum,job_title,min_salary<br /> from jobs where rownum<3 order by min_salary;<br /> 正确的写? <br />         select rownum,tmp.* from (<br />         select job_title,min_salary <br />         from jobs order by min_salary) tmp<br />         where rownum<=3;<br /> <br /> <strong title="如何用ROWNUM实现分页">用ROWNUM实现分页</strong><br /> select * from<br />         (select /*+ FIRST_ROWS(n) */ a.*,<br />         ROWNUM rnum<br />         from (your_query_goes_here, with order by) a<br />         where ROWNUM <=<br />         :MAX_ROW_TO_FETCH )<br /> where rnum >= :MIN_ROW_TO_FETCH;<br /> FIRST_ROWS(N)使优化器考虑最短时间获得前N条记?<br /> :MAX_ROW_TO_FETCH 某一中l果集的最后一行。如果你每页昄10行,要显C第6?那么此值取60?br /> :MIN_ROW_TO_FETCH 某一中l果集的W一行。如果你每页昄10行,要显C第6?那么此值取50?/p> <p><strong>ROWNUMҎ(gu)能的媄?br /> </strong>ROWNUM可以避免oracle在磁盘上q行排序。rownum无法避免全表扫描的发生,但是它可以避免对整个表数据的排序操作Q在指定了rownum后,排序操作在内存中可以L完成?/p> <img src ="http://www.tkk7.com/tomjamescn/aggbug/293168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/tomjamescn/" target="_blank">tomjamescn</a> 2009-08-30 11:56 <a href="http://www.tkk7.com/tomjamescn/archive/2009/08/30/293168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]oracle sequence的概念及作用http://www.tkk7.com/tomjamescn/archive/2009/08/30/293167.htmltomjamescntomjamescnSun, 30 Aug 2009 03:52:00 GMThttp://www.tkk7.com/tomjamescn/archive/2009/08/30/293167.htmlhttp://www.tkk7.com/tomjamescn/comments/293167.htmlhttp://www.tkk7.com/tomjamescn/archive/2009/08/30/293167.html#Feedback0http://www.tkk7.com/tomjamescn/comments/commentRss/293167.htmlhttp://www.tkk7.com/tomjamescn/services/trackbacks/293167.html time a......trans1 begin.........................................................
                       |
              取max value=5 
                        |
time b...... max value+1=6........trans2 begin.....................
                        |                         |
               other action               max value=5
                        |                         |
time c..... commit;  ...................max value+1=6................
                                                  |
                                              commt(ora-00001)


如上图,事务2会报主键冲突的错误,而再h一下页面(再执行一边程序)Q可能就正常了?br /> q有一个问题,那就是完成生成主键的E序 Q一般情况包含plsql块)本n对于q发调用也是一个瓶颈,因ؓq样的程序段往往是提供给好多E序去调用,如果代码端写的不够优化(比如没有使用邦定? 量等{)Q或者此代码D存在问题,那么它所影响的是pȝ的全局。我们应该提倡开发h员用sequence。sequence消除了序列化问题Q而且改善 了应用的q发能力?/p>

创徏sequence


sequence的命名最重要的是要统一Q命名规则是ơ要的?br />  CREATE SEQUENCE emp_sequence
      INCREMENT BY 1
      START WITH 1
      NOMAXVALUE
      NOCYCLE
      CACHE 10;
q? 里需要重点说明的是cache参数Q它是ؓ了应对ƈ发访问的。cache参数告诉oracle预先分配一个sequence numbers的集合,q且保留在内存中Q以便sequence number能够被快速的讉K。这个内存的大小是cache所指定的大,当多个用户同时访问一个sequence的时候,是在oracle SGA中读取sequence当前的合理数|如果q发讉K太大Qcache的大不够,那么׃产生sequence cache相关的等待(enq: SQ - contentionQ,影响pȝ性能?br /> 既然cache涉及C内存Q那么就会想到oracle实例恢复的问题。如果数据库shutdown abortQsequence会如何呢Q当然会有问题,sequence number保存在内存里的但是没有被应用到表中的会丢失!

修改sequence


除了修改sequence的starting numberQ你什么都能改Q如果想改starting numberQ只能先drop然后create?br /> ALTER SEQUENCE emp_sequence
    INCREMENT BY 10
    MAXVALUE 10000
    CYCLE
    CACHE 20;
? 改很有用Q最典型的情冉|“需要把sequence 的current value改大一点,避免E序报错Q?#8221;。你可以看看current value是多,然后修改increment by _大的|然后执行.nextvalQ最后别忘了再将increnent byҎ(gu)原来的|q要注意做这些工作的前提是当前没有h用此sequence?/p>

使用 sequence


CURRVAL ?NEXTVAL 能够在以下情况?
insert的values字句、select中的select列表、update中的set字句

CURRVAL ?NEXTVAL 不能够在以下情况使用:
子查询、视囑֒实体化视囄查询、带distinct的select语句、带 group by和order by的select语句、带union或intersect或minus的select语句、select中的where字句、create table与alter table中的default倹{checkU束条g?/p>

删除sequence


drop sequence seq_a;
当删除sequence后,对应它的同义词会被保留,但是引用时会报错?/p>

oracle rac环境中的sequence


oracleZ在rac环境下ؓ了sequence的一致性,使用了三U锁Qrow cache lock、SQ锁、SV锁?br /> row cache lock的目的是在sequence指定nocache的情况下调用sequence.nextvalq程中保证序列的序性;
SQ锁是应用于指定了cache+noorder的情况下调用sequence.nextvalq程中?br /> SV 锁(dfs lock handel) 是调用sequence.nextval期间拥有的锁。前提是创徏sequence时指定了cache 和order属?(cache+order)。order参数的目的是Z在RAC上节点之间生成sequence的顺序得C障?/p>

创徏sequence赋予的cacheD?yu)时Q有enq:sq-contention{待增加的趋ѝ?br /> cache的缺省值是20.因此创徏q发讉K多的sequenceӞcacheh值应取大一些。否则会发生enq:sq-contention{待事g?/p>

rac上创建sequenceӞ如果指定了cache大小而赋予noorder属性,则各节点会把不同范围的sequence值cache到内 存上。若两个节点之间都必通过依次递增方式使用sequenceQ必赋予如下的order属性(一般不需要这样做Q?sql> create sequence seq_b cache 100 order"。如果是已赋予了cache+order属性的sequenceQoracle使用SV锁进行同步。SV锁争用问题发生时的解x法与sq? 的情늛同,是cache D行适当调整?/p>

在RAC多节点环境下QSequence的Cache属性对性能的媄响很大。应该尽量赋予cache+noorder属性,q要l予_? cache倹{如果需要保障顺序,必须赋予cache+order属性。但q时Z保障序Q实例之间需要不断的交换数据。因此性能E差?/p>

tomjamescn 2009-08-30 11:52 发表评论
]]>
[转]理解ORACLE数据库字W集http://www.tkk7.com/tomjamescn/archive/2009/08/19/291747.htmltomjamescntomjamescnWed, 19 Aug 2009 02:12:00 GMThttp://www.tkk7.com/tomjamescn/archive/2009/08/19/291747.htmlhttp://www.tkk7.com/tomjamescn/comments/291747.htmlhttp://www.tkk7.com/tomjamescn/archive/2009/08/19/291747.html#Feedback0http://www.tkk7.com/tomjamescn/comments/commentRss/291747.htmlhttp://www.tkk7.com/tomjamescn/services/trackbacks/291747.html来自Q?/font>http://silverw0396.javaeye.com/blog/90554

一Q引a

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

二.字符集基本知?/font>

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

2.2字符~码Ҏ(gu)
2.2.1 单字节编?/font>
    Q?Q单字节7位字W集Q可以定?28个字W,最常用的字W集?/font>US7ASCII

    Q?Q单字节8位字W集Q可以定?56个字W,适合于欧z大部分国家
            例如QWE8ISO8859P1(西欧?位、ISO标准8859P1~码)

2.2.2 多字节编?/font>
    Q?Q变长多字节~码
    某些字符用一个字节表C,其它字符用两个或多个字符表示Q变长多字节~码常用于对亚洲语言的支持,例如日语、汉语、印地语{?/font>
    例如QAL32UTF8Q其中AL代表ALL,指适用于所有语aQ?/font>zhs16cgb231280

    Q?Q定长多字节~码
    每一个字W都使用固定长度字节的编码方案,目前oracle唯一支持的定长多字节~码是AF16UTF16Q也是仅用于国家字符?/font>


2.2.3 unicode~码
    Unicode是一个涵盖了目前全世界用的所有已知字W的单一~码Ҏ(gu)Q也是说Unicode为每一个字W提供唯一的编码。UTF-16是unicode?6位编码方式,是一U定长多字节~码Q用2个字节表CZ个unicode字符QAF16UTF16是UTF-16~码字符集?/font>
    UTF-8是unicode?位编码方式,是一U变长多字节~码Q这U编码可以用1??个字节表CZ个unicode字符QAL32UTF8QUTF8、UTFE是UTF-8~码字符?/font>

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

2.4 数据库字W集Qoracle服务器端字符集)
    数据库字W集在创建数据库时指定,在创建后通常不能更改。在创徏数据库时Q可以指定字W集(CHARACTER SET)和国家字W集(NATIONAL CHARACTER SET)?/font>
2.4.1 字符?/font>
    (1)用来存储CHAR, VARCHAR2, CLOB, LONG{类型数?/font>
    (2)用来标示诸如表名、列名以及PL/SQL变量{?/font>
    (3)用来存储SQL和PL/SQLE序单元{?/font>


2.4.2 国家字符集:
    (1)用以存储NCHAR, NVARCHAR2, NCLOB{类型数?/font>
    (2)国家字符集实质上是ؓoracle选择的附加字W集Q主要作用是Z增强oracle的字W处理能力,因ؓNCHAR数据cd可以提供对亚z用定长多字节~码的支持,而数据库字符集则不能。国家字W集在oracle9i中进行了重新定义Q只能在unicode~码中的AF16UTF16和UTF8中选择Q默认值是AF16UTF16

2.4.3查询字符集参?/font>
    可以查询以下数据字典或视图查看字W集讄情况
    nls_database_parameters、props$?/font>v$nls_parameters
    查询l果中NLS_CHARACTERSET表示字符集,NLS_NCHAR_CHARACTERSET表示国家字符?/font>


2.4.4修改数据库字W集
    按照上文所_数据库字W集在创建后原则上不能更攏V如果需要修改字W集Q通常需要导出数据库数据Q重建数据库Q再导入数据库数据的方式来{换,或通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字W集是有限制的,只有新的字符集是当前字符集的集时才能修Ҏ(gu)据库字符集,例如UTF8是US7ASCII的超集,修改数据库字W集可用ALTER DATABASE CHARACTER SET UTF8?/font>

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

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

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

EXP
     ____________   _________________  _____________
     |imp导入文g|<-|环境变量NLS_LANG|<-|数据库字W集|
     ------------   -----------------  -------------

IMP 
     ____________   _________________  _____________
     |imp导入文g|->|环境变量NLS_LANG|->|数据库字W集|
     ------------   -----------------  -------------

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

3.2导出的{换过E?/font>
    在Exportq程中,如果源数据库字符集与Export用户会话字符集不一_会发生字W集转换Qƈ在导出文件的头部几个字节中存储Export用户会话字符集的ID受在q个转换q程中可能发生数据的丢失?/font>
?如果源数据库使用ZHS16GBKQ而Export用户会话字符集用US7ASCIIQ由于ZHS16GBK?6位字W集,而US7ASCII?位字W集Q这个{换过E中Q中文字W在US7ASCII中不能够扑ֈ对等的字W,所以所有中文字W都会丢p变?#8220;?? ”形式Q这栯{换后生成的Dmp文g已经发生了数据丢失?/font>
因此如果x导出源数据库数据,则Exportq程中用户会话字W集应等于源数据库字W集或是源数据库字符集的集

3.3导入的{换过E?/font>
    Q?Q确定导出数据库字符集环?/font>
    通过d导出文g_可以获得导出文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也׃能完成?/font>
    W二?导入Session字符集与数据库字W集之间的{换?/font>
    然?oracle8i的这U{换只能在单字节字W集之间q行,oracle8i导入Session不支持多字节字符集之间的转换Q因此ؓ了避免第一ơ{换,导入Session使用的NLS_LANG与导出文件字W集相同Q第二次转换Q通过SQL*NetQ支持Q何两U字W集。以上情况在Oracle9i中略有不?/font>

四.q问题

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

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

4.2发生q原因 
    q产生是由于几个字W集之间转换不匹配造成Q分以下几种情况Q?/font>
    Q注Q字W集之间如果不存在子集、超集对应关pL的情况不予考虑Q因U情况下字符集之间{换必产生qQ?/font>   
    1Q服务器端数据库字符集与客户端应用字W集相同Q与客户端NLS_LANG参数讄不同

    如果客户端NLS_LANG字符集是其它两种字符集的子集Q{换过E将出现q?/font>
    解决Ҏ(gu)Q将三种字符集设|成同一字符集,或NLS_LANG字符集是其它两种字符集的集
    2Q服务器端数据库字符集与客户端NLS_LANG参数讄相同Q与客户端应用字W集不同
    如果客户端应用字W集是其它两U字W集的超集时Q{换过E将出现qQ但对于单字节编码存储中文问题,可参看本文第5章节的分?/font>
    3Q客L应用字符集、客LNLS_LANG参数讄、服务器端数据库字符集互不相?/font>
    此种情况较ؓ复杂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目标数据库字符?/font>
    出现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?/font>
    3Q如果第一ơ{换正常,IMPq程中NLS_LANG字符集是目标数据库字W集的子集或相同Q才能保证第二次转换正常Q否则则W二ơ{换中出现q

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

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

六.l束?/font>

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


参考文?/font>
[1]Biju Thomas , Bob Bryla《oracle9i DBA基础I 学习指南》电(sh)子工业出版社 2002

tomjamescn 2009-08-19 10:12 发表评论
]]>
[转]数据库设计徏议,范式以及q一?/title><link>http://www.tkk7.com/tomjamescn/archive/2009/08/02/289448.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Sun, 02 Aug 2009 03:26:00 GMT</pubDate><guid>http://www.tkk7.com/tomjamescn/archive/2009/08/02/289448.html</guid><wfw:comment>http://www.tkk7.com/tomjamescn/comments/289448.html</wfw:comment><comments>http://www.tkk7.com/tomjamescn/archive/2009/08/02/289448.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/tomjamescn/comments/commentRss/289448.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/tomjamescn/services/trackbacks/289448.html</trackback:ping><description><![CDATA[<br /> <br />     <strong>转自Qhttp://blog.csdn.net/ccat/archive/2009/05/14/4180765.aspx</strong><br />     几乎每一个新人在初学关系型数据库设计的时候,都会接触到关p范式。但是,我还是见C大量很离q设计。客观的_背下关系范式Q离一个合格的数据库设 计师q差很远。设计工作L在理想与现实之,规范与工Z间妥协。徏{如是,造船如是Q操作系l设计如是,数据库设计亦如是?br />      是的Q你记得范式Q你q记得反范式。你知道范式减少冗余Q提高一致性;你还知道反范式可以方便编E。不q的是,最l的l果L遵守范式的做法自己的应用层代码混ؕQ而反范式的企图得数据库也陷入؜乱?br /> q是谁的错?<br />      不必太自责,设计工作是一个经验的U篏q程。没有h天生׃做设计。天才与勤奋Q是乘法关系。ƈ不是你笨Q只是天才对面的那个pLq不够大而已?br />      以下的一些经验,或许在你d关系范式以后Q可以抽I看一?。世上没有魔法,dq篇文章Qƈ不会立即让你拥有多年设计l验。但是,q些在设计工作中U篏的经验教训,应该可以帮助你少C些弯路?br /> <br /> <span style="font-weight: bold;">关于范式</span> <br /> <br />      关系范式q不邪恶Q也不要把它惛_太神U,如果书本上的定义不能让你很快理解Q不妨试着回答以下的问题:<br />      字段q可以再分吗Q分成两个或更多的字D以后,q能不能表达完整的含义?<br />      字段的值是不是有限的几个离散的状态?<br />      两个或若q个字段Q能不能提取出来建立Z个数据字典?<br />      如果表中某个字段依赖其他表,被依赖的字段是不是唯一的(最好是主键Q?<br />      查询中是否会出现过两个表的JoinQ?br /> <br /> <span style="font-weight: bold;">数据库设计与系l设计结合v?/span> <br /> <br />      数据库设计ƈ不是一个孤立的q程Q整个Y件生命期中,各方面的工作应该有机l合。这斚w我觉得ACCPq去的教材讲得还不错Q至思\是对的:<br />      <span style="font-weight: bold;">在做需求分析的时候,做Use Case?/span> 此时可以分析出应用层的功能接口,对于数据库的实体分类可以有一个大概的划定。例如,q个目会需要一个工作流Q这个项目会需要一个订单系l,或者一个文档库Q等{。通常Q每个子pȝ可以对应一?br />      <span style="font-weight: bold;">在做概要设计的时候,出类关系和ER图?/span> 通常来说Q此时不能确定所有的字段Q但是会有哪些表Q有哪些d键依赖,有哪些地方应该需要存储过E和触发器的辅助Q等{?br />      <span style="font-weight: bold;">详细设计时尽可能数据库l构完全固定?/span> 管C开发工具不断提升XP能力Q重构越来越单。数据库的重构仍然是一件牵一发而动全n的事情,毕竟数据库是信息存储的根本。大厦楼加个小花园Ҏ(gu)Q把地基下面的承重柱子拔出来换两根试试?<br /> <br /> <span style="font-weight: bold;">重视SQL</span> <br /> <br />      q年来ORM发展很快Q几乎每个框枉要提供这个功能,以至于会有些菜鸟认ؓ“ORM”会淘汰SQL语言?br />      q是一块试金石Q如果你有这L感觉Q应该考虑认真评估一下自己在q个领域是不是太菜了?br />      SQL不是一U编E语aq么单,SQL代表的是一U与应用开发语a完全不同的思想。面向集合,q程无关Q着g规则定义。可以说QSQL是FP High Order计算的最成功应用Q也可以_SQL是一U静态强cd的MapReduce语言?br /> 看,换上旉的名词,会不会让你觉得它上等h了?<br />      在应用层语言惨烈竞争的同ӞSQL语言压倒了同时代出现的其他关系型数据库操作语言Q在q个拥有巨大利润的领域占据了l对l治C。即使桀骜不驯的 PostgresQ也?995q变wؓPostgrSQL。这一q程Qƈ非像VC淘汰BC那么多盘外招Q而是长时间争议与选择的结果?br /> 对于信息操作规则定义QSQL几乎是最好的表达方式。接q自然语aQ高度可读,q且非常利于优化?br />      打个比方Q一个基于过E语a的上帝,q样_<br />      * 构造一个光源对?br />      * 构造一个能源对?br />      * 调用光源对象Ҏ(gu)Q设|能?br />      * 调用光源对象的发光方法,传入照明范围内的对象列表<br />      ZSQL的上帝说Q要有光?br />      当然Q在q位老兄背后Q要有打杂的弟d成插늂灯的事情Q但是作Z帝,什么活都自己做了,要天使干什么?<br />      看看那些应用层语a的list comprehensionsQ列表推导式Q。不止一ơ我惌为Python实现一个基于存储层的列表推导式实现Q都可ȝp|了?br />      当然Q我承认q跟跟h能力有关Q我不是Gudio?br />      看看LINQQ不如何吹嘘,它就是一个抽象出I/O的SQL。我见过一些hȀ烈的贬低SQLQ抬高ORMQ同时又对LINQ礼膜拜Q这可真够分裂的?br />      ORM对应用层~程效率的提升是客观的,无需回避。但是随着你数据操作越来越_和复杂,p来越需要通过规则定义来抽象High Order I/Oq程。当你{了一圈儿回来Q会发现自己又在写SQL?br />      xHibernate的HQLQ想想C#的LINQ?br />      计算Z会变术。想让它做事更聪明,需要你q个驭者更加聪明才行?br />      好的工具和方法可以给你带来更高的能力pLQ但是记住,一个乘法计,仅有一头大是不够的?br />      不懂SQL的hQ是不能N好ORM的?br /> <br /> <span style="font-weight: bold;">与ORM做朋?/span> <br /> <br />      ORM对于开发工作,无疑是有好处的。我的朋友沈葌Qh脑能l织和分析的事务是有限的Q所以代码越短,有利于提高代码质量。从q个角度ԌORM是非帔R要的开发工P其意义不亚于C API 函数集到GUI 框架的进步?br /> 要想让ORM充分发挥威力Q有时候需要从数据库设计时做Z定妥协?br />      例如Q你往往会需要加入自增标识列Q会攑ּ一些精巧但是不利于ORM讉K的依赖设定,甚至要放弃一些漂亮的命名Q它们在应用层语a中是保留字,但是你用的ORM不懂如何规避Q?br />      但是Q这往往是必要的。就像徏{师向气候和建筑材料妥协一栗?br />      在ORM默认的自增字D外Q也怽q需要基于业务规则的唯一U束Q那么额外加索引?br />      好的ORM会帮助你方便的查询数据字典,生成对象映射Q跟t数据变_提供数据完整性的应用层检查,构造两阶段提交事务Q减不必要的I/O?br />      同样Q不懂得q用ORMQ也可能会破坏数据完整性,降低数据讉K速度Q甚至造成数据库死锁。作为项目开发h员,应该ORM视ؓ朋友而不是负担?br /> <br /> <span style="font-weight: bold;">合理分层</span> <br /> <br />      q去Q流行用复杂的数据库设计,业务规则存储于数据库的存储q程。现在,又流行抛弃数据层的一切约束,所有的规则都放在应用层?br />      q两者都不合理,除了应用需求的影响Q前者与Oracle的广告部宣传有关Q后者与MySQL阵营的鼓动有兟뀂背后都有一些不合理的力量推动?br /> 每一层应该保证自q完整性,q才是分层的意义。那么,在数据库层,应该保证数据的完整性?br />      数据库备份出来,再恢复进去,应该可以得到所有的业务信息?br />      直接向数据库导入数据Q应该可以有完整的数据规则保护?br />      数据库里保存的,不仅仅是表和记录Q应该是完整的持久性信息?br />      从这个角度讲Q配|文件和应用层代码中不应该有M业务数据定义Q这些信息都应该是数据字典表。如果出Cq种配置文gQ大多数情况下都是愚蠢的错误?br />      实际上,包括Web|站常见的附件上传,都应该保存在数据库中?br />      独立的I/O文g存储、包括将外键U束转移到应用层Q往往是因为对性能的妥协。以及,q里面确实存在MySQL阵营在推q过E中的一些不道d的宣传?br />      有效利用数据库功能,可以提高应用层的开发速度Q简化代码结构,使得数据存储更安全。这通常仰赖与设计h员的l验Q根据项目的具体需求进行调整?br />      Zq个原则Q合理利用数据库功能Q编写存储过E,触发器,调校索引Q都是必要的?br />      我敢打赌Q随着MySQL实现来多的功能,它的宣传材料上会来多的出C前被MySQL所摒弃的复杂设计理念,q且宣称q是MySQL所独创或一贯倡导的?br /> <br /> <span style="font-weight: bold;">攉整理常见的模?/span> <br /> <br />      在设计模式提么多q_在关pd数据库问世如此之久后Q我很惊讶的一件事是数据库设计模式仍然是一个相当冷门的领域。实际上Q关pL据库的模式也有很? 可@之规。例如用户信息(HR或CRMQ、工作流Q权限管理(如RBACQ,订单{等Q都有相当成熟的行业l验和时_往往只要修改一些字D名Q或者在? 键架构的基础上加以扩展,可以很好的用于实践?br />      每一个有志于成ؓ高水q计h员的开发者,都应该积极的攉自己体会到的数据库设计模式,U极的与同行交流?br />      q方面,Oracle的示例SchemaQPostgres的示例数据库目Q在Soureforge上可以找刎ͼQ都是很好的例子。相Ҏ(gu)_微Y在MSSQL和Access中提供的CZ库更量和单,也是作ؓ入门的不错借鉴? <br /> <br /> <img src ="http://www.tkk7.com/tomjamescn/aggbug/289448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/tomjamescn/" target="_blank">tomjamescn</a> 2009-08-02 11:26 <a href="http://www.tkk7.com/tomjamescn/archive/2009/08/02/289448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]数据库已歠Z—让人醍醐灌的一片文?/title><link>http://www.tkk7.com/tomjamescn/archive/2009/08/02/289445.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Sun, 02 Aug 2009 03:02:00 GMT</pubDate><guid>http://www.tkk7.com/tomjamescn/archive/2009/08/02/289445.html</guid><wfw:comment>http://www.tkk7.com/tomjamescn/comments/289445.html</wfw:comment><comments>http://www.tkk7.com/tomjamescn/archive/2009/08/02/289445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/tomjamescn/comments/commentRss/289445.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/tomjamescn/services/trackbacks/289445.html</trackback:ping><description><![CDATA[<br /> <p>    <strong><span style="color: #ff0000;">来自J道Banq http://www.jdon.com/artichect/dbdead.htm</span></strong></p> <br />     C软g和以往传统软g主要区别在于Q现代Y件基于internet互联|技术,q行于开攄|络环境Q不象传lY件只是运行在闭的局域网Q运行环境的区别决定了软g操作用户的多,在一个开放互联网环境Q? 你的软gpȝ用户是不断增长,特别是那些对所有h开攄C֌|站pȝQ更是承受前所未有的访问负载。那么,q些软gpȝ承受的压力主要会集中在Y件的哪个环节呢?如果你用传lY件的设计思\Q那么无疑压力都集中在数据库上? <p> 随着用户的爆发量增长Q在某个凌晨醒来Ӟ你发玎ͼ数据库已歅R?/p> <p> 传统软gpȝ实则应该叫数据库软gpȝQ是一个数据库pȝQ开发这Lpȝ非常单,成本 也非怽廉,只要Ҏ(gu)需求先设计好数据表l构Q然后,找一些大学毕业生写大量SQL语句Q虽然还使用 JAVA/PHP/.NET{语aQ但实际上这些语a只是SQL送往数据库执行的q输工,没有什么h(hun)值和C?/p> <p> 所以,q样的系l运行在互联|环境下以后Q主要负载就集中在数据库的SQLq行上,也就是说Q整个Y件系l性能关键点就集中在数据库上了Q数据库是性能 主角Q是王者;虽然你购|了昂贵的Websphere/weblogic{应用服务器Q但是由于Java只是q输工,Ҏ(gu)起不到性能上负载分担的作用?/p> <p> 著名的社区网站MySpace是因ؓ一个好的ideaQ用L狂增长,但是pȝ却不能^滑承受增长的用户讉KQ这些用戯问网站缓慢、无法访问甚至丢失数据,他们l过几次伤筋动骨的架构升U,在微软SQLServer直接技术支持下Q? 好容易才勉强应付q去。看看他们痛苦经历,你是否也愿意再来一ơ呢Q详l情况: <a target="_blank">http://www.jdon.com/jivejdon/thread/34601.html</a></p> <p> 从中可以看出Q数据库性能微调和挖潜L有限度的Q对数据库性能优化提高性能的步伐永q赶不上用户增长量, 有h也提出数据库集群的概念,其实数据库集是一个骗人概念,一般只是备份,在集数量和failover上有制约Q? 否则Q数据库巨头Oracle不会跑到JavaEE阵营摇旗呐喊Q还最早推出EJB3服务器,q扬a要收购JavaEEq去老大 Bea Weblogic?/p> <p> 很显Ӟ数据库成已经Y件系l的主要性能瓉了,单纯依靠数据库自救的方式已经行不通,是宣布数据库退Z角时候了Q那么由谁来宣布Q教皇数据库已死Q无疑是Java?/p> <p> JavaC֌早在本世U初提Z间g概念Q用以取代数据库CQ实则就是将软gpȝ主要负蝲从数据库上{Ud中间件服务器上,分担负蝲? 也就是说QJavaC֌提出Q既然数据库已经成ؓ瓉Q修修补补也无济于事Q不如放弃它Q不再依赖它?/p> <p> 也就是说QJava不再做SQL的运输工Q不再是跑龙套的了,而是主角Q那么如何让Java成ؓ主角呢?那必M?a target="_blank">对象</a>q个概念Q对象是生活在中间g服务器内存中Q它又是数据库数据的业务装Q它和数据库有着 千丝万缕的关p,但是它又?a target="_blank">关系数据库存在天然矛?/a>Q两者水火不宏V?/p> <p> q去Q我们是业务逻辑写成SQL送往数据库执行,D数据库成Z务逻辑主要q行瓉Q那么,如果我们? 业务逻辑用对象概念表达,而不是SQLQ那么我们的业务逻辑围l内存中的对象反复计,q样Q负载不是集中在 对象q行的中间g服务器上Q也是应用服务器Weblogic/websphere/JBoss/TomcatQ?而对?中间仉是用Java 语言表达的,无疑Q这L架构QJava才成Z角?/p> <p> 再进一步想惻I如果我们从Y件系l开始之初,׃用对象分析设计,不与数据库沾边,整个程完全OOQ分析设计直至代码都摆脱了数据库影响Q这个流E如下:<br /> </p> <p> 分析建模 l化设计(通过<a target="_blank"><strong>Evans DDD</strong></a>) 架构设计 代码实现 调试试 部vq行?br /> <br /> 那么数据库在什么时候徏立呢Q数据库表结构的创徏可以延缓到部|运行时Q由Hibernate/EJB CMP/JPA{ORM技术自动实现。这P 整个上游环节׃涉及数据库技术,而是使用更符合自然的表达OO方式QY件质量就更高了。我在J道网站已l大量阐qC如何从OO分析 到OO实现的过E,包括我的Jdon框架也直接支持这样一个自然方式?/p> <p> 现在Q很多h已经理解Q分析设计要用OOQ但是数据库是运行阶D늼不了的Q确实,q是正确观点Q我们夺取数据库的王位,不是它打倒,只是理性和q移交权力重心而已Q数据库退Z角地位,让位于Java中间Ӟ也预C着q去数据库ؓ王的时代的结束, 但是数据库会和操作系l一P成ؓ我们C软gpȝ一个不可缺重要的基础环节?/p> <p> 正是Zq样事实Q虽然我早在2005q喊?#8220;<a target="_blank">数据库时代的l结</a>一文,回帖长达几百_ 大部分是怀疑论Q不信论Q其?003q国外TSS有一?#8220;<a target="_blank">l数据库休息?/a>” Q休息不代表退休,而是退居幕后,p操作pȝ作用一PQ由此可见,׃传统观点影响和不及时与国际新思想同步Q国内数据库保皇z还是有相当人数的。我 BanQ人微a轻,抛出q些观点被保皇派讥讽为所疯话Q那么看看,著名ORM框架Hibernate和SEAM框架创始人Gavin King的一D观点:<br /> </p> <p> In almost all enterprise applications, the database is the primary bottleneck, and the least scalable tier of the runtime environment. 数据库成Z大多C业应用的主要瓉Q也成ؓ了运行环境中最不具伸羃性的层?.. PHP/Ruby的用户会说什么都不共享(share nothingQ的架构照样h很好的׾~性,.... q些?c)真正想的?#8220;除了数据库以外什么都不共?Share nothing except for the database)”的架构。更?a target="_blank">参看q里</a></p> <p> 所谓׾~性,是Ҏ(gu),整个软g架构既支持小负蝲q行Q也支持大负载支持,只要增加服务器即可; ׃软gpȝ负蝲已经从SQL转移到内存中的对象上Q那么我们就可以通过增加q些应用服务器数量,通过分布式计甚至云计算Q达C务对象在多台应用服务 器之间传递共享,而不必通过数据库这个环节,既减L据库负蝲Q又能轻松扩充性能Q不必走 集中试大型主Z路,只要ȝ低廉PC服务器即可。经q权威测试:websphere/weblogic?0台PC服务?a href="javascript:window.location.href=encodeURI('http://www.jdon.com/jivejdon/query/searchThreadAction.shtml?query=%E9%9B%86%E7%BE%A4')" target="_blank">集群</a>性能不亚于一台SUN/IBM的中型机Q性h(hun)比已l一目了然了?/p> <p> JavaEE的服务器?a href="javascript:window.location.href=encodeURI('http://www.jdon.com/jivejdon/query/searchThreadAction.shtml?query=%E9%9B%86%E7%BE%A4')">集群</a>相对于Linux{操作系l?a href="javascript:window.location.href=encodeURI('http://www.jdon.com/jivejdon/query/searchThreadAction.shtml?query=%E9%9B%86%E7%BE%A4')" target="_blank">集群</a>的好处在于:<a href="javascript:window.location.href=encodeURI('http://www.jdon.com/jivejdon/query/searchThreadAction.shtml?query=%E9%9B%86%E7%BE%A4')" target="_blank">JavaEE集群</a>能够针对某个J忙负蝲大的具体业务功能q行集群Q换句话_ 是做到_制导Q精解决问题,而显ӞLinux操作pȝ的集则无法直至业务核心的?/p> <p> 从另外一个方面看Q虽然现在PHPLC对象路线QRuby的铁轨开始铺q企业,但是他们的运行环境实则依赖数据库的, 特别是Ruby On Railsq是最适合<a target="_blank"><strong>Evans DDD</strong></a>对象建模路线Q但是目前来讲还?披着皮的狼"Q批着DDDQ实则是以数据库中心。当然相? ROR{将来会提供分布式计环境,但是JavaEE?002q时通过EJB以及<a href="javascript:window.location.href=encodeURI('http://www.jdon.com/jivejdon/query/searchThreadAction.shtml?query=%E5%88%86%E5%B8%83%E5%BC%8F%E7%BC%93%E5%AD%98')" target="_blank">分布式缓?/a>成熟E_地提供分布式计算的中间gQƈ且已l大量成熟应用?/p> <p> 本文l束以前Q我怿大家明白Q在众多语言q_竞争中,Z么Java能够击|q去拳王数据库,夺得新的拳王冠军Q以及他的特Ҏ(gu)在。有人可能会_你忘记谈.NET了,q个不用我回{你Q用微Y中国董事长张亚勤的话回答Q?a target="_blank">8q前.NET战略很天?/a>Q? 你会你的重要业务企业计依赖一个很天真不成熟的技术吗Q除非你自己也很天真:)?/p> <img src ="http://www.tkk7.com/tomjamescn/aggbug/289445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/tomjamescn/" target="_blank">tomjamescn</a> 2009-08-02 11:02 <a href="http://www.tkk7.com/tomjamescn/archive/2009/08/02/289445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【{】SQLq接查询http://www.tkk7.com/tomjamescn/archive/2009/08/01/289340.htmltomjamescntomjamescnSat, 01 Aug 2009 01:35:00 GMThttp://www.tkk7.com/tomjamescn/archive/2009/08/01/289340.htmlhttp://www.tkk7.com/tomjamescn/comments/289340.htmlhttp://www.tkk7.com/tomjamescn/archive/2009/08/01/289340.html#Feedback0http://www.tkk7.com/tomjamescn/comments/commentRss/289340.htmlhttp://www.tkk7.com/tomjamescn/services/trackbacks/289340.html   q篇博文对SQL的连接查询进行了实例化的讲解Q适合入门和回SQLq接的相关知?..
  http://lavasoft.blog.51cto.com/62575/38929


tomjamescn 2009-08-01 09:35 发表评论
]]>
[原创]解决Oracle9i下表I间引v的导入失?/title><link>http://www.tkk7.com/tomjamescn/archive/2009/07/22/287905.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Wed, 22 Jul 2009 12:25:00 GMT</pubDate><guid>http://www.tkk7.com/tomjamescn/archive/2009/07/22/287905.html</guid><wfw:comment>http://www.tkk7.com/tomjamescn/comments/287905.html</wfw:comment><comments>http://www.tkk7.com/tomjamescn/archive/2009/07/22/287905.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/tomjamescn/comments/commentRss/287905.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/tomjamescn/services/trackbacks/287905.html</trackback:ping><description><![CDATA[  用exp命o导出了一个dmp文gQ在导入旉C问题Q提C表空间不存在。在|上搜烦的方法太复杂Q其实,如果需要导入的表比较少Q可以直接用二进制编辑器Q如UltraEdit32直接~辑dmp文g。把里面的表I间字符串改导入的表I间卛_?br /> <img src ="http://www.tkk7.com/tomjamescn/aggbug/287905.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/tomjamescn/" target="_blank">tomjamescn</a> 2009-07-22 20:25 <a href="http://www.tkk7.com/tomjamescn/archive/2009/07/22/287905.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://wowo123.com" target="_blank">AVרAVѿ</a>| <a href="http://imfever.com" target="_blank">˳Ƶ</a>| <a href="http://imqun.com" target="_blank">õɫƵȫ</a>| <a href="http://kimheezk.com" target="_blank">ӰԺ߲</a>| <a href="http://sdshfengji.com" target="_blank">ĻۺϾþò</a>| <a href="http://yjjinfeng.com" target="_blank">þþþѿ</a>| <a href="http://zbsensor.com" target="_blank">߾ƷƵѹۿ</a>| <a href="http://hjndgb.com" target="_blank">¾þþþa</a>| <a href="http://hhrrrr.com" target="_blank">sssձ߹ۿ</a>| <a href="http://jiajuco.com" target="_blank">޳a޳wwwţţ</a>| <a href="http://tvnxl.com" target="_blank">ŷഺɫУ԰С˵</a>| <a href="http://qihongxia.com" target="_blank">һѹۿ </a>| <a href="http://yy6767.com" target="_blank">߹ۿѸ</a>| <a href="http://4466n.com" target="_blank">Ůɫվ</a>| <a href="http://baiyifuwu.com" target="_blank">ۺվ</a>| <a href="http://whyandroid.com" target="_blank">һ</a>| <a href="http://mmm19.com" target="_blank">þþþ뾫Ʒպ </a>| <a href="http://477077.com" target="_blank">ŮƵaƵȫվһ ŮƵaƵȫվɫ </a>| <a href="http://zzhdrsqwx.com" target="_blank">޾Ʒ</a>| <a href="http://boyonet.com" target="_blank">˻վƬƵ</a>| <a href="http://www22432.com" target="_blank">պƬѹۿƵ</a>| <a href="http://xyyfamily.com" target="_blank">ҹ˾Ʒɫ</a>| <a href="http://qmoread.com" target="_blank">Ƶ߹ۿ</a>| <a href="http://chinacmk.com" target="_blank">ϵйƷƷ˿</a>| <a href="http://thinkchating.com" target="_blank">Ʒާѡ벥</a>| <a href="http://3atv66.com" target="_blank">պƷaӰԺ</a>| <a href="http://sdtuoliuta.com" target="_blank">޹СƵƷþþ</a>| <a href="http://tv695.com" target="_blank">ββ8xѾþ</a>| <a href="http://wwwnewhtbook.com" target="_blank">վɫȫ</a>| <a href="http://chinahongfeng.com" target="_blank">һëƬƬѹۿ</a>| <a href="http://www-566846.com" target="_blank">ůůձ</a>| <a href="http://580jp.com" target="_blank">ֻƵѹۿ </a>| <a href="http://1444000.com" target="_blank">ҳվѹۿ</a>| <a href="http://xyzch.com" target="_blank">aëƬ</a>| <a href="http://tlyihong.com" target="_blank">һӰ߿Ƭ </a>| <a href="http://aaaaa123.com" target="_blank">ֻˬƵ</a>| <a href="http://ydysmedia.com" target="_blank">ֻˬһëƬѹۿ</a>| <a href="http://dukane1688.com" target="_blank">߹ۿƵ</a>| <a href="http://3atv3523.com" target="_blank">Ƭ߹ۿ</a>| <a href="http://33303339.com" target="_blank">aëƬ߹ۿ</a>| <a href="http://kj555888.com" target="_blank">޹Ʒһž</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>