创建TEST表:
Create table test as select * from user_objects;
创建TEST_BAK表:
Create table test_bak as select * from test;
创建procedure:
createorreplaceprocedurepro_test
is
id_cntnumber;
begin
selectcount(object_id)intoid_cntfromtest;
dbms_output.put_line('Object_id:'||id_cnt);
end;
创建trigger:
CREATE OR REPLACE TRIGGER "HAO"."TRG_TEST"
after insert or delete on TEST
for each row
begin
dbms_output.put_line('modified!');
exception
when others then
dbms_output.put_line(sqlerrm);
end;
/
创建index:
Create index idx_test_object_id on test(object_id);
创建约束:
主键:
alter table test_bak add constraint pk_test_bak primary key (object_id);
外键:
alter table test add constraint fk_test foreign key (object_id) references test_bak(object_id);
SQL> select object_name,object_type,status from user_objects;
OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------- -------
TEST TABLE VALID
TEST_BAK TABLE VALID
PRO_TEST PROCEDURE VALID
IDX_TEST_OBJECT_ID INDEX VALID
PK_TEST_BAK INDEX VALID
TRG_TEST TRIGGER VALID
SQL> select constraint_name,constraint_type,status from user_constraints;
CONSTRAINT_NAME C STATUS
------------------------------ - --------
FK_TEST R ENABLED
PK_TEST_BAK P ENABLED
SQL> drop table test;
表已删除。
SQL> select object_name,object_type,status from user_objects;
OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------- -------
TEST_BAK TABLE VALID
BIN$qdWcERzdS+yMK7Vqv9E1UA==$0 TRIGGER INVALID
PRO_TEST PROCEDURE INVALID
BIN$v6zc94PYQCON0EGJ9tMvQQ==$0 TABLE VALID
PK_TEST_BAK INDEX VALID
BIN$MEmOkWEiQ8GnifY4O+9Y8g==$0 INDEX VALID
已选择6行。
SQL> select constraint_name,constraint_type,status from user_constraints;
CONSTRAINT_NAME C STATUS
------------------------------ - --------
PK_TEST_BAK P ENABLED
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ ----------------
TEST BIN$v6zc94PYQCON0EGJ9tMvQQ==$0 TABLE 2008-11-24:20:17
SQL> flashback table test to before drop;
闪回完成。
SQL> select object_name,object_type,status from user_objects;
OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------- -------
TEST TABLE VALID
TEST_BAK TABLE VALID
BIN$qdWcERzdS+yMK7Vqv9E1UA==$0 TRIGGER INVALID
PRO_TEST PROCEDURE INVALID
PK_TEST_BAK INDEX VALID
BIN$MEmOkWEiQ8GnifY4O+9Y8g==$0 INDEX VALID
已选择6行。
SQL> alter index "BIN$MEmOkWEiQ8GnifY4O+9Y8g==$0" rename to IDX_TEST_OBJECT_I
索引已更改。
SQL> select object_name,object_type,status from user_objects;
OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------- -------
TEST TABLE VALID
TEST_BAK TABLE VALID
BIN$qdWcERzdS+yMK7Vqv9E1UA==$0 TRIGGER INVALID
PRO_TEST PROCEDURE INVALID
IDX_TEST_OBJECT_ID INDEX VALID
PK_TEST_BAK INDEX VALID
已选择6行。
SQL> alter trigger "BIN$qdWcERzdS+yMK7Vqv9E1UA==$0" rename to trg_test;
触发器已更改
SQL> select object_name,object_type,status from user_objects;
OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------- -------
TEST TABLE VALID
TEST_BAK TABLE VALID
PRO_TEST PROCEDURE INVALID
IDX_TEST_OBJECT_ID INDEX VALID
PK_TEST_BAK INDEX VALID
TRG_TEST TRIGGER INVALID
已选择6行。
SQL> alter trigger trg_test compile;
触发器已更改
SQL> select object_name,object_type,status from user_objects;
OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------- -------
TEST TABLE VALID
TEST_BAK TABLE VALID
PRO_TEST PROCEDURE INVALID
IDX_TEST_OBJECT_ID INDEX VALID
PK_TEST_BAK INDEX VALID
TRG_TEST TRIGGER VALID
已选择6行。
SQL> alter procedure pro_test compile;
过程已更改。
SQL> select object_name,object_type,status from user_objects;
OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------- -------
TEST TABLE VALID
TEST_BAK TABLE VALID
PRO_TEST PROCEDURE VALID
IDX_TEST_OBJECT_ID INDEX VALID
PK_TEST_BAK INDEX VALID
TRG_TEST TRIGGER VALID
已选择6行。
SQL> select constraint_name,constraint_type,status from user_constraints;
CONSTRAINT_NAME C STATUS
------------------------------ - --------
PK_TEST_BAK P ENABLED
Flashback drop并没有把FK恢复!
总结:
在recyclebin on的状态下,Drop table之后,会将table和trigger重新命名,procedures则不会重命名,flashback drop可以恢复表以及相关object,但是对于procedures和trigger需要自己手动rename和compile,FK不能被恢复,需要手动创建。
分享到:
相关推荐
### Oracle 闪回已删除的表 在Oracle数据库管理中,**闪回删除的表**是一项非常实用的功能,它允许数据库管理员(DBA)恢复被误删的表及其所有数据。这一特性最早出现在Oracle 9i版本中,但在Oracle Database 10g中...
在了解如何彻底删除Oracle表和如何使用闪回恢复回收站中的数据之前,我们需要先明白回收站的工作原理。 回收站的工作原理在于,当执行`DROP TABLE`等删除命令时,Oracle并不立即释放相关的磁盘空间,而是将被删除的...
本文将涵盖闪回删除表、闪回删除、闪回查询等多种闪回类型,并通过具体的实例加深理解。 #### ORACLE闪回技术概述 Oracle闪回技术主要分为以下几个方面: 1. **闪回删除表**:适用于当表被误删除时,可以从回收站...
闪回表(Flashback Table)可以将某个表回退到过去某个时间点。工作原理是Oracle会先去查询撤销段,提取过去某个时间点之后的所有变更,构造反转这些变更的SQL语句进行回退。闪回表操作是一个单独的事务,所以若由于...
Oracle闪回删除表功能是Oracle数据库提供的一种高级数据恢复机制,尤其在误删除表的情况下,能够帮助用户迅速恢复数据到删除前的状态。该机制自Oracle 10g开始引入,大大增强了数据库的安全性和数据管理的灵活性。 ...
为了使 Oracle 数据库从任何逻辑误操作中迅速地恢复...进行了全面扩展,提供了闪回数据库、闪回删除、闪回表、闪回事物及闪回版本查询等功能,本 文将重点说闪回删除、闪回表的使用。(本文使用oracle 版本10.2.0.3.0)
"Oracle 误删除后的闪回方法"是解决这类问题的关键技术。Oracle提供了多种强大的工具和功能,帮助用户在数据丢失后迅速恢复,其中最常用的就是闪回(Flashback)技术。以下将详细介绍Oracle中的闪回恢复机制及其相关...
它包括闪回数据库、闪回表和闪回删除等功能。闪回恢复区保存了一段时间内对数据的修改,以便在需要时恢复。闪回日志则记录了数据变化的前一个状态,存储在闪回缓冲区,然后由RVWR进程写入闪回日志文件。 2. **闪回...
### 达梦开启归档和闪回的方式 #### 背景介绍 在数据库管理领域,数据的安全性和可用性是至关重要的。为了确保数据的安全,通常会采用多种备份策略和技术来实现这一目标。其中,归档(Archiving)和闪回...
Oracle 闪回技术是Oracle...通过闪回删除、闪回查询和闪回表数据,用户可以在不影响数据库正常运行的情况下,实现对数据的精细控制和恢复。然而,使用这些功能时也应谨慎,确保对潜在风险和资源消耗有充分的认识。
5. **闪回删除(Flashback Drop)**:当误删了表或者分区时,可以通过`FLASHBACK TABLE`命令将其恢复回来,前提是没有执行过`PURGE`操作。 6. **闪回数据归档(Flashback Data Archive)**:这是对历史数据进行长期...
这些特性包括但不限于闪回表、闪回删除、闪回版本查询以及闪回事务查询等。下面将详细介绍每一种闪回类型的使用方法及其应用场景。 #### 二、闪回操作背景 闪回功能主要针对以下场景: 1. **错误地使用了DML语句*...
Oracle闪回技术主要包括以下几种类型:闪回查询(Flashback Query)、闪回表(Flashback Table)、闪回事务查询(Flashback Transaction Query)、闪回数据库(Flashback Database)和闪回删除(Flashback Drop)。...
Oracle 闪回操作是Oracle数据库提供的一种高级恢复技术,它允许用户恢复数据库、表或单个行至一个特定的时间点或系统改变号 (SCN)。这种功能在处理误操作,如误删数据、错误更新等场景时尤其有用,因为它可以避免...
- 接着,模拟一个误操作,例如创建用户、授予权限、创建表、切换日志并删除用户及所有相关对象。 - 当需要闪回时,将数据库启动到MOUNT状态,然后使用`FLASHBACK DATABASE TO SCN`命令,指定要恢复的SCN。 - 完成...
3. 闪回删除:对于误删除的表,通过`FLASHBACK DROP`可以恢复。 4. 数据比较:`FLASHBACK QUERY`可用于对比当前数据与过去某时刻的数据,以分析变化。 监控闪回数据库的关键在于确保有足够的空间来存储闪回日志,...
"SCN号的闪回"是Oracle数据库中一个重要的恢复机制,全称为System Change Number,它是Oracle数据库中记录事务更改的唯一序列号。SCN是一个不断增加的数字,每次数据库中的数据发生变化时,都会生成一个新的SCN,...
### Oracle 10g 闪回机制详解 #### 一、引言 在数据库管理过程中,数据的安全性和准确性至关重要。然而,在实际操作中难免会出现误操作的情况,比如错误地更新了数据或不小心删除了重要的表格。传统的事务处理机制...
假设我们有一个名为`gametable`的游戏记录表,在进行数据误删除后,可以通过以下步骤使用闪回查询功能来恢复数据。 1. **误删除操作**: ```sql DELETE FROM gametable WHERE GAMEID = 1008; COMMIT; ``` 上述...
- 闪回查询和闪回表操作可能会影响性能,因此建议在非生产环境或者低峰时段进行测试。 通过上述介绍,我们可以看到Oracle闪回技术的强大之处,它能够有效地帮助用户在数据丢失的情况下恢复数据,是Oracle数据库管理...