ORACLE数据库学习心得

慢慢 分享 时间: 收藏本文

【简介】感谢网友“慢慢”参与投稿,这次小编在这里给大家整理了ORACLE数据库学习心得(共6篇),供大家阅读参考。

篇1:ORACLE数据库学习心得

一个好的程序,必然联系着一个庞大的数据库网路...

今年我们学习了 oracle数据库这门课程,起初的我,对这个字眼是要多陌生有多陌生,后来上课的时候听一会老师讲课,偶尔再跟上上机课,渐渐的学会了不少东西,但我感觉,我学到的仍是一些皮毛而已,怀着疑惑和求知的心态,我在网上搜索了关于 oracle数据库的一些知识。

1.ORACLE的特点:

可移植性 ORACLE采用C语言开发而成,故产品与硬件和操作系统具有很强的独立性。从大型机到微机上都可运行ORACLE的产品。可在UNIX、DOS、Windows等操作系统上运行。可兼容性 由于采用了国际标准的数据查询语言SQL,与IBM的SQL/DS、DB2等均兼容。并提供读取其它数据库文件的间接方法。

可联结性 对于不同通信协议,不同机型及不同操作系统组成的网络也可以运行ORAˉCLE数据库产品。

2.ORACLE的总体结构

(1)ORACLE的文件结构 一个ORACLE数据库系统包括以下5类文件:ORACLE RDBMS的代码文件。

数据文件 一个数据库可有一个或多个数据文件,每个数据文件可以存有一个或多个表、视图、索引等信息。

日志文件 须有两个或两个以上,用来记录所有数据库的变化,

用于数据库的恢复。控制文件 可以有备份,采用多个备份控制文件是为了防止控制文件的损坏。参数文件 含有数据库例程起时所需的配置参数。

(2)ORACLE的内存结构 一个ORACLE例程拥有一个系统全程区(SGA)和一组程序全程区(PGA)。

SGA(System Global Area)包括数据库缓冲区、日志缓冲区及共享区域。

PGA(Program Global Area)是每一个Server进程有一个。一个Server进程起动时,就为其分配一个PGA区,以存放数据及控制信息。

(3)ORACLE的进程结构ORACLE包括三类进程:

①用户进程 用来执行用户应用程序的。

②服务进程 处理与之相连的一组用户进程的请求。

③后台进程 ORACLE为每一个数据库例程创建一组后台进程,它为所有的用户进程服务,其中包括:

DBWR(Database Writer)进程,负责把已修改的数据块从数据库缓冲区写到数据库中。LGWR(Log Writer)进程,负责把日志从SGA中的缓冲区中写到日志文件中。

SMON(System Moniter)进程,该进程有规律地扫描SAG进程信息,注销失败的数据库例程,回收不再使用的内存空间。PMON(Process Moniter)进程,当一用户进程异常结束时,该进程负责恢复未完成的事务,注销失败的用户进程,释放用户进程占用的资源。

ARCH(ARCHIVER)进程。每当联机日志文件写满时,该进程将其拷贝到归档存储设备上。另外还包括分布式DB中事务恢复进程RECO和对服务进程与用户进程进行匹配的Dnnn进程等。

3.ORACLE的逻辑结构

构成ORACLE的数据库的逻辑结构包括:

(1)表空间

(2)5种类型的段(segment)

①数据段;②索引段;③回滚(rollbock)段;④临时段;⑤自举(bootstrap)段。

段的分配单位叫范围(Extent)

表空间(Tablespace) 一个数据库划分成的若干逻辑部分称为表空间。一个数据库可以有一个或多个表空间,初始的表空间命名为SYSTEM,每一个逻辑表空间对应于一个或多个物理文件。DBA使用表空间做以下工作:

控制数据库对象,如表、索引和临时段的空间分配。为数据库用户设置空间配额。

利用个别表空间的在线或离线,控制数据的可用性。后备或恢复数据。

通过分配空间,以改进性能。

在每个数据库中都存在SYSTEM表空间,它在建立数据库时自动建立。在该表空间中,包含数据库的数据字典,其中存储全部数据库对象的名字和位置。

SYSTEM表空间总是在线的,像其它表空间一样,可以通过增加新的数据库文件来扩大。一个表空间可包含许多表和索引。但一个表和索引不能跨越表空间,可跨越组成表空间的文件。在DB的打开的情况下,DBA利用ALTER TABLESPACE语句,可以实施表空间的在线或离线。SYSTEM表空间必须在线。表空间离线有下列原因:

一般为了使部分数据库不能使用,而允许正常存取数据库其余部分。执行表空间离线备份。

