当前位置:  数据库>oracle
本页文章导读:
    ▪数据库 20 条最佳设计实践      使用明确、统一的表名和列名,例如 School、SchoolCourse、CourceID。表名使用单数,而不是复数,例如 StudentCourse,而不是 StudentCourses。表名不要使用空格。表名不要使用多余的前缀或后缀,例如.........
    ▪Client使用c#和odp.net连接server oracle      Oracle.DataAccess.dll有2.X版本和4.X版本,VS2008开发用2.X所需的DLL可以从已安装的client中拷由于微软在.net framework4中会将System.Data.OracleClient.dll deprecated,而且就访问效率和速度而言,System.Data.OracleCli.........
    ▪iBatis.Net(C#)系列二:SQL数据映射       摘要:本文探讨了iBatis.Net框架的XML数据映射文件各配置节点的含义,并通过CRUD四种对数据库的操作讲解了如何配置数据映射文件和调用方法。 关键词:iBatis.Net;XML;SQL Maps;数据映射 &n.........

[1]数据库 20 条最佳设计实践
    来源:    发布时间: 2013-10-29

  • 使用明确、统一的表名和列名,例如 School、SchoolCourse、CourceID。
  • 表名使用单数,而不是复数,例如 StudentCourse,而不是 StudentCourses。
  • 表名不要使用空格。
  • 表名不要使用多余的前缀或后缀,例如使用 School,而不是 TblSchool,或者 SchoolTable 等等。
  • 数据库中的密码要加密,到应用中再解密。其实就是散列存储、单向加密。
  • 使用整数作为 ID 字段,也许现在没必要,但是将来需要,例如关联表,索引等等。
  • 使用整数字段做索引,否则会带来很大的性能问题 。
  • 使用 bit 作为布尔字段,使用整数或者varcha是浪费。同时,这类字段应该以“Is”开头。
  • 要经过认证才能访问数据库,不要给每一个用户管理员权限。
  • 尽量避免使用“select *”,而使用“select [required_column_list]”以获得更好的性能。
  • 假如程序代码比较复杂,使用 ORM 框架,例如 hibernate、iBatis。ORM 框架的性能问题可以通过详细的配置去解决。
  • 分割不常使用的数据表到不同的物理存储以获得更好的性能。
  • 对于关键数据库,使用安全备份系统,例如集群,同步等等。
  • 使用外键,非空等限制来保证数据的完整性,不要把所有的东西都扔给程序。
  • 缺乏数据库文档是致命的。你应该为你的数据库设计写文档,包括触发器、存储过程和其他脚本。
  • 对于经常使用的查询和大型数据表,要使用索引。数据分析工具可以帮助你决定如何建立索引。
  • 数据库服务器和网页服务器应该放在不同的机器上。这回提高安全性,并减轻 CPU 压力。
  • Image 和 blob 字段不应该定义在常用的数据表中,否则会影响性能。
  • 范式(Normalization)要按照要求使用以提高性能。Normalization 做的不够会导致数据冗余,而过度 Normalization 会导致太多的 join 和数据表,这两种情况都会影响性能。
  • 多花点时间在数据库设计上,否则你将来会付出加倍的时间来偿还。
  •  

    Thanks @howechiang

    本文链接


        
    [2]Client使用c#和odp.net连接server oracle
        来源:    发布时间: 2013-10-29

    Oracle.DataAccess.dll有2.X版本和4.X版本,VS2008开发用2.X

    所需的DLL可以从已安装的client中拷

    由于微软在.net framework4中会将System.Data.OracleClient.dll deprecated,而且就访问效率和速度而言,System.Data.OracleClient.dll与 Oracle.DataAccess.dll相比,微软的确实没有oracle提供的类库有优势,所以我放弃了使用多年的 System.Data.OracleClient.dll,取而代之的是odp.net。然而odp .net 的优点不止这些,还包括:

    1、不在安装客户端也能访问服务器上的oracle(假设Application Server与DB Server 分开)

    2、不需要配置TnsNames.Ora文件

    当然,我选择odp .net的最主要的原因还是性能。这篇文章列举了两者之间的对比。Technical Comparison: ODP .NET Versus Microsoft OracleClient


    下面我将介绍如何在一个在新的项目中使用odp .net。环境配置:A机器,运行C#程序,没有安装oracle数据库或者客户端等任何oracle的产品;B机器就运行着一个oracle9i数据库,再没安装过其它oracle产品

    首先要下载odp .net文件,可以在这个页面下载Oracle Data Access Components (ODAC) Downloads ,我下载的是Oracle 11g ODAC 11.1.0.7.20 with Oracle Developer Tools for Visual Studio这个版本。

    下载完成之后不用安装,将Oracle.DataAccess.dll文件从 ODTwithODAC1110720.zip/stage/Components/oracle.ntoledb.odp _net_2/11.1.0.7.10/1/DataFiles/filegroup4.jar文件中解压出来就行,然后复制到项目中,再添加引用Oracle.DataAccess.dll。
    编写如下代码:

    using Oracle.DataAccess.Client; 

    ... 

    string connstring = 

       "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1527))" + 

       "(CONNECT_DATA=(SID=orcl)));User Id=sys;Password=sys;" ; //这个也可以放到Web.Config中。 

    using (OracleConnection conn = new OracleConnection(connstring)) 

       conn.Open(); 

       string sql = "select * from users" ; 

       using (OracleCommand comm = new OracleCommand(sql, conn)) 

       { 

         using (OracleDataReader rdr = comm.ExecuteReader()) 

         { 

           while (rdr.Read()) 

           { 

             Console.WriteLine(rdr.GetString(0)); 

           } 

         } 

       } 

    代码编写好以后,还要从下载的压缩包中取出几个dll文件。
    1、oci.dll (在jar文件里面叫’oci.dll.dbl’,拿出来之后去掉.dbl in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup2.jar)
    2、oraociicus11.dll (in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.ic/11.1.0.7.0/1/DataFiles/filegroup3.jar)
    3、OraOps11w.dll (in ODTwithODAC1110720.zip/stage/Components/ oracle.ntoledb.odp _net_2/11.1.0.7.10/1/DataFiles/filegroup3.jar)

    下面这三个有人说需要,有人说不需要,反正也不差这三个,继续吧:
    4、orannzsbb11.dll (in ODTwithODAC1110720.zip/stage/Components/oracle.ldap.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup1.jar)
    5、oraocci11.dll (in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup3.jar)
    6、ociw32.dll (在jar文件里面叫’ociw32.dll.dbl’,拿出来之后去掉.dbl in ODTwithODAC1110720.zip/stage/Components/ oracle.rdbms.rsf.ic/11.1.0.7.0/1/DataFiles/filegroup2.jar)
    最后把这个DLL复制到项目中,CS的要与exe一个文件夹,B/S的有专门的bin目录。

    当然,使用一项新技术,必然会遇到一些错误:以下是我遇到的:

    1、运行的时候遇到这个异常提示’The provider is not compatible with the version of Oracle client’,不要紧张,检查一下上面所用到的dll是否齐全就OK。

    2、“找不到请求的 .Net Framework 数据提供程序。可能没有安装。”这个错误提示是因为在machine.config中找不到Oracle.DataAccess.dll,将下面的代码放到

    < DbProviderFactories ></ DbProviderFactories > 

    之间就OK。

    < add name = "Oracle Data Provider for .NET" invariant = "Oracle.DataAccess.Client" description = "Oracle Data Provider for .NET" type = "Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 

    注:如果下载的不是ODTwithODAC1110720,有可能 dll的位置不像是上面提到的那样,需要自己去挨个找了

    本文链接


        
    [3]iBatis.Net(C#)系列二:SQL数据映射
        来源:    发布时间: 2013-10-29

     

    摘要:本文探讨了iBatis.Net框架的XML数据映射文件各配置节点的含义,并通过CRUD四种对数据库的操作讲解了如何配置数据映射文件和调用方法。

    关键词:iBatis.Net;XML;SQL Maps;数据映射

     

    上一节介绍了iBatis.Net的基本情况和运行原理,运行环境中各参数的配置情况。并通过一个实例项目进行了说明。

    1 数据映射基础

    SQL Maps是这个iBatis.Net框架中最重要的部分,而SQL Maps的核心就在于XML数据映射文件(Data Map XML File)。在XML数据映射文件里可以定义包括要执行各种SQL语句、存储过程、输入参数映射、返回结果映射、缓存机制,并且能通过几种相对比较复杂的配置实现对象之间的关联关系和延迟加载。这也是iBatis.Net区别其它ORM框架而具备更灵活性,更高性能的关键所在。

    配置文件可以写得很简单,也可以很复杂。复杂配置文件往往出于更好的设计,更好性能,更好扩展性方面的目的。一个XML数据映射文件主要分为两个部分:模块配置和语句配置。

    2 模块配置

    2.1 Type Alias节点

    定义一个XML数据映射文件中的别名,其好处就是避免过长变量值的反复书写,比如通过typeAlias节点为类"iBatisTest.Domain.Sysuser"定义了一个别名"Sysuser",这样在这个数据映射文件中的其他部分,需要引用"iBatisTest.Domain.Sysuser"类时,只需以其别名替代即可,和SqlMap.config配置文件里面的Alias节点配置一样。定义如:

    <alias><typeAlias alias="Sysuser" type="iBatisTest.Domain.Sysuser,iBatisTest" /></alias>

    2.2 cacheModel节点

    缓存机制是程序开发中经常讨论的一个话题,在实际的系统开发的过程中,总会存在着这样一类数据,它们更新频率很低,然而使用的频率却非常之高。为了提高系统性能,通常将此类数据装入缓存。iBatis.Net也有自己的缓存系机制,它通过cacheModel节点来配置,具体的定义如下:

    <cacheModel type="LRU" id="Sysuser-cache" readOnly="true" serialize="false">
    <flushInterval hours="24"/>
    <flushOnExecute statement="SysuserMap. UpdateSysuser "/>
    <property name="CacheSize" value="100"/>
    </cacheModel>

    type:缓存的类型,iBatis.Net中有4种类型,分别为MEMORY、LRU、FIFO、OSCACHE。

    其中MEMORY是内存缓存,LRU是使用最近最少使用策略,FIFO是使用先进先出策略,OSCACHE是通过第三方的缓存插件来实现。

    id:是cacheModel的一个标识,标识该缓存的名字,供后面设置使用。

    readOnly:指缓存的数据对象是只读还是可读写,默认为"true",即只读,这里的只读并不是意味着数据对象一旦放入缓存中就无法再对数据进行修改。而是当数据对象发生变化的时候,如数据对象的某个属性发生了变化,则此数据对象就将被从缓存中废除,下次需要需重新从数据库读取数据,构造新的数据对象。而readOnly="false"则意味着缓存中的数据对象可更新。

    serialize:是否从缓存中读取同一个对象,还是对象的副本。该参数只有在readOnly为false的情况下才有效, 因为缓存是只读的,那么为不同会话返回的对象肯定是一个,只有在缓存是可读写的时候,才需要为每个会话返回对象的副本。

    flushInterval:指定缓存自动刷新的时间,可以为hours、minutes、seconds和milliseconds。需要注意的是,这个间隔时间不是时间到了,在缓存里的信息会自动刷新,而是在间隔时间过后,下次查询将不会从缓存中去取值,而会用SQL去查询,同时将查询的结果更新缓存的值。

    flushOnExecute:指定在发生哪些操作时,更新缓存。

    property:针对cacheModel的额外的一些属性配置,不同type的cacheModel将会有自己专有的一些property配置,如:

    FIFO: <property name="CacheSize" value="100" />

    LRU: <property name="CacheSize" value="100" />

    MEMORY: <property name="Type" value="WEAK" />

    当配置好cacheModel之后就可以在后面的语句中使用了,如:

    ﹤statement id="SelectSysuser" result cacheModel="Sysuser-cache"﹥

      SELECT * FROM DEAN.SYSUSER

    ﹤/statement﹥

    2.3 resultMap节点

    resultMap从字面理解就是结果集的映射,它将返回的记录与实体对象进行映射,它属于直接映射。如果查询出来的数据集的字段与属性和实体类一致时,我们常用resultClass来替代,它属于隐身映射。通常resultMap比resultClass性能要高。

    在使用resultMap时需要注意,如果在resultMap中给出的配置字段,但是返回的数据集却没有返回这个字段,那程序将出抛出异常。相反的,如果返回了一些字段,却没有在resultMap给出配置定义的话,那么那些字段将不会被处理而不会给出任何的提示,相当没有查询出这些字段。具体的定义例子如下:

    <resultMaps>

    <resultMap id="SysuserResult" >

    <result property="Userid" column="USERID" />

    <result property="Password" column="PASSWORD" />

    <result property="Loginname" column="LOGINNAME" />

    <result property="Sex" column="SEX"/>

    <result property="Birthday" column="BIRTHDAY"/>

    <result property="Idcard" column="IDCARD" />

    <result property="Officephone" column="OFFICEPHONE" />

    <result property="Familyphone" column="FAMILYPHONE" />

    <result property="Mobilephone" column="MOBILEPHONE"/>

    <result property="Email" column="EMAIL"/>

    <result property="Address" column="ADDRESS"/>

    <result property="Zipcode" column="ZIPCODE"/>

    <result pr

        
    最新技术文章:
    ▪current online redo log缺失后的恢复
    ▪ORA-600 2662错误解决实例
    ▪ORA-00600 2662错误解决方法
    ▪Oracle Hidden Parameter:_allow_resetlogs_corruption
    ▪Oracle诊断事件列表
    ▪Oracle 隐含参数 _disable_logging 详解
    ▪ORA-00600 [2662]错误解决过程
    ▪Oracle里常见的执行计划
    ▪Oracle里另外一些典型的执行计划
    ▪Oracle服务器自动备份
    ▪Oracle固定SQL的执行计划(一)---SQL Profile
    ▪Oracle固定SQL的执行计划(二)---SPM
    ▪同一环境下新建Standby RAC库
    ▪Oracle快速克隆安装
    ▪Oracle单实例启动多个实例
    ▪Oracle的PLSQL别名中文出现乱码解决方法
    ▪ORA-00379: no free buffers available in buffer pool DEFAULT ...
    ▪RMAN-06023: no backup or copy of datafile 16 found to restor...
    ▪RMAN还原数据库报错问题解决案例
    ▪OEL6.8_X86平台部署Oracle 10gR2检测失败问题
    ▪Oracle 性能优化建议
    ▪Oracle SQL语句优化心得
    ▪Oracle慢SQL监控脚本实现
    ▪Oracle dblink 查询 tns:无法解析指定的连接标识...
    ▪Red Hat Enterprise Linux 6使用udev配置Oracle ASM总结...
    ▪Linux6.6及以上版本配置Oracle ASM共享储存-UDEV
    ▪Oracle 12C 开启数据库归档模式
    ▪Solairs系统中配置Oracle 12c 开机启动
    ▪重建DBMS_STATS解决ORA-31626 ORA-21633以及ORA-04063 ORA...
    ▪Oracle ASMM 与AMM之间相互切换
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,