Oracle恢复方法(表、包)

简介: Oracle恢复方法(表、包)

1.Truncate表


oracle 10g 恢复

Fy_Recover_Data是利用Oracle表扫描机制、数据嫁接机制恢复TRUNCATE或者损坏数据的工具包,由纯PLSQL编写

linux下使用终端,如下:

1.windows下输入以下网址:

http://www.hellodba.com/Download/FY_Recover_Data.zip

2.解压下载下来的FY_Recover_Data.pck

[oracle@rac1 ~]$ unzip FY_Recover_Data.zip?

解压后得到一个文件FY_Recover_Data.pck

3.使用sys用户执行解压后的脚本(我这里解压后的文件在/home/oracle/)

SQL> @/home/oracle/FY_Recover_Data.pck

这个脚本实际是在sys用户下创建了一个名为FY_Recover_Data的package


4.执行
exec fy_recover_data.recover_truncated_table('SCOTT','T');
注:执行上的SQL产生2个表空间FY_REC_DATA、FY_RST_DATA
5.使用sys用户把恢复的数据从scott.t$$中插回scott.t表
注:scott.t$$中是scott.t表truncate之前的数据
SQL> insert into scott.t select * from scott.t$$;
13 rows created.
SQL> commit;
Commit complete.
可以看到被truncate的数据已经恢复。


6.使用sys用户删除恢复时产生的2个表空间及数据文件

SQL> drop tablespace fy_rec_data including contents and datafiles;

Tablespace dropped.

SQL> drop tablespace fy_rst_data including contents and datafiles;

Tablespace dropped.


2.drop表


1.从oracle10g开始删除数据库表的时候并不是真正删除,而是放到了recyclebin中,这个过程类似 windows里面删除的文件会被临时放到回收站中。

2.删除的表系统会自动给他重命名就是你看到的 【BIN$】开头的名字

通过 show recyclebin 命令可以查看被删掉的表的详细信息,或者查询

select * from recyclebin;

3.收回表的命令

flashback table 原表名 to before drop;

4.情况回收站的命令:

purge recyclebin;

5.如果不想删除的表经过回收站

drop table 表名 purge;

或者停用数据库的回收战功能

10.1版本中,修改隐藏参数 _recyclebin

alter system set “_recyclebin” = false;

10.2版本中

alter system set recyclebin = off;


6.清空默认生成的表名,可以通过以下命令

drop table ‘BIN$qLechQyAZbzgVAAjfT4Z9Q==$0’ purge

闪回:后进先出


7.恢复同一个 schema 下准备闪回的表已有同名的对象存在,闪回 drop 需要重命名.

SQL> flashback table t1 to before drop rename to test_old;


案例

如果一个表上面有索引和约束,drop 后再闪回表,索引和约束还在吗?

create table t (id int,name char(10));

alter table t add constraint pk_t primary key(id);

insert into t values (1,‘sohu’);

insert into t values (2,‘sina’);

commit;

SQL> select * from t;


看一眼约束和索引

SQL> select * from user_indexes;

SQL> select * from user_constraints;


再看约束和索引

SQL> select * from user_indexes; 索引回来了,有效(考点),但乱码

SQL> select * from user_constraints; 约束也在,有效(考点),但乱码


分别重命名索引和约束


SQL> alter index "BIN$yF3hbvIbioTgQAB/AQAJlg==$0" rename to pk_t;
SQL> alter table t rename constraint "BIN$yF3hbvIaioTgQAB/AQAJlg==$0" to pk_t;

20210321180413862.png


.闪回查询 (DML 误操作)

as of timestamp to_timestamp(‘2020-07-17 09:30:00’, ‘yyyy-mm-dd hh24:mi:ss’)

4.闪回存储过程、包(sys用户)