一个离线的表空间,不能被应用用户读或编辑。

可以增加数据文件扩大已有的表空间,也可增加新的表空间使数据库容量增大,或分配空间给某个应用。使用ALFER TABLESPACE ADD FILE语句将另一个数据文件加入到已存在表空间中。使用CREATE TABLESPACE语句可建立一个新的表空间。段(segment) 表空间中的全部数据存储在以段划分的数据库空间中。一个段是分配给数据库用于数据存储的范围的集合。数据可以是表、索引或RDBMS所需要的临时数据。段是表空间的下一个逻辑存储的级别。一个段不能跨越一个表空间,但可跨越表空间内的文件。一个数据库最多需要五种段类型:

数据段 一个包含一个表(或聚集)的全部数据,一个表(或聚集)总有一个单个数据段。

索引段 一个索引段包含对一个表(或聚集)建立的一个索引的全部索引数据。一个表可以有一个、多个或者没有索引段,取决于它所拥有的索引个数。一个聚集必须至少有一个索引段,即在聚集码上

建立聚集索引。

回滚段 每个DB有一个或多个回滚段。一个回滚段是DB的一部分,它记录在某一情况下被撤消的动作。回滚段用于事务控制和恢复。

临时段 在处理查询时,ORACLE需要临时工作空间,用于存储语句处理的中间结果,这个区称为临时段。

自举段 自举段在SYSTEM表空间中,在数据库建立时建立。它包括数据字典定义,在数据库打开时装入。

4.用户数据库对象

由用户建立的对象驻留在表空间中,含有真正的数据。数据库对象有表、视图、聚集、索引、伪列和序号生成器。

(1)聚集(Cluster) 聚集是存储数据的一种可选择的方法。聚集包括存储在一起的一组表,它们共享公共列并经常一起使用。由于内容相关并且物理地存储在一起,存取时间得到改进,存储空间可以减少。聚集是一种优化措施。

聚集对性能的改进,依赖于数据的分布和SQL操作的内容。特别是使用聚集对连接非常有利。可以明显地提高连接的速度。建立聚集命令的基本格式:

SQL>CREATE CLUSTER〈聚集名〉(列定义[,…]);利用聚集建立表命令基本格式:

SQL>CREATE TABLE〈新表名〉(列定义[,…]CLUSTER〈聚集名〉(聚集列);

[ORACLE数据库学习心得]

篇2:Oracle数据库碎片数据库

我们知道, Oracle 作为一种大型 数据库 ,广泛应用于 金融 、邮电、电力、民航等数据吞吐量巨大,计算机 网络 广泛普及的重要部门,对于系统管理员来讲,如何保证网络稳定运行,如何提高数据库 性能 ,使其更加 安全 高效,就显得尤为重要。作为影响数据库

我们知道, Oracle 作为一种大型数据库,广泛应用于金融、邮电、电力、民航等数据吞吐量巨大,计算机网络广泛普及的重要部门。对于系统管理员来讲,如何保证网络稳定运行,如何提高数据库性能,使其更加安全高效,就显得尤为重要。作为影响数据库性能的一大因素 -- 数据库碎片,应当引起 DBA 的足够重视,及时发现并整理碎片乃是 DBA 一项基本维护内容。

1 、碎片是如何产生的

---- 当生成一个数据库时,它会分成称为表空间( Tablespace )的多个逻辑段( Segment ),如系统( System )表空间 , 临时( Temporary )表空间等。一个表空间可以包含多个数据范围( Extent )和一个或多个自由范围块,即自由空间( Free Space )。

---- 表空间、段、范围、自由空间的逻辑关系如下:

---- 当表空间中生成一个段时,将从表空间有效自由空间中为这个段的初始范围分配空间。在这些初始范围充满数据时,段会请求增加另一个范围。这样的扩展过程会一直继续下去,直到达到最大的范围值,或者在表空间中已经没有自由空间用于下一个范围。最理想的状态就是一个段的数据可被存在单一的一个范围中。这样,所有的数据存储时靠近段内其它数据,并且寻找数据可少用一些指针。但是一个段包含多个范围的情况是大量存在的,没有任何措施可以保证这些范围是相邻存储的,如图〈 1 〉。当要满足一个空间要求时,数据库不再合并相邻的自由范围(除非别无选择),而是寻找表空间中最大的自由范围来使用。这样将逐渐形成越来越多的离散的、分隔的、较小的自由空间,即碎片。例如:

2 、碎片对系统的影响

---- 随着时间推移,基于数据库的应用系统的广泛使用,产生的碎片会越来越多,将对数据库有以下两点主要影响:

---- ( 1 )导致系统性能减弱

---- 如上所述,当要满足一个空间要求时,数据库将首先查找当前最大的自由范围,而 “ 最大 ” 自由范围逐渐变小,要找到一个足够大的自由范围已变得越来越困难,从而导致表空间中的速度障碍,使数据库的空间分配愈发远离理想状态;

---- ( 2 )浪费大量的表空间

---- 尽管有一部分自由范围(如表空间的 pctincrease 为非 0 )将会被 SMON (系统监控)后台进程周期性地合并,但始终有一部分自由范围无法得以自动合并,浪费了大量的表空间。

3 、自由范围的碎片计算

---- 由于自由空间碎片是由几部分组成,如范围数量、最大范围尺寸等,我们可用 FSFI--Free Space Fragmentation Index (自由空间碎片索引)值来直观体现:

FSFI=100*SQRT(max(extent)/sum(extents))*1/SQRT(SQRT(count(extents)))

---- 可以看出, FSFI 的最大可能值为 100 (一个理想的单文件表空间)。随着范围的增加, FSFI 值缓慢下降,而随着最大范围尺寸的减少, FSFI 值会迅速下降。

---- 下面的脚本可以用来计算 FSFI 值:

rem FSFI Value Compute

rem fsfi.sql

column FSFI format 999,99

select tablespace_name,sqrt(max(blocks)/sum(blocks))*

(100/sqrt(sqrt(count(blocks)))) FSFI

from dba_free_space

group by tablespace_name order by 1;

spool fsfi.rep;

/

spool off;

---- 比如,在某数据库运行脚本 fsfi.sql, 得到以下 FSFI 值:

TABLESPACE_NAME FSFI

------------------------------ -------

RBS 74.06

SYSTEM 100.00

TEMP 22.82

TOOLS 75.79

USERS 100.00

USER_TOOLS 100.00

YDCX_DATA 47.34

YDCX_IDX 57.19

YDJF_DATA 33.80

YDJF_IDX 75.55

---- 统计出了数据库的 FSFI 值,就可以把它作为一个可比参数,

在一个有着足够有效自由空间,且 FSFI 值超过 30 的表空间中,很少会遇见有效自由空间的问题。当一个空间将要接近可比参数时,就需要做碎片整理了。

4 、自由范围的碎片整理

---- ( 1 )表空间的 pctincrease 值为非 0

---- 可以将表空间的缺省存储参数 pctincrease 改为非 0 。一般将其设为 1 ,如:

alter tablespace temp

default storage(pctincrease 1);

---- 这样 SMON 便会将自由范围自动合并。也可以手工合并自由范围:

alter tablespace temp coalesce;

5 、段的碎片整理

---- 我们知道,段由范围组成。在有些情况下,有必要对段的碎片进行整理。要查看段的有关信息,可查看数据字典 dba_segments ,范围的信息可查看数据字典 dba_extents 。如果段的碎片过多,将其数据压缩到一个范围的最简单方法便是用正确的存储参数将这个段重建,然后将旧表中的数据插入到新表,同时删除旧表。这个过程可以用 Import/Export (输入 / 输出)工具来完成。

---- Export 命令有一个(压缩)标志,这个标志在读表时会引发 Export 确定该表所分配的物理空间量,它会向输出转储文件写入一个新的初始化存储参数 -- 等于全部所分配空间。若这个表关闭, 则使用 Import ()工具重新生成。这样,它的数据会放入一个新的、较大的初始段中。例如:

exp user/password file=exp.dmp compress=Y grants=Y indexes=Y

tables=(table1,table2);

---- 若输出成功,则从库中删除已输出的表,然后从输出转储文件中输入表:

imp user/password file=exp.dmp commit=Y buffer=64000 full=Y

---- 这种方法可用于整个数据库。

---- 以上简单分析了 Oracle 数据库碎片的产生、计算方法及整理,仅供参考。数据库的性能优化是一项技术含量高,同时又需要有足够耐心、认真细致的工作。

原文转自:www.ltesting.net

篇3:Oracle数据库碎片

我们知道, Oracle href=“search.e800.com.cn/Oracle” target=_blank alt=“Oracle”>Oracle 作为一种大型数据库,广泛应用于金融、邮电、电力、民航等数据吞吐量巨大,计算机网络广泛普及的重要部门,对于系统管理员来讲,如何保证网络稳定运行,如何提高数据库性能,使其更加安全高效,就显得尤为重要。作为影响数据库性能的一大因素 -- 数据库碎片,应当引起 DBA 的足够重视,及时发现并整理碎片乃是 DBA 一项基本维护内容。

1 、碎片是如何产生的

---- 当生成一个数据库时,它会分成称为表空间( Tablespace )的多个逻辑段( Segment ),如系统( System )表空间 , 临时( Temporary )表空间等。一个表空间可以包含多个数据范围( Extent )和一个或多个自由范围块,即自由空间( Free Space )。

---- 表空间、段、范围、自由空间的逻辑关系如下:

---- 当表空间中生成一个段时,将从表空间有效自由空间中为这个段的初始范围分配空间。在这些初始范围充满数据时,段会请求增加另一个范围。这样的扩展过程会一直继续下去,直到达到最大的范围值,或者在表空间中已经没有自由空间用于下一个范围。最理想的状态就是一个段的数据可被存在单一的一个范围中。这样,所有的数据存储时靠近段内其它数据,并且寻找数据可少用一些指针。但是一个段包含多个范围的情况是大量存在的,没有任何措施可以保证这些范围是相邻存储的,如图〈 1 〉。当要满足一个空间要求时,数据库不再合并相邻的自由范围(除非别无选择),而是寻找表空间中最大的自由范围来使用。这样将逐渐形成越来越多的离散的、分隔的、较小的自由空间,即碎片。例如:

2 、碎片对系统的影响

---- 随着时间推移,基于数据库的应用系统的广泛使用,产生的碎片会越来越多,将对数据库有以下两点主要影响:

---- ( 1 )导致系统性能减弱

---- 如上所述,当要满足一个空间要求时,数据库将首先查找当前最大的自由范围,而 “ 最大 ” 自由范围逐渐变小,要找到一个足够大的自由范围已变得越来越困难,从而导致表空间中的速度障碍,使数据库的空间分配愈发远离理想状态;

---- ( 2 )浪费大量的表空间

---- 尽管有一部分自由范围(如表空间的 pctincrease 为非 0 )将会被 SMON (系统监控)后台进程周期性地合并,但始终有一部分自由范围无法得以自动合并,浪费了大量的表空间。

3 、自由范围的碎片计算

---- 由于自由空间碎片是由几部分组成,如范围数量、最大范围尺寸等,我们可用 FSFI--Free Space Fragmentation Index (自由空间碎片索引)值来直观体现:

FSFI=100*SQRT(max(extent)/sum(extents))*1/SQRT(SQRT(count(extents)))

---- 可以看出, FSFI 的最大可能值为 100 (一个理想的单文件表空间)。随着范围的增加, FSFI 值缓慢下降,而随着最大范围尺寸的减少, FSFI 值会迅速下降。

---- 下面的脚本可以用来计算 FSFI 值:

rem FSFI Value Compute

rem fsfi.sql

column FSFI format 999,99

select tablespace_name,sqrt(max(blocks)/sum(blocks))*

(100/sqrt(sqrt(count(blocks)))) FSFI

from dba_free_space

group by tablespace_name order by 1;

spool fsfi.rep;

/

spool off;

---- 比如,在某数据库运行脚本 fsfi.sql, 得到以下 FSFI 值:

TABLESPACE_NAME FSFI

------------------------------ -------

RBS 74.06

SYSTEM 100.00

TEMP 22.82

TOOLS 75.79

USERS 100.00

USER_TOOLS 100.00

YDCX_DATA 47.34

YDCX_IDX 57.19

YDJF_DATA 33.80

YDJF_IDX 75.55

---- 统计出了数据库的 FSFI 值,就可以把它作为一个可比参数,

在一个有着足够有效自由空间,且 FSFI 值超过 30 的表空间中,很少会遇见有效自由空间的问题。当一个空间将要接近可比参数时,就需要做碎片整理了。

4 、自由范围的碎片整理

---- ( 1 )表空间的 pctincrease 值为非 0

---- 可以将表空间的缺省存储参数 pctincrease 改为非 0 。一般将其设为 1 ,如:

alter tablespace temp

default storage(pctincrease 1);

---- 这样 SMON 便会将自由范围自动合并。也可以手工合并自由范围:

alter tablespace temp coalesce;

5 、段的碎片整理

---- 我们知道,段由范围组成。在有些情况下,有必要对段的碎片进行整理。要查看段的有关信息,可查看数据字典 dba_segments ,范围的信息可查看数据字典 dba_extents 。如果段的碎片过多,将其数据压缩到一个范围的最简单方法便是用正确的存储参数将这个段重建,然后将旧表中的数据插入到新表,同时删除旧表。这个过程可以用 Import/Export (输入 / 输出)工具来完成。

---- Export ()命令有一个(压缩)标志,这个标志在读表时会引发 Export 确定该表所分配的物理空间量,它会向输出转储文件写入一个新的初始化存储参数 -- 等于全部所分配空间。若这个表关闭, 则使用 Import ()工具重新生成。这样,它的数据会放入一个新的、较大的初始段中。例如:

exp user/password file=exp.dmp compress=Y grants=Y indexes=Y

tables=(table1,table2);

---- 若输出成功,则从库中删除已输出的表,然后从输出转储文件中输入表:

imp user/password file=exp.dmp commit=Y buffer=64000 full=Y

---- 这种方法可用于整个数据库。

篇4:oracle数据库和分区

目录:

Oracle数据完整性和锁机制 索引及优化之表分析 表分析、约束及表间关系 Oracle体系结构1 Oracle体系结构2 海量数据库及分区1 海量数据库及分区2 海量数据库及分区3 海量数据库及分区4 高级SQL优化(一) 高级SQL优化(二) 高级SQL优化(三) 常用优化工具 PPT和源码下载: sishuok.com/forum/posts/list/6365.html 配套视频课程 Oracle性能优化 sishuok.com/product/601 海量数据库和高级SQL优化 sishuok.com/product/602 原规划本课的内容为表分区,即单级分区表的简要知识,规划为一课,

oracle数据库和分区

。由于近年来行业内海量数据处理人才紧缺,现根据读者反馈将内容调整为四课,以详细讨论海量数据库的全部主要知识,并辅以大量实践练习,以期有志于研究学习VLDB的读者通过加量的课程学习能达到建立起VLDB基础理论体系,迅速适应相应的海量数据库设计和开发工作的效果。 VLDB概述

引子 很多现代企业如电子商务企业需要频繁的在一个包含数百个GB或者数个TB数据的数据库上运行关键任务。这种数据库称为超大型数据库(VLDB,Very Large Databases,又称海量数据库),其中的数据称为海量数据。实践中,VLDB一般包含两个关键要素:一是用户达到百万级甚至千万级,数据库的容量一般超过1TB(1TB=1024GB);二是系统必须提供实时响应功能,不能停机、具有高度的可靠性和可扩展性。例如亚马逊、淘宝、苏宁易购等系统的数据库。对于VLDB的支持和维护的挑战工作催生了海量数据解决方案。VLDB的主要主题中,最关键的方法一般是使用分区、压缩、并行执行等技术。 分区简介 分区是将一个超大表或者索引分解成若干个更小、更易于管理的小的部分,这些小的部分称为分区。对于表而言称为分区表,对于索引而言称为分区索引。原来对超大表或超大索引的SQL查询和DML无需进行任何修改即可访问这些分区表和分区索引。定义了分区后, DDL语句就只访问和操纵单个分区,而不 是整个表或索引,因而分区带来了高可维护性的好处。分区的一个基本要求是表或索引的每个分区具有 相同逻辑属性,如列名、约束等;但不同的分区可以具有不同的物理属性,如压缩的启用/禁用,物理存储设置、表空间等。对于许多不同类型的应用,尤其是管理大量数据的应用程序而言分区是非常有用的,如对于OLTP分区可提高其可管理性和可用性、性能,而对于数据仓库分区则可提高其性能和可管理性。 分区的优点如下: ? 显著缩短操作处理时间:这些操作包括数据装载、索引的创建和重建、备份与恢复。能显著缩短的原因是这些操作仅限于分区级(在个体的分区上),而非表级(在整个表上) ? 提高查询响应性能:通常的查询只需要访问分区的一个子集即可完成,从而避免了访问整个表。这种技术称为分区裁剪,其对性能的提升可以达到量级单位 ? 显著缩短因维护操作导致的计划宕机时间:分区是独立于分区维护操作的,因此允许在表的不同分区或索引不同的分区上执行并发维护操作。如可以对分区执行并发的SELECT和DML语句等维护操作,其二者不会相互影响 VLDB与分区 海量数据库没有最小的绝对大小,VLDB虽然类似于一个小型数据库,但管理一个VLDB依然存在很多挑战,这些挑战与执行操作的数据库的 绝对规模及其 成本效用是有关系的。数据库大小的稳步增长与以下几个趋势因素有关: ? 系统开发的独立性和综合合并应用需求的驱动:每个系统独立开发,但跨部门的综合应用需要数据库和应用进行整合合并,而整合带来的一个是基础数据和存储结构的不统一,二就是导致数据库大小的持续增长 ? 法律法规的规定:法律法规要求存储最小时间粒度的数据并保存一个较长时间,如日志信息、交易信息等 ? 客户公司发展因素:如公司的增长发展、收购等导致用户规模和业务规模的增长,这些均能带来数据规模和并发规模的增长 分区策略是管理超大容量数据库的一个核心特性。分区地址的增长是VLDB的最基本挑战之一,Oracle使用“分而治之”的技术策略管理数据库中的表和索引,当这些表和索引增长时,该技术非常有效。分区的一个特性是当管理一个超大容量数据库时,无需投入更多的管理资源和硬件资源即可提供具有高度可伸缩性和统一的可靠数据库性能的数据库服务。 Oracle建议,哪怕小规模数据库(以MB为单位)也可以分区,分区同样能获得与以TB为单位的VLDB相同的性能和高可维护性。因此从这个角度触发,建议对每个大数据表均进行分区,亦即分区是数据库优化的一个重要手段。 分区基础知识概览 1.分区的基本知识从 数据库管理员的角度来看,一个分区的对象有多个块,可以集体管理或单独管理,这赋予管理员在管理分区对象相当大的灵活性。从 应用程序的角度来看,一个分区表,非分区表完全相同,使用SQL查询和DML语句访问分区表时,无需作任何修改。2.分区键 分区表的行必须明确的存储在单一的分区,分区键可以由一个或多个列组成,用来决定行所存储的分区,Oracle使用分区键来自动确定Insert、Update、Delete操作所对应的分区。 如课程“索引及优化之表分析”中“用户交易表”基于年度、月度和日期建立分区,则该三列构成分区键,用来决定DML操作对应的分区。3.分区表 表可以被分割为无数个分区,但如果表中包含LONG或LONG RAW类型的列是则不可分区,而CLOB和BLOB类型的列是支持分区的。 为了减少磁盘和内存使用情况(特别是高速缓存),可以将表和分区的分区表进行压缩,表压缩 也可以大大节约存储空间、加快查询执行速度。 然而,有轻微的增加CPU的负担。压缩适合的情况 是数据仓库环境,即读多写少的情况。建议考虑使用表分区的情形: (1).表的大小超过2GB时,或超过万行记录时 (2).表中包含历史数据,新数据会被写入新分区时 (3).表的内容必须被分布在不同类型的存储设备时 建议考虑使用索引分区的情形: (1).对表数据进行迁移并且希望避免重建索引时 (2).对部分数据进行维护,而不希望维护期间使整个索引无效时 (3).减少索引中具有单一递增值的列引起的索引偏移时 4.分区与LOB类型数据 LOB类型列中存储的非结构化数据(图片、文档等)也能分区。当进行分区时,LOB类型的列存储在子集的表空间,且列存储在分区所在的表空间中。此技术在存储有大对象数据且不经常更新,而其他数据会经常被更新时非常高效,原因是将大对象数据与主数据进行了分离的存储。如员工记录数据,照片是大对象。 分区的好处 1.提高性能分区通过限定操作数据的数量、对并行执行的数据是分布式的,因此带来了成倍的性能提升,主要包括: (1).分区修剪 分区修剪是最简单也是最本质的性能提高手段,原因是限定了数据范围。常常可以将查询性能提高几个数量级。如某个订单表按月分区,该表中存有2年的数据,现在查询某个月度的订单数,则只需访问访问一个分区,而不是24个分区,因此性可能会提升20倍。 (2).智能化分区连接 多表连接时,该技术能在下列两种情形下会得到应用 1).A表与B表连接,A表的键是colS,B表的键也是colS,两个表的分区均是基于列colS,且连接条件是A.colS= A.colS 2).参考完整性中的参考分区表与其父表连接 此时智能化分区连接技术能将一个大的连接打破使用一个小的连接,从而节省时间。该技术无论是在串行化的还是在并行化的执行中具有重要意义。 2.易管理性 由于分区后的存储是单个单元的,也就是提供了“分而治之”的管理方式,因此可以对单个分区而不是整个表进行维护操作,如备份等,

