Oracle是关系型数据库管理系统 它功能强大 性能卓越 在当今大型数据库管理系统中占有重要地位 在正常情况下 Oracle数据库会保证数据的安全 稳定 为用户提供正确的数据 但由于计算机系统的故障(硬件故障 软件故障 网络故障和系统故障)影响数据库系统的 *** 作 影响数据库中数据的正确性 甚至破坏数据库 使数据库中全部或部分数据丢失 整个系统都将处于瘫痪状态 因此 如何保证Oracle数据库的安全就成为整个系统安全的重要组成部分
Oracle数据库的安全策略包括数据库的备份和恢复 用户角色管理
一 数据库备份所使用的结构
Oracle数据库使用几种结构来保护数据 数据库后备 日志 回滚段和控制文件
数据库后备是由构成Oracle数据库的物理文件的 *** 作系统后备所组成 当介质故障时进行数据库恢复 利用后备文件恢复毁坏的数据文件或控制文件
每一个Oracle数据库实例都提供日志 记录数据库中所作的全部修改 每一个运行的Oracle数据库实例相应地有一个在线日志 它与Oracle后台进程LGWR一起工作 立即记录该实例所作的全部修改 归档(离线)日志是可选择的 一个Oracle数据库实例一旦在线日志填满后 可形成在线日志归档文件 归档的在线日志文件被唯一标识并合并成归档日志
回滚段用于存储正在进行的事务(为未提交的事务)所修改值的老值 该信息在数据库恢复过程中用于撤消任何非提交的修改
控制文件 一般用于存储数据库的物理结构的状态 控制文件中某些状态信息在实例恢复和介质恢复期间用于引导Oracle
二 在线日志
一个Oracle数据库的每一实例有一个相关联的在线日志 一个在线日志由多个在线日志文件组成 在线日志文件(online redo log file)填入日志项(redo entry) 日志项记录的数据用于重构对数据库所作的全部修改
三 归档日志
Oracle要将填满的在线日志文件组归档时 则要建立归档日志(archived redo log) 其对数据库备份和恢复有下列用处
数据库后备以及在线和归档日志文件 在 *** 作系统和磁盘故障中可保证全部提交的事物可被恢复
在数据库打开和正常系统使用下 如果归档日志是永久保存 在线后备可以进行和使用
数据库可运行在两种不同方式下 NOARCHIVELOG方式或ARCHIVELOG 方式 数据库在NOARCHIVELOG方式下使用时 不能进行在线日志的归档 如果数据库在ARCHIVELOG方式下运行 可实施在线日志的归档
四 Oracle的备份特性
Oracle备份包括逻辑备份和物理备份
逻辑备份
数据库的逻辑备份包含读一个数据库记录集和将记录集写入文件
( )输出(Export)输出可以是整个数据库 指定用户或指定表
( )输入(Import)输入将输出建立的二进制转储文件读入并执行其命令
物理备份
物理备份包含拷贝构成数据库的文件而不管其逻辑内容
Oracle支持两种不同类型的物理文件备份 脱机备份(offline backup)和联机备份(online backup)
( ) 脱机备份
脱机备份用在当数据库已正常关闭 数据库处于 offline 时 要备份下列文件
所有数据文件
所有控制文件
所有联机日志
init ora(可选的)
( ) 联机备份
联机备份可用来备份任何运作在ARCHIVELOG方式下的数据库 在这种方式下 联机日志被归档 在数据库内部建立一个所有作业的完整记录
联机备份过程具备强有力的功能 第一 提供了完全的时间点(point in time)恢复 第二 在文件系统备份时允许数据库保持打开状态
备份方式特性比较
五 Oracle数据库的角色管理
Oracle数据库系统在利用角色管理数据库安全性方面采取的基本措施有
通过验证用户名称和口令 防止非Oracle用户注册到Oracle数据库 对数据库进行非法存取 *** 作
授予用户一定的权限 限制用户 *** 纵数据库的权力
授予用户对数据库实体的存取执行权限 阻止用户访问非授权数据
提供数据库实体存取审计机制 使数据库管理员可以监视数据库中数据的存取情况和系统资源的使用情况
采用视图机制 限制存取基表的行和列集合
六 Oracle数据库的安全策略
由于Oracle数据库备份有三种方式 每种方式具有不同的恢复特性 因此应集成数据库与文件系统备份 集成逻辑备份和物理备份
(一) 备份策略
在 *** 作系统级别 使用大容量磁盘阵列 通过磁盘映像技术使每一个数据库文件自动分布于每个物理磁盘 这样 当某个磁盘出现物理损坏时 *** 作系统会自动引发映像磁盘来取代失效的磁盘 保证数据库的正常运行
在多个不同的物理磁盘上保持多个控制文件的备份 控制文件在数据库恢复期间用于引导Oracle 因此保持多个控制文件的备份 可以确保在出现磁盘故障后 能有可用的控制文件用于数据库恢复
使数据库运行在ARCHIVELOG(归档)方式下 归档日志存放于另一映像的逻辑磁盘上 每晚进行一次联机备份 *** 作 备份所有数据文件 所有归档日志文件 一个控制文件 每周进行一次输出(Export) *** 作
(二) 恢复策略
实例失败
从实例失败中恢复是自动进行的 实例失败一般是由服务器失败引起的 当数据库实例失败后 重新启动服务器 启动数据库 Oracle检查数据文件和联机日志文件 并把所有文件同步到同一个时间点上
磁盘失败
如果丢失的是控制文件 只要关闭数据库 从保留有控制文件的地方拷贝一份即可
如果丢失的是数据文件 可用前一天晚上的联机备份进行恢复 步骤如下
)从备份中把丢失的文件存在原来位置
)加载数据库
)恢复数据库
)打开数据库
错误删除或修改对象
在这种情况下 一般希望能追溯返回到错误发生前的那个时间点上 这叫做时间点恢复 完成恢复的步骤如下
)从当前数据库输出(Export) 输入(Import)到备用数据库 使备用数据库与当前数据库保持一致
)向前滚动备用数据库到错误发生前的那个时间点
)从备用数据库输出受错误影响的逻辑对象
)使用上一步产生的输出文件输入那些受影响的对象到当前数据库
(三) 用户角色管理
对所有客户端按工作性质分类 分别授予不同的用户角色
对不同的用户角色 根据其使用的数据源 分别授予不同的数据库对象存取权限
lishixinzhi/Article/program/Oracle/201311/16847
Oracle数据库的逻辑结构和物理结构
Oracle 数据库的逻辑结构是由一些数据库对象组成,如数据库表空间、表、索引、段、视图、存储过程、触发器等。数据库的逻辑存储结构(表空间等)决定了数据库的物理空间是如何被使用的,数据库对象如表、索引等分布在各个表空间中。
Oracle 数据库的物理结构从 *** 作系统一级查看,是由一个个的文件组成,从物理上可划分为:数据文件、日志文件、控制文件和参数文件。数据文件中存放了所有的数据信息;日志文件存放数据库运行期间产生的日志信息,它被重复覆盖使用,若不采用归档方式的话,已被覆盖的日志信息将无法恢复;控制文件记录了整个数据库的关键结构信息,它若被破坏,整个数据库将无法工作和恢复;参数文件中设置了很多Oracle 数据库的配置参数,当数据库启动时,会读取这些信息。
逻辑结构的优化
逻辑结构优化用通俗的话来说就是通过增加、减少或调整逻辑结构来提高应用的效率,下面通过对基本表的设计及索引、聚簇的讨论来分析ORACLE逻辑结构的优化。
1、基本表扩展
数据库性能包括存储空间需求量的大小和查询响应时间的长短两个方面。为了优化数据库性能,需要对数据库中的表进行规范化。一般来说,逻辑数据库设计满足第三范式的表结构容易维护且基本满足实际应用的要求。所以,实际应用中一般都按照第三范式的标准进行规范化,从而保证了数据库的一致性和完整性,设计人员往往会设计过多的表间关联,以尽可能地降低数据冗余。但在实际应用中这种做法有时不利于系统运行性能的优化:如过程从多表获取数据时引发大量的连接 *** 作,在需要部分数据时要扫描整个表等,这都消耗了磁盘的I/O 和CPU 时间。
为解决这一问题,在设计表时应同时考虑对某些表进行反规范化,方法有以下几种:一是分割表。分割表可分为水平分割表和垂直分割表两种:水平分割是按照行将一个表分割为多个表,这可以提高每个表的查询速度,但查询、更新时要选择不同的表,统计时要汇总多个表,因此应用程序会更复杂。垂直分割是对于一个列很多的表,若某些列的访问频率远远高于其它列,就可以将主键和这些列作为一个表,将主键和其它列作为另外一个表。通过减少列的宽度,增加了每个数据页的行数,一次I/O就可以扫描更多的行,从而提高了访问每一个表的速度。但是由于造成了多表连接,所以应该在同时查询或更新不同分割表中的列的情况比较少的情况下使用。二是保留冗余列。当两个或多个表在查询中经常需要连接时,可以在其中一个表上增加若干冗余的列,以避免表之间的连接过于频繁,一般在冗余列的数据不经常变动的情况下使用。三是增加派生列。派生列是由表中的其它多个列的计算所得,增加派生列可以减少统计运算,在数据汇总时可以大大缩短运算时间。
因此,在数据库的设计中,数据应当按两种类别进行组织:频繁访问的数据和频繁修改的数据。对于频繁访问但是不频繁修改的数据,内部设计应当物理不规范化。对于频繁修改但并不频繁访问的数据,内部设计应当物理规范化。有时还需将规范化的表作为逻辑数据库设计的基础,然后再根据整个应用系统的需要,物理地非规范化数据。规范与反规范都是建立在实际的 *** 作基础之上的约束,脱离了实际两者都没有意义。只有把两者合理地结合在一起,才能相互补充,发挥各自的优点。
2、索引和聚簇
创建索引是提高检索效率最有效的方法之一,索引把表中的逻辑值映射到安全的RowID,能快速定位数据的物理地址,可以大大加快数据库的查询速度,一个建有合理索引的数据库应用系统可能比一个没有建立索引的数据库应用系统效率高几十倍,但并不是索引越多越好,在那些经常需要修改的数据列上建立索引,将导致索引B树的不断重组,造成系统性能的下降和存储空间的浪费。对于一个大型表建立的索引,有时并不能改善数据查询速度,反而会影响整个数据库的性能。这主要是和SGA的数据管理方式有关,Oracle在进行数据块高速缓存管理时,索引数据比普通数据具有更高的驻留权限,在进行空间竞争时,Oracle会先移出普通数据,对建有索引的大型表进行数据查询时,索引数据可能会用完所有的数据块缓存空间,Oracle不得不频繁地进行磁盘读写来获取数据,所以,在对一个大型表进行分区之后,可以根据相应的分区建立分区索引。
Oracle提供了另一种方法来提高查询速度,就是聚簇(Cluster)。所谓聚簇,简单地说就是把几个表放在一起,按一定公共属性混合存放。聚簇根据共同码值将多个表的数据存储在同一个Oracle块中,这时检索一组Oracle块就同时得到两个表的数据,这样就可以减少需要存储的Oracle块,从而提高应用程序的性能。
对于逻辑结构的优化,还应将表数据和索引数据分开表空间存储,分别使用独立的表空间。因为如果将表数据和索引数据放在一起,表数据的I/O *** 作和索引的I/O *** 作将产生影响系统性能的I/O竞争,降低系统的响应效率。将表数据和索引数据存放在不同的表空间中,并在物理层面将这两个表空间的数据文件放在不同的物理磁盘上,就可以避免这种竞争了。
物理结构的优化
数据库的数据最终是存储在物理磁盘上的,对数据进行访问就是对这些物理磁盘进行读写,因此对于这些物理存储的优化是系统优化的一个重要部分。对于物理存储结构优化,主要是合理地分配逻辑结构的物理存储地址,这样虽不能减少对物理存储的读写次数,但却可以使这些读写尽量并行,减少磁盘读写竞争,从而提高效率,也可以通过对物理存储进行精密的计算减少不必要的物理存储结构扩充,从而提高系统利用率。
1、磁盘读写并行优化
对于数据库的物理读写,Oracle系统本身会进行尽可能的并行优化,例如在一个最简单的表检索 *** 作中,如果表结构和检索域上的索引不在一个物理结构上,那么在检索的过程中,对索引的检索和对表的检索就是并行进行的。
2、 *** 作并行优化
*** 作并行的优化是基于 *** 作语句的统计结果,首先是统计各个表的访问频率,表之间的连接频率,根据这些数据按如下原则分配表空间和物理磁盘,减少系统进程和用户进程的磁盘I/O竞争;把需要连接的表格在表空间/物理磁盘上分开;把高频访问的表格在表空间/物理磁盘上分开;把经常需要进行检索的表格的表结构和索引在表空间/物理磁盘上分开。
3、减少存储结构扩展
如果应用系统的数据库比较脆弱,并在不断地增长或缩小,这样的系统在非动态变化周期内效率合理,但是当在动态变化周期内的时候,性能却很差,这是由于Oracle的动态扩展造成的。在动态扩张的过程中,Oracle必须根据存储的要求,在创建行、行变化获取缺省值时,扩展和分配新的存储空间,而且表格的扩展往往并不是事情的终结,还可能导致数据文件、表空间的增长,这些扩展会导致在线系统反应缓慢。对于这样的系统,最好的办法就是在建立的时候预先分配足够的大小和合适的增长幅度。在一个对象建立的时候要根据应用充分地计算他们的大小,然后再根据这些数据来定义对象Initial、Next和Minextents的值,使数据库在物理存储上和动态增长次数上达到一个比较好的平衡点,使这些对象既不经常发生增长,也不过多地占用数据库。
ORACLE在执行SQL时如果使用成本方式分析则所有的成本分析信息来源依靠于系统的统计分析表(DBA_TABLES DBA_INDEXES DBA_TAB_COLUMNS)数据 如果说统计分析的数据是不准确的 那可能会使ORACLE分析出来的路径执行性能极差 所以统计分析数据是影响ORACLE性能极重要的信息 统计分析主要包括产生表及索引的统计信息 表的统计信息主要包括表的行数 每行的平均长度(字节) 空闲块 统计时间等信息索引的统计信息主要包括行数 层数 叶块数 统计时间等信息 另外ORACLE还可以统计列及数据不对称信息 i还可以统计系统信息(CPU I/O)ORACLE执行成本分析时首先取出所应用表及索引的统计数据进行分析 其中数据行数是一个重要的参数 因为ORACLE在分析表大小时行数为主要参数 如果进行两个表联合时 ORACLE会通过分析表的大小 决定应用小表进行全表查询 而大表执行联合查询 这种性能明显高于先大表进行全表扫描 索引的统计信息对分析也产生比较大的影响 如ORACLE通过统计可以分析产生多个索引的优先级及索引的实用性来确定最优的索引策略 ORACLE还可以统计列及数据对称信息以产生更精确的分析 如一个表有A字段的索引 其中A共有两种值 和 共 条记录 为 的记录有 条 为 的记录有 条 这时如果没有进行列数据不对称的统计信息 那么ORACLE对A= 及A= 条件查询都会进行索引 但实际应用对A= 的索引性能得到了很大的提高 而A= 的索引反而使性能下降 所以说索引特征值分析信息对应用索引产生重大影响 精确的信息使ORACLE不会使用不应该用的索引 实际分析 zl_cbqc和zl_yhjbqk都没有建立统计信息 执行如下两个SQL ORACLE将产生不同的执行计划 select from dlyx zl_cbqc b dlyx zl_yhjbqk a where a qc_bh=b qc_bh执行计划:SELECT STATEMENT GOAL = CHOOSENESTED LOOPSTABLE ACCESS FULL DLYX ZL_YHJBQKTABLE ACCESS BY INDEX ROWID DLYX ZL_CBQCINDEX UNIQUE SCAN DLYX 抄表区册主键 select from dlyx zl_yhjbqk a dlyx zl_cbqc b where a qc_bh=b qc_bh执行计划:SELECT STATEMENT GOAL = CHOOSENESTED LOOPSTABLE ACCESS FULL DLYX ZL_CBQCTABLE ACCESS BY INDEX ROWID DLYX ZL_YHJBQKINDEX RANGE SCAN DLYX 区册索引在对两个表进行了统计分析后 select from dlyx zl_yhjbqk a dlyx zl_cbqc b where a qc_bh=b qc_bh执行计划:SELECT STATEMENT GOAL = CHOOSE HASH JOIN TABLE ACCESS FULL DLYX ZL_CBQC TABLE ACCESS FULL DLYX ZL_YHJBQK select from dlyx zl_cbqc b dlyx zl_yhjbqk a where a qc_bh=b qc_bh执行计划:SELECT STATEMENT GOAL = CHOOSE HASH JOIN TABLE ACCESS FULL DLYX ZL_CBQC TABLE ACCESS FULL DLYX ZL_YHJBQK 从以上测试可以明显看出ORACLE的分析结果第 条SQL与第 条SQL在没有统计分析的信息下进行 ORACLE无法进行判断 只能以规则方法进行分析 根据表的出现先后顺序有明显关系 第 条SQL与第 条SQL在有统计分析的信息下进行 ORACLE分析与表的出现先后顺序无关 因为它已经知道了表的数据量并且已经确定返回的数据量基本上是两个表所有的数据 所以对表两个表进行了HASH JOIN (同时取出两个表的数据然后在内存中进行联合产生返回结果) 相关技术 用 yze语句产生分析数据分析表: yze table zl_yhjbqk estimate statistics sample percent分析索引: yze index用户资料表主键pute statistics分析列: yze table zl_yhjbqk pute statistics for columns hbs_bh分析索引列: yze table zl_yhjbqk pute statistics for all indexed columns用sys dbms_utility包分析数据分析数据库(包括所有的用户对象和系统对象): yze_database分析用户所有的对象(包括用户方案内的表 索引 簇): yze_schema用sys dbms_stats包处理分析数据分析数据库(包括所有的用户对象和系统对象):gather_database_stats分析用户所有的对象(包括表 索引 簇):gather_schema_stats分析表:gather_table_stats分析索引:gather_index_stats删除数据库统计信息:delete_database_stats删除用户方案统计信息:delete_schema_stats删除表统计信息:delete_table_stats删除索引统计信息:delete_index_stats删除列统计信息:delete_column_stats设置表统计信息:set_table_stats设置索引统计信息:set_index_stats设置列统计信息:set_column_statsORACLE推荐用户采用sys dbms_stats包体进行分析 因为在ORACLE i及其以上的版本全面扩充的此包体的功能 sys dbms_utility包体进行分析时会对所有的信息全部分析一遍 时间比较长 而在 i中sys dbms_stats可以利用表修改监控技术来判断需统计分析的表进行 节省了用户的分析资源 lishixinzhi/Article/program/Oracle/201311/18242
完整的Oracle数据库通常由两部分组成 Oracle数据库实例和数据库
)数据库是一系列物理文件的集合(数据文件 控制文件 联机日志 参数文件等)
)Oracle数据库实例则是一组Oracle后台进程/线程以及在服务器分配的共享内存区
在启动Oracle数据库服务器时 实际上是在服务器的内存中创建一个Oracle实例(即在服务器内存中分配共享内存并创建相关的后台内存) 然后由这个Oracle数据库实例来访问和控制磁盘中的数据文件 Oracle有一个很大的内存快 成为全局区(SGA)
一 数据库 表空间 数据文件
数据库
数据库是数据集合 Oracle是一种数据库管理系统 是一种关系型的数据库管理系统
通常情况了我们称的 数据库 并不仅指物理的数据集合 他包含物理数据 数据库管理系统 也即物理数据 内存 *** 作系统进程的组合体
数据库的数据存储在表中 数据的关系由列来定义 即通常我们讲的字段 每个列都有一个列名 数据以行(我们通常称为记录)的方式存储在表中 表之间可以相互关联 以上就是关系模型数据库的一个最简单的描述
当然 Oracle也是提供对面象对象型的结构数据库的最强大支持 对象既可以与其它对象建立关系 也可以包含其它对象 关于OO型数据库 以后利用专门的篇幅来讨论 一般情况下我们的讨论都基于关系模型
表空间 文件
无论关系结构还是OO结构 Oracle数据库都将其数据存储在文件中 数据库结构提供对数据文件的逻辑映射 允许不同类型的数据分开存储 这些逻辑划分称作表空间
表空间(tablespace)是数据库的逻辑划分 每个数据库至少有一个表空间(称作SYSTEM表空间) 为了便于管理和提高运行效率 可以使用一些附加表空间来划分用户和应用程序 例如 USER表空间供一般用户使用 RBS表空间供回滚段使用 一个表空间只能属于一个数据库
每个表空间由同一磁盘上的一个或多个文件组成 这些文件叫数据文件(datafile) 一个数据文件只能属于一个表空间 在Oracle 以后 数据文件创建可以改变大小 创建新的表空间需要创建新的数据文件 数据文件一旦加入到表空间中 就不能从这个表空间中移走 也不能与其它表空间发生联系
如果数据库存储在多个表空间中 可以将它们各自的数据文件存放在不同磁盘上来对其进行物理分割 在规划和协调数据库I/O请求的方法中 上述的数据分割是一种很重要的方法
Oracle数据库的存储结构分为逻辑存储结构和物理存储结构
)逻辑存储结构 用于描述Oracle内部组织和管理数据的方式
)物理存储结构 用于描述Oracle外部即 *** 作系统中组织和管理数据的方式
二 Oracle数据库实例
为了访问数据库中的数据 Oracle使用一组所有用户共享的后台进程 此外 还有一些存储结构(统称为System Gloabl Area 即SGA) 用来存储最近从数据库查询的数据 数据块缓存区和SQL共享池(Shared SQL Pool)是SGA的最大部分 一般占SGA内存的 %以上 通过减少对数据文件的I/O次数 这些存储区域可以改善数据库的性能
Oracle数据库实例(instance)也称作服务器(server) 是用来访问数据库文件集的存储结构及后台进程的集合 一个数据库可以被多个实例访问(这是Oracle并行服务器选项)
lishixinzhi/Article/program/Oracle/201311/17362
以上就是关于深入分析Oracle数据库的安全策略全部的内容,包括:深入分析Oracle数据库的安全策略、说明在创建数据库时如何合理规划数据库的物理存储结构和逻辑存储结构、Oracle中关数据库对象的统计分析等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)