Oracle数据库技术文档.docx

上传人:b****3 文档编号:4591925 上传时间:2022-12-07 格式:DOCX 页数:27 大小:36.68KB
下载 相关 举报
Oracle数据库技术文档.docx_第1页
第1页 / 共27页
Oracle数据库技术文档.docx_第2页
第2页 / 共27页
Oracle数据库技术文档.docx_第3页
第3页 / 共27页
Oracle数据库技术文档.docx_第4页
第4页 / 共27页
Oracle数据库技术文档.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

Oracle数据库技术文档.docx

《Oracle数据库技术文档.docx》由会员分享,可在线阅读,更多相关《Oracle数据库技术文档.docx(27页珍藏版)》请在冰豆网上搜索。

Oracle数据库技术文档.docx

Oracle数据库技术文档

Oralec数据库技术文档

Oralec数据库技术文档1

ORACLE数据库分区技术4

Oracle分区功能可以提高许多应用程序的可管理性、性能与可用性。

通过分区功能,可以将表、索引和索引组织表进一步细分为段,从而能够更精确地管理和访问这些数据库对象。

Oracle提供了种类繁多的分区方案以满足每种业务要求。

而且,因为在SQL语句中分区是完全透明的,所以该功能几乎可应用于任何应用程序。

4

分区功能的优势5

分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。

通常,分区可以使某些查询以及维护操作的性能大大提高。

此外,分区还可以极大简化常见的管理任务。

通过分区,数据库设计人员和管理员能够解决前沿应用程序带来的一些难题。

分区是构建千兆字节数据系统或超高可用性系统的关键工具。

5

分区功能的基本知识5

分区功能能够将表、索引或索引组织表进一步细分为段。

这些数据库对象的段叫做分区。

每个分区有自己的名称,还可以选择自己的存储特性。

从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理。

这就使数据库管理员在管理分区后的对象时有相当大的灵活性。

但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用SQLDML命令访问分区后的表时,无需任何修改。

5

表的分区是通过“分区键”来实现的,分区键指的是一些列,这些列决定了某一行所在的分区。

Oracle数据库10g提供了六项技术用于对表进行分区:

5

范围分区5

每个分区都由一个分区键值范围指定(对于一个以日期列作为分区键的表,“2005年1月”分区包含分区键值为从“2005年1月1日”到“2005年1月31日”的行)。

5

列表分区5

每个分区都由一个分区键值列表指定(对于一个地区列作为分区键的表,“北美”分区可能包含值“加拿大”“美国”和“墨西哥”)。

5

散列分区5

将散列算法用于分区键来确定指定行所在的分区。

5

组合范围散列分区5

范围和散列分区技术的组合,通过该组合,首先对表进行范围分区,然后针对每个单独的范围分区再使用散列分区技术进一步细分。

索引组织表只能进行范围分区。

5

组合范围列表分区5

范围和列表分区技术的组合,通过该组合,首先对表进行范围分区,然后针对每个单独的范围分区再使用列表分区技术进一步细分。

索引组织表可以按范围、列表或散列进行分区。

5

Oracle数据库10g还提供了三种类型的分区索引:

5

本地索引5

本地索引是其分区方式与其所在基础表的分区方式一模一样的索引。

本地索引的每个分区仅对应于其所在基础表的一个分区。

6

全局分区索引6

全局分区索引是使用不同于其所在表的分区键进行分区的索引,其所在表可以是分区表或非分区表。

全局分区的索引可以使用范围或散列分区进行分区。

例如,某个表可以按月份进行范围分区,因此具有十二个分区,而该表上的索引则可以使用不同的分区键进行范围分区,从而具有不同的分区数量。

6

全局非分区索引6

全局非分区索引基本上和非分区表的索引一样。

索引结构是不分区的。

6

Oracle提供了一系列丰富的技术,可用于对表、索引和索引组织表进行分区,因此可以针对任何业务环境中的任何应用程序进行最佳的分区Oracle还提供一套完整的SQL命令,用于管理分区表。

其中包括添加新分区、删除分区、分拆分区以及合并分区的命令。

6

用分区功能提高可管理性6

通过Oracle分区功能,可将表和索引分成更多、更小的可管理单元,从而使数据库管理员能以“化整为零,个个击破”的方式管理数据。

6

使用分区功能,维护操作可集中于表的特定部分。

例如,数据库管理员可以只对表的一部分做备份,而不必对整个表做备份。

对整个数据库对象的维护操作,可以在每个分区的基础上进行,从而将维护工作分解成更容易管理的小块。

6

利用分区功能提高可管理性的一个典型用法是支持数据仓库中的‘滚动视窗’加载进程。

