Oracle数据库学习中的六条经验总结
以下的文章主要是介绍在Oracle数据库学习中的六条经验总结,其实想学好Oracle数据库并不是一件很困难的事情,很多人都认为Oracle数据库的体系过于庞大,在学习的过程中摸不到头绪,以下的文章就会给你提供相关的解答方法。
1、如果有一定的数据库基础知道SQL是怎么回事,即使写不出来简单的SQL,但可以看动它们,你就可以跳到2。否则请先看一下数据库基础和SQL语言,不需要很深,更不需要去记忆那些复杂的SQL命令,这些可以留在以后边应用边学习、记忆。
2、要想学好Oracle数据库,首先要学习ORACLE的体系结构,现在你不需要深入理解它们,但要分清几个关键的概念:instance&database, memory structure,process&those files,such as data file, control file,init parameter file etc以及database ,tablespace,data file和tablespace,segmnet,extent & block它们之间的关系。
当然还要分清undo tablespace & redo log file等,对于很多初学者来说,能够对这些概念有个较为清晰的认识并不是一件容易的事,而这些并非Oracle的全部。
3、是有关ORACLE的一些基本概念,下面要学习的是一些简单的的实际操作,就是如何去管理ORACLE数据库,当然不是管理全部的ORACLE。在此过程中你将对SQL和ORACLE体系结构有个更深入的了解。
4、到了这一步你基本上算是初步掌握了ORACLE,下面将要根据你的方向来具体学习其它的ORACLE知识了。如果你是开发人员,则需要更多地去学习PL/SQL以及DEVELOPER,而这将是一门新的课程。如果你是一名DBA,请继续。
5、现在你可以根据自己的实际情况,进行有选择的学习,也就是说下面的内容没有特别顺序要求。可以选择深入学习ORACLE数据库的管理、备份与恢复、性能调整、网络等。当然在学习这些知识的过程中,如果有实际的工作更好,这样你可以在实际中成长,学会TROUBLE SHOOTING。
6、当然在学习的过程中,你可以在网站或论坛中与他人进行交流,可以看别人的一些经验文章,也可以自己写一些心得体会。技术进步的本身就是经验的积累和提炼过程,希望大家共同成长,欢迎大家相互交流。
第二篇:Oracle实例操作经验总结-数据库规划-2
数据库规划文档
1、 数据库表空间规划
根据应用情况建立应用数据表空间,索引表空间,临时表空间,回滚表空间。
表空间存储参数划分:
initial = next , pctincreas 0 ,minextents 2 ,maxtents unlimited 如果是小表,则对应initail 以k为单位。
如果数据量比较大的表,例如历史表等 initial 以M为单位。
数据表空间的划分:
数据表空间可划分为多个数据表空间,按数据量、业务类型进行划分。 系统小表:bsys_area,bsys_code等 使用缺省表空间
历史表:CARD_BILLING_DETAIL_20xx03、BILLING_COMDETAIL_20xx03等使用历史表空间
其它表:如当前详单表、消费、粗帐表、用户信息表、认证表等归属一个数据表空间
特殊表:mid_record ,卡替重表等归属一个表空间
接口表、宽带表等:以业务类型划分数据表空间,接口表空间、宽带表空间
2、 Oracle性能考虑
Insert操作考虑 :插入操作运行速度慢,会伴随大量的输入输出。
如果高性能比空间的重新使用更为重要,那么可以使用一个能够绕过空闲列表的ORACLE8 SQL提示。即通过在INSERT关键词之后放置/*+ append */, 这个提示将确保所有插入内容都放入到空数据块中,从而提高了速度。
Pctfree: 为insert保留的可用块空间的百分比,当到达pctfree限额时,块被认为已满,不能再插入新的行。块中pctfree限额到达以后,保留在块中的空间为已存在于块中的行UPDATE服务。
数据库缺省值:PCTUSED = 40 PCTFREE = 10
大量的insert操作设置:如果表多数情况下是INSERT操作,可将pctfree 设置趋向于小(缺省值10),pctused要加大,建议(60至70)。
大量Update操作设置:如果表有大量的UPDATA操作,可将PCTFREE设置大一些(20--25), pctused建议(50)。
总体上PCTFREE+PCTUSED< 80 – 90
Freelists参数设置:
freelists为向表中进行insert操作,而保留的空闲块队列的数目,此参数可设为当前update操作的最大数值。对有很多并发UPDATE操作的数据表,定义额外的空闲列表。
例如表test有20个并发执行insert操作的终端用户,那么test表应该设置freelists = 20
3、 数据文件划分原则:
数据库文件的基本划分原则是:DATA空间段与其索引INDEXS空间段分开;RBS空间段与DATA空间段分开;SYSTEM空间段应同数据库中的所有其它空间段分开。
磁盘 数据文件内容
1 系统表空间,控制文件1、在线重做日志1
2 数据文件1
3 数据文件2
4 数据文件3
5 索引段
6 工具段,回滚段,控制文件2、在线重做日志2
7 临时段,用户段,在线重做日志3,控制文件3
4、 SQL语句设计
为了保证Oracle数据库运行在最佳的性能状态下,在业务系统开发之前就应该考虑数据库的优化策略。Sql语句与其执行计划一同进行检查。避免无计划的全表扫描, 如下情况进行全表扫描:该表无索引、对返回的行无Where子句、对于索引主列(索引的第一列)无限制条件等等。
对SQL语句的编写可参考如下原则:
改变SQL来源
在实际的编程过程中,建议从应用程序中去掉所有的SQL语句。强调通过将所有的SQL放置在存储过程中,将存储过程打包来实现。
在SQL语句中避免使用直接量
包含有直接量的SQL语句都不可能被再次使用。解决的办法是建议开发者在SQL语句中使用主机变量。
去掉不必要的大型表的全表扫描
全表扫描会造成不必要的硬盘I/0,调整方法是通过添加索引,使用标准的B树索引,使用位图索引或基于函数的索引,去掉不必要的全表扫描。Oracle8提供了含有内置函数的索引。 下面是一些经常使用的OracleSQL内置函数:
to_char
upper
lower
substr
decode
如果没有创建与内置函数匹配的基于函数的索引,这些函数通常会导致SQL优化器执行全表扫描。
缓存小型表的全表扫描
在全表扫描是更快的访问方式的情况下,将小表KEEP到数据缓冲区中。 alter table 表名 storage(buffer_pool keep);
并行技术
对于合法的大型表全表扫描可使用ALTER TABLE PARALLEL DEGREE nn命令进行并行化。
采用基于规则的优化器的一些特性: (optimizer_mode=rule)
总是使用索引
总是从驱动表开始,在from子句中的最后一个表是驱动表。表的名称从右向左读取,因此FROM子句中的最后一个表必须是可以返回最少记录的表。 使用Union All 而不是Union
UNION ALL操作不包括Sort Unique操作, 多数情况下不用临时段完成操作,
绑定变量(Bind Variable)的使用管理
将like :name ||’%’ 改写成 between :name and :name || char(225), 以避免进行全表扫描,而是使用索引。
存储过程keep在内存中
尽量利用oracle公司提你的dbms_shared_pool程序包将系统经常使用且占内存较多的存储过程keep在内存中,有利于提高最终用户的响应时间
execute sys.dbms_shared_pool.keep('cinms35.procedure_name','p'); not exists代替not in
在程序开发过程中编写sql时,用not exists代替not in,可以大大减少sql的执行时间
nologging 操作
对于create,insert、update、delete等操作可使用nologging
null值不适合建索引
不要对含有null值的单列或多列建立索引,这样的索引对sql的执行没有好处,反而会降低性能。