3.可用性 不同的分区是独立的,因此提供可高可用性。如某个分区损坏,但其他分区依然可以使用,而不是整个表不能被使用。每个分区也可以存储在不同的表空间中,每个分区也可以设置不同的存储参数。 分区策略概述 Oracle分区提供了三种基本的数据分区方法作为基本的分区策略,控制如何将数据放入单独的分区: l范围Range l哈希Hash l列表List 使用三种基本的分区方法,表可以被分区成单一分区列表或复合分区表,分别称为单级分区和组合分区。 每个分区策略都有不同的优点和设计考虑。 因此,不同的策略适合不同特定的情况。 分区表 环境准备 1.先备份前面的30课的数据 2.只准备使用表ACCOUNT_TRADE中的数据单级分区 使用范围、哈希、列表三种分区策略的任何一中,在表的一个或多个列上建立分区。

1.范围分区策略-策略说明 依据分区键值的范围不同进行分区,当数据在范围内均衡分布时,性能最好,是最常见的分区策略,一般与日期相关。该策略的每个分区均具有一个VALUES LESS THAN子句,用来指定该分区包含的范围数据的上限。任何分区键的值大于等于该值时被添加到下一个更高的分区。 所有分区,除了第一个,有一个隐含的下限为前一个分区的VALUES LESS THAN值。此外,包含一个MAXVALUE用来义为最高的分区。 MAXVALUE代表一个虚拟的无限大的值,包括NULL值。 1.范围分区策略—语法1.范围分区策略—语法注意事项 如果基于多个列创建分区,列之间用逗号分隔;值部分也是用逗号分隔,且该值必须与列的类型相同。值部分也可以使用函数,如TO_DATE等。还要注意LESS THAN相当于小于号(<),如: partition by range(ND,YD ) ( partition ACCOUNT_TRADE_SR_P01 values less than(2010,'02'), partition ACCOUNT_TRADE_SR_P201002 values less than(2010,'03'), partition ACCOUNT_TRADE_SR_P201003 values less than(2010,'04'), partition ACCOUNT_TRADE_SR_P201004 values less than(2010,'05'), partition ACCOUNT_TRADE_SR_P201005 values less than(2010,'06'), partition ACCOUNT_TRADE_SR_P201006 values less than(2010,'07'), partition ACCOUNT_TRADE_SR_P201007 values less than(2010,'08'), partition ACCOUNT_TRADE_SR_P201008 values less than(2010,'09'), partition ACCOUNT_TRADE_SR_P201009 values less than(2010,'10'), partition ACCOUNT_TRADE_SR_P201010 values less than(2010,'11'), partition ACCOUNT_TRADE_SR_P201011 values less than(2010,'12'), partition ACCOUNT_TRADE_SR_P201012 values less than(,'01'), partition ACCOUNT_TRADE_SR_PMORE values less than(MAXVALUE,MAXVALUE)); 1.范围分区策略—示例体验 l 创建一个结构类似表ACCOUNT_TRADE的单级范围分区表ACCOUNT_TRADE_SR l从表ACCOUNT_TRADE读取的数据写入表ACCOUNT_TRADE_SR l分析表ACCOUNT_TRADE_SR l查看分区数据并将两个表的数据进行对比 参见附件脚本3

