以下是小编给大家收集的Oracle数据库碎片数据库,本文共6篇,欢迎大家前来参阅。本文原稿由网友“蓝色点点”提供。
篇1: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
篇2: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
---- 这种方法可用于整个数据库。
篇3: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
篇4:数据库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); }
篇5:oracle数据库 面试宝典
1、冷备份和热备份的不同点以及各自的优点
解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。(因为不必将archive log写入硬盘)
2、如果你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢?
解答:重建控制文件,用带backup control file 子句的recover 命令恢复数据库。
3、如何转换init.ora到spfile?
解答:使用create spfile from pfile 命令.
4、解释data block , extent 和 segment的区别(这里建议用英文术语)
解答:data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库对象拥有的所有extents被称为该对象的segment.
5、给出两个检查表结构的方法
解答:
1、DESCRIBE命令
2、DBMS_METADATA.GET_DDL 包
6、怎样查看数据库引擎的报错
解答:alert log.
7、比较truncate和 命令
解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要rollback segment .而Delete是DML操作, 需要rollback segment 且花费较长时间.
8、使用索引的理由
解答:快速访问表中的data block
9、给出在STAR SCHEMA中的两种表及它们分别含有的数据
解答:Fact tables 和dimension tables. fact table包含大量的主要的信息而dime nsion tables 存放对fact table 某些属性描述的信息
10、FACT Table上需要建立何种索引?
解答:位图索引 (bitmap index)
11、给出两种相关约束?
解答:主键和外键
12、如何在不影响子表的前提下,重建一个母表
解答:子表的外键强制实效,重建母表,激活外键
13、解释归档和非归档模式之间的不同和它们各自的优缺点
解答:归档模式是指你可以备份所有的数据库 transactions并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点。但是非归档模式可以带来数据库性能上的少许提高.
14、如何建立一个备份控制文件?
解答:Alter database backup control file to trace.
15、给出数据库正常启动所经历的几种状态?
解答:
STARTUP NOMOUNT ?C 数据库实例启动
STARTUP MOUNT - 数据库装载
STARTUP OPEN ?C 数据库打开
16、哪个column可以用来区别V$视图和GV$视图?
解答:INST_ID 指明集群环境中具体的 某个instance 。
17、如何生成explain plan?
解答:运行utlxplan.sql. 建立plan 表
针对特定SQL语句,使用 explain plan set statement_id = 'tst1' into plan_table
运行utlxplp.sql 或 utlxpls.sql察看explain plan
18、如何增加buffer cache的命中率?
解答:在数据库较繁忙时,适用buffer cache advisory 工具,查询v$db_cache_advice.如果有必要更改,可以使用 alter system set db_cache_size 命令
19、ORA-01555的应对方法?
解答:具体的出错信息是snapshot too old within rollback seg , 通常可以通过增大rollback seg来解决问题。当然也需要察看一下具体造成错误的SQL文本
20、解释$ORACLE_HOME和$ORACLE_BASE的区别?
解答:ORACLE_BASE是oracle的根目录,ORACLE_HOME是oracle产品的目录。
[oracle数据库 面试宝典]
篇6:oracle数据库索引失效
这篇文章主要介绍了oracle数据库索引失效的原因及如何避免索引失效,有需要的小伙伴参考下,
今天一个同事突然问我索引为什么失效。说实在的,失效的原因有多种:
但是如果是同样的sql如果在之前能够使用到索引,那么现在使用不到索引,以下几种主要情况:
1. 随着表的增长,where条件出来的数据太多,大于15%,使得索引失效(会导致CBO计算走索引花费大于走全表)
2. 统计信息失效 需要重新搜集统计信息
3. 索引本身失效 需要重建索引
下面是一些不会使用到索引的原因
索引失效
1) 没有查询条件,或者查询条件没有建立索引
2) 在查询条件上没有使用引导列
3) 查询的数量是大表的大部分,应该是30%以上。
4) 索引本身失效
5) 查询条件使用函数在索引列上(见12)
6) 对小表查询
7) 提示不使用索引
8) 统计数据不真实
9) CBO计算走索引花费过大的情况。其实也包含了上面的情况,这里指的是表占有的block要比索引小。
10)隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误. 由于表的字段tu_mdn定义为varchar2(20),
但在查询时把该字段作为number类型以where条件传给Oracle,这样会导致索引失效.
错误的例子:select * from test where tu_mdn=13333333333;
正确的例子:select * from test where tu_mdn=‘13333333333‘;
11)对索引列进行运算导致索引失效,我所指的对索引列进行运算包括(+,-,*,/,! 等)
错误的例子:select * from test where id-1=9;
正确的例子:select * from test where id=10;
12)使用Oracle内部函数导致索引失效.对于这样情况应当创建基于函数的索引.
错误的例子:select * from test where round(id)=10;
说明,此时id的索引已经不起作用了 正确的例子:首先建立函数索引,
create index test_id_fbi_idx on test(round(id));
然后 select * from test where round(id)=10; 这时函数索引起作用了 1, 2,单独的>,<,(有时会用到,有时不会)
3,like “%_” 百分号在前.
4,表没分析.
5,单独引用复合索引里非第一位置的索引列.
6,字符型字段为数字时在where条件里不添加引号.
7,对索引列进行运算.需要建立函数索引.
8,not in ,not exist.
9,当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况,
10, 索引失效。
11,基于cost成本分析(oracle因为走全表成本会更小):查询小表,或者返回值大概在10%以上
12,有时都考虑到了 但就是不走索引,drop了从建试试在
13,B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null 都会走
14,联合索引 is not null 只要在建立的索引列(不分先后)都会走,
in null时 必须要和建立索引第一列一起使用,当建立索引第一位置条件是is null 时,
其他建立索引的列可以是is null(但必须在所有列 都满足is null的时候),
或者=一个值;当建立索引的第一位置是=一个值时,其他索引列可以是任何情况(包括is null =一个值),
以上两种情况索引都会走。其他情况不会走。
- Oracle数据库的几种启动和关闭方式2024-03-28
- Mysql和Oracle数据库中的分页查询2022-12-11
- 简便实现Oracle数据库文件移动方法数据库教程2023-06-25
- []Oracle 10g/11g数据库管理技术课程培训2023-01-03
- 解读Oracle 9i延续性初始化参数文件数据库2023-02-27
- 基于Oracle Spatial的时态空间数据库设计数据库教程2022-12-11
- 数据库服务合同2025-06-03
- 数据库管理个人简历2025-08-23
- 数据库工程师岗位的职责2025-07-21
- 数据库工程师的岗位职责表述2025-05-27