




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ORACLE概念、安装、SQL文的性能、备份论文摘 要本文主要讲述了ORACLE数据库的一些基本概念、Oracle10g的安装,SQL文的性能及Oracle 数据库操纵,安全管理及备份与恢复性能优化等ORACLE数据库的各项知识。本文作为学习Oracle的一份总述性资料,不求全文的结构合理、语句的优美,只在乎知识点的全面性、可再读性。关键词:ORACLE概念、安装、SQL文的性能、备份Oracle的一些基本概念1.1理解ORACLE实例1.1.1ORACLE SERVER一个运行着的ORACLE数据库就可以看成是一个ORACLE SERVER,该SERVER由数据库(Database)和实例(
2、Instance)组成,在一般的情况下一个ORACLE SERVER包含一个实例和一个与之对应的数据库。一系列物理文件(数据文件,控制文件,联机日志等)的集合或与之对应的逻辑结构(表空间,段等)被称为数据库,简单的说,就是一系列与磁盘有关系的物理文件的组成。ORACLE内存结构和后台进程被成为数据库的实例,一个实例最多只能安装(Mount)和打开(Open)在一个数据库上,负责数据库的相应操作并与用户交互。实例与数据库的关系如下图所示:图一 ORACLE SERVER1.1.2ORACLE内存结构 (Memory structure)内存结构的组成Oracle内存结构主要可以分共享内存区与非共
3、享内存区,共享内存区主要包含SGA(System Global Area),非共享内存区主要由PGA(Program Global Area)组成,可以用如下图形表示。图二 ORACLE MEMOERY STRUCTRUE全局共享区System Global Area(SGA) System Global Area 是一块巨大的共享内存区域,他被看做是Oracle 数据库的一个大缓冲池,这里的数据可以被ORACLE的各个进程共用。共享池(Shared pool)共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。一个太小的共享池会扼杀性能,使系统停止,太大的共享池也会有同样的效果,将会
4、消耗大量的CPU来管理这个共享池。不正确的使用共享池只会带来灾难。共享池主要又可以分为以下两个部分:1、SQL语句缓冲(Library Cache)2、数据字典缓冲区(Data Dictionary Cache)1.1.3 后台进程 (Background process)后台进程是Oracle的程序,用来管理数据库的读写,恢复和监视等工作。Server Process主要是通过他和user process进行联系和沟通,并由他和user process进行数据的交换。在Unix机器上,Oracle后台进程相对于操作系统进程,也就是说,一个Oracle后台进程将启动一个操作系统进程;在Wind
5、ows机器上,Oracle后台进程相对于操作系统线程,打开任务管理器,我们只能看到一个ORACLE.EXE的进程,但是通过另外的工具,就可以看到包含在这里进程中的线程。Oracle系统有5 个基本进程他们是:DBWR(数据文件写入进程):将修改过的数据缓冲区的数据写入对应数据文件,维护系统内的空缓冲区。LGWR(日志文件写入进程):将重做日志缓冲区的数据写入重做日志文件。SMON(系统监护进程) :工作主要包含:清除临时空间,在系统启动时,完成系统实例恢复,聚结空闲空间,从不可用的文件中恢复事务的活动,OPS中失败节点的实例恢复等。PMON(用户进程监护进程):主要用于清除失效的用户进程,释放
6、用户进程所用的资源。CKPT(检查点进程,同步数据文件, 日志文件,控制文件):同步数据文件,日志文件和控制文件,由于DBWR/LGWR的工作原理,造成了数据文件,日志文件,控制文件的不一至,这就需要CKPT进程来同步。CKPT会更新数据文件/控制文件的头信息。ORACLE的物理结构数据文件每一个ORACLE数据库有一个或多个物理的数据文件(data file)。一个数据库的数据文件包含全部数据库数据。逻辑数据库结构(如表、索引)的数据物理地存储在数据库的数据文件中。数据文件有下列特征:一个数据文件仅与一个数据库联系。一旦建立,数据文件不能改变大小一个表空间(数据库存储的逻辑单位)由一个或多个
7、数据文件组成。 数据文件中的数据在需要时可以读取并存储在ORACLE内存储区中。例如:用户要存取数据库一表的某些数据,如果请求信息不在数据库的内存存储区内,则从相应的数据文件中读取并存储在内存。当修改和插入新数据时,不必立刻写入数据文件。为了减少磁盘输出的总数,提高性能,数据存储在内存,然后由ORACLE后台进程DBWR决定如何将其写入到相应的数据文件。日志文件每一个数据库有两个或多个日志文件(redo log file)的组,每一个日志文件组用于收集数据库日志。日志的主要功能是记录对数据所作的修改,所以对数据库作的全部修改是记录在日志中。在出现故障时,如果不能将修改数据永久地写入数据文件,则
8、可利用日志得到该修改,所以从不会丢失已有操作成果。日志文件主要是保护数据库以防止故障。为了防止日志文件本身的故障,ORACLE允许镜象日志(mirrored redo log),以致可在不同磁盘上维护两个或多个日志副本。日志文件中的信息仅在系统故障或介质故障恢复数据库时使用,这些故障阻止将数据库数据写入到数据库的数据文件。然而任何丢失的数据在下一次数据库打开时,ORACLE自动地应用日志文件中的信息来恢复数据库数据文件。控制文件每一ORACLE数据库有一个控制文件(control file),它记录数据库的物理结构,包含下列信息类型:数据库名;数据库数据文件和日志文件的名字和位置;数据库建立日
9、期。为了安全起见,允许控制文件被镜象。每一次ORACLE数据库的实例启动时,它的控制文件用于标识数据库和日志文件,当着手数据库操作时它们必须被打开。当数据库的物理组成更改时,ORACLE自动更改该数据库的控制文件。数据恢复时,也要使用控制文件。逻辑结构数据库逻辑结构包含表空间、段、范围(extent)、数据块和模式对象。表空间一个数据库划分为一个或多个逻辑单位,该逻辑单位称为表空间(TABLESPACE)。一个表空间可将相关的逻辑结构组合在一起。DBA可利用表空间作下列工作:控制数据库数据的磁盘分配。将确定的空间份额分配给数据库用户。通过使单个表空间在线或离线,控制数据的可用性。执行部分数据库
10、后备或恢复操作。为提高性能,跨越设备分配数据存储。每个数据库可逻辑划分为一个或多个表空间。每一个表空间是由一个或多个数据文件组成,该表空间物理地存储表空间中全部逻辑结构的数据。每一个ORACLE数据库包含有一个名为SYSTEM的表空间,在数据库建立是自动建立。在该表空间中总包含有整个数据库的数据字典表。ORACLE数据库中一表空间是由一个或多个物理数据文件组成,一个数据文件只可与一个表空间想联系。当为一表空间建立一数据文件时,ORACLE建立该文件,分配指定的磁盘空间容量。在数据文件初时建立后,所分配的磁盘不包含任何数据。表空间可以在线或离线。在ORACLE中还允许单独数据文件在线或离线。藏锋
11、者专业网络安全免费论文:/lunwen/段、范围和数据块ORACLE通过段、范围和数据块逻辑数据结构可更细地控制磁盘空间的使用。段段(SEGMENT)包含表空间中一种指定类型的逻辑存储结构,是由一组范围组成。在ORACLE数据库中有几种类型的段:数据段、牵引段、回滚段和临时段。数据段:对于每一个非聚集的表有一数据段,表的所有数据存放在该段。每一聚集有一个数据段,聚集中每一个表的数据存储在该段中。索引段:每一个索引有一索引段,存储索引数据。回滚段:是由DBA建立,用于临时存储要撤消的信息,这些信息用于生成读一致性数据库信息、在数据库恢复时使用、回滚未提交的事务。临时段:当一个SQL语句需要临时工
12、作区时,由ORACLE建立。当语句执行完毕,临时段的范围退回给系统。ORACLE对所有段的空间分配,以范围为单位。范围一个范围(EXTENT)是数据库存储空间分配的一个逻辑单位,它由连续数据块所组成。每一个段是由一个或多个范围组成。当一段中间所有空间已完全使用时,ORACLE为该段分配一个新的范围。为了维护的目的,在数据库的每一段含有段标题块(segment header block)说明段的特征以及该段中的范围目录。藏锋者专业网络安全免费论文:/lunwen/数据块数据块(data block)是ORACLE管理数据文件中存储空间的单位,为数据库使用的I/O的最小单位,其大小可不同于操作系统
13、的标准I/O块大小。数据块的格式:公用的变长标题表目录行目录未用空间行数据模式和模式对象一个模式(schema)为模式对象(scehma object)的一个集合,每一个数据库用户对应一个模式。模式对象为直接引用数据库数据的逻辑结构,模式对象包含如表、视图、索引、聚集、序列、同义词、数据库链、过程和包等结构。模式对象是逻辑数据存储结构,每一种模式对象在磁盘上没有一个相应文件存储其信息。一个模式对象逻辑地存储在数据库的一个表空间中,每一个对象的数据物理地包含在表空间的一个或多个数据文件中。表表(table)为数据库中数据存储的基本单位,其数据按行、列存储。每个表具有一表名和列的集合。每一列有一个
14、列名、数据类型、宽度或精度、比例。一行是对应单个记录的列信息的集合。视图一个视图(view)是由一个或多个表(或其他视图)中的数据的一种定制的表示,是用一个查询定义,所以可认为是一个存储的查询(stored query)或是一个虚表(virtual table)。视图可在使用表的许多地方使用。聚集聚集(cluster)是存储表数据的可选择的方法。一个聚集是一组表,将具有同一公共列值的行存储在一起,并且它们经常一起使用。这些公共列构成聚集码。例如:EMP表各DEPT表共享DEPTNO列,所以EMP表和DEPT表可聚集在一起,聚集码的列为DEPTNO列,该聚集将每个部门的全部职工行各该部门的行物理
15、地存储在同一数据块中。索引索引(index)是与表和聚集相关的一种选择结构。索引是为提高数据检索的性能而建立,利用它可快速地确定指定的信息。ORACLE索引为表数据提供快速存取路径。索引适用于一范围的行查询或指定行的查询。在建立索引时,将在表空间自动地建立一索引段,索引段空间分配和保留空间的使用受下列方式控制:索引段范围的分配常驻该索引段的存储参数控制。其数据块中未用空间可受该段的PCTFREE参数设置所控制。序列生成器序列生成器(sequence generator)产生序列号。在多用户环境下该序列生成器特别有用,可生成各返回序列号而不需要磁盘I/O或事务封锁。同义词一个同义词(synony
16、m)为任何表、视图、快照、序列、过程、函数或包的别名,其定义存储在数据字典中。同义词因安全性和方便原因而经常使用,可用于:可屏蔽对象的名字及其持有者。为分布式数据库的远程对象提供位置透明性。为用户简化SQL语句。杂凑杂凑(hashing)是存储表数据一种可选择的方法,用以改进数据检索的性能。要使用杂凑,就要建立杂凑聚集,将表装入到该聚集。在骠凑聚集中的表行根据杂凑函数的结果进行物理学存储和检索。杂凑函数用于生成一个数值的分布,该数值称为杂凑值,它是基于指定的聚集码值。程序单元程序单元(program unit)是指存储过程、函数和包(PACKAGE)。一个过程和函数,是由SQL语句和PL/SQ
17、L语句组合在一起,为执行某一个任务的一个可执行单位。一个过程或函数可被建立,在数据库中存储其编译形式,可由用户或数据库应用所执行。过程和函数差别在函数总返回单个值给调用者,而过程没有值返回给调用者。包提供相关的过程、函数、变量和其它包结构封装起来并存贮在一起的一种方法,允许管理者和应用开发者利用该方法组织如此的程序(routine),来提供更多的功能和提高性能。数据库链数据库链是一个命名的对象,说明从一数据库到另一数据库的一路径(PATH)。在分布式数据库中,对全局对象名引用时,数据库链隐式地使用。Oracle的安装Oracle10g以下版本的卸载:因为我的机子上原来装有Oracle92,在安
18、装Oracle10前,我卸载Oracle92,因为当时忘了截图,在这里写下步骤:打开Windows的“服务”窗口,将Oracle10g以下版本的全部服务都停止掉,并且将服务的“启动类型”都设置成“手动”,接着关闭Windows的“服务”窗口,按照下面的步骤进行操作。删除Oracle10g以下版本所建立的所有数据库(通过Oracle10g以下版本的Database Configuration Assistant工具完成,如果忘记sys数据库管理员的密码,请先将原来在%ORACLE_HOME%database目录下的PWDXXXX.ORA密码文件改名,然后在Windows命令行中通过Oracle提
19、供的orapwd工具重新创建上述文件,其中XXXX表示数据库的SID);删除Oracle10g以下版本的全部软件(通过Oracle10g以下版本的Universal Installer工具完成,如果原先没有安装该工具,可以启动Oracle10g的安装向导来完成该卸载任务);删除Oracle10g以下版本在注册表中的相关项(即整个HKEY_LOCAL_MACHINESOFTWAREORACLE项,如果还有其它Oracle公司的软件,例如Form,并且不想重新安装的,那么请不要删除整个ORACLE项,但要确保删除所有包含旧版本Oracle的信息项,建议重新安装这些软件);删除Oracle10g以下
20、版本的监听服务,方法是直接从注册表中删除(HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices);删除%ORACLE_BASE%目录下隶属于Oracle10g以下版本所使用的所有子目录(一般包括 admin、Ora9i和oradata)和文件,注意如果还有Oracle公司的其它软件(例如Form),那么这些软件一般也安装在%ORACLE_BASE%目录下,如果不想重新安装这些软件,请不要删除这些目录,建议和注册表一样删除重新安装;删除系统盘下关于Oracle Universal Installer的整个目录(一般是C:Program FilesOr
21、acle目录);上述操作全部完成后,重新启动机器。Oracle10安装输入初期创建的数据库的密码。单击下一步。接下来点击下一步,基本就可以安装好了(忘了截图)。这样在安装好Oracle10的同时,创建好了一个名为Oral的数据库。创建Oracle数据库数据库的创建可以通过Database Configuration Assistant工具来完成Database Configuration Assistant,会出现以下画面选择上述画面中的“下一步”按钮,会出现以下画面选择上述画面中的“下一步”按钮,会出现以下画面,选择如画面所示选择上述画面中的“下一步”按钮,会出现以下画面,按照实际情况输入选
22、择上述画面中的“下一步”按钮,会出现以下画面如果计划不使用Oracle的OEM工具来管理该数据库,那么建议不要选择以下画面中的“使用Enterprise Manager配置数据库”选项,在该版本中Oracle提供了通过Web页面来管理和监控自身或远程数据库服务器的功能,不过该功能的启用需要在后续画面中安装相关的功能组件来实现,并且会增加数据库服务器的资源开销选择上述画面中的“下一步”按钮,会陆续出现以下画面,请根据实际需要自行选择相关选项最后安装,会出现以下画面,安装成功!数据库用户对象管理4.1 ORACLE数据库的模式对象的管理与维护ORACLE数据库的模式对象包括:表空间、表、视图、索引
23、、序列、同义词、聚集和完整性约束。对于每一个模式对象,首先描述了它的定义,说明了它的功能,最后以基于SQL语言的实例说明如何对它们进行管理于维护。4.1.1 表空间由于表空间是包含这些模式对象的逻辑空间,有必要先对它进行维护。创建表空间:SQLCREATE TABLESPACE jxzyDATAFILE /usr/oracle/dbs/jxzy.dbfONLINE;修改表空间:SQLALTER TABLESPACE jxzy OFFLINE NORMAL;SQLALTER TABLESPACE jxzyRENAME DATAFILE /usr/oracle/dbs/jxzy.dbfTO /us
24、r/oracle/dbs/jxzynew.dbfONLINESQLCREATE TABLESPACE jxzy ONLINE删除表空间:SQLDROP TABLESPACE jxzyINCLUDING CONTENTS4.1. 2 表维护表是数据库中数据存储的基本单位,一个表包含若干列,每列具有列名、类型、长度等。表的建立:SQLCREATE TABLE jxzy.switch(OFFICE_NUM NUMBER(3,0) NOT NULL,SWITCH_CODE NUMBER(8,0) NOT NULL,SWITCH_NAME VARCHAR2(20) NOT NULL);表的修改:SQLA
25、LTER TABLE jxzy.switchADD (DESC VARCHAR2(30);表的删除:SQLDROP TABLE jxzy.switchCASCADE CONSTRAINTS/删除引用该表的其它表的完整性约束4.1. 3 视图维护视图是由一个或若干基表产生的数据集合,但视图不占存储空间。建立视图可以保护数据安全(仅让用户查询修改可以看见的一些行列)、简化查询操作、保护数据的独立性。视图的建立:SQLCREATE VIEW jxzy.pole_well_view AS(SELECT pole_path_num AS path,pole AS device_num FROM pole
26、UNIONSELECT pipe_path_num AS path, well AS device_num FROM well);视图的替换:SQLREPLACE VIEW jxzy.pole_well_view AS(SELECT pole_path_num AS path,pole AS support_device FROM poleUNIONSELECT pipe_path_num AS path,well AS support_device FROM well);视图的删除:SQLDROP VIEW jxzy.pole_well_view;4.1.4 序列维护序列是由序列发生器生成的
27、唯一的整数。序列的建立:SQLCREATE SEQUENCE jxzy.sequence_cableSTART WITH 1INCREMENT BY 1NO_MAXVALUE;建立了一个序列,jxzy.sequence_cable.currval返回当前值,jxzy.sequence_cable.nextval 返回当前值加1后的新值序列的修改:SQLALTER SEQUENCE jxzy.sequence_cableSTART WITH 1 /起点不能修改,若修改,应先删除,然后重新定义INCTEMENT BY 2MAXVALUE 1000;序列的删除:SQLDROP SEQUENCE jx
28、zy.sequence_cable4.1. 5 索引维护索引是与表相关的一种结构,它是为了提高数据的检索速度而建立的。因此,为了提高表上的索引速度,可在表上建立一个或多个索引,一个索引可建立在一个或几个列上。索引的建立:SQLCREATE INDEX jxzy.idx_switchON switch(switch_name)TABLESPACE jxzy;索引的修改:SQLALTER INDEX jxzy.idx_switchON switch(office_num,switch_name)TABLESPACE jxzy;索引的删除:SQLDROP INDEX jxzy.idx_switch;
29、4.1. 6 完整性约束管理数据库数据的完整性指数据的正确性和相容性。数据完整型检查防止数据库中存在不符合语义的数据。完整性约束是对表的列定义一组规则说明方法。ORACLE提供如下的完整性约束.a. NOT NULL 非空b. UNIQUE 唯一关键字c. PRIMATY KEY 主键一个表只能有一个,非空d. FOREIGA KEY 外键e.CHECK 表的每一行对指定条件必须是true或未知(对于空值)例如:某列定义非空约束:SQLALTER TABLE office_organizationMODIFY(desc VARCHAR2(20)CONSTRAINT nn_desc NOT NU
30、LL)某列定义唯一关键字:SQLALTER TABLE office_organizationMODIFY(office_name VATCHAR2(20)CONSTRAINT uq_officename UNIQUE)定义主键约束,主键要求非空:SQLCREATE TABLE switch(switch_code NUMBER(8)CONSTRAINT pk_switchcode PRIMARY KEY,)使主键约束无效:SQLALTER TABLE switch DISABLE PRIMARY KEY定义外键:SQLCREATE TABLE POLE(pole_code NUMBER(8)
31、,office_num number(3)CONSTRAINT fk_officenumREFERENCES office_organization(office_num)ON DELETE CASCADE);定义检查:SQLCREATE TABLE office_organization(office_num NUMBER(3),CONSTRAINT check_officenumCHECK (office_num BETWEEN 10 AND 99);4.2 ORACLE数据库用户与权限管理ORACLE是多用户系统,它允许许多用户共享系统资源。为了保证数据库系统的安全,数据库管理系统配置了
32、良好的安全机制。4.2. 1 ORACLE数据库安全策略建立系统级的安全保证:系统级特权是通过授予用户系统级的权利来实现,系统级的权利(系统特权)包括:建立表空间、建立用户、修改用户的权利、删除用户等。系统特权可授予用户,也可以随时回收。ORACLE系统特权有80多种。建立对象级的安全保证:对象级特权通过授予用户对数据库中特定的表、视图、序列等进行操作(查询、增、删改)的权利来实现。建立用户级的安全保证:用户级安全保障通过用户口令和角色机制(一组权利)来实现。引入角色机制的目的是简化对用户的授权与管理。做法是把用户按照其功能分组,为每个用户建立角色,然后把角色分配给用户,具有同样角色的用户有相
33、同的特权。4.2.2 用户管理ORACLE用户管理的内容主要包括用户的建立、修改和删除用户的建立SQLCREATE USER jxzyIDENTIFIED BY jxzy_passwordDEFAULT TABLESPACE systemQUATA 5M ON system; /供用户使用的最大空间限额用户的修改SQLCREATE USER jxzyIDENTIFIED BY jxzy_pwQUATA 10M ON system;删除用户及其所建对象SQLDROP USER jxzy CASCADE; /同时删除其建立的实体4.2.3系统特权管理与控制ORACLE 提供了80多种系统特权,其中
34、每一个系统特权允许用户执行一个或一类数据库操作。授予系统特权:SQLGRANT CREATE USER,ALTER USER,DROP USERTO jxzy_newWITH ADMIN OPTION;回收系统特权:SQLREVOKE CREATE USER,ALTER USER,DROP USERFROM jxzy_new/但没有级联回收功能显示已被授予的系统特权(某用户的系统级特权):SQLSELECT*FROM sys.dba_sys_privs4.2.4 对象特权管理与控制ORACLE对象特权指用户在指定的表上进行特殊操作的权利。这些特殊操作包括增、删、改、查看、执行(存储过程)、引用
35、(其它表字段作为外键)、索引等。授予对象特权:SQLGRANT SELECT,INSERT(office_num,office_name),UPDATE(desc)ON office_organizationTO new_adminidtratorWITH GRANT OPTION;回收对象特权:SQLREVOKE UPDATE ON office_orgaizationFROM new_administrator显示已被授予的全部对象特权:SQLSELECT*FROM sys.dba_tab_privs4.2.5 角色的管理ORACLE的角色是命名的相关特权组(包括系统特权与对象特权),OR
36、ACLE用它来简化特权管理,可把它授予用户或其它角色。ORACLE数据库系统预先定义了CONNECT 、RESOURCE、 DBA、 EXP_FULL_DATABASE、 IMP_FULL_DATABASE五个角色。CONNECT具有创建表、视图、序列等特权;RESOURCE具有创建过程、触发器、表、序列等特权、DBA具有全部系统特权;EXP_FULL_DATABASE、 IMP_FULL_DATABASE具有卸出与装入数据库的特权。通过查询sys.dba_sys_privs可以了解每种角色拥有的权利。授予用户角色SQLGRANT DBA TO new_administractorWITH G
37、RANT OPTION;SQL文的性能写语句的经验: 对于大表的查询使用索引少用in,exist等使用集合运算对于大表查询中的列应尽量避免进行诸如To_char,To_date,To_number等转换.有索引的尽量用索引,有用到索引的条件写在前面,如有可能和有必要就建立一些索引尽量避免进行全表扫描,限制条件尽可能多,以便更快一、搜索到要查询的数据人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,而忽略了不同的实现方法之间可能存在的性能差异。在工作实践中可以发现,不良的SQL往往来自于不恰当的索引设计、不充份的连接条件和不可优化的where子句。在对它们进行适当的优化后,其运
38、行速度有了明显地提高!下面从这三个方面分别进行总结:为了更直观地说明问题,所有实例中的SQL运行时间均经过测试,不超过秒的均表示为(,=, =)和order by、group by发生的列,可考虑建立群集索引;经常同时存取多列,且每列都含有重复值可考虑建立组合索引;组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。二、SQL的执行情况:例:表card有7896行,在card_no上有一个非聚集索引,表account有191122行,在 account_no上有一个非聚集索引,试看在不同的表连接条件下,两个SQL的执行情况:select sum(a.amount) from a
39、ccount a, card b where a.card_no = b.card_no(20秒)将SQL改为:select sum(a.amount) from account a, card b where a.card_no = b.card_no and a.account_no=b.account_no( 1秒)分析:在第一个连接条件下,最佳查询方案是将account作外层表,card作内层表,利用card上的索引,其I/O次数可由以下公式估算为:外层表account上的22541页+(外层表account的191122行*内层表card上对应外层表第一行所要查找的3页)=59590
40、7次I/O在第二个连接条件下,最佳查询方案是将card作外层表,account作内层表,利用account上的索引,其I/O次数可由以下公式估算为:外层表card上的1944页+(外层表card的7896行*内层表account上对应外层表每一行所要查找的4页)= 33528次I/O可见,只有充份的连接条件,真正的最佳方案才会被执行。总结:多表操作在被实际执行前,查询优化器会根据连接条件,列出几组可能的连接方案并从中找出系统开销最小的最佳方案。连接条件要充份考虑带有索引的表、行数多的表;内外表的选择可由公式:外层表中的匹配行数*内层表中每一次查找的次数确定,乘积最小为最佳方案。查看执行方案的方
41、法- 用set showplanon,打开showplan选项,就可以看到连接顺序、使用何种索引的信息;想看更详细的信息,需用sa角色执行dbcc(3604,310,302)。三、不可优化的where子句例1:下列SQL条件语句中的列都建有恰当的索引,但执行速度却非常慢:select * from recordwheresubstring(card_no,1,4)=5378 (13秒)select * from record where amount/30 1000 (11秒)select * from recordwhere convert(char(10),date,112)=199912
42、01 (10秒)分析: where子句中对列的任何操作结果都是在SQL运行时逐列计算得到的,因此它不得不进行表搜索,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表搜索,因此将SQL重写成下面这样:select * from record where card_no like 5378% ( 1秒)select * from recordwhere amount 1000*30 ( 1秒)select * from recordwhere date= 1999/12/01 ( shutdown 数据库已经关闭。已经卸载数据库。ORACL
43、E 例程已经关闭。藏锋者专业网络安全免费论文:/lunwen/将数据文件、控制文件和redo日志文件从上面查找出来的位置拷贝到/mnt/backup_wy/目录下作为备份:oracle|15:38:09|/u3/oradata/lyj$ cp *.ctl /mnt/backup_wy/oracle|15:38:29|/u3/oradata/lyj$ cp *.log /mnt/backup_wy/oracle|15:38:43|/u3/oradata/lyj$ cp *.dbf /mnt/backup_wy/重新开启数据库:SQL startup6.4 热备份热备份是在数据库运行的情况下,采用
44、archivelog mode方式备份数据库的方法。所以,如果你有昨天夜里的一个冷备份而且又有今天的热备份文件,在发生问题时,就可以利用这些资料恢复更多的信息。热备份要求数据库在Archivelog方式下操作,并需要大量的档案空间。一旦数据库运行在archivelog状态下,就可以做备份了。 热备份的优点是: 可在表空间或数据库文件级备份,备份的时间短。备份时数据库仍可使用。 可达到秒级恢复(恢复到某一时间点上)。 可对几乎所有数据库实体做恢复恢复是快速的,在大多数情况下爱数据库仍工作时恢复。 热备份的不足是:不能出错,否则后果严重 bbs.bitsCN.com中国网管论坛 若热备份不成功,所
45、得结果不可用于时间点的恢复 因难于维护,所以要特别仔细小心,不允许“以失败告终”。 6.5导出数据库作备份数据库导出可以被看作备份的一种形式。Oracle实用工具Export利用SQL语句读出数据库数据,并在操作系统层将数据和定义存入二进制文件。导出对于还原一个意外删除的对象或还原这个对象的定义来说是很好的,因为脱机备份不能只还原一个对象,而联机备份还原一个对象必须得还原该对象存在的数据文件,相对于导出这种备份形式来说要繁琐很多,但是从导出中还原时,仅能得到导出文件中的内容,不能从中向前回滚,所以导出数据库这种备份方式只能作为联机备份和脱机备份的一种补充。附录资料:不需要的可以自行删除 C语言
46、曲线函数像素函数putpixel() 画像素点函数 getpixel()返回像素色函数 直线和线型函数line() 画线函数 lineto() 画线函数 linerel() 相对画线函数 setlinestyle() 设置线型函数 getlinesettings() 获取线型设置函数 setwritemode() 设置画线模式函数 多边形函数HYPERLINK /view/553113.htmrectangle() 画矩形函数 bar() 画条函数 bar3d() 画条块函数 drawpoly() 画多边形函数 圆、弧和曲线函数getaspectratio()获取纵横比函数 circle()画
47、圆函数 arc() 画圆弧函数 ellipse()画HYPERLINK /view/36981.htm椭圆弧函数 fillellipse() 画椭圆区函数 pieslice() 画扇区函数 sector() 画椭圆扇区函数 getarccoords()获取圆弧坐标函数 填充函数setfillstyle() 设置填充图样和颜色函数 setfillpattern() 设置用户图样函数 floodfill() 填充闭域函数 fillpoly() 填充多边形函数 getfillsettings() 获取填充设置函数 getfillpattern() 获取用户图样设置函数 图像函数imagesize()
48、 图像存储大小函数 getimage() 保存图像函数 putimage() 输出图像函数 图形和图像函数对许多图形HYPERLINK /view/330120.htm应用程序,直线和HYPERLINK /view/400.htm曲线是非常有用的。但对有些图形只能靠操作单个像素才能画出。当然如果没有画像素的功能,就无法操作直线和曲线的函数。而且通过大规模使用像素功能,整个图形就可以保存、写、擦除和与屏幕上的原有图形进行叠加。 (一) 像素函数putpixel() 画像素点函数功能: 函数putpixel() 在图形模式下屏幕上画一个像素点。 用法: 函数调用方式为void putpixel(i
49、nt x,int y,int color); 说明: 参数x,y为像素点的坐标,color是该像素点的颜色,它可以是颜色符号名,也可以是整型色彩值。 此函数相应的HYPERLINK /view/668911.htm头文件是graphics.h 返回值: 无 例: 在屏幕上(6,8)处画一个红色像素点: putpixel(6,8,RED); getpixel()返回像素色函数功能: 函数getpixel()返回像素点颜色值。 用法: 该函数调用方式为int getpixel(int x,int y); 说明: 参数x,y为像素点坐标。 函数的返回值可以不反映实际彩色值,这取决于HYPERLINK
50、 /view/1120949.htm调色板的设置情况(参见setpalette()函数)。 这个函数相应的头文件为graphics.h 返回值: 返回一个像素点色彩值。 例: 把屏幕上(8,6)点的像素颜色值赋给变量color。 color=getpixel(8,6); (二) 直线和线型函数有三个画直线的函数,即line(),lineto(),linerel()。这些直线使用整型坐标,并相对于当前图形视口,但不一定受视口限制,如果视口裁剪标志clip为真,那么直线将受到视口边缘截断;如果clip为假,即使终点坐标或新的当前位置在图形视口或屏幕极限之外,直线截断到屏幕极限。 有两种线宽及几种线
51、型可供选择,也可以自己定义线图样。下面分别介绍直线和线型函数。 line() 画线函数功能: 函数line()使用当前绘图色、线型及线宽,在给定的两点间画一直线。 用法: 该函数调用方式为void line(int startx,int starty,int endx,int endy); 说明: 参数startx,starty为起点坐标,endx,endy为终点坐标,函数调用前后,图形状态下屏幕光标(一般不可见)当前位置不改变。 此函数相应的头文件为graphics.h 返回值: 无 例: 见函数60.linerel()中的实例。 lineto() 画线函数功能: 函数lineto()使用当
52、前绘图色、线型及线宽,从当前位置画一直线到指定位置。 用法: 此函数调用方式为void lineto(int x,int y); 说明: 参数x,y为指定点的坐标,函数调用后,当前位置改变到指定点(x,y)。 该函数对应的头文件为graphics.h 返回值: 无 例: 见函数60.linerel()中的实例。 linerel() 相对画线函数功能: 函数linerel() 使用当前绘图色、线型及线宽,从当前位置开始,按指定的水平和垂直偏移距离画一直线。 用法: 这个函数调用方式为void linerel(int dx,int dy); 说明: 参数dx,dy分别是水平偏移距离和垂直偏移距离。
53、 函数调用后,当前位置变为增加偏移距离后的位置,例如,原来的位置是(8,6),调用函数linerel(10,18)后,当前位置为(18,24)。 返回值:无 例: 下面的程序为画线函数调用实例: #i nclude void main() int driver,mode; driver=DETECT; mode=0; initgraph(&driver,&mode,); setcolor(15); line(66,66,88,88); lineto(100,100); linerel(36,64); getch(); restorecrtmode(); setlinestyle() 设置线型函
54、数功能: setlinestyle() 为画线函数设置当前线型,包括线型、线图样和线宽。 用法: setlinestyle() 函数调用方式为void setlinestyle(int stly,unsigned pattern,int wigth); 说明: 参数style为线型取值,也可以用相应名称表示,如表1-10中所示。 参数pattern用于自定义线图样,它是16位(bit)字,只有当style=USERBIT_LINE(值为1)时,pattern的值才有意义,使用用户自定义线图样,与图样中“1”位对应的像素显示,因此,pattern=0 xFFFF,则画实线;pattern=0 x
55、9999,则画每隔两个像素交替显示的虚线,如果要画长虚线,那么pattern的值可为0 xFF00和0 xF00F,当style不为USERBIT_LINE值时,虽然pattern的值不起作用,但扔须为它提供一个值,一般取为0。 参数wigth用来设定线宽,其取值见表1-11,表中给出了两个值,即1和3,实际上,线宽取值为2也是可以接受的。 若用非法参数调用setlinestyle()函数,那么graphresult()会返回错误代码,并且当前线型继续有效。 Turbo C提供的线型与线宽定义在头文件graphics.h中,表1-10和1-11分别列出了参数的取值与含义。 表1-10 线型 名
56、称取值含义SOLID_LINE0实线DOTTED_LINE1点线CENTER_LINE2中心线DASHED_LINE3虚线USERBIT_LINE4用户自定义线型表1-11 线宽 名 称取 值说 明NORM_WIDTH(常宽)1一个像素宽(缺省值)THICK_WIDTH(加宽)3三个像素宽这个函数的头文件是graphics.h 返回值: 无 例: 下面的程序显示了BC中所提供的线型图样: #i nclude void main() int driver,mode;i; driver=DETECT; mode=0; initgraph(&driver,&mode,); for(i=0;i4;i+
57、) setlinestyle(i,0,1); line(i*50,200,i*50+60,200) ; getch(); restorecrtmode(); getlinesettings() 获取线型设置函数功能: 函数getlinesettings() 用当前设置的线型、线图样和线宽填 写linesettingstype型结构。 用法: 函数调用方式为void getlinesettings(struct linesettingstype *info); 说明: 此函数调用执行后,当前的线型、线图样和线宽值被装入info指向的结构里,从而可从该结构中获得线型设置。 linesettings
58、type型结构定义如下: struct linesettingstype int linestyle; unsigned upattern; int thickness; ; 其中linestyle用于存放线型,线型值为表1-10中的各值之一。 upattern用为装入用户自定义线图样,这是16位字,每一位等于一个像素,如果哪个位被设置,那么该像素打开,否则关闭。 thickness为线宽值存放的变量,可参见表1-11。 getlinesettings()函数对应的头文件为graphics.h 返回值: 返回的线型设置存放在info指向的结构中。 例: 把当前线型的设置写入info结构: st
59、ruct linesettingstype info; getlinesettings(&info); setwritemode() 设置画线模式函数功能: 函数setwritemode() 设置画线模式 用法: 函数调用方式为 void setwritemode()(int mode); 说明: 参数mode只有两个取值0和1,若mode为0,则新画的线将覆盖屏幕上原有的图形,此为缺省画线输出模式。如果mode为1,那么新画的像素点与原有图形的像素点先进行异或(XOR)运算,然后输出到屏幕上,使用这种画线输出模式,第二次画同一图形时,将擦除该图形。调用setwritemode()设置的画线输
60、出模式只影响函数line(),lineto(),linerel(),recangle()和drawpoly()。 setwritemode()函数对应的头文件是graphics.h 返回值: 无 例: 设置画线输出模式为0: setwritemode(0); (三)、多边形函数对多边形,无疑可用画直线函数来画出它,但直接提供画多边形的函数会给用户很大方便。最常见的多边形有矩形、矩形块(或称条形)、多边形和多边形块,我们还把长方形条块也放到这里一起考虑,虽然它不是多边形,但它的特例就是矩形(块)。下面直接介绍画多边形的函数。 rectangle() 画矩形函数功能: 函数rectangle()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山西警察学院《道路勘测设计A》2023-2024学年第一学期期末试卷
- 广西防城港市上思县重点达标名校2024-2025学年初三一测化学试题试卷含解析
- 洛阳科技职业学院《金属切削原理》2023-2024学年第二学期期末试卷
- 吉林省长春市教研室重点达标名校2024-2025学年初三下学期第五次月考(一模)英语试题试卷含答案
- 江西冶金职业技术学院《英语听力三》2023-2024学年第二学期期末试卷
- 曲靖师范学院《高级英语A2》2023-2024学年第二学期期末试卷
- 重庆师范大学《环境生态工程CAD》2023-2024学年第二学期期末试卷
- 河北省南宫市私立实验小学2024-2025学年五下数学期末检测模拟试题含答案
- 山西省晋城市部分学校 2024-2025学年七年级下学期3月月考生物试题(含答案)
- 2024-2025学年福建省宁德市高二下学期3月月考英语试题(含答案)
- 建筑结构荷载规范DBJ-T 15-101-2022
- 中华民族共同体概论课件专家版4第四讲 天下秩序与华夏共同体的演进(夏商周时期)
- 2023年海南省初中学业水平考试历史真题(答案详解)
- UHPC板幕墙施工方案
- 《中国人民站起来了》练习(含解析) 统编版高中语文选择性必修上册
- 创新创效方案
- 非免疫规划疫苗接种方案(2023年版)
- 电工证考试题库app低压电工证考试
- 路面验收标准
- 社区矫正对象书面保护申请书
- 教师情绪和压力疏导
评论
0/150
提交评论