ORACLE数据库的部分试题

| 收藏本文 下载本文 作者:是你

下面是小编给大家整理的ORACLE数据库的部分试题(共含9篇),欢迎大家借鉴与参考,希望对大家有所帮助。同时,但愿您也能像本文投稿人“是你”一样,积极向本站投稿分享好文章。

ORACLE数据库的部分试题

篇1:ORACLE数据库的部分试题

ORACLE数据库的部分试题

1怎样查看数据库引擎的报错

解答:alert log.

2 比较truncate和delete 命令

解答:两者都可以用来删除表中所有的记录,区别在于:truncate是DDL操作,它移动HWK,不需要 rollback segment .而Delete是DML操作, 需要rollback segment 且花费较长时间.

3 使用索引的理由

解答:快速访问表中的data block

4. 给出在STAR SCHEMA中的两种表及它们分别含有的数据

解答:Fact tables 和dimension tables. fact table 包含大量的主要的信息而 dimension tables 存放对fact table 某些属性描述的信息

10. FACT Table上需要建立何种索引?

解答:位图索引 (bitmap index)

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

篇4: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

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

篇5: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

篇6:数据库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); }

篇7:如何启动和关闭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数据库]

篇8:Oracle数据库面试练习题

1.列出至少有一个员工的所有部门。

分析:每个部门有多少员工 —— 根据部门编号进行分组

select deptno,count(*) from emp group by deptno having count(*) >= 1;

2.列出薪金比“smith”多的所有员工。

分析:先查询出smith工资 : select sal from emp where ename=’smith’;

select * from emp where sal > (select sal from emp where ename=’smith’);

3. 列出所有员工的姓名及其直接上级的姓名。

分析:表自映射,为表起别名,进行关联 t1 表模拟员工表 t2 表保存直接上级信息

select t1.ename 员工姓名, t2.ename 直接上级 from emp t1,emp t2 where t1.mgr = t2.empno;

4.列出受雇日期早于其直接上级的所有员工。

分析:原理和上题类似

select t1.*,t2.hiredate from emp t1,emp t2 where t1.mgr = t2.empno and t1.hiredate < t2.hiredate;

5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。

分析:部门没员工也要显示 — 外连接。无论怎样部门信息一定要显示,通过部门去关联员工

select * from dept left outer join emp on dept.deptno = emp.deptno ;

6.列出所有“clerk”(办事员)的姓名及其部门名称。

分析:查找job为clerk 员工姓名和部门名称

员工姓名 emp表

部门名称 dept表

select emp.ename,dept.dname,emp.job from emp,dept where emp.deptno = dept.deptno and emp.job=’clerk’;

7.列出最低薪金大于1500的各种工作。

分析:工作的最低薪金 —- 按工作分组,求最低薪金

select min(sal) from emp group by job;

大于1500 是一个分组条件 — having

select job,min(sal) from emp group by job having min(sal) > 1500;

8.列出在部门“sales”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。

分析:员工姓名位于 emp 部门名称 dept

select emp.ename from emp,dept where emp.deptno = dept.deptno and dept.dname = ‘sales’;

9.列出薪金高于公司平均薪金的所有员工。

分析:先求公司平均薪金 select avg(sal) from emp;

select * from emp where sal > (select avg(sal) from emp);

10.列出与“scott”从事相同工作的所有员工。

分析:先查询scott : select job from emp where ename =’scott’;

select * from emp where ename ‘scott’ and job = (select job from emp where ename =’scott’);

11.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。

分析:查看部门30 中所有员工薪资列表 select sal from emp where deptno = 30;

select * from emp where sal in (select sal from emp where deptno = 30);

12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。

分析:

select * from emp where sal > all(select sal from emp where deptno = 30);

select * from emp where sal > (select max(sal) from emp where deptno = 30);

13.列出在每个部门工作的员工数量、平均工资。

分析:按部门分组

select deptno, count(*),avg(sal) from emp group by deptno;

14.列出所有员工的姓名、部门名称和工资。

分析:

select emp.ename,dept.dname,emp.sal from emp,dept where emp.deptno = dept.deptno;

15.列出所有部门的详细信息和部门人数。

