如何有效应对数据库回退问题 (数据库 回退)

简介

在数据库开发和管理中,由于各种原因经常需要进行数据回退的操作,包括错误操作、意外的数据损坏、数据安全等等原因。然而,一旦进行回退,就可能导致数据恢复不完整或丢失数据,给企业的运营与管理带来不必要的风险和损失。因此,数据回退成为数据库管理中的一项关键任务,成为重要课题之一。本文将详细分析如何在保证数据安全的前提下,有效应对数据库回退问题。

之一部分:研究回退数据

在回退数据之前,我们需要充分了解回退的对象和原因。这样可以帮助我们更好地制定数据回退范围和方案。具体操作如下:

1.了解数据回退的原因,尽可能多地获取关于回退数据的背景信息,例如,回退时间、提交人员等相关信息。

2.了解回退的对象,包括数据库表、视图、存储过程等等,更深入的剖析回退对象的属性,例如数据量、结构等。

3.针对回退对象进行测试,比对回退前后的数据差异,排查不一致之处。检查回退操作之前的数据备份,以便数据回退顺利进行。

第二部分:准备数据备份

数据备份是保证数据恢复的前提条件。在回退之前必须对被回退对象的数据进行备份处理。可以采用数据库提供的机制,如SQL SERVER的备份和还原,ORACLE的exp和imp等等。准备数据备份的步骤如下:

1.查找最近的完整数据备份;

2.检查备份数据的完整性和正确性;

3.准备每个数据对象的差异文件;

4.进行数据还原并测试回退效果。

第三部分:制定回退方案

在进行回退操作之前,需要制定详细的数据回退方案。回退方案的制定应根据需要回退的数据量和种类、回退的原因、数据备份的完整性以及操作人员的经验等因素进行合理订制。

1.制定数据回退方案,根据不同操作情况,选择适当的回退方式,如执行SQL语句、使用还原工具、对数据差异文件进行还原等。

2.为回退操作分配特定权限。对于重要的回退任务,需要分派专门的权限和角色,以及相应的层级和权限管理。

第四部分:执行回退操作

在完成了前三步操作之后,按照回滚方案具体执行回退操作。

1.经过严格测试之后,开始进行数据回退。确保回退数据的完整性、正确性和一致性。

2.与数据管理员或开发人员共同测试回退结果,避免回退操作失误或造成数据丢失。

3.将回退结果记录下来,包括回退操作的时间、操作人员、回退结果等等。

第五部分:完善后续管理工作

1.更新相关文档。对于重要的数据回退,需要及时更新相关文档,并完善操作记录和备份存储工作。

2.进行日常维护。定期检查数据库备份和恢复的完整性和可靠性,以及数据库运行的稳定性和性能。

3.培训并提高技能水平。为数据库管理员和开发人员提供相关的技能培训和技术支持,以提高他们的技能水平和管理能力。

结论:

数据回退是数据库管理的重要工作,需要综合考虑数据量、数据种类、数据备份、数据恢复等多个方面。只有严格按照规范流程进行,才能有效应对数据回退问题。企业需要不断提高管理、技术水平,完善数据备份和恢复管理体系,建立数据回退操作的标准规范,才能更好地保障数据的安全和稳定。

相关问题拓展阅读:

今天用SQL SERVER修改了批量21W条数据,突然发现自己改错了,怎样返回上一步?

前提条件

— 将 数据库的恢复模式(Recovery mode)设置为  “完整(Full)”

— 此操作可以在  SQL Server Management Studio 中, 选择数据库, 鼠标右键, 属性后,在 选项 标签中进行设置。

USE 

GO

ALTER DATABASE  SET RECOVERY FULL WITH NO_WAIT

GO

— 完整备份数据库

backup database test to disk=’e:\test_.dat’

GO

已为数据库 ‘test’,文件 ‘Test’ (位于文件 1 上)处理了 376 页。

已为数据库 ‘test’,文件 ‘Test_log’ (位于文件 1 上)处理了 3 页。

BACKUP DATABASE 成功处理了 379 页,花费 1.151 秒(2.571 MB/秒)。

 

 测试数据.

USE 

GO

— 创建测试表

CREATE TABLE test_br_table (

  ID   int,

  VAL  VARCHAR(10),

  PRIMARY KEY(ID)

);

GO

INSERT INTO test_br_table  VALUES (1, ‘TEST1’);

INSERT INTO test_br_table  VALUES (2, ‘TEST2’);

INSERT INTO test_br_table  VALUES (3, ‘TEST3’);

GO

SELECT GETDATE()

GO

:44:12.393

(1 行受影响)

— 假设误操作, 删除所有的数据了.

DELETE FROM test_br_table

GO

(3 行受影响)

 

 

 恢复 

USE 

GO

— 步骤1. 备份当前数据库的事务日志:

BACKUP LOG  TO disk= N’e:\test_log’ WITH NORECOVERY

GO

已为数据库 ‘Test’,文件 ‘Test_log’ (位于文件 1 上)处理了 9 页。

BACKUP LOG 成功处理了 9 页,花费 0.046 秒(1.486 MB/秒)。

 

— 步骤2. 恢复一个误删除之前的完全备份:

RESTORE DATABASE  FROM DISK = N’e:\test_.dat’ WITH NORECOVERY,  REPLACE

GO