1.找回ID
SELECT obj#
FROM obj$ AS OF TIMESTAMP TO_TIMESTAMP('2020-07-24  14:30:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE NAME = 'PKG_COG'
2.通过ID反查
SELECT source
FROM source$ AS OF TIMESTAMP TO_TIMESTAMP('2020-07-24  14:30:00', 'YYYY-MM-DD HH24:MI:SS')
where obj# = 138324;


3.脚本输出

–输出脚本命令

set echo off;

set feedback off;

set verify off;

set term off;

set trimspool on;

set linesize 3000;

–set pagesize 999;

set newpage none;

set heading off;

spool /oracle/scr/wpp.sql; --输出指定目录的文件

@/home/oracle/scr/test.sql; --执行SQL脚本(sql语句查询)

SQL> @/home/oracle/scr/wdd.sql


5.闪回表 (undo)


1.闪回表通常是把表的状态回退到以前的某个时刻或者 SCN 上。(其实向前向后都能闪),自动恢复相关的属性,包括索引、触发器等。前提是对表启用行移动。

语法:flashback table <table_name> to timestamp | scn


原理:利用的是Undo表空间的undo数据,闪回表到某个时间点或某个SCN,适用于Delete


SQL>delete student;

SQL>commit;

SQL>alter table student enable row movement;

SQL>flashback table student to scn XXXXX


闪回查询确认过去的这个时间点是不是我们想要的数据:

select * from fb_1 as of scn 973099;

执行闪回,可以执行多次闪回操作:

flashback table fb_1 to scn 973099;

SYS@ORCL> flashback table scott.t to timestamp to_timestamp(‘2020-08-19 01:20:00’,‘yyyy-mm-dd hh24:mi:ss’);


2.查询系统当前SCN两条命令

SQL> select current_scn from v$database;

目录
相关文章
|
Oracle 关系型数据库
Oracle新建数据表的两种方法
Oracle新建数据表的两种方法
|
21天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
27 7
|
2月前
|
Oracle 安全 关系型数据库
Oracle数据恢复—Oracle数据库误删除的数据恢复方法探讨
删除Oracle数据库数据一般有以下2种方式:delete、drop或truncate。下面针对这2种删除oracle数据库数据的方式探讨一下oracle数据库数据恢复方法(不考虑全库备份和利用归档日志)。
|
4月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库误删除的数据恢复方法
相信有很多oracle数据库用户都遇到过在操作Oracle数据库时误删除某些重要数据的情况,这个时候如果数据库没有备份且数据十分重要的,怎么才能恢复误删除的数据呢?北亚企安数据恢复工程师下面简单介绍几个误删除Oracle数据库数据的恢复方法。
|
6月前
|
Oracle Java 关系型数据库
实时计算 Flink版产品使用合集之在同步Oracle数据时,需要下载并添加到项目中的jar包主要包括哪些
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
SQL 存储 Oracle
Oracle数据库中游标的工作原理与优化方法
Oracle数据库中游标的工作原理与优化方法
|
5月前
|
Oracle 关系型数据库 数据库
oracle误删除数据的恢复方法
oracle误删除数据的恢复方法
52 0
|
6月前
|
SQL Oracle 安全
Oracle的PL/SQL异常处理方法:守护数据之旅的“魔法盾”
【4月更文挑战第19天】Oracle PL/SQL的异常处理机制是保障数据安全的关键。通过预定义异常(如`NO_DATA_FOUND`)和自定义异常,开发者能优雅地管理错误。异常在子程序中抛出后会向上传播,直到被捕获,提供了一种集中处理错误的方式。理解和善用异常处理,如同手持“魔法盾”,确保程序在面对如除数为零、违反约束等挑战时,能有效保护数据的完整性和程序的稳定性。
|
6月前
|
Oracle 关系型数据库
oracle 修改表空间文件路径方法
oracle 修改表空间文件路径方法
|
6月前
|
SQL Oracle 关系型数据库
Oracle之替代OR的另一种方法
Oracle之替代OR的另一种方法
268 0