假设数据库管理员每周向表中加载新数据。

可以对该表进行范围分区,使每个分区包含一周的数据。

这样加载进程只是简单地添加新的分区。

添加一个分区的操作比修改整个表效率高很多,因为DBA不需要修改任何其他分区。

6

用分区功能提高性能6

由于限制了所检查或操作的数据数量,同时支持并行任务执行,Oracle分区功能实现了性能上增益。

这些特性包括:

6

分区修整6

分区修整是用分区功能提高性能的最简单最有价值的手段。

分区修整常常能够将查询性能提高几个数量级。

例如,假设某个应用程序包含一个存储订单历史记录的Orders表,并且此表已按周分区。

查询一周的订单只需访问该订单表的一个分区。

如果该订单表包含两年的历史记录,这个查询只需要访问一个分区而不是一百零四个。

该查询的执行速度因为分区修整而有可能快一百倍。

分区修整能与所有其他Oracle性能特性协作。

Oracle能将分区修整功能与任何索引技术、联接技术或并行访问方法结合使用。

6

分区智能联接7

分区功能可以通过称为分区智能联接的技术提高多表联接的性能。

当两个表要联接在一起,而且每个表都用联接键来分区时,就可以使用分区智能联接。

分区智能联接将大型联接分解成较小的发生在各个分区间的联接,从而用较少的时间完成全部联接。

这就给串行和并行的执行都能带来显著的性能改善。

7

用分区功能提高可用性7

分区的数据库对象具有分区独立性。

该分区独立性特点可能是高可用性战略的一个重要部分,例如,如果分区表的一个分区不能用,但该表的所有其他分区仍然保持在线并可用。

那么这个应用可以继续针对该分区表执行查询和事务处理,只要不是访问不可用的分区,数据库操作仍然能够成功运行。

7

数据库管理员可以指定各分区存放在不同的表空间里,从而让管理员隔离其它表分区针对单个分区进行备份与恢复操作。

还有,分区功能可以减少计划停机时间。

由于分区功能改善了性能,使数据库管理员能用相对较少的时间完成大型数据库对象的维护工作。

7

未来发展方向7

自从引入分区技术以来,Oracle公司在每次推出重要版本时都会增加新的分区方法。

Oracle8引入了范围分区功能,Oracle8i引入了散列和组合范围散列分区功能,Oracle9i引入了列表分区功能。

在最新版本Oracle数据库10g中,则增强了用于索引组织表和全局分区索引的分区策略,并且扩展了其用于所有分区维护操作的并发索引维护功能。

Oracle公司致力于不断完善分区技术,确保满足所有的业务需求。

7

结论7

具有Oracle分区功能的Oracle数据库10g可以显著增强几乎任何数据库应用程序的可管理性、性能和可用性。

分区功能可用于前沿应用程序,分区功能确实能够成为保障这些应用程序成功的关键技术成分。

同时,分区功能也可用于较为普通的数据库应用,来简化这些应用的管理工作,降低管理成本。

7

数据恢复7

数据恢复是数据库本身一个极其重要的功能,通常重要的数据可以通过其系统的数据备份功能来实现,所以在实际的开发中,重要的数据往往容易恢复,反而是一些平常的数据因为误操作而引起一些麻烦。

  对于有经验的开发人员来说,往往会对那些开发需要的基表(基表就是提供数据源的数据表)做一些备份。

这样,即使以后出现一些数据误操作也不会导致重大的事故。

  更为实用而又很少为开发人员所使用的方法就是采用倒叙查询,鉴于前面已经有了一定的技术铺垫,现在就可以使用DBMS_FLASHBACK包来对数据进行恢复了。

为方便讲述,假定一个基表emp_table,其表记录如下:

7

Emp_no8

Emp_name8

Emp_salary8

0018

Jacky8

50008

0028

Rose8

60008

0038

John8

70008

即此表仅有3条记录,那么由于对数据库的误操作,导致第一条记录被删除,那么执行下面的SQL语句:

8

select*fromemp_table;8

其执行结果为:

8

Emp_noEmp_nameEmp_salary002Rose6000003John70008

由于已经执行了提交操作(COMMIT),所以无法进行回滚(ROLLBACK),这样原来的数据就无法用正常方法进行恢复。

不过,由于误操作的时候在不久以前(假设是5分钟之前),在这种情况下,可以使用DBMS_FLASHBACK包来恢复数据,可以在SQL*PLUS里键入如下代码:

executedbms_flashback.enable_at_time(sysdate-5/1440);  此时,将数据库调整到5分钟之前的状态,如果再执行查询表的命令就会为如下结果:

