Quanle's profile一个人走过,收获脚印一箩筐PhotosBlogLists Tools Help

Blog


    January 13

    人生就像做假账

      外表就要像给审计局看的账本一样,该表现得就表现出来,不该表现得就要隐藏起来。这样才能让每个人都高兴。
      内心就要像自己看的账本一样,一定要清清楚楚。谁对你好,谁对你怀,都要铭记在心。只有这笔帐,能让你清楚你该如何去做,如何去做账。
    January 07

    嵌入式系统总结(4)

    第五章 嵌入式操作系统的移植与扩展

    ²       mCOS-II的移植

    操作系统的移植,是指使一个实时操作系统能够在某个微处理器平台上运行。COS-II的主要代码都是由标准的C语言写成的,移植方便。

     

     

    ²       移植mCOS-II满足的条件

    处理器的C编译器能产生可重入代码

    在程序中可以打开或者关闭中断

    处理器支持中断,并且能产生定时中断(通常在10100Hz之间)

    处理器支持能够容纳一定量数据的硬件堆栈

    处理器有将堆栈指针和其他CPU寄存器存储和读出到堆栈(或者内存)的指令

    ²       移植mC/OS-II所需工作

    includes.h中设置与处理器和编译器相关的代码

    C语言编写六个操作系统相关的函数(OS_CPU_C.C

    用汇编语言编写四个与处理器相关的函数(OS_CPU.ASM

     

    第六章 嵌入式应用程序设计

    ²       绘图的API函数应用

    关于绘图的说明

    1.绘图必须通过绘图设备上下文(DC)实现,DC中包含了与绘图相关的信息,在多任务操作系统中,不同的任务通过不同的绘图设备上下文绘图才不会相互影响。

    2.使用绘图设备上下文(DC)和各种绘图API函数,就可以绘制出所要的图形。

    3.在操作系统中,LCD显示的刷新是通过 LCD_FRESH_task 任务完成的,绘图首先在绘图区完成,然后,系统自动向LCD_FRESH_task发送更新消息。绘制一次图形完成后,必须使用OSTIMEDLY()给出一定的时间延时,主任务出让对CPU的控制权,使LCD刷新任务可以执行。总之:绘图首先在后台进行,绘制完成后,再更新到LCD上。

    PDC简介

    PDC——图形设备上下文

    PDC结构定义

    PDC在绘图设备上下文(PDC)中保存了每一个绘图对象的相关参数(如绘图画笔的宽度、画笔的颜色、绘图的原点坐标等)

    通过绘图设备上下文(PDC)来绘图,可以保证在不同的任务绘图的参数是相互独立的,不会互相影响。

    PDC的使用

    1.定义PDC PDC pdc;

    2.创建图形设备上下文

     pdc=CreateDC();//设置绘图参数的默认初始值

    3.具体图形操作:绘图、显示文字、图片等

    4.删除图形设备上下文,释放资源: DestoryDC(pdc);

    绘图API函数

    1. 绘制图形

    2.设置绘图参数,辅助绘图

    3.显示文本

    4.显示图片

    常用的绘图API函数

    MoveTo:将绘图点移动到指定的坐标

    LineTo:屏幕上画线,从当前画笔的位置画直线到指定的坐标位置,并使画笔停留在当前指定的位置

    DrawRectFrame:在屏幕上绘制指定大小的矩形方框

    FillRect:在屏幕上填充指定大小的矩形

    ClearScreen;清除整个屏幕的绘图缓冲区

    Circle:绘制指定圆心和半径的圆

    Draw3DRect:绘制指定大小和风格的3D边框的矩形

    绘图参数设定和绘图方法见..\资料\API函数.pdf

    图形方式下文本的显示

    文本显示函数TextOut ()

    定义:void TextOut (PDC pdc, int x, int y, U16 * ch, U8 bunicode, U8 fnt)

    参数说明:
           pdc
    :指向绘图设备上下文(DC)的指针
           x,y
    :所输出文字左上角的屏幕坐标
           ch
    :指向输出文字字符串的指针

        bunicode:是否为Unicode编码,如果是TRUE,表示ch指向的字符串为Unicode字符集;如果为FALSE,表示表示ch指向的字符串为GB字符集。(本实验中,仅提供了Unicode字库)

         fnt:指定字体的大小型号,可以是表font-1数值中的一种或表font-2的数值

    实例   

    PDC pdc;

    int x=0,y=0;//所输出文字左上角的坐标

    u16 SwitName[]={0x7a7a,0x6ee4,0x5668,0}; //Unicode编码

    pdc=CreateDC();       //创建图形设备上下文

    TextOut( pdc, x, y, SwitName, TRUE,  FONTSIZE_MIDDLE);

    DestoryDC(pdc);

    图片显示函数ShowBmp ()

    定义:void ShowBmp (PDC pdc, char filename[], int x, int y);

    参数说明:
           pdc
    :指向绘图设备上下文(DC)的指针
           x,y
    :所输出文字左上角的屏幕坐标
           filename
    :显示的位图文件名

    实例

    PDC pdc;                    //定义PDC

    char cAd_Pic[12]={'1','2','8','_','3','2',' ',' ','B','M','P',0}; //图片名称

    pdc=CreateDC();              //创建图形设备上下文

    FillRect( pdc, 0,0,319,32, GRAPH_MODE_NORMAL, COLOR_WHITE);        //清除绘图区

    ShowBmp( pdc, cAd_Pic,0,0);        //绘图

    DestoryDC(pdc);

    图片的显示的注意事项:

    1、要先将待显示图片下载至嵌入式开发板中;

    2、图片名长度为12个字符(含 bmp 后缀,不足以空格补),名称一律用大写字母;

    3、图片保存格式为24bmp格式。

    嵌入式系统总结(3)

    第三章 嵌入式实时操作系统分析

    1mC/OS-Ⅱ简介

    µC/OS-II实时内核提供的系统服务

    任务管理

    时间管理

    内存管理

    任务间的通信与同步(信号量 带互斥机制的信号量 事件标志

    消息邮箱 消息队列)

    2mC/OS-Ⅱ内核结构

    ²       典型的任务 一个无限循环

    C/OS 目前版本支持64个任务,每个任务一个特定的优先级。优先级越高,数字越小。

    系统保留优先级为0123OS_LOWEST_PRIO-3 OS_LOWEST_PRIO-2 OS_LOWEST_PRIO-1 OS_LOWEST_PRIO-0

    ²       任务的状态转换

    从休眠到就绪:任务一旦建立,即进入就绪态,准备运行;

    从就绪到运行:任务切换时,处于就绪态的优先级最高的任务获得CPU的控制权,开始运行;

    从就绪回到休眠:任务被删除;

    从运行回到就绪:被优先级更高的任务抢占了CPU的控制权;

    从运行进入等待:延时一段时间或者等待某一事件的发生;

    从等待到就绪:延时的时间过去或者等待的事件发生;

    从等待到休眠:任务被删除;

    中断服务:中断发生时,正在运行的任务被中断,ISR获得CPU的控制权,期间可能会报告某些事件的发生,使某些任务进入就绪态,ISR返回之前,判断识别处于就绪态的优先级最高的任务,并运行处之。

    如果所有任务都处于等待状态,则执行空闲任务(idle task)

    ²       任务控制块(TCB

    ²       µC/OS-II任务控制块

    ²       任务控制块的成员变量

    ²       任务控制块列表

    ²       任务就绪表

    ²       ……

    3mC/OS-Ⅱ任务管理

     

    ²       建立任务

    必须先建立任务,然后才能接受uC/OS-II的管理

    某一个任务可以在多任务调度开始之前建立,也可以在其他任务的执行过程中建立;在多任务调度开始之前必须建立至少一个任务;任务不能在中断服务程序中建立。

    调用以下两个函数之一,并把任务的地址和其他参数传递给函数,即可建立任务:   OS TaskCreate()     OSTaskCreateExt ()

    ²       其它相关函数

    堆栈检验,OSTaskStkChk()

    删除任务,OSTaskDel()

    请求删除任务,OSTaskDelReq()

    改变任务的优先级,OSTaskChangePrio()

    挂起任务,OSTaskSuspend()

    恢复任务,OSTaskResume()

    4mC/OS-Ⅱ时间管理

    五个可以处理时间问题的功能函数:

    OSTimeDLY()

    OSTimeDLYHMSM()

    OSTimeDlyResmue()

    OStimeGet()

    OSTimeSet()

    OSTimeDly( )

    可以被任务调用从而把任务延时一段特定的时间:由时钟节拍数确定。

    调用该函数会使系统进行一次任务调度,从而去执行下一个优先级更高的就绪态任务。

    延时的任务再次进入就绪态的条件:

       1)在规定的时间期满;   2)其他任务调用OSTimeDlyResume()取消了延时

    5mC/OS-Ⅱ任务通信与同步

     

    嵌入式系统总结(2)

    第二章 基础知识与设计方法

    2嵌入式系统软件基础

    ²       操作系统的类型

    1)顺序执行系统:系统内只含有一个程序,独占CPU的运行时间,按语句顺序执行该程序,直至执行完毕,另一程序才能启动运行。如DOS操作系统。

    2)分时操作系统:系统内同时可以有多个程序运行,把CPU的时间分按顺序分成若干片,每个时间片内执行不同的程序。如UNIX操作系统。

    3)实时操作系统:系统内有多个程序运行,每个程序有不同的优先级,只有最高优先级的任务才能占有CPU的控制权。

    ²       系统的实时能力

    实时系统的定义:系统执行的正确性不仅取决于计算的逻辑结果,还取决于结果产生的时间。

    特点:通过任务调度,使得对于重要事件在规定的时间内做出正确的响应。

    硬实时系统:必须对事件做出及时的反应,绝对不能错过事件处理的时限。

    软实时系统:如果在系统负荷比较严重的时候,允许发生错过时限的情况,而不会造成太大的危害。

    ²       代码的临界区

    代码的临界区也称为临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则必须完整的执行到代码段结束,而不允许任何中断打入;

    在进入临界区之前要关中断,而临界区代码执行完以后要立即开中断;

    临界区代码举例:1)任务切换代码;2)地址、指令、数据等寄存器堆栈保护。

    ²       多任务

    多任务的运行机制:CPU在多个任务之间进行转换和调度;

    优点:使CPU的应用率达到最高,并使应用程序模块化,应用程序更容易设计和维护;

    每个任务,都是一个无限循环,有休眠、就绪、运行、挂起、被中断几种不同的状态。

    ²       任务的几种状态

    休眠态:任务驻留在内存中,但并不为多任务内核所调度。

    就绪态:准备好,可以运行,但由于优先级比正在运行的任务底,还暂时不能运行。

    运行态;掌握了CPU的使用权,正在运行中。

    挂起态:任务在等待某一事件的发生。

    被中断:发生中断时,CPU提供中断服务,原来正在运行的任务暂时不能运行。

    ²       系统内核(Kernel)与调度(Scheduler)

    多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通信。

    内核提供的基本服务是任务切换。内核本身也增加了应用程序的额外负荷,代码空间增加ROM用量,内核本身的数据结构增加了RAM的用量。内核本身对CPU的占用时间一般在25个百分点之间。

    调度(Scheduler)是内核的主要职责之一,就是要决定该轮到哪个任务运行了。多数实时内核是基于优先级调度法的。每个任务根据其重要程度的不同被赋予一定的优先级。基于优先级的调度法指,CPU总是让“处在就绪态的优先级最高的任务先运行”。

    ²       非占先式

    非占先式(non-preemptive)调度法:也称作合作型多任务,各个任务彼此合作共享一个CPU

    非占先式调度法允许每个任务运行,直到该任务自愿放弃CPU的使用权,中断服务可以打断运行着的任务,使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后,CPU的控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。

    ²       非占先式调度法的特点

    非占先式内核的一个特点是几乎不需要使用信号量保护共享数据。运行着的任务占有CPU,而不必担心被别的任务抢占。

    非占先式内核的最大缺陷在于其响应高优先级的任务慢,任务已经进入就绪态,但还不能运行,也许要等很长时间,直到当前运行着的任务释放CPU。内核的任务级响应时间是不确定的,不知道什么时候最高优先级的任务才能拿到CPU的控制权,完全取决于应用程序什么时候释放CPU

    ²       占先式(preemptive

    当系统响应时间很重要时,要使用占先式(preemptive)内核。最高优先级的任务一旦就绪,总能得到CPU的控制权。

    当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。

    ²       占先式调度的特点

    优点:任务级响应时间得以优化。最高优先级的任务何时可以执行,何时可以得到CPU的使用权是可知的。

    注意:使用占先式内核时,应用程序不应直接使用不可重入型函数。如果调入可重入型函数时,低优先级的任务CPU的使用权被高优先级任务剥夺,不可重入型函数中的数据有可能被破坏

    ²       可重入型函数

    可以被一个以上的任务调用,而不必担心数据的破坏。可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函数或者只使用局部变量,即变量保存在CPU寄存器中或堆栈中;若使用全局变量,则要对全局变量予以保护。

    一个不可重入型函数的例子        一个可重入型函数的例子

    int Temp;                         Void swap (int *x,int*y)

    Void swap (int *x,int*y)            {

    {                                     int Temp;

    Temp=*x;                       Temp=*x;

    *X=*Y;                         *X=*Y;

    *y=Temp;                       *y=Temp;

    }                               }

     

    ²       信号量(Semaphore)

    信号量实际上是一种约定机制,在多任务内核中普遍使用.信号量用于:

    控制共享资源的使用权(满足互斥条件);标志某事件的发生;使两个任务的行为同步。

    信号与信号量在英文中都叫做Semaphore,并不加以区分,而说它有两种类型,二进制型(binary)和计数器型(counting)

    ²       任务间通信(Intertask Communication)

    定义:任务之间或者中断服务和任务间的信息传递。

    任务间通信的途径:

     1)全程变量或共享内存; 2)邮箱或消息队列

    ²       任务优先级

    优先级和任务的重要性关联,由用户决定。

    静态优先级

    应用程序执行过程中诸任务优先级不变,则称之为静态优先级。在静态优先级系统中,诸任务以及它们的时间约束在程序编译时是已知的。

    动态优先级

        应用程序执行过程中,任务的优先级是可变的,则称之为动态优先级。使用动态优先级的目的:实时内核应当避免出现优先级反转问题。

    ²       优先级反转的问题及解决

    如果一个低优先级的线程正在使用高优先级线程等待使用的资源,操作系统临时提升低优先级线程的优先级,直到它释放高优先级线程请求的资源。

    3.嵌入式系统设计方法

    指令集模拟器

       一种利用PC机端的仿真开发软件模拟调试的方法。

    驻留监控软件

       驻留监控程序运行在目标板上,PC机端调试软件可通过并口、串口、网口与之交互,以完成程序执行、存储器及寄存器读写、断点设置等任务

    JTAG仿真器

       通过ARM芯片的JTAG边界扫描口与ARM核进行通信,不占用目标板的资源,是目前使用最广泛的调试手段

    在线仿真器

       使用仿真头代替目标板上的CPU,可以完全仿真ARM芯片的行为。但结构较复杂,价格昂贵,通常用于ARM硬件开发中

     

     

    5.嵌入式BSP的基本概念

    ²       BSP的概念和特点

    BSP(板级支持包)是介于底层硬件和操作系统之间的软件层次,它完成系统上电后最初的硬件和软件初始化,并对底层硬件进行封装,使得操作系统不再面对具体的操作。

    BSP的特点:

    硬件相关性:因嵌入式实时系统的硬件环境具有应用相关性,所以,作为高层软件与硬件之间的接口,BSP必须为操作系统提供操作和控制具体硬件的方法。

    操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。

    ²       BSP的功能

    1)嵌入式系统初始化

             A、片级初始化

             B、板级初始化

             C、系统级初始化

    2)硬件相关的设备驱动程序

    ²       嵌入式系统始化

    1)片级初始化:主要完成微处理器的初始化, 包括设置微处理器的核心寄存器和控制寄存器,微处理器核心工作模式以及其局部总线模式等。片级初始化把微处理器从上电时的缺省状态逐步设置成为系统所要求的工作状态。这是一个纯硬件的初始化过程

    2)板级初始化:完成微处理器以外的其他硬件设备的初始化。除此之外,还要设置某些软件的数据结构和参数,为随后的系统级初始化和应用程序的运行建立硬件和软件环境。这是一个同时包含软硬件两部分在内的初始化过程。

    3)系统级初始化:这是一个以软件初始化为主的过程, 主要进行操作系统初始化。BSP将控制转交给操作系统, 由操作系统进行余下的初始化操作。包括加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,比如网络系统、文件系统等;最后,操作系统创建应用程序环境并将控制转交给应用程序的入口。

    ²       完成硬件相关的设备驱动

    BSP另一个主要功能是硬件相关的设备驱动。与初始化过程相反,硬件相关的设备驱动程序的初始化和使用通常是一个从高层到底层的过程。尽管BSP 中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP 把它们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。

    嵌入式系统总结(1)

    第一章

    1.为什么要学习嵌入式技术?

    ²       市场需求:手持设备、信息家电、游戏娱乐、交通运输、工业控制、航空航天、军事应用,……,嵌入式产品无处不在。

    ²       技术发展趋势要求:随着计算机软件和集成电路技术的发展,嵌入式技术的发展日新月异,基于嵌入式技术的新产品层出不求,并被广泛应用于传统生产设备的升级改造。

    ²       企业人才需求:嵌入式软件已经成为行业应用软件、软件外包之外又一个有前途的发展方向,越来越多的高新技术公司开始涉足这一领域,需要大量开发人才。

    2.嵌入式系统的定义、特点及架构:

    ²       一般定义

    “以应用为中心,以计算机技术为基础,软件、硬件可裁剪,功能、可靠性、成本、体积、功耗严格要求专用计算机系统。”(注:这是一个被广泛引用的定义,强调了嵌入式计算机系统的三个特点:专用性、可裁减、高性能。)

    ²       一个描述性的定义

    嵌入式系统是不同于常见计算机系统的一种计算机系统,它不以独立设备的物理形态出现,嵌入式系统的部件根据主体设备及其应用的需要,嵌入在主体设备内部,发挥着运算、处理、存储及控制的作用。从体系结构来看,嵌入式系统主要由嵌入式处理器、支撑硬件和嵌入式软件组成。(注:该定义从存在的物理形态方面对嵌入式系统和通用计算机系统作了比较,指出了嵌入式系统和主体设备的关系。)

    ²       嵌入式系统的几个重要特征

    1)操作系统内核小

    (2)专用性强

    (3)系统精简

    (4)高实时性OS

    5)嵌入式软件开发走向标准化

    6)嵌入式系统需要开发工具和环境

     

     

     

     

     

    ²       嵌入式系统的架构

    应用程序                                软件

                   操作系统                 结构

    ————————————————————————

                   存储器                       硬件

      输入——〉   处理器——〉输出               结构

    ²       嵌入式微处理器分类

    ²       常见的嵌入式操作系统

    实时嵌入式操作系统的种类繁多,大体上可分为两种,商用型和免费型。

    商用型的实时操作系统如VxWorksWinCE,功能稳定、可靠,有完善的技术支持和售后服务,但往往价格昂贵。

    免费型的实时操作系统在价格方面具有优势,目前主要有Linux和μC/OS,稳定性与服务性存在挑战。

    每种嵌入式操作系统都有自己适用的领域。

    3.嵌入式系统与PC、单片机的区别

    嵌入式系统一般是专用系统,而PC是通用计算平台

    嵌入式系统的资源比PC少得多

    嵌入式系统软件故障带来的后果比PC机大得多

    嵌入式系统一般采用实时操作系统

    嵌入式系统大都有成本、功耗的要求

    嵌入式系统得到多种微处理体系的支持

    嵌入式系统需要专用的开发工具

    4嵌入式系统的应用领域

    电子通讯——信息家电——网络安全、设备——工业自动化——精密仪器

    5嵌入式系统的发展趋势

    软件设计比重日益突出;组件设计技术;SOC;硬件软件化

    (嵌入式片上系统(SOC)SoC 就是System on Chip

     

    January 04

    Oracle期末考试重点总结(3)

     

    一.           数据库应用系统的开发

    (一)   数据库的连接

    1.哪些地方会出现数据库连接(图)

    2.连接的方式(连接软件层次结构图)

    软件方面书库连接有哪几种途径。

    3.四种JDBC Driver的使用场合

    Thin driver, a 100% Java driver for client-side use without an Oracle installation,particularly with applets

    OCI drivers (OCI8 and OCI7) for client-side use with an Oracle client installation

    Server-side Thin driver, which is functionally the same as the client-side Thin driver, but is for code that runs inside an Oracle server and needs to access a remote server, including middle-tier scenarios

    Server-side internal driver for code that runs inside the target server (that is, inside the Oracle server that it must access)

     

    (二)数据库应用系统开发

    1. 性能相关的四个层次

    ²       业务逻辑层:用户需求-业务规则总结-业务规则调整-强制用户适应

    ²       总体设计层:用户需求-数据库设计+功能设计(软件架构、模块规划、数据流)

    ²       详细设计层:前台和后台(各个层次、过程与触发器)功能分配与编码(流程与语言)

    ²       性能微调层:操作系统和数据库系统调整(内存分配、I/O调整、竞争调整、其它调整)

    2. 如何提高系统的适应性和鲁棒性。

    代码变更:内码与明码(编码可变)(Oracle/Sequence; SQL Server/Identity

    客户组态:参数表与控制表,数据类型(BITBOOLEANCHAR

    业务重组:功能划分,功能组合,用户组合

    用户变动:授权管理,集中管理(LDAPSingle Sign-On

    部门重组:避免按机构设置来规划应用系统模块与功能!

    环境变化:字符集(CHARSETSORTORDER),平台变化(软硬件环境)

     

    二.           性能优化

    (一)   概述

    1性能优化的步骤

    􀁺 业务逻辑层(业务规则的严密性和简洁性)

    􀁺 系统设计层(总体和详细设计结构合理性、关系严密性和流程简洁性)

    􀁺 代码设计层(表示层、业务逻辑层、数据库层代码逻辑严密性、代码可读性)

    􀁺 数据库实现与调整层(根据服务器的软硬件资源合理设置数据库环境、分布数据的存储、配置服务进程、索引、缓存和内存等)

    2.如何进行性能诊断。

    a)      哪些地方会出现致命问题

    b)      定位问题的信息来源

    c)      利用辅助定位工具

    (二)优化器

    1. SQL语句的一般处理过程

    解析:语法分析,语义分析。

    优化:基于规则的优化(RBO),基于代价的优化(CBO)。

    行源生成器:从优化器获取输出,并将其格式转化为实际的可行方案。

    执行:执行器从行源生成器获得输出,并使用它生成结果集或者对表进行修改。

    2.  优化器的作用

    1Evaluation of expressions and conditions

    2Statement transformation

    3View merging

    4Choice of optimizer approaches

    5Choice of access paths

    6Choice of join orders

    7Choice of join operations

    3.如何影响优化器的行为

    a)    通过设置初始参数(静态设置,全局作用)

    b)    session开头动态指定

    c)    针对某个SQL语句提示优化器。

    4. 优化器可对哪些类型SQL语句进行优化操作,对某一类SQL语句可做哪些工作?

    1.      Simple statementAn INSERT, UPDATE, DELETE, or SELECTstatement that involves only a single table.

    2.      Simple queryAnother name for a SELECT statement.

    3.      JoinA query that selects data from more than one table.

    4.      EquijoinA join condition containing an equality operator.

    5Non-equijoin:

    A join condition containing something other than an equality operator.

    6Outer join:A join condition using the outer join operator (+) with one or more columns of one of the tables.

    7Cartesian product:A join with no join condition results in a Cartesian product, or a cross product.

    8.Complex statement:An INSERT, UPDATE, DELETE, or SELECTstatement that contains a subquery.

    9.Compound query:

    A query that uses set operators (UNION, UNION ALL, INTERSECT, or MINUS) to combine two or more simple or complex statements.

    10.Statement accessing views:Simple, join, complex, or compound statement that accesses one or more views as well as tables.

    11.Distributed statement:A statement that accesses data on two or more distinct nodes of a distributed database.

    (三)数据访问

    1.获取数据的途径

    a)    整表扫描

    b)    通过索引获取RowId直接定位基表。

    c)    索引快速扫描

    (四)实例性能优化

    1. 从四个方面进行优化

    ²       调整内存分配(Memory):

    调整操作系统(提供足够的内存)

    调整私有SQLPL/SQL区(减少语法分析调用)

    调整共享池

    调整缓冲区高速缓存(Cache

     

    ²       调整I/O

    减少磁盘竞争

    在数据块中分配空间

    避免动态空间管理

    ²       调整竞争(Contention):

    减少回退段的竞争

    减少多线程服务器进程的竞争

    减少共享服务器进程的竞争

    减少并行查询服务器的竞争

    减少重做日志缓冲区锁竞争

    ²       其它调整:

    调整排序

    减少自由空间竞争

    调整检查点

    2. 一般过程

    a)    诊断问题(从性能视图中获取相关信息);

    b)    调整配置参数;

    c)    去实时调整和验证。

     

     

    Oracle期末考试重点总结(2)

     

     

    一.           数据库的设计与实现

    (一)   概述

    1. 数据库设计的任务

    ²       建立面向数据存储的模式(表、序列、同义词、索引、集聚、数据库链等);

    ²       设计物理存储结构(表空间、数据块、范围、段;数据文件、日志文件、控制文件);

    ²       设计面向任务处理的模式(包、存储过程、函数、触发器、视图等);

    ²       面向数据存储、任务处理和环境调整数据库设计(模式和存储结构)。

    2. 数据库设计应考率的因素

    ²       数据库的大小(内存和外存)

    ORACLE支持超大型数据库(数据文件32GB、表空间数据文件数1022、表空间32TB);启动数据库实例所需的内存;数据库(文件)所需的磁盘空间;

    文件装入所需的临时空间(内存和外存);数据库的发展。

    ²       性能

    磁盘I/O是引起性能瓶颈的主要因素(7200/SCSI:连续I/O100/驱动器;随机I/O60-70/驱动器)

    隔离连续存取的数据(重做日志文件和存档日志文件)

    分布随机存取的数据(多磁盘或RAID,因性能增加的磁盘驱动器比因空间增加的多)

    增加内存(并行I/O

    设置缓存(减少I/O

    ²       功能

    数据库分割为多个表空间,便于备份和恢复

    模式设计与处理任务(任务分解与面向任务处理的模式)

    南开大学软件学院课程素材

    内码设计与功能实现(编程与运行效率)

    应用类型与存储结构(OLTPDSS对日志存放要求不同)

    ²       数据保护

    重做日志文件和存档日志文件需要完整保护

    软件故障容错使用少,硬件故障容错使用多(RAID1RAID5

    RAID1Mirroring)提供最快的故障容错和最大的保护,需要双倍磁盘(空间)(OS和日志文件)

    RAID5Data Guarding)跨磁盘写入奇偶校验信息,可避免一个磁盘故障,读最快,写最慢(数据文件)

    ²       分区

    表可以根据数据的范围分区

    分区在表空间级实现,表空间由数据文件组成(建立数据文件之前规划分区)

    ORACLE支持范围分区、哈西分区、组合分区,分区在提高性能方面有明显作用

    ²       字符集

    建立数据库前要选择字符集

    不重建数据库就不允许修改字符集

    客户端字符集应该与数据库字符集相同或是其子集

    3.设计实例分析(找出违背范式的设计并改正)

     

    4.逆规范化的目的,如何保证不对系统造成负面影响。

    ²       查询具有冗余数据的单表比表连接要快的多,规范化与逆规范化的选择是一种艺术;

    ²       规范化避免了异常、减少了冗余,但针对实际应用来说,并非模型规范化程度越高越好;

    ²       为了改进应用的性能,需要进行逆规范化或保留非规范化的关系,以数据冗余和异常来换取高速度;

    ²       逆规范化存在数据完整性问题,需要程序或人工控制来克服数据完整性问题,所花的代价和所冒的风险与所换取的性能改进相比应该是值得的;

    ²       在创建仅用做报表和决策支持目的的数据表时,数据冗余对提高性能和简化编程难度两方面作用明显。

    (二)   Case工具

    1. 存在形态:

       相对独立产品、与开发系统集成、与数据库管理系统集成

    2常用case工具

       PowerDesinger,InfoModeler,System Architect,ER_Modeler

    3主要功能(顺向,逆向,文档,团队开发etc

       Power Designer Functions

    l        用于全新数据库的设计

    概念模型设计(ER图)

    概念模型到物理模型的自动转换

    自动生成建库脚本,并可直接连接数据库运行脚本(建库同时查错)

    自动生成高质量文档

    自动生成触发器(可进一步修改)

    l        逆向工程,重新构造已有的数据库

    逆向生成物理模型(用ODBC与数据库连接),再反向生成概念模型

    重新设计或改造数据库

    生成数据库文档

    l        支持团队开发

    支持两层开发模式(总图和子模块、子模块设计与集成)

    命名冲突和版本控制

    中央字典支持并发修改,并保持模型的完整性

     

    Oracle期末考试重点总结(1)

    Oracle期末考试重点总结

    版权所有:02软件过程

     

    一.           模式对象

    (一)   存储过程

    1.存储过程的优缺点

    Procedures provide advantages in the following areas:

    (1). Security with Definer-Rights Procedures

    安全性比较好。可以规定用户只能通过过程访问数据。

    (2). Inherited Privileges and Schema Context with Invoker-Rights Procedures

        可以继承调用者的权限。如:见人如见物,见物如见人。

    (3). Performance

    性能方面的好处。恰当使用的话,会给性能带来很大提高。如在数据库端做总和计算,只返回结果给客户端;存储过程只编译连接一次放入内存,可利于下次使用。包中有多个过程时可减少i/o

    (4). Memory Allocation

           内存分配。存储过程与oracle共享内存,内存对源代码之分配一次内存,只有一份拷贝。

    (5). Productivity

           可充用性。通用性增强了,生产效率提高了。

    (6). Integrity

           完整性。如果用户需要改动的只有一个地方,那么就会使用户代码容易维护。用户不用检查整个应用中的所有代码。

    缺点:

    2.存储过程适用于那些地方:

      给单一完备,集中地任务定义存储过程。

      不要去有不必要的重复。不要定义……Do not define procedures that duplicate the functionality already provided by other features of Oracle. 

    4.调试、运行存储过程的一般方法

    方法一:

    为了执行用户的过程,用户可以从PL/SQL匿名程序块中对其进行调用:

    SQL>set serverout on

    SQL>begin

    2        my_proc;

    3        end;

    4/

    Hello World

    首先我们要使用SQL*Plus命令SET SERVEROUT ON,告诉SQL*PLUS我们要让它的外补程序包DBMS_OUTPUT显示输出。然后我们会建立一个BEGIN-END匿名程序包来调用测试MY_PROC

    方法二:

    用户可以在SQL*PLUS中使用EXECUTE命令,或者简写为EXEC

    SQL>execute my_proc         ////Hello world

    调用EXECUTE与在匿名PL/SQL、程序块中调用过程万泉一样,它是一个SQL*PLUS的便捷函数,而不是PL/SQL命令。

    方法三:网上有专门调试过程的小工具。

    5Oracle如何管理存储过程

    过程和包的存储:

    1.编译过程或包。PL/SQL编译器是PL/SQL引擎的一部分。

    2.把已编译的代码存储在内存中。Oracle把编译后的代码放在系统全局区的共享池中(SGA)。

    3.把过程或包存在数据库中。在创建和编译过程或包的时候,Oracle把一些信息自动存储到数据库中。

    编译环节:语法分析,语义分析,编译生成PCode or pseudocode,出错信息

    执行顺序:验证用户权限,验证过程是否有效,执行.

    (二)   触发器

    与存储过程的区别

    触发与调用。触发器是当特定事件出现的时候,自动执行或者激活的代码块。尽管触发器非常类似于过程,但是用户不能直接调用它们。Oracel会在事件请求触发器的时候,控制适当触发器的执行。

    1.  触发器的优缺点和使用场合

    触发器的优点:可以控制用户表中数据输入和维护的方式,可以让数据建模者确保输入的数据被正确格式化;可以让我们将业务规则直接与我们的数据进行绑定;具有安全特性,确保之有特定的用户才能修改用户表;可以进行数据处理的日志记录;可以用于指导oracle如何处控制复杂的用户定义数据类型。

    使用场合:在不能用其他方法完成的情况下才使用触发器;如果可以用一个或多个约束条件来完成特定触发器的工作,应使用约束条件。

    2.触发器的组成结构和类型

    []部份:[触发器名称],触发事件或语句,触发器限制条件,触发后要执行代码(操作)。

    类型:

    语句级触发器:对于语句脂触发一次。

    行级触发器:  影响多少行就触发多少次。

    Before/After

    Instead of触发器:Oracle用来替换所使用的实际语句而执行的触发器。

    系统事件触发器:Oracle还允许用户建立与特定系统事件有关的触发器。

                    (数据库启动、数据库关闭、服务器错误)

    用户事件触发器:能够与Insert update delete以外的用户登录/注销等事件相关联的触发器。(CREATE ALTER DROP ……)。

    3.Oracle如何管理触发器

    存储:Pcode(编译过的pseudocode )存储在databse 源代码被从共享池中抛出。

    Oracle执行tirger的顺序(同存储过程):

    验证用户权限,验证过程是否有效,执行。

    启用和禁用触发器:

    SQL>alter trigger<TRIGGER_NAME> disable;

    SQL>alter trigger<TRIGGER_NAME> enable;

     

    (三)索引(结合优化器)

    1.  何时建立索引

    Create Indexs after inserting table data.

    命中率在2-5%原则。

    2.  索引对性能的影响

    对查询:通过RowID直接定位记录,效率高

    对增删改:要同时对索引进行维护,影响速度

    3.重建索引有几种方法,各自的优缺点

       重建改造索引(rebuild)  接合索引(coalesce)

       ……

    4基于函数的索引(何时用,建立方法与普通索引的区别)

       search key 是一个表达式的时候可以建立函数索引。

       ……

       SQL>create index indxtst_fidx on indextest(upper(object_name));

       设置:query_rewrite_integrity must be set to trusted;

     init.ora中把参数设置为true时优化器才会使用它们:

             query_rewrite_enabled must set to true

             compatible must be set to 8.10.0.0 or a greater value

    5如何选择索引键,确定组合索引键的顺序

       频繁的变动修改的列不要做索引键;仅出现在函数里的列不要做索引键。

       索引中的键构成查询语句的前导部分,保证它们的前导部分存在一种匹配关系;业务上不容易判断顺序的时候,选择distinct小的方在前面。

     

    附:1.序列的实现方法

      

    January 03

    有些人贱

      有些人贱,第一次看到这个词,是在一个女学妹的qq说明档上面。一开始还不以为然,以为那个小女孩太年轻不了解生活。现在,我终于明白了个中道理啊。有些人,确实就是贱!
      就那个小习性,真不到会让多少人为他感到悲哀。我就真不能理解他了。你说吧,也不是独生子女,但是依赖性和惰性怎么就那么强?(本人并无遍地独生子女的意思)小时候,我们帮你就应该的?难道帮你就只是因为你那“又贱又嗲”的“嗯,你就……嘛……”。拜托,都多大的人了?你那么说,你那么不考虑别人的感受和想法,你以为到了社会上还会有人理睬你啊?除非你走运当了某某级别的大官。
      别人帮你了,还不是因为是同学,觉得应该互相帮助啊。但是我觉得我们谁也没有责任需要帮助你这粘人家伙。别人帮完你都觉得后悔,你说,做人做到了这个份上,是不是很失败啊?拜托你以后也考虑一下别人的感受,多为别人想想,不是每个人都要以你为中心。
      我是想通了,与其让自己后悔,干脆就把你当透明的吧。你爱怎么想就怎么想,反正你也不会为别人着想的。我觉得今天做的最大的一件错事,就是又忍不住为你做了一次奴隶。哎,我想真该开一些社交礼仪之类的必修课。不然,祖国的花朵就残废了。