分析:

select dept.*,count(emp.*) from emp,dept where emp.deptno = dept.deptno group by deptno ; 错误!

求各个部门编号和人数 select deptno,count(*) from emp group by deptno;

再和dept表关联 select dept.*,temp.部门人数 from dept , (select deptno,count(*) 部门人数 from emp group by deptno) temp where dept.deptno = temp.deptno ;

16.列出各种工作的最低工资。

分析:各个工作 分组 , 最低工资 min

select job,min(sal) from emp group by job;

17.列出各个部门的manager(经理)的最低薪金。

分析:where job=’manager’ 过滤所有不是经理数据

select deptno,min(sal) from emp where job =’manager’ group by deptno;

18.列出所有员工的年工资,按年薪从低到高排序。

分析: select ename, sal*12 from emp order by sal*12 asc;

19.查出emp表中薪水在3000以上(包括3000)的所有员工的员工号、姓名、薪水。

分析: select * from emp where sal >= 3000;

20.查询出所有薪水在’allen’之上的所有人员信息。

分析:select * from emp where sal > (select sal from emp where ename =’allen’);

21.查询出emp表中部门编号为20,薪水在以上(不包括)的所有员工,显示他们的员工号,姓名以及薪水,以如下列名显示:员工编号 员工名字 薪水

分析: select empno 员工编号,ename 员工姓名 ,sal 薪水 from emp where deptno = 20 and sal > ;

22.查询出emp表中所有的工作种类(无重复)

分析: select distinct job from emp;

23.查询出所有奖金(comm)字段不为空的人员的所有信息。

分析:不为空 is not null

select * from emp where comm is not null;

24.查询出薪水在800到2500之间(闭区间)所有员工的信息。(注:使用两种方式实现and以及between and)

分析:select * from emp where sal >= 800 and sal <= 2500;

select * from emp where sal between 800 and 2500;

25.查询出员工号为7521,7900,7782的所有员工的信息。(注:使用两种方式实现,or以及in)

分析:select * from emp where empno in(7521,7900,7782);

select * from emp where empno=7521 or empno = 7900 or empno = 7782;

26.查询出名字中有“a”字符,并且薪水在1000以上(不包括1000)的所有员工信息。

分析: 模糊查询

select * from emp where ename like ‘%a%’ and sal > 1000;

27.查询出名字第三个字母是“m”的所有员工信息。

分析:第三个字母 __m%

select * from emp where ename like ‘__m%’;

28.将所有员工按薪水升序排序,薪水相同的按照入职时间降序排序。

分析:select * from emp order by sal asc,hiredate desc;

29.将所有员工按照名字首字母升序排序,首字母相同的按照薪水降序排序。

分析:substring(‘字符串’,第几个字符,长度); —- 首字母 substring(ename,1,1)

select * from emp order by substring(ename,1,1) asc,sal desc;

篇9:PB如何连接Oracle数据库

如果你已经是个powerbuilder高手,那么下面的东西对你来说毫无价值,你大可不必再看下去,如果你刚刚步入powerbuilder的殿堂,那么下面的东西对你来说可能有点价值,你应该看一看。

作为一个优秀的客户端开发工具,powerbuilder必然需要与大型的数据库相连接,尽管许多资料上都介绍了如何通过odbc或者powerbuilder自带的db profile或者专用接口连接上数据库,但仍然有许多使用者按此方法却无法连接上数据库,这方面的原因可能是powerbuilder本身的原因,比如在安装powerbuilder时的选项、odbc的版本之类;也可能是在安装客户端的oracle、sybase、informix、sql server等软件上的问题,下面就从最根本的odbc配置开始,教你一步步如何连接上数据库。 odbc数据源的配置

进入控制面板,打开odbc数据源(32位),如图1所示,点击“add”按钮,进入odbc数据源的配置面板,如图2所示:

选择“oracle odbc driver”一项,注意当前版本号为“8.00.0400”,如果你的操作系统中安装的是oracle7,则相应的版本号会不同。提醒一点:在windows98操作系统上是无法安装oracle8.0.4的(只能安装oracle7.2.3),oracle8.0.5则没有试过。因而会有一些使用者在windows98系统上无法正常配置odbc数据源,因为windows98本身自带的odbc数据源已经比oracle7数据源版本要高,无论你怎样配置odbc,系统总会提示你要安装一个更高版本的oracle,自然你就无法配置odbc了,有一个解决方法就是用pb7第二张光盘上的odbc安装程序覆盖系统中的odbc,或者把你的操作系统改为windows95/97算了。

然后进入“oracle8 odbc driver setup”设置,在“data source name”一项中随便输入一个名字,在“data source service name”一栏中输入oracle连接数据库的字符串名,这可以在你安装的oracle目录中的tnsnames.ora文件中查看到(oracle7安装路径为“orawin95network admin”;oracle8安装路径为“orawin95net80admin”),或者你通过“sql net easy configuration”新添加一个数据库连接配置,将配置中的字符串填入即可,其他的就不必再填入,避免出现画蛇添足之错,反而连接不上数据库了。 db profile数据源的配置

进入pb,打开db profile,如图4所示,选择odbc一项,点击“new”,进入pb数据源的配置,如图5所示。当然如果你之前没有进行odbc的配置,你也可以在这里点击“config odbc”进入之前你看到的odbc配置界面。

在“profile name”中自定义一个名字,然后从“data source”的下拉菜单中选择你在odbc中已经配置好的数据源,输入登录数据库所需要的用户名与密码,当然你认为没有这个必要性的话可以不在这里输入(主要是不要轻易让人知道你数据库的口令,不然问题就大了),到这一步为止,pb已经做完了所有数据库连接的配置,剩下的就是连接上数据库了。 pb for oracle专用接口的配置

同样是进入pb,点击db profile选项(这是对oracle7版本而言,如果是oracle8,相应的选项就是oracle8.0.4),看到上面的“073 oracle 7.3”选项没有,点击一下,再按“new”进入图7的界面,“profile name”一栏随意填,“server”一栏填写时要注意,oracle7版本一定要在数据连接字符串前加上@,否则不能连接上pb数据库,oracle8版本则不必加上@,其他的设置就可以不用了。

以上三种pb连接数据库的方法其实十分简单,但是初学者却又会经常出错,在这里只是想作为一种抛砖引玉之用,希望广大初学者通过本文对pb数据源配置能够有一定的了解。下面再对oracle连接数据库的配置文件tnsnames.ora简单说明一下,“tnsnames.ora”文件其实是通过“sql net easy configuration”初始化配置后的参数文件,如果你不想通过“sql net easy configuration”进行配置,你只需要把你先前已有的“tnsnames.ora”文件放入oracle的admin目录中,覆盖现有的文件就可以了,当然你也可以再自己添加数据库连接字符串。通常,一个“tnsnames.ora”文件内容如下: ······kf.world = (description = (address_list =(address =(community = tcp.world) (protocol = tcp) (host = 136.12.145.5) (port = 1521) ) (address =(community = tcp.world) (protocol = tcp) (host = 136.12.145.5) (port = 1526) ) ) (connect_data = (sid = sid3) ) )······

其中最要的是第一项和最后一项(这里是以tcp/ip网络连接,大多数用户都是以此连接),host一栏是主机地址,“connect_data = (sid = sid3)”中的sid3是连接主机数据库的字符串,你要修改这几项就可以了。另外谈谈如何让英文版的oracle7显示中文,其实很简单,只要将注册表“hkey_local_machine softwareoraclenls_lang”中的值改为如下值就可以了“ simplified chinese_china.zhs16cgb231280”。

删除Oracle 9i数据库数据库教程

ORACLE NUMBER类型详解数据库教程

Oracle常????}集(三)数据库教程

Oracle诊断案例Spfile案例一则数据库教程

更改Oracle数据库表的表空间数据库教程

oracle经典20道笔试题

MIS系统实例中Oracle数据库的安全策略数据库

优化Oracle停机时间及数据库恢复数据库教程

RHAS 3.0上的Oracle 9i的安装数据库教程

厦门市小升初的数学考试部分试题

ORACLE数据库的部分试题(共9篇)

欢迎下载DOC格式的ORACLE数据库的部分试题,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档