8

Emp_noEmp_nameEmp_salary001  Jacky 5000002  Rose  6000003  John  70008

那么就可以在此时将其数据备份到emp_table_bk,即:

8

createtableemp_table_bkasselect*fromemp_table;8

这样,就把以前误操作的数据给恢复回来了。

  从上面的结果看的出,调用DBMS_FLASHBACK包的ENABLE_AT_TIME函数,可以将数据库的当前查询时间调整到以前,这样给数据恢复提供了帮助。

  在使用DBMS_FLASHBACK包的时候还应该注意以下几点:

  ·倒叙查询是有前提的,即该数据库必须具有撤消管理功能。

具体做法是,DBA应该建立一个撤消表空间,并启动自动撤消管理,并建立一个撤消保留时间窗。

这样,Oracle将在撤消表空间中维护足够的撤消信息以便在保留时间内支持倒叙查询。

  ·由于撤消表空间的大小直接决定了倒叙查询执行的成败。

即撤消表空间越大,那么可以查询的时间可以越早,那么对于一般的撤消表空间的大小,为了保证倒叙查询的成功,尽量查询5天以内的数据,这样成功的可能性更高一些。

任务调度  在UNIX系统中,任务与进程的概念是等同的,即当系统执行一段程序代码时会自动给其分配一个进程号和任务号,这样使用进程号和任务号就可以对该任务进行操作(如挂起,停止,启动等)。

而Oracle数据库内部也存在任务调度,比如,需要对某一操作进行周期性的执行,或者是在某事件发生的时候才执行。

一般性的做法是使用触发器,即将所有操作封装在触发器里,然后通过指定触发事件即可将该操作等待执行。

另外,还可以直接利用操作系统来实现,比如在Windows平台就可以编写Windows脚本并结合"任务计划"来实施;如果在Unix平台,就可以写Shell来实现任务的周期性的执行操作。

  而这里主要是采用ORACLE数据库的DBMS_JOB包来实现的。

  例如,由于每个月都需要对员工进行考评以进行薪水的调整,那么就需要对emp_table表进行更新处理。

更新处理代码如下:

9

createorreplaceproceduresalary_upt(v_emp_novarchar2,v_salarynumber)asbeginupdateemp_tablesetemp_salary=v_salarywhereemp_no=v_emp_no;commit;end;/9

为了定期每个月都运行上面的程序,可以执行如下代码:

9

Variablev_jobNumnumber;BeginDbms_job.submit(:

v_jobNum,'salary_upt',sysdate,'sysdate+30');Commit;End;/10

submit执行后将使得salary_upt过程马上执行。

在上面的代码中,v_jobNum是该作业返回的作业号(任务号),后面两个时间分别为开始时间和结束时间,所以salary_upt过程将每隔30天执行一次salary_upt程序,以此达到了定期更新的目的。

  如果要禁止该作业的继续执行,可以执行下面的命令:

10

dbms_job.remove(:

v_jobNum);10

使用DBMS_JOB包来实现任务的调度便于跟应用程序集成,有时候这样处理更为的便捷。

10

Oracle表空间10

控制Oracle用户表空间配额11

Oracle数据库中表空间的处理方式11

另外要注意,不同的表空间有不同的权限控制。

用户对于表空间A具有完全控制权限,可能对于表空间B就只有查询权限,甚至连连接的权限的都没有。

所以,合理为用户配置表空间的访问权限,也是提高数据库安全性的一个方法。

12

ORACLE数据库分区技术

Oracle分区功能可以提高许多应用程序的可管理性、性能与可用性。

通过分区功能,可以将表、索引和索引组织表进一步细分为段,从而能够更精确地管理和访问这些数据库对象。

Oracle提供了种类繁多的分区方案以满足每种业务要求。

而且,因为在SQL语句中分区是完全透明的,所以该功能几乎可应用于任何应用程序。

分区功能的优势

分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。

通常,分区可以使某些查询以及维护操作的性能大大提高。

此外,分区还可以极大简化常见的管理任务。

通过分区,数据库设计人员和管理员能够解决前沿应用程序带来的一些难题。

分区是构建千兆字节数据系统或超高可用性系统的关键工具。

分区功能的基本知识

分区功能能够将表、索引或索引组织表进一步细分为段。

这些数据库对象的段叫做分区。

每个分区有自己的名称,还可以选择自己的存储特性。

从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理。

这就使数据库管理员在管理分区后的对象时有相当大的灵活性。

但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用SQLDML命令访问分区后的表时,无需任何修改。

表的分区是通过“分区键”来实现的,分区键指的是一些列,这些列决定了某一行所在的分区。

