精华内容
下载资源
问答
  • 数据库物理设计

    万次阅读 2016-04-30 20:38:18
    数据库物理设计要做什么: 1、选择合适的数据库管理系统。 2、定义数据库,表及字段的命名规范。 3、根据所选择的DBMS系统选择合适的字段类型。 4、反范式化设计。 一、选择哪种数据库: Oracle和Sql...

    数据库物理设计要做什么:


    1、选择合适的数据库管理系统。

    2、定义数据库,表及字段的命名规范。

    3、根据所选择的DBMS系统选择合适的字段类型。

    4、反范式化设计。


    一、选择哪种数据库:

    Oracle和SqlServer是商业数据库。(适合企业级项目)

    mysql和pgsql是开源数据库。(适合互联网项目)


    二、表及字段的命名规范:

    1、可读性原则。通过大小写格式化名字。如CustAddress而不是custaddress。

    2、表意性原则。见名知意。如表的过程应该能体现存储的数据内容。

    3、长名性原则。尽量少或不使用缩写。


    三、字段类型的选择

    数据类型一方面影响数据存储空间的开销,另一方面也会影响数据查询性能。

    当一个列可以选择多种数据类型时,应该优先选择数据类型,其次是日期或二进制类型,最后是字符类型

    对于相同级别的数据类型,应该优先选择占用空间小的数据类型




    以上选择原则主要是从以下两个角度考虑:

    1、在对数据进行比较(查询条件,JOIN条件及排序)操作时,同样的数据,字符处理往往比数字处理慢

    2、在数据库中,数据处理以页为单位,列的长度越小,利于性能提升


    具体如何选择呢?

    char与varchar如何选择:

    1、如果列中要存储的长度差不多是一致的额,则应该考虑选择char;否则应该考虑用varchar。(如手机号码,身份证号码)

    2、如果列中的最大数据长度小于50byte,则一般也考虑char。如果这个列很少用,也可以选择varchar

    3、一般不宜定义大于50byte的char类型列。


    decimal与float如何选择:

    1、精确选decimal。

    2、非精确选float,因为占用空间小。


    时间类型如何存储:

    对于只是查询显示或变动不频繁的日期,用int。

    经常要使用的话,用datetime。

    1、用int来存储时间字段的优缺点:

    优点;字段长度比datetime小。

    缺点:使用不方面,要进行函数转换才能看懂。

    限制:只能存储到2038-1-19 11:14:07。即2的32次方

    2、需要存储的时间粒度。

    年 月 日 小时 分 秒 周


    其他:

    如何选择主键:

    1、区分业务主键和数据库主键:

    业务主键:标示业务数据,进行表与表之间的关联。

    数据库主键:优化数据存储。(Innodb会生成6个字节的隐含主键)

    2、根据数据库的类型,考虑主键是否需要顺序增长。

    3、主键的字段类型所占空间要尽可能小。


    避免使用外键约束:

    1、降低数据导入的效率

    2、增加维护成本

    3、虽然不建议使用外键约束,但是相关联的列上一定要建立索引。


    避免使用触发器:

    1、降低数据导入的效率

    2、可能会出现意想不到的数据异常

    3、是业务逻辑变的复杂。


    严禁使用预留字段:

    1、无法准确的知道预留字段的类型

    2、无法准确的知道预留字段中所存储的内容

    3、后期维护预留字段所要的成本,同增加一个字段所需要的成本是相同的。


    四、反范式化设计

    为了性能和读取效率的考虑而适当的对第三范式的要求进行违反,而允许存在少量的数据冗余。

    也就是用空间来换时间



    参考自慕课网——数据库设计那些事http://www.imooc.com/learn/117


    展开全文
  • 1、数据流物理设计的工作过程在数据库的物理结构中,数据的基本单位是数据记录,记录以文件的形式进行存储,,一条存储记录对应关系模式中的一条逻辑记录,并且文件当中还需要记录存储记录的结构信息,比如字段长度...
    5efaed6ee031fa1d0477b7a582b0f357.png

    1、数据流物理设计的工作过程

    在数据库的物理结构中,数据的基本单位是数据记录,记录以文件的形式进行存储,,一条存储记录对应关系模式中的一条逻辑记录,

    并且文件当中还需要记录存储记录的结构信息,比如字段长度、数据类型、字段描述等信息。

    工作过程:逻辑设计阶段产生(逻辑模型:模式、子模式)→确定数据库的物理模式→评估数据库的物理模式产生(物理模型:存储记录格式、记录存放位置、存取方法)→数据库实施阶段

    2、数据库物理设计工作步骤

    数据库物理设计主要步骤有:确定数据分布、存储结构、访问方式。

    2.1 确定数据分布

    从企业计算机应用环境出发,确定数据是采用集中管理还是分布式管理,目前一般采用分布式管理。数据分布需要考虑以下几个方面:

    • 根据不同应用分布数据:一般情况下企业的部门不同所使用的数据也是不同,将与部门应用相关的数据存储在相应的场地,使得不同场地上处理不同的业务,针对应用多个场地的业务可以通过网络进行数据管理。
    • 根据处理要求确定数据的分布:针对不同的处理要求,也会有不同的使用频度和响应时间要求。频度高、响应时间短的数据应该存储在高速的设备上。
    • 针对数据的分布存储必然会导致数据的逻辑结构的变化,要对关系模式做新的调整。

    2.2 确定数据的存储结构

    存储结构具体是指数据文件中记录之间的物理结构。在文件中,数据是以记录为单位进行存储的,可以采用顺序存储、哈希存储、堆存储、B+树等方式。

    一般为了提高数据的访问速度,会采用索引技术。这个在物理设计阶段,要根据数据处理和修改要求,确定数据库文件的索引字段和索引类型。

    2.3 确定数据的访问方式

    数据的访问方式一般都是由存储结构决定的。数据库物理结构组成有:存储记录格式、记录在物理设备上的安排、访问路径等。

    1、存储结构的设计

    存储记录组成:记录、数据项长度、长度和数据项之间的联系、逻辑记录到存储记录的映射。一般在设计记录的存储结构时,并不改变数据库的逻辑结构,但可以在物理上对ijl进行封装。当多个用户同时访问数据项时,会由于访问冲突而等待可以将这些数据分布在不同的磁盘组上,当用户同时访问时,

    系统可以并行的执行IO,减少网盘冲突,从而提高数据库的性能。

    2、存储记录的布局

    存储记录的布局,就是确定数据的存放位置。存储记录作为一个整体,如何分布在物理区域上,是数据库物理结构设计的重要环节。聚簇功能可以大大提高按聚簇码进行查询的效率。

    建立聚簇索引的原则:

    • 聚簇码的值相对稳定、没有或很少需要进行修改。
    • 表主要用户查询,并且通过聚簇码进行访问或连接是该表的主要应用。
    • 对应每个聚簇码值的平均元组数既不太多,也不太少。

    3、存取方法的设计

    存取方法是为存储在物理设备上的数据提供存储和检索能力。存取方法包括存储结构、检索机制。存储结构限定了可能访问的路径和存储记录;检索机制定义每个应用的访问路径。

    展开全文
  • 数据库物理设计的步骤 确定数据库的物理结构 RDBMS中的主要指存取方法和存储结构 对物理结构进行评价 重点是时间和空间效率 IF 满足原设计要求 THEN 进入到物理实施阶段 ELSE ( 重新设计 OR 修改物理结构 OR 返回...

    关注公众号凡花花的小窝,收获更多的考研计算机专业编程相关的资料
    第9讲数据库的物理设计
    什么是数据库的物理设计
    为了一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计
    数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,他依赖于选定的DBMS

    数据库物理设计的步骤
    在这里插入图片描述
    确定数据库的物理结构
    RDBMS中的主要指存取方法和存储结构
    对物理结构进行评价
    重点是时间和空间效率
    IF 满足原设计要求 THEN 进入到物理实施阶段 ELSE (
    重新设计
    OR 修改物理结构 OR 返回逻辑设计阶段 修改数据模型)
    复习 :7.2 需求分析中 数据字典
     4. 数据存储
     数据量
     存取频度:每小时、每天或每周存取次数,每次存取的数据量等信息
     存取方法:批处理 / 联机处理;检索 / 更新;顺序检索 / 随机检索
     5. 处理过程
     处理要求
    处理频度要求,如单位时间里处理多少事务,多少数据量、响应时间要求等
    物理设计的输入 及 性能评价的标准

    7.5.1数据库物理设计的内容和方法
    关系数据库物理设计的内容
    为关系模式选择存取方法(建立存取路径)
    为关系,索引,日志,备份等数据库文件选择物理存储结构

    不同的DBMS的产品
    物理环境,存取方法和存储结构有很大的差别
    能够提供设计人员使用的设计变量,参数范围很不相同
    没有通用的物理设计方法,只能给处一般的设计内容和原则

    设计物理数据库结构的准备工作
    充分了解应用环境,铉锡分析要运行的事务,以获得选择物理数据库设计所需要参数
    充分了解所用的RDBMS的内部特征,特别是系统提供的存取方法,和存储结构
    有哪些索引(例如B+树索引,HASH索引,BITMAP索引等),如何建立索引,
    有哪些存储结构(行存储,列存储,聚簇存储),如何选择

    物理数据库设计参数
    数据库查询事务
    查询所涉及的关系
    查询条件所涉及的属性
    连接条件所涉及的属性
    查询的投影属性
    数据库上隐形的事务会不断变化,增加或者减少,要根据应用的变化,即时收集设计信息,调整数据库的物理结构
    数据更新事务
    被更新的关系
    每个关系上的更新操作条件所涉及的属性
    修改操作要改变的属性
    每一个事务在各个关系上运行的频率和性能要求

    7.5.2关系模式存取方法的选择
    索引方法,聚簇方法

    索引方法的选择
    为什么要建立索引
    提高存取的效率–查询,插入,删除,更新的效率
    如何选择索引存取方法
    根据应用的要求:
    对哪些属性列建立索引
    对哪些索引要设计为唯一的索引,组合索引。
    选择合适的索引方法

    索引存取方法的选择
    如何创建索引
    CREATE [UNIQUE]INDEX 索引名字 ON 表名[USING 索引方法](列名1,列名2,【,。。。】);
    CREATE UNIQTE INDEX studentname ON student
    USING Hash(sname)l
    RDBMS提供的索引方法
    B-tree(B+树),hash(散列)R-tree,Bitmap等。
    如果不指定,缺省一般是B-tree

    选择索引存取方法的一般原则
    如果一个(或者一组)属性经常在查询条件中出现,则考虑在这个(这组)属性上建立索引(或者组合索引)
    如果一个属性经常作为最大值和最小值等聚集函数的参数,则考虑在这个属性上建立索引

    1.B+树索引的简介
    B+树索引的特点:
    多分平衡树,存取效率高
    不仅能随即查找,又能顺序查找
    增删改操作,保持平衡

    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    2.HASH存取方法的选择
    为什么要使用Hash存取方法
    在这里插入图片描述
    2.Hash存取方法的选择
    选择hash存取方法的规则
    如果一个关系的属性主要出现在等值连接条件中或者主要出现在等值比较选择条件中,而且满足下列两个条件之一;:
    该关系的大小可以预知,而且不变
    该关系的大小动态改变,但是所选用的数据库的管理系统提供了动态Hash存取方法

    索引所带来的额外的开销
    维护索引的开销
    查找索引的开销
    存储索引的开销
    确定是否需要建立索引,选择哪种索引

    索引存取方法的选择
    为什么要建立索引
    提高存取效率
    选择索引存取方法的一般规则
    B+树的结构,B+树中的随机查找和顺序查找

    数据库的物理设计2
    3.聚簇存取方法的选择
    什么是聚簇
    为了提高某个属性或者属性组的查询速度,把这个或者这些属性上具有相同的值的元组几种存放在连续的物理块中称为聚簇
    该属性或者属性组称为聚簇码cluster ky
    许多rdbms都提供了聚簇的功能

    建立聚簇的方法的实例
    1.先船舰一个聚簇的
    create cluster<聚簇名>(<聚簇码>) SIZE(<大小>);
    2.在聚簇上建立索引
    CREATE INDEX <索引名> ON CLUSTER <聚簇名>l;
    eg:CREAT CLUSTER emp_dept_cluster (depnot numer(6))SIZE 1024;
    CREATE INDEX emp_dept_cluster_index ON CLUSTER emp_dept_cluster;
    各个RDBMS产品的关于聚簇的建立,维护的方法和语法不尽相同
    聚簇存取方法的选择
    聚簇的用途

    1. 大大提高按聚簇属性进行查询的效率
      [例] 假设要查询计算机系的所有学生。
       学生数据表随机存放,计算机系的500名学生分散存储在500个不 同的物理块上,则至少要执行500次 I/O操作。
       如果按照专业系名聚簇存放,将同一系的学生元组聚簇在一起存 放,则可以显著地减少了访问磁盘的次数。计算机系的500名学生 聚簇存储在50个不同的物理块上,只要执行50次 I/O操作。
      聚簇的适用范围
      不仅适用于单个关系独立聚簇,也适用于多个关系的组合聚簇
      [例] 假设用户经常要按姓名查询学生成绩单。
      SELECT sname, cno, grade from student, sc where student.sno=sc.sno 这一查询涉及学生关系和选修关系的连接操作,按学号连接这两个关系。
      按照学号把学生表和选修表聚簇在一起。
      相当于把多个关系按“预连接”的形式存放。
      大大提高连接操作的效率。
      聚簇的使用范围
      当SQL语句中包含了与聚簇码有关的ORDER BY,GROUP BY UNION DISTINCT等子句或者短语的时候,使用聚簇特别有利,可以省去或者减少对结果集的排序操作
      聚簇的局限性
      在一个基本表上最多只能建立一个聚簇索引
      聚簇只能提高某些特定应用的性能
      建立于维护聚簇的开销相当的大
      对于已经有关系建立聚簇,将导致关系中元组的物理存储位置的移动,并且让此关系上的原来的索引无效,必须重建。
      当一个元组的聚簇码改变的时候,该元组的存储位置也要相应的改变。

    聚簇索引的适用条件
    很少对基表进行增删操作
    很少对其中的变长列进行修改操作

    7.5.3确定数据库中的存储结构
    确定数据的存储安排和存储结构
    关系,索引,数据库缓冲区,日志,本分
    内存/磁盘
    行存储/列存储
    集中/分散 存放
    顺序/随机/聚簇 存放
    确定系统参数配置
    各个系统所能提供的对数据进行物理安排的手段,方法差异很大
    设计人员应该仔细了解给定的RDBMS提供的方法和参数,针对应用环境得以奥球,对数据进行适当的物理安排

    影响数据存放的位置和存储结构的因素
    硬件环境
    应用需求
    存取时间
    存储空间利用率
    维护代价
    这三个方面常常是矛盾的,必须进行权衡,选择一个折中方案

    1.确定数据的存放位置
    基本原则
    根据应用情况将
    容易变的部分与稳定部分分开存放
    经常存取部分与存取频率低的部分分开存放
    eg:
    可以将比较大的表分别放在两个磁盘上,可以加快存取速度,这在多用户环境下特别有效
    可以将日志文件与数据库对象(表,索引等)放在不同的磁盘以改进系统的性能
    基本原则:
    根据应用的情况和物理环境(磁盘或者磁盘阵列的容量,内存的大小)
    容易变的部分与稳定部分分开存放
    经常存取的部分与存取频率角度的部分分开存放
    将日志文件与数据库对象(表,索引等)分开存放
    在海量数据和多用户环境下,把数据分布存放在不同的磁盘或者磁盘阵列上,可以改进系统的性能。

    2.确定系统的配置
    数据库管理系统一般都提供了一些存储分配的参数
    同时使用数据库的用户数目
    同时打开的数据库对象数目
    内存分配参数
    缓冲区分配参数(使用的缓冲区的长度,个数)
    存储分配参数
    物理块的大小
    物理块的装填因子
    数据库的大小
    锁的数目等

    系统都为这些变量赋予了合理的缺省值
    在进行物理设计的时候需要根据应用环境去欸的那个这些参数值,以使系统性能最优
    在物理设计的时候对系统配置变量的调整只是初步的,要根据系统实际的运行情况作进一步的调整以切实改进系统的性能

    7.5.4评价物理结构
    对数据库物理设计的过程的多种方案进行评价,从中选择一个比较优秀的方案作为数据库的物理结构
    评价方法:
    定量估算各种方案
    存储空间
    c存取时间
    维护代价
    对于估算结果进行权衡,比较,选择处一个比较优秀的合理的物理结构
    返回用户,征求意见,修改设计

    数据库物理设计的步骤
    在这里插入图片描述
    第十讲数据库的实施与维护
    7.6.1数据的载入和应用程序的调试
    在这里插入图片描述
    数据库的物理设计-》物理模型-》定义数据库的结构-》数据的装载,编制与调试应用程序-》数据库的试运行-》数据库的运行和维护

    一。定义数据库的结构
    用DBMS提供的DDL来创建数据库的结构
    创建基本表
    CREATE TABLE 学生
    (学号 CHAR(8),

    );
    CREATE TABLE 课程
    (…
    );
    在基本表上定义视图
    CREATE VIEW。。。
    CREATE VIEW.。。。
    在基本表上定义索引
    CREATE UNIQUE INDEX

    CREATE INDEX
    RDBMS产生的目标模式,生成数据字典

    二。数据装载
    组织数据入库是数据库实施阶段最主要的工作
    数据装载—ETL
    数据抽取
    数据转换
    数据载入
    使用ETL工具辅助完成
    ETL工作是非常的费力费时的

    三。编制与调试应用程序
    数据库应用程序的设计应该与数据设计并行进行
    在数据库实施阶段,,编制与调试数据库的应用程序。调试应用程序的时候由于数据库入库尚未完成,可以先使用模拟数据。
    7.6.2数据库的试运行
    数据库的试运行
    应用程序调试完成,并且已经有一小部分数据入库之后,就可以开始对数据库系统进行联合的调试
    主要工作包括:
    功能测试:实际运行应用程序,执行对数据库的各种操作,测试应用程序的各种功能
    性能测试:测量系统的性能指标,分析是否符合设计目标。
    数据库性能指标的测量
    数据库的物理设计阶段,评价数据库的结构,估算时间,空间指标,做了许多简化和假设,必然是近似的结果
    数据库的试运行则是要实际测量系统的各种性能指标,如果结果不符合设计目标,则需要返回物理设计阶段,调整物理结构,修改参数,有的时候甚至需要返回逻辑设计阶段,调整逻辑结构

    1.数据的分期入库
    冲洗你设计物理结构甚至逻辑结构,会导致数据重新入库
    由于数据入库的工作量实在试太呆,所以可以采用分期输入数据的方法
    先输入小批量的数据供先期联合调试使用
    等待试运行基本合格之后再输入大批量的数据
    逐步增加数据量,逐步完成运行评价

    2.数据的转储和恢复
    再数据库试运行的阶段,系统还不稳定,硬件,软件故障随时都可能会发生
    系统的操作人员对新的系统还不熟悉,误操作也不可避免,因此必须做好数据库的转储和恢复工作。尽量减少对数据库的破坏

    7.6.3数据库的运行和维护

    在这里插入图片描述
    在数据库运行的阶段,对数据库经常性的维护工作,主要是由数据库管理员完成的,包括:
    1.数据库的转储和恢复
    数据库管理员要针对不同的应用要求指定不同的转储计划,定期对数据库的日志文件进行备份。
    一旦发生介质故障,即利用数据库备份一级日志文件备份,尽快将数据库恢复到某种一致性状态。

    2.数据库的安全性,完整性空值
    初始定义
    数据库管理员根据用户的实际需要授予不同的操作权限
    根据应用环境的定义不同的完整性约束条件
    修改定义
    当应用环境发生变化,对安全性的要求也会发生变化,数据库管理员需要根据实际情况修改原来有的安全性空值
    由于应用环境发生变化,数据库的完整性约束条件也会变化,也需要数据库管理员不断地修正,以满足用户要求。

    3.数据库性能地监督,分析和改进
    在数据库运行过程中,数据库管理员必须监督系统运行,对监督数据进行分析。找出改进系统性能地方法
    利用检测工具获取系统运行过程中一系列地性能参数地值
    通过分析这些数据,判断当前系统是否处于最佳运行地状态
    如果不是,则需要通过调整某些参数来改进数据库性能

    4.数据库的重组织与重构造
    1.数据库的重组织
    为什么要重组织数据库
    数据库运行一段时间后,由于记录的不断增,删,该会让数据库的物理存储变坏,从而降低数据库的存储空间的利用率和数据的存储效率,使得数据库的性能下降。
    数据库的重组织的主要工作
    按照原来设计要求
    重新安排存储位置
    回收垃圾
    减少指针链
    数据库的重组织不会改变原设计的数据逻辑结构和物理结构

    数据库管理系统一般都提供了供重组织始数据使用的实用程序,帮助数据库管理员重新组织数据库。

    2.数据库的重构造
    为什么要进行数据库的重构造
    s数据库应用环境发生变化,会导致实体一级实体间的联系也发生相应的变化,使得原有的数据库设计不能很好的满足新的需求,
    增加新的应用或者新的实体
    取消某些已经有的应用
    改变某些已经有的应用

    数据库重构造的主要工作
     根据新环境调整数据库的模式和内模式
    增加或删除某些数据项
    改变数据项的类型
    增加或删除某个表
    改变数据库的容量
    增加或删除某些索引

    重构造数据库的程度是有限的,
    应用需求变化太大,软件硬件发展太快
    无法通过重构数据库来满足新的需求,或者重构数据库的代价太大,则表明现有的数据库应用系统的生命周期已经结束,应该重新设计新的数据库应用系统。

    7.7小结
    数据库的设计过程
    需求分析
    概念结构设计
    逻辑结构设计
    物理结构设计
    数据库的实施
    数据库的运行和维护
    数据库的设计是一个循环反复的过程

    介绍数据库的设计的方法和步骤,列举了较多的实例,讲解了数据库设计各个阶段的目标,方法和基数,重点是概念结构的设计和逻辑结构的设计
    着重介绍了E-R模型的基本概念和图示方法
    重点中我实体性,属性和联系的概念
    理解实体型之间的一对一,一对多和多对多的联系
    掌握E-R模型的设计
    把E-R模型转换为关系模型的方法

    展开全文
  • 数据库物理设计原则 2010-03-23 08:49:37 分类: Oracle 1.1数据库环境配置原则 1.1.1操作系统环境: 对于中小型数据库系统,采用linux操作系统比较合适,对于数据库冗余要求负载均衡能力要求...
     数据库物理设计原则 2010-03-23 08:49:37

    分类: Oracle

    1.1数据库环境配置原则
    1.1.1操作系统环境:
    对于中小型数据库系统,采用linux操作系统比较合适,对于数据库冗余要求负载均衡能力要求较高的系统,可以采用Oracle9iRAC的集群数据库的方法,集群节点数范围在2—64个。对于大型数据库系统,可以采用SunSolarisSPARC64位小型机系统或HP9000系列小型机系统。RAD5适合只读操作的数据库,RAD1适合OLTP数据库
    1.1.2内存要求
    对于linux操作系统下的数据库,由于在正常情况下Oracle对SGA的管理能力不超过1.7G。所以总的物理内存在4G以下。SGA的大小为物理内存的50%—75%。对于64位的小型系统,Oracle数据库对SGA的管理超过2G的限制,SGA设计在一个合适的范围内:物理内存的50%—70%,当SGA过大的时候会导致内存分页,影响系统性能。
    1.1.3交换区设计
    当物理内存在2G以下的情况下,交换分区swap为物理内存的3倍,当物理内存>2G的情况下,swap大小为物理内存的1—2倍。
    1.1.4其他环境变量参考Oracle相关的安装文档和随机文档。
    1.2数据库设计原则
    1.2.1数据库SID
    数据库SID是唯一标志数据库的符号,命名长度不能超过5个字符。对于单节点数据库,以字符开头的5个长度以内字串作为SID的命名。对于集群数据库,当命名SID后,各节点SID自动命名为SIDnn,其中nn为节点号:1,2,…,64。例如rac1、rac2、rac24。
    1.2.2数据库全局名
    数据库全局名称:
    .domain
    1.2.3数据库类型选择
    对于海量数据库系统,采用datawarehouse的类型。对于小型数据库或OLTP类型的数据库,采用TransactionProcessing类型。
    1.2.4数据库连接类型选择
    Oracle数据库有专用服务器连接类型和多线程服务器MTS连接类型。对于批处理服务,需要专用服务器连接方式,而对于OLTP服务则MTS的世界数据报告连接方式比较合适。由于采用MTS后,可以通过配置网络服务实现某些特定批处理服务采用专用服务器连接方式,所以数据库设计时一般采用MTS类型。
    1.2.5数据库SGA配置
    数据库SGA可以采用手工配置或按物理内存比例配置,在数据库初始设计阶段采用按比例配置方式,在实际应用中按系统调优方式修改SGA。
    1.2.6数据库字符集选择
    为了使数据库能够正确支持多国语言,必须配置合适的数据库字符集,采用UTF8字符集。
    注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,具体过程如下(切记设定的字符集必须是ORACLE支持,不然不能start)
    SQL>shutdownimmediate;
    SQL>startupmount;
    SQL>altersystemenablerestrictedsession;
    SQL>altersystemsetjob_queue_processes=0;
    SQL>数据库程序设计报告alterdatabaseopen;
    SQL>alterdatabasecharactersetinternal_usewe8iso8859p1;
    SQL>shutdownimmediate;
    SQL>startup
    1.2.7数据库其他参数配置
    1.2.7.1DB_FILES
    Db_files是数据库能够同时打开的文件数量,默认值是200个。当数据库规划时文件数量FILES接近或超过200个时候,按以下估计值配置:
    DB_FILES=FILES*1.5
    1.2.7.2Db_block_size
    一个extent要是5个blocks的倍数为好,如:一个blocks是4096字节,那一个extent就是2M、4M或8M为好。Db_block_size是数据库最小物理单元,一旦数据库创建完成,该参数无法修改,db_block_size按以下规则调整:
    数据仓库类型:db_block_size尽可能大,采用8192或16384
    OLTP类型:db_block_size用比较小的取值范围:2048或4096
    Blocks推荐是系统操作的块倍数(裸设备块大小是512字节,NTFS是4K,使用8K的方式在大部分系统上通用)。
    1.2.8数据库控制文件配置
    1.2.8.1控制文件镜象
    多个控制文件存放在不同的物理位置。
    1.2.8.2控制文件配置
    控制文件中参数设置,最大的数据文件数量不能小于数据库参数db_files。
    1.2.9数据库日志文件配置
    1.2.9.1日志文件大小
    日志文件的大小由数据库事务处理量决定,在设计过程中,确保每20分钟切换一个日志文件。所以对于批处理系统,日志文件大小为几百M到几G的大小。对于OLTP系统,日志文件大小为几百M以内。
    1.2.9.2日志文件组数量
    对于批处理系统,日志文系统数据库设计件组为5—10组;对于OLTP系统,日志文件组为3—5组,每组日志大小保持一致;对于集群数据库系统,每节点有各自独立的日志组。
    1.2.9.3日志成员数量
    为了确保日志能够镜象作用,每日志组的成员为2个。
    1.2.10数据库回滚段配置
    在Oracle9i数据库中,设计Undo表空间取代以前版本的回滚段表空间。
    Undo表空间大小的设计规范由以下公式计算:
    Undospace=UR*UPS*db_block_size+冗余量
    UR:表示在undo中保持的最长时间数(秒),由数据库参数UNDO_RETENTION值决定。
    UPS:表示在undo中,每秒产生的数据库块数量。
    例如:在数据库中保留2小时的回退数据,假定每小时产生200个数据库块。则Undospace=2*3600*200*4K=5.8G
    1.2.11数据库临时段表空间配置
    数据库临时段表空间根据实际生产环境情况调整其大小,表空间属性为自动扩展。
    1.2.12数据库系统表空间配置
    系统表空间大小1G左右,除了存放数据库数据字典的数据外,其他数据不得存储在系统表空间。
    1.3数据库表空间设计原则
    1.3.1表空间大小定义原则
    当表空间大小小于操作系统对最大文件限制时,表空间由一个文件组成。如果表空间大小大于操作系统对最大文件限制时,该表空间由多个数据文件组成,表空间的总大小为估算为:
    Tablespace+sum(数据段+索引段)*150%。
    1.3.2表空间扩展性设计原则

    表空间数据文件采用自动扩展的方式,扩展容量快大小按2的整数倍(1M、2M、4M、8M、16M、32M、64M)进行扩展,创建表空间时尽量采用nologing选项。表空间的最大限制一般采用unlimited,除非确切知道表空间数据文件的最大使用范围。(一般windows32位系统的文件最大2G,64位的unix系统系统文件最大128G,但也要注意文件格式设定的文件大小),建议最大为2G。表空间采用local管理方式,例如:
    CREATETABLESPACETBS_USERINFO
    DATAFILE
    '/oradata/tbs_userinfo.dbf'
    SIZE8M
      REUSE
    AUTOEXTENDON
    NEXT2M
    MAXSIZEUNLIMITED
    NOLOGGING
    EXTENTMANAGEMENT
    LOCAL
    AUTOALLOCATE
    SEGMENTSPACEMANAGEMENTAUTO;
    1.4裸设备的使用
    一个scsi设备可以14个分区,unix操作系统256个分区,性能比文件系统方式高15%左右,空间大于要小于(实际分区大小减两个ORACLE的数据块),比如100M,大于为100000K,推荐在unix使用软连接(ln)方式把裸设备形成文件,用加入表空间时加resue选项,当然也可只接把设备加入表空间,移动裸设备使用dd命令
    对于windows平台,oracle提供软连接工具,实现裸设备的使用,计算一条记录的长度
    2数据库逻辑设计原则
    2.1命名规范
    2.1.1表属性规范
    2.1.1.1表名
    前缀为Tbl_。数据表名称必须以有特征含义的单词或缩写组成,中间可以用“_”分割,例如:tbl_pstn_detail。表名称不能用双引号包含。
    2.1.1.2表分区名
    前缀为p。分区名必须有特定含义的单词或字串。
    例如:tbl_pstn_detail的分区p2004100101表示该分区存储2004100101时段的数据。
    2.1.1.3字段名
    字段名称必须用字母开头,采用有特征含义的单词或缩写,不能用双引号包含。
    2.1.1.4主键名
    前缀为PK_。主键名称应是前缀+表名+构成的字段名。如果复合主键的构成字段较多,则只包含第一个字段。表名可以去掉前缀。
    2.1.1.5外键名
    前缀为FK_。外键名称应是前缀+外键表名+主键表名+外键表构成的字段名。表名可以去掉前缀。
    2.1.2索引
    4.1.2.1普通索引
    前缀为IDX_。索引名称应是前缀+表名+构成的字段名。如果复合索引的构成字段较多,则只包含第一个字段,并添加序号。表名可以去掉前缀。
    2.1.2.2主键索引
    前缀为IDX_PK_。索引名称应是前缀+表名+构成的主键字段名,在创建表时候用usingindex指定主键索引属性。
    2.1.2.3唯一所以
    前缀为IDX_UK_。索引名称应是前缀+表名+构成的字段名。
    2.1.2.4外键索引
    前缀为IDX_FK_。索引名称应是前缀+表名+构成的外键字段名。
    2.1.2.5函数索引
    前缀为IDX_func_。索引名称应是前缀+表名+构成的特征表达字符。
    2.1.2.6蔟索引
    前缀为IDX_clu_。索引名称应是前缀+表名+构成的簇字段。
    2.1.3视图
    前缀为V_。按业务操作命名视图。
    2.1.4实体化视图
    前缀为MV_。按业务操作命名实体化视图。
    2.1.5存储过程
    前缀为Proc_。按业务操作命名存储过程
    2.1.6触发器
    前缀为Trig_。触发器名应是前缀+表名+触发器名。
    2.1.7函数
    前缀为Func_。按业务操作命名函数
    2.1.8数据包
    前缀为Pkg_。按业务操作集合命名数据包。
    2.1.9序列
    前缀为Seq_。按业务属性命名。
    2.1.10表空间
    2.1.10.1公用表空间
    前缀为Tbs_。根据存储的特性命名,例如:tbs_parameter。
    2.1.10.2专用表空间
    Tbs_<表名称>_nn。该表空间专门存储指定的某一个表,或某一表的若干个分区的数据
    2.1.11数据文件
    <表空间名>nn.dbf。nn=1,2,3,4,…等。
    2.1.12普通变量
    前缀为Var_。存放字符、数字、日期型变量。
    2.1.13游标变量
    前缀为Cur_。存放游标记录集。
    2.1.14记录型变量
    前缀为Rec_。存放记录型数据。
    2.1.15表类型变量
    前缀为Tab_。存放表类型数据。
    2.1.16数据库链
    前缀为dbl_。表示分布式数据库外部链接关系。
    2.2命名
    2.2.1语言
    命名应该使用英文单词,避免使用拼音,特别不应该使用拼音简写。命名不允许使用中文或者特殊字符。
    英文单词使用用对象本身意义相对或相近的单词。选择最简单或最通用的单词。不能使用毫不相干的单词来命名
    当一个单词不能表达对象含义时,用词组组合,如果组合太长时,采用用简或缩写,缩写要基本能表达原单词的意义。
    当出现对象名重名时,是不同类型对象时,加类型前缀或后缀以示区别。
    2.2.2大小写
    名称一律大写,以方便不同数据库移植,以及避免程序调用问题。
    2.2.3单词分隔
    命名的各单词之间可以使用下划线进行分隔。
    2.2.4保留字
    命名不允许使用SQL保留字。
    2.2.5命名长度
    表名、字段名、视图名长度应限制在20个字符内(含前缀)。
    2.2.6字段名称
    同一个字段名在一个数据库中只能代表一个意思。比如telephone在一个表中代表“电话号码”的意思,在另外一个表中就不能代表“手机号码”的意思。
    不同的表用于相同内容的字段应该采用同样的名称,字段类型定义。
    2.3数据类型
    2.3.1字符型
    固定长度的字串类型采用char,长度不固定的字串类型采用varchar。避免在长度不固定的情况下采用char类型。如果在数据迁移等出现以上情况,则必须使用trim()函数截去字串后的空格。
    2.3.2数字型
    数字型字段尽量采用number类型。
    2.3.3日期和时间
    2.3.3.1系统时间
    由数据库产生的系统时间首选数据库的日期型,如DATE类型。
    2.3.3.2外部时间
    由数据导入或外部应用程序产生的日期时间类型采用varchar类型,数据格式采用:YYYYMMDDHH24MISS。
    2.3.3.3大字段
    如无特别需要,避免使用大字段(blob,clob,long,text,image等)。
    2.3.3.4唯一键
    对于数字型唯一键值,尽可能用系列sequence产生。
    2.4设计
    2.4.1范式
    如无性能上的必须原因,应该使用关系数据库理论,达到较高的范式,避免数据冗余,但是如果在数据量上与性能上无特别要求,考虑到实现的方便性可以有适当的数据冗余,但基本上要达到3NF.如非确实必要,避免一个字段中存储多个标志的做法。如11101表示5个标志的一种取值。这往往是增加复杂度,降低性能的地方。

    2.4.2表设计
    2.4.2.1逻辑段设计原则
    2.4.2.1.1Tablespace
    每个表在创建时候,必须指定所在的表空间,不要采用默认表空间以防止表建立在系统表空间上导致性能问题。对于事务比较繁忙的数据表,必须存放在该表的专用表空间中。
    2.4.2.1.2Pctused
    默认pctused导致数据库物理空间利用率非常低40%左右;对于update比较少或update不导致行增大的表,pctused可设置在60—85之间;对于update能够导致行增大的表,update设置在40—70之间
    2.4.2.1.3Initrans
    对于需要并行查询或者在RAC数据库中需要并行处理的表,initrans设置为2的倍数,否则,不设该值。
    2.4.2.1.4Storage
    2.4.2.1.4.1Initial
    尽量减少表数据段的extents数量,initial的大小尽量接近数据段的大小64K,128K,…,1M,2M,4M,8M,16M,…,等按2的倍数进行圆整。例如表或分区数据段大小为28M,则initial取32M。
    2.4.2.1.4.2Next
    表或分区扩展extents的大小,按上述方法进行圆整。当表或分区数据段无法按Initial接近值进行圆整的情况下,其大小可以按Initial+Next进行圆整。此时,必须设置Minextents=2。例如:表或分区数据段大小为150M,则Initial=128M;Next=32M,Minextents=2。
    2.4.2.1.4.3Minextents
    该参数表示表创建时候Extents的初始数量,一般取1—2。
    2.4.2.1.4.4Pctincrease
    表示每个扩展Extents的增长率,设置pctincrease=0能够获得较好的存储性能。
    2.4.2.2特殊表设计原则
    2.4.2.2.1分区表
    对于数据量比较大的表,根据表数据的属性进行分区,以得到较好的性能。如果表按某些字段进行增长,则采用按字段值范围进行范围分区;如果表按某个字段的几个关键值进行分布,则采用列表分区;对于静态表,则采用hash分区或列表分区;在范围分区中,如果数据按某关键字段均衡分布,则采用子分区的复合分区方法。
    2.4.2.2.2聚蔟表
    如果某几个静态表关系比较密切,则可以采用聚蔟表的方法。
    2.4.2.3完整性设计原则
    2.4.2.3.1主键约束
    关联表的父表要求有主健,主健字段或组合字段必须满足非空属性和唯一性要求。对于数据量比较大的父表,要求指定索引段。
    2.4.2.3.2外键关联
    对于关联两个表的字段,一般应该分别建立主键、外键。实际是否建立外键,根据对数据完整性的要求决定。为了提高性能,对于数据量比较大的标要求对外健建立索引。对于有要求级联删除属性的外键,必须指定ondeletecascade。
    2.4.2.3.3NULL值
    对于字段能否null,应该在sql建表脚本中明确指明,不应使用缺省。由于NULL值在参加任何运算中,结果均为NULL。所以在应用程序中必须利用nvl()函数把可能为NULL值得字段或变量转换为非NULL的默认值。例如:NVL(sale,0)。
    2.4.2.3.4Check条件
    对于字段有检查性约束,要求指定check规则。
    2.4.2.3.5触发器
    触发器是一种特殊的存储过程,通过数据表的DML操作而触发执行,起作用是为确保数据的完整性和一致性不被破坏而创建,实现数据的完整约束。
    触发器的before或after事务属性的选择时候,对表操作的事务属性必须与应用程序事务属性保持一致,以避免死锁发生。在大型导入表中,尽量避免使用触发器。
    2.4.2.4注释
    表、字段等应该有中文名称注释,以及需要说明的内容。
    2.4.3索引设计
    对于查询中需要作为查询条件的字段,可以考虑建立索引。最终根据性能的需要决定是否建立索引。对于复合索引,索引字段顺序比较关键,把查询频率比较高的字段排在索引组合的最前面。在分区表中,尽量采用local分区索引以方便分区维护。
    除非时分区local索引,否则在创建索引段时候必须指定指定索引段的tablespace、storage属性,具体参考4.4.2.1内容。
    2.4.4视图设计
    视图是虚拟的数据库表,在使用时要遵循以下原则:
    从一个或多个库表中查询部分数据项;
    为简化查询,将复杂的检索或字查询通过视图实现;
    提高数据的安全性,只将需要查看的数据信息显示给权限有限的人员;
    视图中如果嵌套使用视图,级数不得超过3级;
    由于视图中只能固定条件或没有条件,所以对于数据量较大或随时间的推移逐渐增多的库表,不宜使用视图;可以采用实体化视图代替。
    除特殊需要,避免类似Select*from而没有检索条件的视图;
    视图中尽量避免出现数据排序的SQL语句。
    2.4.5包设计
    存储过程、函数、外部游标必须在指定的数据包对象PACKAGE中实现。存储过程、函数的建立如同其它语言形式的编程过程,适合采用模块化设计方法;当具体算法改变时,只需要修改需要存储过程即可,不需要修改其它语言的源程序。当和数据库频繁交换数据是通过存储过程可以提高运行速度,由于只有被授权的用户才能执行存储过程,所以存储过程有利于提高系统的安全性。
    存储过程、函数必须检索数据库表记录或数据库其他对象,甚至修改(执行Insert、Delete、Update、Drop、Create等操作)数据库信息。如果某项功能不需要和数据库打交道,则不得通过数据库存储过程或函数的方式实现。在函数中避免采用DML或DDL语句。
    在数据包采用存储过程、函数重载的方法,简化数据包设计,提高代码效率。存储过程、函数必须有相应的出错处理功能。
    2.4.6安全性设计
    4.4.6.1管理默认用户
    在生产环境中,必须严格管理sys和system用户,必须修改其默认密码,禁止用该用户建立数据库应用对象。删除或锁定数据库测试用户scott。
    2.4.6.2数据库级用户权限设计
    必须按照应用需求,设计不同的用户访问权限。包括应用系统管理用户,普通用户等,按照业务需求建立不同的应用角色。
    用户访问另外的用户对象时,应该通过创建同义词对象synonym进行访问。
    2.4.6.3角色与权限
    确定每个角色对数据库表的操作权限,如创建、检索、更新、删除等。每个角色拥有刚好能够完成任务的权限,不多也不少。在应用时再为用户分配角色,则每个用户的权限等于他所兼角色的权限之和。
    2.4.6.4应用级用户设计
    应用级的用户帐号密码不能与数据库相同,防止用户直接操作数据库。用户只能用帐号登陆到应用软件,通过应用软件访问数据库,而没有其它途径操作数据库。
    2.4.6.5用户密码管理
    用户帐号的密码必须进行加密处理,确保在任何地方的查询都不会出现密码的明文。
    2.5SQL编写
    2.5.1字符类型数据
    SQL中的字符类型数据应该统一使用单引号。特别对纯数字的字串,必须用单引号,否则会导致内部转换而引起性能问题或索引失效问题。利用trim(),lower()等函数格式化匹配条件。
    2.5.2复杂sql
    对于非常复杂的sql(特别是有多层嵌套,带子句或相关查询的),应该先考虑是否设计不当引起的。对于一些复杂SQL可以考虑使用程序实现。
    USER_TAB_COMMENTS数据字典
    Commenton可加注解
    2.5.3高效性
    2.5.3.1避免In子句
    使用In或notIn子句时,特别是当子句中有多个值时,且查询数据表数据较多时,速度会明显下降。可以采用连接查询或外连接查询来提高性能。
    Char比varchar查询时高询
    在进行查询及建立索引时,char比varchar的效率要高,当然varchar在存储上比char要好
    2.5.3.2避免嵌套的Select子句
    这个实际上是In子句的特例。
    2.5.3.3避免使用Select*语句
    如果不是必要取出所有数据,不要用*来代替,应给出字段列表,注:不含selectcount(*)。
    2.5.3.4避免不必要的排序
    不必要的数据排序大大的降低系统性能。
    2.5.4健壮性
    2.5.4.1Insert语句
    使用Insert语句一定要给出要插入值的字段列表,这样即使更改了表结构加了字段也不会影响现有系统的运行。
    2.5.4.2Count(*)、Count(*)、count(distinctid)的区别
    Selectcount(*)fromtesttab
    得到表testtab的记录数
    selectcount(id)fromtesttab
    得到表testtabid字段非空记录数
    selectcount(distinctid)fromtesttab
    得到表testtabid字段值非相同记录数
    2.5.4.3Notnull为字段类型性质的约束
    本约束功能在后期无语法使期失效,可使用修改字段类型方式
    altertablemodify字段名类型notnull
    altertablemodify字段名类型

    2.5.4.4外键值可用null的问题
    外键列如没有明确说明notnull,可插入null记录(而null是在外部表的记录中没有的),如无可插null记录的想法,要对外键字段加notnull约束。
    2.5.4.5序列sequence跳号的问题
    sequence因回滚,系统崩溃(使用cache内的值将认为已用),多表引用都将使其跳号,所以不能用于为连续序号utl_row.cast_to_row
    2.5.4.6unicn\intersect\minus使用ordeyby的注意事项
    以上语句进行连表操作,而表同表的字段顺序的类型相同但字段标题名可不同,使用ordeyby时后面如果是字段名,要求所有的表的字段标题名相同,否则用字段的顺序号
    selectid,name,yearfromuser1
    union
    selectno,name,to_number(null)yearfromuser2
    orderby1,name,year
    2.5.5安全性
    2.5.5.1Where条件
    无论在使用Select,还是使用破坏力极大的Update和Delete语句时,一定要检查Where条件判断的完整性,不要在运行时出现数据的重大丢失。如果不确定,最好先用Select语句带上相同条件来果一下结果集,来检验条件是否正确。
    2.5.6完整性
    有依赖关系的表,例如主外键关系表,在删除父表时必须级联删除其子表相应数据,或则按照某种业务规则转移该数据。9I中表中字段缩小及变类型,字段为空或表空,varchar和char长度不变可任意改,字段名和表名可字段可用ALTERTABLEtableSETUNUSED(column)设定为不可用,注意无命令再设为可用
    3备份恢复设计原则
    3.1数据库exp/imp备份恢复
    Oracle数据库的Exp、Imp提供了数据快速的备份和恢复手段,提供了数据库级、用户级和表级的数据备份恢复方式。这种方法一般作为数据库辅助备份手段。
    3.1.1数据库级备份原则
    在数据库的数据量比较小,或数据库初始建立的情况下采用。不适合7*24的在线生产环境数据库备份。
    3.1.2用户级备份原则
    在用户对象表数据容量比较小、或则用户对象初始建立的情况下使用。
    3.1.3表级备份原则
    主要在以下场合采用的备份方式:
    参数表备份
    静态表备份
    分区表的分区备份。
    3.2数据库冷备份原则
    数据库冷备份必须符合以下原则:
    数据库容量比较小。
    数据库允许关闭的情况。
    3.3Rman备份恢复原则
    这种方式适用于7*24环境下的联机热备份情形。
    3.3.1Catalog数据库
    单独建立备份恢复用的数据库实例,尽可能与生产环境的数据库分开,确保catalog与生产数据库的网络连接良好。在9I系统使用良好的备份策略以可,支持完全使用控制文件保存catalog信息,备份策略如下:
    backupspfileformat'/data/backup/%d_SPFILE_%T_%s_%p.bak';
    sql"altersystemarchivelogcurrent";
    backuparchivelogallformat'/data/backup/%d_ARC_%T_%s_%p.bak'deleteallinput;
    backupcurrentcontrolfileformat'/data/backup/%d_CTL_%T_%s_%p.bak';
    在spfile、控制文件、数据库全丢的情况下可通过下面的方式恢复
    RMAN>connecttarget
    connectedtotargetdatabase(notstarted)
    RMAN>svc 连接数据库tartup
    RMAN>restorespfilefrom'/data/backup/COMMDB_SPFILE_20030411_9_1.bak';
    SQL>startup
    ORA-00205:errorinidentifyingcontrolfile,checkalertlogformoreinfo
    RMAN>restorecontrolfilefrom'd:\DB92_CTL_20031113_9_1.BAK';
    Moutdatabase:
    RMAN>recoverdatabase;
    RMAN>alterdatabaseopenresetlogs;
    注意:对数据库设定控制文件保存备份信息为365天,具体语句如下。
    altersystemsetcontrol_file_record_keep_time=365SCOPE=BOTH;
    3.3.2ArchiveLog
    设置ArchiveLog的位置,确保存储介质有足够的空间来保留指定时间内archivelog的总量。建设定期对RMAN进行全备份,删除冗余归档日志文件。
    3.3.3全备份策略
    对于小容量数据库,可以采用全备份策略。对于大容量数据库,必须制定全备份策略方案,备份时对archivelog进行转储,同时冷备份catalog数据库。
    3.3.4增量备份策略
    对于大容量数据库数据报告怎么写,必须制定增量备份、累积备份和全备份的周期,备份时对archivelog进行转储,同时冷备份catalog数据库。
    3.3.5恢复原则
    采用Rman脚本进行数据库恢复。数据库恢复有以下几种:
    3.3.5.1局部恢复
    主要用于恢复表空间、数据文件,一般不影响数据库其他操作。
    3.3.5.2完全恢复
    数据库恢复到故障点,由catalog当前数据库决定。
    3.3.5.3不完全恢复
    恢复到数据库的某一时间点或备份点。
    恢复catalog数据库。
    恢复数据库controlfile。
    恢复到数据库某一时间点。
    重设日志序列。
    3.4备用数据库原则
    数据库系统在以下情况下可以考虑采用备用数据库dataguard原则:
    数据库容量适中。
    数据库严格要求7*24不间断,或间断时间要求控制在最小范围内。
    数据库要求有异地备份冗余。
    3.5一些小数据库应用系统设计经验
    使用oemc的oms时,首选项要求是节点和数据库分别加入系统用户(如:administrator)和数据库DBA用户(system)。节点的系统用户必须有批处理作业登录的权限
    agent不能启动,lisnter修改后都要手动删除oracle\ora9\network\agent中的*.q文件
    oracle\admin\my9i\bdump中是用户的出错日志
    改变表的空间的方式altertablehr.ssssmoveTABLESPACEexample(要重建索引);或用imp导入时,设定导入用户只有某一表空间的使用权,无RESOURCE角色和UNLIMITEDTABLESPACE权限
    aletersystemsetlog_checkpoint_to_alter=true,后可报警文件发现checkpoint的起动和结束时间。
    3.6系统调优知识
    3.6.1.1生成状态报表(statspack的使用)
    使用(存放位置@\rdbms\admin\)的文件生成报表用户
    @\rdbms\admin\Spcreate.sql建表
    将timed_statistics设定true
    使用生成的perfstat用户登录,执行以下语句手动收集信息
    Exexstatspack.snap
    Execstatspack.snap(I_SNAP_LEVEL=>0,I_MODEFY_PRAMETER=>TRUE)0级,最少10最大
    使用下面的语句生成状态报表
    @\rdbms\admin\Spreport.sql
    其他相关文件
    deletestats$snapshot;清原来记录数据
    @\rdbms\admin\Saputo.sql
    selectjobfromuser_jobs取用户作业号
    execdbms_remove(作业号)
    timed_statistics=true要求
    @\rdbms\admin\spdaccess数据库使用教程rop.sql;
    3.6.1.2sql追踪
    设定全部用户跟踪
    altersystemsetsql_trace=true;
    用户级别跟踪
    altersessionsetsql_trace=true;
    用户的跟踪文件生成在admin\{pid}\udump\{pid}_ora_{SPID}.trc中,spid从下面语句得到
    SELECTb.namebkpr,s.username,p.spid,s.sid,s.serial#FROMv$bgprocessb,v$sessions,v$processpWHEREp.addr=b.paddr(+)ANDp.addr=s.paddrands.username=user;
    DBA对特定用户跟踪
    execdbms_system_set_Sql_trace_in_session(sid,serial#,true)
    信息从下面得到
    SELECTb.namebkpr,s.username,p.spid,s.sid,s.serial#,osuser,s.program
    FROMv$bgprocessb,v$sessions,v$processp
    WHEREp.addr=b.paddr(+)
    ANDp.addr=s.paddr;
    /*p.spid用于sql_trace时日志编号,dbms_system.set_sql_trace_in_session(sid,erial#,true)*/
    用户的跟踪文件生成在admin\{pid}\udump中
    系统的跟踪文件生成在admin\{pid}\bdump\alert_{pid}.log
    tkprof.exe将log文件生成格式化文本
    在avRd(ms)20以上说明表空间使用过用频繁,考虑将表分开其他表空间上
    系统变量fast_start_mttr_target的值要大到不产生log等待,当然也可通过加log组使其不等待
    reaolog大小应为每30分钟切换一次
    建议表空间的利用率不超80%
    bufferhit要达80%以上为好
    3.6.1.3内存调整
    一般的内存分配原则
    SGA50%(其中80%DATABUFFER,15%SHAREPOOL,5其他)
    PGA30%
    OS20%
    例如:2G的WINDOWS的平台,OS300M,SAG1.2G,PGA500M
    内存分配的基本单位
    SGA《=128M 4M
    SGA》128M  64位系统16M,32M系统8M
    动态分配时总值不可大于sga_max_size
    通过V$SGA_DYNAMIC_FREE_MEMORY取空闲内存空间
    在缩小时如果内存空间实际在应用中,CPU利用率将达100%,最后将语句出错。
    V$SGASTAT 可看实际的使用情况
    Redologbuffer一般在5M内,可通过v$sessuon_wait看是否等,v$sysstat
    可也通过报警文件看是否等切换,方法可加组。可通过nologging(数据库也要设定支持nologging)方法减少日志文件产生量。
    java_pool没有设定时,使用shared_pool_size
    3.6.1.3.1shared_pool
    本缓冲区用于sql语句,plsql等的对象保存
    Cursor_sharing{Exact|Similar|force}游标共享设定
    Force方式适用OLTP数据库,Exact方式适合数据仓库,similar为智能方式
    hardparses硬SQL语句分析,每秒要底于100次,小要加大shared_pool
    softparse软SQL语句分析,OLTP要达90%以上,小要加大shared_pool
    不建议用无命名PLSQL段
    如果有大PLSQL(存储过程)对象可强制保存于内存,也可加大SHARED_POOL_RESERVED_SIZE,大小不可过SHARED_POOL_SIZE的50%,不然实例不能起动
    3.6.1.3.2db_cache
    本缓冲区用于数据库数据对象保存
    db_cache_advice为on,可以提出通过企业管理器看到系统建议
    通过select*fromv$system_event进行系统查看。
    发现存在freebufferwaits,说明不能将databuffer及时写入datafile;
    可通过增加加CPU后,加db_writer_processes=CPU数改善。
    也可设disk_asynch_io为true,使用异步IO(前提同要操作系统支持)db_writer_processes=1时(只有一个CPU的情况下),也可通加大dbwr_io_slaves来改善。db_writer_processes>1,不可用本功能
    调整效果排序:异步IO>CPU>dbwr_io_slaves
    BufferBusyWaits大说明出现IO冲突
    BufferBusyWaits大和dbbock大说明全表扫描多,说明数据不能读入,可加大
    db_cache_size来改善.
    Undo block大要加大回滚段(手动管理方式,9I默认是自动管理)
    undoheader大要加大回滚段(手动管理方式,9I默认是自动管理)
    db_cache命中率99%,不是唯一因素,关系是不要出现等待。建议达90%以上。
    内存使用建议:
    系统可以设三个缓冲区,建表时可设定用那个缓冲区(默认在db_cache_size)
    db_cache_size   (默认区)
    db_keep_cache_size(常访问,小于db_keep_cache_size的10%的表可放于本区)
    db_recycle_cache_size(一个事物完成后常时间不再使用,或两倍大小于缓冲区)
    3.6.2排序的优化
    9I为专用服务器时系统变量workarea_size_policy设定为auto,statistics_level设定为TYPICAL可获取v$pga_target_advice中的优化建议。参数pga_aggregate_target值为所有连接用户可用排序内存。
    9I为共享服务器时workarea_size_policy设定为menaul,sort_area_size值为每用户排序内存。
    如果内存不足将使用TEMP表空间进行排序,排序使用比率disk/meme应小于5%
    尽量少用排序,如果使用排序功能,尽量在字段上加索引进行优化。
    SQL分析模式:RBO(基于规则)方案小表(驱动表)放在最后,优先使用索引,对SQL语句要求严格(8I以前的模式);CBO(基于开销)根据统计值进行选择开销最少,性能最优的最佳方式进行,但本方式DBA(使用analyzetable语句)要定期进行分析统计.系统设定通过optimizer_mode系统参数
    说明:指定优化程序的行为。如果设置为RULE,就会使用基于规则的优化程序,除非查询含有提示。如果设置为CHOOSE,就会使用基于成本的优化程序,除非语句中的表不包含统计信息。ALL_ROWS或FIRST_ROWS
    始终使用基于成本的优化程序。
    值范围:RULE|CHOOSE|FIRST_ROWS|ALL_ROWS
    默认值:CHOOSE
    {rule(RBO)|choose(自动选择)|fist_rows|fist_rows_n|all_row}
    3.6.3统计信息
    进行某表的统计分析
    EXECUTEdbms_stats.gather_table_stats('HR','EMPLOYEES');
    查看结果
    SELECTnum_rows,blocks,empty_blocksasempty,
    avg_space,chain_cnt,avg_row_len
    FROMdba_tables
    WHEREowner='HR'
    ANDtable_name='EMPLOYEES';
    4设计工具
    统一使用sybasepowerdesigner设计工具,在该工具上完成物理模型的设计。所有的数据库对象尽可能在物理模型上进行设计,而且每个物理模型都要有相应的文字描述。
    所有的数据库对象变更以数据库物理模型为基准。为了避免字符敏感问题,产生的脚本以大写字母为标准。
    展开全文
  • 数据库设计是应用程序设计的一个很...分别是样本收集、逻辑设计、数据设计、物理设计数据库测试和运行、数据库维护和升级。 数据库有三种模式,外模式(子模式、用户模式)、模式、内模式(物理模式、存储模式)...
  • 数据库物理设计,word文档中的需要的表格,逆向生成 SELECT COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHARACTER_MAXIMUM_LENGTH 长度, IS_NULLABLE 是否为空, COLUMN_DEFAULT 默认值, COLUMN...
  • 所有数据库对象名称必须使用小写字母,可选用下划线分割,由于MySQL对大小写敏感; 所有数据库对象名称禁止使用MySQL保留关键字; 尽量做到见名知意; 临时库表必须以tmp为前缀,以日期为后缀; 用于备份的库和表,...
  • 1.1数据库环境配置原则1.1.1操作系统环境:对于中小型数据库系统,采用linux操作系统比较合适,对于数据库冗余要求负载均衡能力要求较高的系统,可以采用Oracle9iRAC的集群数据库的方法,集群节点数范围在2—64个。...
  • 数据库物理设计经验谈(转)[@more@]概述我们无论使用哪种数据库,无论怎样设计数据库,我想都会遵从一个原则:数据安全性和性能高效这两个主要方面,但是关于这两个方面的话题太多,在这里就不一一陈述,我只是从...
  • 我们学习数据库开发也就是SQL语句,大的障碍就是使用陌生的数据库来学习,因为你不知道数据库的表与表之间的关系,所以感觉SQL语句尤其是多表查询,关联修改和删除,那些匹配条件,你不知如何写。...
  • 概述我们无论使用哪种数据库,无论怎样设计数据库,我想都会遵从一个原则:数据安全性和性能高效这两个主要方面,但是关于这两个方面的话题太多,在这里就不一 一陈述,我只是从数据库物理分布设计方面和大家一起...
  • 数据库结构优化目的: 减少数据冗余 尽量避免数据维护中出现更新,插入和删除异常 插入异常:如果表中的某个...数据库结构优化设计步骤: 需求分析:全面了解产品设计的存储需求、存储需求、数据处理需求、数...
  • 设置和管理表空间数据库文件之间的I/O竞争是数据库之大忌, 所以对数据库规划之前要先对数据文件的I/O进行初步的评估, 通常情况下, 应用的产品数据库表所在的表空间会很活跃, 索引表空间和数据字典之类的表空间也很...
  • [收藏]数据库物理设计原则

    千次阅读 2005-10-25 14:35:00
    1.1 数据库环境配置原则1.1.1 操作系统环境:对于中小型数据库系统,采用linux操作系统比较合适,对于数据库冗余要求负载均衡能力要求较高的系统,可以采用Oracle9i RAC的集群数据库的方法,集群节点数范围在2—64个...
  • MySQL数据库物理设计涉及的内容1、定义数据库、表及字段命名规范命名要遵守可读性原则。比如使用下划线来分割不同的单词等遵守表意性原则。一看表名或字段名就知道是干什么的长名原则。尽量少使用缩写,但命名也不能...
  • 数据库 - 物理设计

    万次阅读 2015-05-08 10:39:29
    为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构的过程,就是数据库的物理设计数据库物理设计的步骤 确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构 对物理结构进行评价,评价的重点是...
  • 数据库物理结构设计

    2021-03-31 16:52:46
    数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于选定的数据库管理系统 为一个给定的逻辑数据模型选取一个最合适的应用要求的物理结构的过程,就是数据库物理设计数据库物理设计通常...
  • 比如说MySQL数据库设计不规范,创建时间字段设计成cjsj,创建者字段设计成cjr或者cjz。这样的数据库表可读性和表意性相当差。下面我们就来讲讲如何规范设计数据库结构。数据库结构优化数据库结构优化的目的有哪些...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,761
精华内容 1,904
关键字:

数据库物理设计