1.范围分区策略—示例体验2.散列分区策略-策略说明 依据Oracle的散列分区算法将数据映射到分区上,该算法不可人工改变。散列分区会尽量将数据均匀的分布在不同的分区上。当业务数据中没有历史数据时,选择散列分区是一个比较好的替代方法。这个分区方法能够保持I/O平衡,但是不可用于范围查询或不等式查询。 注意:Oracle推荐Hash分区的分区数是2的幂,如2、4、8、16等。 2.散列分区策略-语法2.散列分区策略-语法注意事项 单独散列分区(individual_hash_partitions)及其限制使用子名按照名字指定单个分区,分区名可以匆略。此时能指定的唯一子句是表空间。按照数量的散列分区(hash_partitions_by_quantity)可以指定分区的数目,Oracle此时指定分区的名字SYS_Pn。STORE IN子句指定分区所分布的表空间的名称。表空间的数目不一定和分区的数目相等。如果分区的数目比表空间的数目大,则分区按照名称循环使用表空间。如果在按数量分区时指了STORE IN和分区存储子句的表空间,则SOTRE IN指定了表创建分区的位置,TABLESPACE子句指定随后操作的缺省表空间。此时语句partitions后面只能跟数字,一般为2的幂,否则会引起ORA-14152错误。 2.散列分区策略—按照数量分区示例体验 表为ACCOUNT_TRADE_SHQ,方法同前面,分区语句如下: partition by hash ( JYSJ ) partitions 4 store in ( TS_ORALEARN, TS_ORALEARN_IDX ); 参见附件脚本42.散列分区策略—单独散列分区示例体验 表为ACCOUNT_TRADE_SHI,方法同前面,分区语句如下: partition by hash( JYSJ )( partition ACCOUNT_TRADE_SHI_P1 tablespace TS_ORALEARN, partition ACCOUNT_TRADE_SHI_P2 tablespace TS_ORALEARN_IDX, partition ACCOUNT_TRADE_SHI_P3 tablespace TS_ORALEARN, partition ACCOUNT_TRADE_SHI_P4 tablespace TS_ORALEARN ); 参见附件脚本53.列表分区策略-策略说明 列表分区通过为分区键指定一系列离散的值(即枚举值)来明确的控制行数据的存储分区,其优点是可以将一些无序和不相关的数据组织在一起。如,银行系统的数据可以按区域分区。每个分区的list_values_clause(参见语法说明部分)最少有一个值。空值可能在多个分区中出现。你可以指定一个缺省分区,且缺省分区是定义分区的最后一个。 list_values_clause的每个值在表的所有分区必须唯一。 3.列表分区策略-语法3.列表分区策略—示例体验 表为ACCOUNT_TRADE_SL,方法同前面,分区语句如下: partition by list ( ND ) ( partition ACCOUNT_TRADE_SL_P2010 values ( 2010 ) tablespace TS_ORALEARN, partition ACCOUNT_TRADE_SL_P2011 values ( 2011 ) tablespace TS_ORALEARN, partition ACCOUNT_TRADE_SL_PD values ( DEFAULT ) tablespace TS_ORALEARN_IDX ); 参见附件脚本6