Oracle数据库10g提供了六项技术用于对表进行分区:

范围分区

每个分区都由一个分区键值范围指定(对于一个以日期列作为分区键的表,“2005年1月”分区包含分区键值为从“2005年1月1日”到“2005年1月31日”的行)。

列表分区

每个分区都由一个分区键值列表指定(对于一个地区列作为分区键的表,“北美”分区可能包含值“加拿大”“美国”和“墨西哥”)。

散列分区

将散列算法用于分区键来确定指定行所在的分区。

组合范围散列分区

范围和散列分区技术的组合,通过该组合,首先对表进行范围分区,然后针对每个单独的范围分区再使用散列分区技术进一步细分。

索引组织表只能进行范围分区。

组合范围列表分区

范围和列表分区技术的组合,通过该组合,首先对表进行范围分区,然后针对每个单独的范围分区再使用列表分区技术进一步细分。

索引组织表可以按范围、列表或散列进行分区。

Oracle数据库10g还提供了三种类型的分区索引:

本地索引

本地索引是其分区方式与其所在基础表的分区方式一模一样的索引。

本地索引的每个分区仅对应于其所在基础表的一个分区。

全局分区索引

全局分区索引是使用不同于其所在表的分区键进行分区的索引,其所在表可以是分区表或非分区表。

全局分区的索引可以使用范围或散列分区进行分区。

例如,某个表可以按月份进行范围分区,因此具有十二个分区,而该表上的索引则可以使用不同的分区键进行范围分区,从而具有不同的分区数量。

全局非分区索引

全局非分区索引基本上和非分区表的索引一样。

索引结构是不分区的。

Oracle提供了一系列丰富的技术,可用于对表、索引和索引组织表进行分区,因此可以针对任何业务环境中的任何应用程序进行最佳的分区Oracle还提供一套完整的SQL命令,用于管理分区表。

其中包括添加新分区、删除分区、分拆分区以及合并分区的命令。

用分区功能提高可管理性

通过Oracle分区功能,可将表和索引分成更多、更小的可管理单元,从而使数据库管理员能以“化整为零,个个击破”的方式管理数据。

使用分区功能,维护操作可集中于表的特定部分。

例如,数据库管理员可以只对表的一部分做备份,而不必对整个表做备份。

对整个数据库对象的维护操作,可以在每个分区的基础上进行,从而将维护工作分解成更容易管理的小块。

利用分区功能提高可管理性的一个典型用法是支持数据仓库中的‘滚动视窗’加载进程。

假设数据库管理员每周向表中加载新数据。

可以对该表进行范围分区,使每个分区包含一周的数据。

这样加载进程只是简单地添加新的分区。

添加一个分区的操作比修改整个表效率高很多,因为DBA不需要修改任何其他分区。

用分区功能提高性能

由于限制了所检查或操作的数据数量,同时支持并行任务执行,Oracle分区功能实现了性能上增益。

这些特性包括:

分区修整

分区修整是用分区功能提高性能的最简单最有价值的手段。

分区修整常常能够将查询性能提高几个数量级。

例如,假设某个应用程序包含一个存储订单历史记录的Orders表,并且此表已按周分区。

查询一周的订单只需访问该订单表的一个分区。

如果该订单表包含两年的历史记录,这个查询只需要访问一个分区而不是一百零四个。

该查询的执行速度因为分区修整而有可能快一百倍。

分区修整能与所有其他Oracle性能特性协作。

Oracle能将分区修整功能与任何索引技术、联接技术或并行访问方法结合使用。

分区智能联接

分区功能可以通过称为分区智能联接的技术提高多表联接的性能。

当两个表要联接在一起,而且每个表都用联接键来分区时,就可以使用分区智能联接。

分区智能联接将大型联接分解成较小的发生在各个分区间的联接,从而用较少的时间完成全部联接。

这就给串行和并行的执行都能带来显著的性能改善。

用分区功能提高可用性

分区的数据库对象具有分区独立性。

该分区独立性特点可能是高可用性战略的一个重要部分,例如,如果分区表的一个分区不能用,但该表的所有其他分区仍然保持在线并可用。

那么这个应用可以继续针对该分区表执行查询和事务处理,只要不是访问不可用的分区,数据库操作仍然能够成功运行。

数据库管理员可以指定各分区存放在不同的表空间里,从而让管理员隔离其它表分区针对单个分区进行备份与恢复操作。

还有,分区功能可以减少计划停机时间。

由于分区功能改善了性能,使数据库管理员能用相对较少的时间完成大型数据库对象的维护工作。

未来发展方向

