orcal 恢复数据使用SCN内部时钟机制

本文介绍了Oracle数据库中的系统改变号(SCN)的概念及其在数据恢复中的应用。通过具体实例展示了如何利用SCN进行误删数据的恢复操作。

SCN(系统改变号),它的英文全拼为:System Change Number ,它是数据库中非常重要的一个数据结构。
  SCN提供了Oracle的内部时钟机制,可被看作逻辑时钟,这对于恢复操作是至关重要的
  注释:Oracle 仅根据 SCN 执行恢复。
  它定义了数据库在某个确切时刻提交的版本。在事物提交时,它被赋予一个唯一的标示事物的SCN 。一些人认为 SCN 是指, System Commit Number ,而通常 SCN 在提交时才变化,所以很多情况下,
  这两个名词经常被交替使用。
  究竟是哪个词其实对我们来说并不是最重要的,重要的是我们知道 SCN 是 Oracle 内部的时钟机制, Oracle 通过 SCN 来维护数据库的一致性,并通过SCN 实施 Oracle 至关重要的恢复机制。
  具体执行流程我们可从以下几个示例图中体会;
  1.原表记录 $ sqlplus eygle/eygle
  SQL*Plus: Release 10.1.0.2.0 - Production on Wed Mar 30 08:52:04 2005
  Copyright (c) 1982, 2004, Oracle. All rights reserved.
  Connected to:
  Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
  With the Partitioning, OLAP and Data Mining options

  SQL>select count(*) from t1;
  COUNT(*)
  ----------
  9318
  2.误删除所有记录
  并且提交更改。
  SQL>delete from t1;
  9318 rows deleted.
  SQL>commit;
  Commit complete.
  SQL>select count(*) from t1;
  COUNT(*)
  ----------
  0
  3.获得当前SCN
  如果能够确切知道删除之前SCN最好,如果不知道,可以进行闪回查询尝试.
  SQL>select dbms_flashback.get_system_change_number from dual;
  GET_SYSTEM_CHANGE_NUMBER
  ------------------------
  10671006
  SQL>select count(*) from t1 as of scn 10671000;
  COUNT(*)
  ----------
  0
  SQL>select count(*) from t1 as of scn 10670000;
  COUNT(*)
  ----------
  9318
  我们看到在SCN=10670000时,数据都在。
  4.恢复数据.
  SQL>insert into t1 select * from t1 as of scn 10670000;
  9318 rows created.
  SQL>commit;
  Commit complete.
  SQL>select count(*) from t1;
  COUNT(*)
  ----------
  9318
  文章2
  误删数据后的还原
  select timestamp_to_scn(to_timestamp('2009-03-13 09:00:00','YYYY-MM-DD HH:MI:SS')) from dual;
  结果:13526973
  将删除时间转换为scn
  select * from reportinfo
  AS OF SCN 13526973

  将reportinfo表中的scn点的数据取出
  然后可以根据这个数据进行还原操作
  create table reporttest as select * from reportinfo where 1=0;
  insert into reporttest select * from reportinfo AS OF SCN 13526973;

  --上面两句应该可以合成一句
  --create table reporttest as select * from reportinfo AS OF SCN 13526973;
  这是reporttest表中就是scn点的reportinfo数据.处理即可

### Oracle 导入 dump 文件仅恢复单个表的方法 在 Oracle 数据库中,若需从 dump 文件中恢复特定的单个表,可以使用 `imp` 工具或 `impdp` 工具实现。以下是两种方法的具体实现方式: #### 方法一:使用 `imp` 工具导入单个表 可以通过 `imp` 命令的 `tables` 参数指定需要恢复的单个表。命令格式如下: ```bash imp username/password@sid file=dump_file.dmp tables=(table_name) touser=target_schema full=y ``` - `username/password`:数据库用户名和密码。 - `sid`:目标数据库的服务标识符(SID)。 - `file`:指定 dump 文件路径。 - `tables`:指定需要恢复的表名称。 - `touser`:指定目标模式名称[^2]。 #### 方法二:使用 `impdp` 工具导入单个表 `impdp` 是 Oracle 提供数据泵导入工具,支持更高效地导入数据。通过设置 `TABLES` 参数可以指定需要恢复的单个表。命令格式如下: ```bash impdp username/password@sid DIRECTORY=directory_name DUMPFILE=dump_file.dmp TABLES=table_name LOGFILE=import_log.log ``` - `username/password`:数据库用户名和密码。 - `DIRECTORY`:Oracle 中定义的目录对象,用于指向 dump 文件所在路径。 - `DUMPFILE`:指定 dump 文件名称。 - `TABLES`:指定需要恢复的表名称。 - `LOGFILE`:指定日志文件名称,记录导入过程中的详细信息[^1]。 #### 注意事项 - 在导入单个表时,需确保目标模式已存在,并具有足够的权限。 - 如果 dump 文件中包含外键约束,可能需要调整表的导入顺序以避免外键冲突[^4]。 - 使用 `impdp` 工具时,需提前在数据库中创建相应的目录对象。例如: ```sql CREATE DIRECTORY dump_dir AS '/path/to/dump/files'; GRANT READ, WRITE ON DIRECTORY dump_dir TO username; ``` #### 示例代码 以下是一个完整的 `impdp` 示例,假设目标表为 `EMPLOYEE`,dump 文件位于 `/backup/employee.dmp`: ```bash impdp hr/hr@orcl DIRECTORY=dump_dir DUMPFILE=employee.dmp TABLES=EMPLOYEE LOGFILE=employee_import.log ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值