篇5:数据库oracle笔试

我在考场上写的n=5, i=2; 运行得出结果却为9. 分析了一下得出原因在于: 如果n<5的话,那么它会从其自身起一直到5都会执行j++这条语句, 因为此代码片段中并没有使用 break。

n与i有多种组合值, 如(1,1)、(4,1)和(5,1)等都可以。

3、复习JAVA的 “内部类”章节。

4、复习JAVA的` “反射”章节。

5、温习操作系统 部分的知识。

6、数组问题:

如我声明 int [] a = new int[1] , 那么a[0]的默认值就为0。 我起初理解错误了, 我认为如此声明只是为数组开辟了空间而已, 在其空间上默认值为NULL。

7、关于启动 gc 的方法:

System.gc 和 RunTime()类的 gc() 方法, 但是即使调用了前面的方法也不保证一定会进行回收。

拓展之:

a. GC并不是定期来回收你的垃圾内存,即是根据需要来回收。

b. GC的回收是因为:它认为你的系统已经开始内存紧张(这个就是jvm的神奇)

c. 即使GC开始准备清理你的垃圾内存,但是如果该内存的引用还存在(不等于null), 这个时候GC仍然无能为力!

d、RunTime类的 public static Runtime getRuntime() 返回: 与当前 Java 应用程序相关的 Runtime 对象。

8、int i=10, double e = 10.0; 判断(i==e)、(i==10.0)的真假。

我认为一个是int类型,一个是double类型,它们分属不同的类型, 所以我认为其是错误的, 然而经运行测试发现是正确的。

9、public static void main(String[] args){

StringBuffer str1 = new StringBuffer(“a”);

StringBuffer str2 = new StringBuffer(“b”);

conver(str1, str2); }

篇6:如何启动和关闭Oracle数据库

对于一个oracle数据库新手来说,怎么样进行管理oracle数据库呢? 首先从最简单的启动和关闭数据库来说,下面简单的介绍一下Oracle数据库的启动和关闭顺序实例讲解。

一、oralce的启动顺序:

1、先启动监听程序(对应端口1521) :

[]#lsnrctl start

2、启动oracle实例:

[]#sqlplus / as sysdba(回车)

SQL>startup

--启动的是环境变量中的默认数据库实例 $ORACLE_SID

--如果启动多个实例:export ORACLE_SID=ctaudit

[]#sqlplus / as sysdba(回车)

SQL>startup

3、启动em(对应端口1158),isqlplus(对应端口5560):

[]#emctl start dbconsole

[]#isqlplusctl start

二、oracle的关闭顺序

1、先关闭em,isqlplus:

[]#emctl stop dbconsole

[]#isqlplusctl stop

2、关闭监听:

[]#lsnrctl stop

3、关闭oracle实例:

[]#sqlplus / as sysdba(回车)

SQL>shutdown immediate

以上所述是小编给大家介绍的Oracle数据库的启动和关闭顺序实例讲解,如果大家有任何疑问请给我们留言,小编会及时回复大家的。在此也非常感谢大家对的支持!

[如何启动和关闭Oracle数据库]

相关专题 学习心得数据库