自从引入分区技术以来,Oracle公司在每次推出重要版本时都会增加新的分区方法。

Oracle8引入了范围分区功能,Oracle8i引入了散列和组合范围散列分区功能,Oracle9i引入了列表分区功能。

在最新版本Oracle数据库10g中,则增强了用于索引组织表和全局分区索引的分区策略,并且扩展了其用于所有分区维护操作的并发索引维护功能。

Oracle公司致力于不断完善分区技术,确保满足所有的业务需求。

结论

具有Oracle分区功能的Oracle数据库10g可以显著增强几乎任何数据库应用程序的可管理性、性能和可用性。

分区功能可用于前沿应用程序,分区功能确实能够成为保障这些应用程序成功的关键技术成分。

同时,分区功能也可用于较为普通的数据库应用,来简化这些应用的管理工作,降低管理成本。

 

数据恢复

  数据恢复是数据库本身一个极其重要的功能,通常重要的数据可以通过其系统的数据备份功能来实现,所以在实际的开发中,重要的数据往往容易恢复,反而是一些平常的数据因为误操作而引起一些麻烦。

  对于有经验的开发人员来说,往往会对那些开发需要的基表(基表就是提供数据源的数据表)做一些备份。

这样,即使以后出现一些数据误操作也不会导致重大的事故。

  更为实用而又很少为开发人员所使用的方法就是采用倒叙查询,鉴于前面已经有了一定的技术铺垫,现在就可以使用DBMS_FLASHBACK包来对数据进行恢复了。

为方便讲述,假定一个基表emp_table,其表记录如下:

Emp_no

Emp_name

Emp_salary

001

Jacky

5000

002

Rose

6000

003

John

7000

  即此表仅有3条记录,那么由于对数据库的误操作,导致第一条记录被删除,那么执行下面的SQL语句:

select*fromemp_table;

  其执行结果为:

Emp_noEmp_nameEmp_salary

002Rose6000

003John7000

  由于已经执行了提交操作(COMMIT),所以无法进行回滚(ROLLBACK),这样原来的数据就无法用正常方法进行恢复。

不过,由于误操作的时候在不久以前(假设是5分钟之前),在这种情况下,可以使用DBMS_FLASHBACK包来恢复数据,可以在SQL*PLUS里键入如下代码:

executedbms_flashback.enable_at_time(sysdate-5/1440);

  此时,将数据库调整到5分钟之前的状态,如果再执行查询表的命令就会为如下结果:

Emp_noEmp_nameEmp_salary

001  Jacky 5000

002  Rose  6000

003  John  7000

  那么就可以在此时将其数据备份到emp_table_bk,即:

createtableemp_table_bk

as

select*fromemp_table;

  这样,就把以前误操作的数据给恢复回来了。

  从上面的结果看的出,调用DBMS_FLASHBACK包的ENABLE_AT_TIME函数,可以将数据库的当前查询时间调整到以前,这样给数据恢复提供了帮助。

  在使用DBMS_FLASHBACK包的时候还应该注意以下几点:

  ·倒叙查询是有前提的,即该数据库必须具有撤消管理功能。

具体做法是,DBA应该建立一个撤消表空间,并启动自动撤消管理,并建立一个撤消保留时间窗。

这样,Oracle将在撤消表空间中维护足够的撤消信息以便在保留时间内支持倒叙查询。

  ·由于撤消表空间的大小直接决定了倒叙查询执行的成败。

即撤消表空间越大,那么可以查询的时间可以越早,那么对于一般的撤消表空间的大小,为了保证倒叙查询的成功,尽量查询5天以内的数据,这样成功的可能性更高一些。

任务调度

  在UNIX系统中,任务与进程的概念是等同的,即当系统执行一段程序代码时会自动给其分配一个进程号和任务号,这样使用进程号和任务号就可以对该任务进行操作(如挂起,停止,启动等)。

而Oracle数据库内部也存在任务调度,比如,需要对某一操作进行周期性的执行,或者是在某事件发生的时候才执行。

一般性的做法是使用触发器,即将所有操作封装在触发器里,然后通过指定触发事件即可将该操作等待执行。

另外,还可以直接利用操作系统来实现,比如在Windows平台就可以编写Windows脚本并结合"任务计划"来实施;如果在Unix平台,就可以写Shell来实现任务的周期性的执行操作。

  而这里主要是采用ORACLE数据库的DBMS_JOB包来实现的。

  例如,由于每个月都需要对员工进行考评以进行薪水的调整,那么就需要对emp_table表进行更新处理。

更新处理代码如下:

createorreplaceproceduresalary_upt(v_emp_novarchar2,v_salarynumber)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1