已为数据库 ‘Test’,文件 ‘Test’ (位于文件 1 上)处理了 376 页。

已为数据库 ‘Test’,文件 ‘Test_log’ (位于文件 1 上)处理了 3 页。

RESTORE DATABASE 成功处理了 379 页,花费 0.828 秒(3.574 MB/秒)。

— 步骤3. 将数据库恢复至误删除之前的时间点:

RESTORE LOG  FROM  DISK = N’e:\test_log’ WITH  STOPAT = N’:44:12.393′ , RECOVERY

GO

已为数据库 ‘Test’,文件 ‘Test’ (位于文件 1 上)处理了 0 页。

已为数据库 ‘Test’,文件 ‘Test_log’ (位于文件 1 上)处理了 9 页。

RESTORE LOG 成功处理了 9 页,花费 0.013 秒(5.258 MB/秒)。

 

 核对数据.

use 

GO

SELECT * FROM test_br_table

GO

IDVAL

TEST1

TEST2

TEST3

OracleUndoRedo通俗理解

什么是REDO

  REDO记录transaction logs 分为online和archived 以恢复为目的

  比如 机器停电 那么在重起之后需要online redo logs去恢复系统到失败点

  比如 磁盘坏了 需要用archived redo logs和online redo logs区恢复数据

  比如 truncate一个表或其他的操作 想恢复到之前的状态 同样也需要

  

什么是UNDO

  REDO 是为了重新实现你的操作 而UNDO相反 是为了撤销你做的操作 比如你得一个TRANSACTION执行失败了或你自己后悔了 则需要用 ROLLBACK命令回退到操作之前 回滚是在逻辑层面实现而不是物理层面 因为在一个多用户系统中 数据结构 blocks等都在时时变化 比如我们 INSERT一个数据 表的空间不够 扩展了一个新的EXTENT 我们的数据保存在这新的EXTENT里 其它用户随后也在这EXTENT里插入了数据 而此时我想ROLLBACK 那么显然物理上讲这EXTENT撤销是不可能的 因为这么做会影响其他用户的操作 所以 ROLLBACK是逻辑上回滚 比如对INSERT来说 那么ROLLBACK就是DELETE了

  MIT 以前 常想当然地认为 一个大的TRANSACTION(比如大批量地INSERT数据)的MIT会花费时间比短的TRANSACTION长 而事实上是没有什么区别的

  因为ORACLE在MIT之前已经把该写的东西写到DISK中了

  我们MIT只是

   产生一个SCN给我们TRANSACTION SCN简单理解就是给TRANSACTION排队 以便恢复和保持一致性

   REDO写REDO到DISK中(LGWR 这就是log file sync) 记录SCN在ONLINE REDO LOG 当这一步发生时 我们可以说事实上已经提交了 这个TRANSACTION已经结束(在V$TRANSACTION里消失了)

   SESSION所拥有的LOCK(V$LOCK)被释放

   Block Cleanout(这个问题是产生ORA : snapshot too old的根本原因) ROLLBACK ROLLBACK和MIT正好相反 ROLLBACK的时间和TRANSACTION的大小有直接关系 因为ROLLBACK必须物理上恢复数据 MIT之所以快 是因为ORACLE在MIT之前已经作了很多工作(产生UNDO 修改BLOCK REDO LATCH分配) ROLLBACK慢也是基于相同的原因

   UNDO表空间用于存放UNDO数据 当执行DML操作时 Oracle

   UNDO数据的作用 当用户执行DML操作修改数据时 UNDO数据被存放在UNDO段 而新数据则被存放到数据段中 如果事务操作存在问题 就需要回退事务 以取消事物变化

  例如 执行完UPDATE emp SET sal= WHERE empno= 后 发现应该修改雇员 的工资 而不是 此时应该执行ROLLBACK语句

   读一致性

  用户检索数据时 ORACLE总是使用户只能看到被提交过的数据 这是由Oracle自动提供的 当用户修改数据 但是没有提交时 另外一个用户使用select语句查找该值时 该值就是从undo表空间中取得的

   事务恢复

  事务恢复是例程恢复的一部分 它是由Oracle Server自动完成的 如果在数据库运行过程中出线历程失败 那么当启动Oracle Server时 后台进程ON会自动执行例程恢复 执行例程恢复时 Oracle会重做所有未应用的记录 然后打开数据库 回退未提交事务

   倒叙查询

  倒叙查询用于取得某一特定时间点的数据库数据

   UNDO_MANAGEMENT

  使用初始化参数用于指定UNDO数据的管理方式 如果使用自动管理模式 必须设置该参数为AUTO 此时采用UNDO表空间管理UNDO数据 如果使用手工管理模式 必须设置该值为MANUAl 此时采用回滚段管理UNDO数据

   UNDO_TABLESPACE

  用于指定例程所要使用的UNDO表空间 使用自动UNDO管理模式时 通过配置该参数可以指定例程所要使用的UNDO表空间

  使用RAC结构时 必须为每个例程配置一个独立的UNDO表空间

   UNDO_RETENTION

  该参数用于控制UNDO数据的更大保留时间 其默认值为 秒 该值时倒叙查询可以查看到的最早时间点

lishixinzhi/Article/program/Oracle/202311/17025

关于数据库 回退的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 如何有效应对数据库回退问题 (数据库 回退)