新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
定义:存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
成都创新互联是专业的鸡泽网站建设公司,鸡泽接单;提供成都网站设计、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行鸡泽网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE 中,若干个有联系的过程可以组合在一起构成程序包。
优点:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某用户才具有对指定存储过程的使用权。
简单说,你在你的机器上写了个存储过程,这个存储过程像那些表里的数据一样被放在遥远的数据库服务器当中,但是它又是可执行的代码,其他能连到数据库服务器的用户,可以调用你写的存储过程
它的作用是隐藏细节,就是说,你写的存储过程代码可能很复杂,但是其他人调用它却很简单,不用具体知道它是如何做的,且一次能完成多个指令
oracle有系统存储过程和自定义存储过程2种存储过程。
系统存储过程就是由oracle预先提供的一组完成特定功能的存储过程,安装完oracle就有了。
自定义存储过程就是存在oracle数据库里由一组plsql语句组成的自定义过程(procedure)。它可以供其它oracle自定义存储过程、自定义函数和job调用或者由客户端程序调用。
好处1:
存储过程里面的代码, 都是已经被 “编译” 过的了。 直接可以执行。
如果不是存储过程,那么你每次执行代码, 都要再编译。
好处2:
减少网络流量。
假如你的存储过程,是要分别检索几个大的表,然后作复杂的计算,最后产生一个小的汇总结果。
如果全部在客户端处理,那么会有大量的数据,从服务器传递到客户端。 然后客户端将多个 大的结果集合,处理成一个小的汇总集合。
如果用存储过程,那么这些网络上传递的数据,将仅仅包含那个小的汇总集合。
Oracle的存储怎么了?除了磁带存储做的稍微好一点儿 从根本上说 这家IT巨头有一个长期 可行的外部存储阵列产品线吗?
Oracle的通用硬件业务逐渐萧条 下面的图表显示了包括硬件产品收入在内的季度整体销售 存储销售贡献到硬件的总数中
Oracle截止 财年第三季度的收入和净收益
下图清楚地显示了多年来他们每季度的硬件销售额在下降 自动Oracle通过收购Sun进入硬件业务以来
从一个大的硬件业务开始 为什么反而做小了呢?
需要做些什么了 Oracle最近着重更新了其服务器硬件 但是存储尚未成为一颗闪耀的明星 在此处也需要努力 现在先把磁带驱动器放在一边 那些看上去发展良好 Google使用了Streamline 而不是仅仅把视线放在网络存储阵列产品 ZFS Storage Appliance和Axiom 阵列上
ZFS存储设备
根据Gartner的说法 Sun ZFS Storage Appliance是甲骨文针对Oracle VM的主存储以及针对Exadata系统的备份 其他供应商在他们的阵列中使用开源ZFS软件稀释了Oracle的ZFS商标 尤其是Nexenta和Greenbytes 他们重写和改进了ZFS的重复数据删除代码 Coraid有针对其EtherDrive阵列基于ZFS的NAS机头 混合阵列初创厂商Tegile也拥有基于ZFS的软件
ZFS是一个使用RAID的文件系统 面对着来自对象存储技术的竞争 像Amplidata(被昆腾OEM) 戴尔 (Caringo) HDS NetApp的StorageGRID和Scality这样的供应商发力在对象技术 Joyent拥有一个云对象存储服务 Oracle没有对象存储功能
ZFS从根本上来说是一个基于磁盘的技术 使用闪存来进行读和写缓存 举个例子 NetApp正在构建FlashRay产品作为其热数据存储设备 EMC拥有XtremIO产品 Oracle却没有宣布任何共享的闪存阵列存储技术
其他供应商纷纷统一了文件和块存储产品 添加iSCCI块访问到他们的NFS和CIFS/SMB文件访问 NetApp利用其FAS阵列实现这个 EMC已经通过VNX统一了中端文件和块访问阵列产品线 FCoE的到来将进一步削弱文件和块访问阵列的距离 ZFS支持到一个卷的iSCSI访问 但是ZFS没有被Oracle作为统一的文件和块存储产品来推销
可能是由于Hadoop 传统文件系统在大数据市场中不够活跃 有一些可以联系ZFS和Hadoop的连接技术 例如来自Nexenta的一种
现在的问题是 ZFS Storage Appliance的下一步是什么?它会让全闪存阵列硬件连接到基于磁盘的产品么?Nexenta已经为其ZFS软件提供了对全闪存硬件基础的支持 Greenbytes的设备就是一个全闪存产品 Oracle的ZFS Storage Appliance将被落在后面 除非他们提供全闪存硬件 而这将需要大规模的改动ZFS代码 或者引入一个全新的代码基础
Pillar Axiom
这是Oracle在 年年中收购的SAN访问阵列 是一个带有固态驱动器(SSD)支持的基于磁盘的系统 高端产品Axiom 从 年开始 在 年加入SSD支持并更新软件 在 年 月有另一次Axiom软件更新 版本改进了管理 增加了复制和数据的物理区域分离
现在 阵列(从 年更新算起)已经三年了 就像ZFS Storage Appliance一样 面对来自更快的针对主数据存储全闪存阵列的竞争 而使用一个基于磁盘访问的操作系统 它已经到了硬件和策略上都需要更新的时间点
lishixinzhi/Article/program/Oracle/201311/18240
你应该问数据库存储过程有什么好处存储过程的能力大大增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的 运算。
* 可保证数据的安全性和完整性。
# 通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。
# 通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。
* 在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。
* 可以降低网络的通信量。
* 使体现企业规则的运算程序放入数据库服务器中,以便:
# 集中控制。
# 当企业规则发生变化时在服务器中改变存储过程即可,无须修改任何应用程序。企业规则的特点是要经常变化,如果把体现企业规则的运算程序放入应用程序中,则当企业规则发生变化时,就需要修改应用程序工作量非常之大(修改、发行和安装应用程序)。如果把体现企业规则的运算放入存储过程中,则当企业规则发生变化时,只要修改存储过程就可以了,应用程序无须任何变化。
强烈支持大量运用存储过程,最好100%用。
效率高,用户happy
存储过程性能好
2.存储过程代码可复用性好
3.避免在程序中含有大量SQL,可移植性不好。
这么多人在说用存储过程的优点,那我就来说说缺点:
1、移植性问题
这个搞数据库开发的人都能理解,是不是问题看系统的需求而定,这里就不多说了。如果数据库要移植的话,用存储过程就会带来很多问题,最好不用。
2、性能扩展性问题
随着系统访问量的增长,系统必须进行不断地升级扩展,特别对于大型系统而言,更重要的是性能可扩展性而不是局部的性能。J2EE等多层结构要解决的也是这方面的问题。
处理逻辑如果全部放在存储过程里,所有的处理都在数据库服务器上进行,消耗的就是数据库服务器的CPU资源,大家知道数据库服务器由于需要较高的可靠性,通常选用的都是价格昂贵的服务器,对数据库服务器升级通常都花费很大。
如果把处理逻辑放在中间层服务器上进行,中间层服务器一般都是小型的机器,价格便宜,而且中间层服务器的CPU通常主频比数据库服务器的速度还快(比如现在8CPU的数据库服务器主频只有800M,而双CPU的刀片式服务器CPU主频已经到2.8G了),而且对于多层架构,支持中间层服务器可以增加多台机器进行负载均衡,用中间层服务器即价格便宜,扩展空间也更大。
3、开发问题
存储过程还是过程型语言,其重用性比不上JAVA等面向对象语言开发。用JAVA开发的中间层服务可服用性更好(当然,前提是你采用面向对象设计)
上面只是列举的一部分问题,这些问题就值的你好好考虑是否采用存储过程了,我的观点是存储过程应该有选择地使用,牵涉到批量数据操作的,用存储过程较好。对于小数据量处理的事务操作,应放到中间层处理,这样系统的移植性和扩展性更好