zoukankan      html  css  js  c++  java
  • Oracle DB 管理还原数据

    • 说明DML 和还原数据的生成
    • 监视和管理还原数据
    • 描述还原数据和重做数据之间的不同
    • 配置还原保留时间
    • 保证还原保留时间
    • 使用还原指导
     
    1、数据操纵
     
    可使用DML 类的SQL 语句操纵或修改数据:INSERT、UPDATE、DELETE和MERGE。
    这些语句作为事务处理的一部分执行,事务处理以第一个成功的DML 语句作为开始,以COMMIT或ROLLBACK命令作为结束。
    事务处理始终整个提交。除非使用SAVEPOINT子句回退到特定保存点,否则事务处理整个回退。
    除了使用显式COMMIT或ROLLBACK命令之外,还可以隐式地执行这些命令。
    例如,如果进程或系统失败,则可能会发生回退。执行如CREATE TABLE这样的DDL 命令后可能会发生提交。
    附注
    • 使用MERGE命令可执行DML 命令的组合,从而将一个表中的数据合并到另一个表中。
    • 提交始终在执行DML 命令之前和之后发生。
     
    2、还原数据
     
    还原数据是:
    • 原始的、修改之前的数据副本
    • 是针对更改数据的每个事务处理所捕获的
    • 至少保留到事务处理结束
    • 用于支持:
    – 回退操作
    – 读取一致性查询
    – 闪回查询、闪回事务处理和闪回表
    – 从失败的事务处理中进行恢复
     
    当某个进程更改了数据库中的数据时,Oracle DB 会保存旧值(还原数据)。按数据修改前的原样存储数据。
    如果捕获了还原数据,则可以回退未提交的数据。
    还原数据用于支持读取一致性和闪回查询
    还原还可用于“倒回”(闪回)事务处理和表。
    读取一致性查询中,提供与查询开始时的数据一致的结果。如果要成功完成读取一致性查询,原始信息必须仍作为还原信息存在。如果原始数据不再可用,则会收到“快照太旧”错误。只要保留了还原信息,Oracle DB 就能通过重建数据来满足读取一致性查询的要求。
     
    闪回查询有目的地查找过去某个时间存在的某个版本的数据。只要过去那个时间的还原信息仍存在,闪回查询就能成功完成。
    闪回事务处理使用还原功能来创建补偿事务处理,以便回退事务处理及其相关事务处理。
    使用闪回表功能可将表恢复到特定的时间点。
     
    还原数据也可用于从失败的事务处理中进行恢复。如果在用户决定提交或回退事务处理之前用户会话异常结束(可能因为网络错误或客户机故障),就会导致事务处理失败。当实例崩溃或发出SHUTDOWN ABORT命令时,事务处理也可能会失败。
     
    如果事务处理失败,则选择最安全的行为,即让Oracle DB 撤销用户做出的所有更改,从而还原原始数据。
    所有事务处理的还原信息将至少保留到事务处理结束,即使用以下方法之一结束事务处理时:
    • 用户还原事务处理(回退事务处理)。
    • 用户结束事务处理(提交事务处理)。
    • 用户执行DDL 语句,如CREATE、DROP、RENAME或ALTER语句。如果当前事务处理包含任何DML 语句,则数据库首先提交该事务处理,然后在新的事务处理中执行并提交DDL。
    • 用户会话异常终止(回退事务处理)。
    • 用户会话正常终止并退出(提交事务处理)。
    保留的还原数据量及其保留时间取决于数据库活动量以及数据库配置。
    注:Oracle 闪回事务处理利用联机重做日志来挖掘用于执行的相应还原SQL。如果闪回事务处理调用中未提供事务处理开始时间,则只使用还原数据作为人为的时间边界,以此确定目标事务处理的重做挖掘开始时间。
     
    3、事务处理和还原数据
    • 每个事务处理只分配给一个还原段。
    • 一个还原段可以同时服务多个事务处理。
     
    事务处理开始时就会分配还原段。在事务处理的整个过程中,更改数据时,原始(更改之前)值会被复制到还原段。通过选中V$TRANSACTION动态性能视图,可以查看哪些事务处理被分配到哪些还原段。
     
    还原段是为了支持事务处理,由实例自动创建的专用段。像所有段一样,还原段由区组成,区又由数据块组成。还原段根据需要可自动增长和收缩,它充当所分配的事务处理的循环存储缓冲区。
     
    事务处理会填充其还原段中的区,直至完成了事务处理或占用了所有空间为止。
    如果填充完区之后还需要更多的空间,事务处理则获取段中下一个区的空间。占用了所有区之后,事务处理会自动转回到第一个区或请求为还原段分配新区。
    注:并行DML 和DDL 操作实际上可导致事务处理使用多个还原段。
     
    4、存储还原信息
    还原信息存储在还原段中,还原段又存储在还原表空间中。
    还原表空间:
    • 仅用于还原段
    • 包含特殊的恢复注意事项
    • 只能与单个实例相关联
     
    • 要求在任意指定时间,一个给定的实例只能有一个表空间是当前可写还原表空间
    还原段只存在于特定形式的表空间中,这种形式的表空间称为“还原表空间”。(在还原表空间中不能创建其它段类型)
    安装进程可自动创建“小文件”还原表空间。用户还可以创建“大文件”还原表空间。但是,在同时执行大量短事务处理的大量联机事务处理(OLTP) 环境中,会在文件头上发生争用。存储在多个数据文件中的还原表空间可以解决这种潜在的问题。
    尽管数据库可能有许多还原表空间,但是对于数据库中的任何实例而言,一次只能有一个还原表空间被指定为其当前还原表空间。
    将自动创建始终由SYS拥有的还原段。由于还原段充当循环缓冲区,因此每个段最少包含两个区。默认的最大区数取决于数据库块大小,但是此值非常大(块大小为8 KB 时区数为32,765)。
    还原表空间是永久的、本地管理的表空间(具有自动区分配)。它们由数据库自动进行管理。
    由于需要有还原数据才能从失败的事务处理(如实例崩溃时可能会导致事务处理失败)中进行恢复,所以还原表空间只在实例处于MOUNT状态时可恢复
     
    5、还原数据与重做数据
     
    还原数据和重做数据初看很相似,但是二者的作用却截然不同。
     
    如果需要还原更改,则需要还原数据,而且为了保持读取一致性和执行回退,也需要还原数据
    在因某种原因而丢失了更改时,如果需要再次执行更改,则需要用到重做数据。还原块更改也可以写入重做日志。
    提交过程需要验证在事务处理中所做的更改是否已写入重做日志文件。这个重做日志文件会永久保存在磁盘上,而不是保存在内存中。此外,重做日志文件通常被多路复用。
     
    因此,磁盘上有重做数据的多个副本。虽然更改可能尚未写入实际存储表块的数据文件,但只要写入到持久重做日志,就足以确保数据库的一致性。
    假设在已提交的更改反映到数据文件中之前刚好发生断电。因为事务处理已提交,所有这种情况不会导致问题。当系统再次启动时,就能够前滚断电时尚未反映到数据文件中的任何重做记录。
     
    6、管理还原
    自动还原管理:
    • 在专用还原表空间中对还原数据和空间进行完全自动的管理
    • 用于所有会话
    • 在AUTOEXTEND表空间中进行自优化,以满足长时间运行的查询的需求
    • 在固定大小的表空间中进行自优化,以实现最佳的保留时间
    用来支持闪回操作的DBA 任务:
    • 配置还原保留时间
    • 将还原表空间更改为固定大小
    • 避免空间错误和“快照太旧”错误
     
    Oracle DB 提供了“自动还原管理”功能,这是一种完全自动的机制,用于管理所有会话的专用还原表空间中的还原信息和空间。系统自动优化自身,从而尽可能地提供还原信息的最佳保留时间。更准确地说,对于自动扩展的表空间,会将还原保留时间优化为略长于运行时间最长的活动查询的持续时间。对于固定大小的还原表空间,数据库会进行动态优化,尽可能地获得最佳保留时间。
     
    自动还原管理是Oracle Database 11g(和更高版本)中的默认功能。也支持手动还原管理,以便与Oracle8i及较早版本向后兼容,但是这种模式下DBA 需要进行更多的交互操作。
    在手动还原管理模式下,通过回退段而不是还原表空间来管理还原空间。
    注:Oracle 强烈建议使用自动还原管理。
    尽管在默认情况下,Oracle DB 自动管理还原数据和空间,但如果数据库正在使用闪回操作,则可能需要执行某些任务。还原管理功能可防止空间错误、使用过多的空间和“快照太旧”错误
     
    7、配置还原保留时间
     
    UNDO_RETENTION指定已提交的还原信息要保留多长时间(秒)。仅在以下情况下才必须设置这个参数:
    • 还原表空间启用了AUTOEXTEND选项
    • 要设置LOB 的还原保留时间
    • 要保证保留时间
     
    UNDO_RETENTION初始化参数指定还原保留时间的下限阈值(秒)。可将自动扩展的还原表空间的最短还原保留时间设置为预期的最长闪回操作所需的时间。对于自动扩展的还原表空间,系统至少按这个参数指定的时间保留还原数据,而且还会自动调整还原保留时间以满足查询的还原要求。但是,此自动优化的保留时间可能不足以执行闪回操作。
    对于固定大小的还原表空间,系统会根据还原表空间大小和使用历史记录,自动调整到尽可能最优的还原保留时间;系统会忽略UNDO_RETENTION直至启用保留时间保证。因此,进行自动还原管理时,在以上中列出的三种情况都使用UNDO_RETENTION设置。
    对于这三种以外的情况,会忽略此参数。
    还原信息分为三类:
    • 未提交的还原信息(活动):支持当前运行的事务处理,如果用户要回退事务处理或事务处理失败,需要用到这类信息。绝对不会覆盖未提交的还原信息。
    • 提交的还原信息(未过期):不再需要用来支持运行的事务处理,但是为了符合还原保留时间间隔,仍然要用到这类信息。这也称为“未过期”还原信息。当不是因为缺少空间而导致活动事务处理失败时,就会保留提交的还原信息。
    • 过期的还原信息(过期):不再需要用来支持运行的事务处理。活动事务处理需要空间时会覆盖过期的还原信息。
     
    8、保证还原保留时间
    默认还原行为是覆盖已提交、但尚未过期的事务处理的还原信息,而不是让活动事务处理因缺少还原空间而失败。
    保证保留时间会改变此行为有了保留时间保证,即使会导致事务处理失败,仍然会强制执行还原保留时间设置
     
    RETENTION GUARANTEE是表空间属性而不是初始化参数。此属性只可使用SQL 命令行语句来更改。通过更改还原表空间来保证保留时间的语法是:
    SQL> ALTER TABLESPACE undotbs1 RETENTION GUARANTEE;
     
    要将有保留时间保证的还原表空间返回到其常规设置,请使用以下命令:
    SQL> ALTER TABLESPACE undotbs1 RETENTION NOGUARANTEE;
     
    保留时间保证仅适用于还原表空间。尝试对非还原表空间设置保留时间会产生以下错误:
    SQL> ALTER TABLESPACE example RETENTION GUARANTEE;
    ERROR at line 1:
    ORA-30044: 'Retention' can only specified for undo tablespace
     
    9、将还原表空间更改为固定大小
    原因:
    • 支持闪回操作
    • 限制表空间增长
    工作流:
    1.运行正常工作量。
    2.自优化机制创建所需的最小大小。
    3.可以选择使用还原指导,该指导可计算为了满足未来增长而需要的大小。
    4.可以选择将还原表空间更改为固定大小。
     
    可能出于以下两个原因,将还原表空间更改为固定大小:支持闪回操作(预期将来会使用还原功能)或防止表空间增长过大
    如果决定将还原表空间更改为固定大小,则必须选择一个足够大的大小以避免以下两类错误:
    •DML 失败(因为空间不够大,无法还原新事务处理)
    • “快照太旧”错误(因为没有足够的还原数据来实现读取一致性)
    Oracle 建议运行正常的满负荷工作量,使还原表空间增长到所需的最小大小。自动搜集的统计信息包括运行时间最长的查询的持续时间和还原生成速率。对于不执行闪回操作的
    系统以及将来不打算对其执行运行时间更长的查询的系统,建议根据这些统计信息计算最小还原表空间大小。
    对于运行时间更长的查询和闪回操作,可以使用还原指导来输入所需的还原时段长度。
     
    10、一般还原信息
     
    在Enterprise Manager 中,选择“Server > Automatic Undo Management(服务器> 自动还原管理)”。
    有以下两页:“General(一般信息)”和“System Activity(系统活动)”。在“General(一般信息)”页的顶部,可以看到还原保留时间设置和有关该实例中还原表空间的信息。
    11、使用还原指导
     
    在“General Undo(常规还原)”页的中间部分,可以访问还原指导。通过它可估计满足指定的还原保留时间所需要的还原表空间大小。
    该指导的分析区域会显示支持保留时间所需的表空间大小。可以通过单击图上的某个点来查看支持选定期间所需要的表空间大小。
     
     
    单击“Edit Undo Tablespace(编辑还原表空间)”按钮,然后在“Datafile(数据文件)”部分单击“Edit(编辑)”,将还原表空间更改为固定大小。
     
     
     
    场景:修改还原保留时间并计算还原表空间大小,以支持要求的48小时保留时间。
    a)单击“General(一般信息)”选项卡返回到“General Automatic Undo Management(常规自动还原管理)”页。
     
     
    b)在“Undo Advisor(还原指导)”部分,选中“Specified manually to allow for longer duration queries or flashback(手动指定以允许持续时间更长的查询
    或闪回)”。
     
     
    c)在“Duration(持续时间)”字段中输入48 小时,然后单击“Run Analysis(运行分析)”按钮。
     
     
    结果显示的还原表空间大小非常接近于建议的还原表空间大小。此大小适用于大多数工作量,但建议将还原表空间大小设置为最小大小的三倍。也就是说,应将还原表空间大小更改为372 MB。
     
     
    12、查看系统活动
     
    页面顶部将显示所选期间的系统活动。
    在此部分的下方,有三个图形:
     
    1.还原表空间使用情况:按天数显示表空间大小(以MB 为单位)
     
    2.还原保留时间自动优化:按天数查看优化的还原保留时间(以分钟为单位)
     
    3.还原生成速率:按天数显示还原生成速率(以KB/秒为单位)
  • 相关阅读:
    【C++】对象模型
    【C++多线程】读写锁shared_lock/shared_mutex
    【C++多线程】共享数据的初始化保护
    【C++多线程】共享数据保护
    【C++多线程】lock_guard<T>类和unique_lock<T>类
    【C++多线程】转移线程所有权
    【C++ 】std::ref()和std::cref()
    【C++多线程】传递参数
    【C++多线程】detach()及注意
    linux 打开CHM文件
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13317114.html
Copyright © 2011-2022 走看看