`

Oracle的几种删除表的方式

阅读更多

Oracle删除表

Java代码 复制代码
  1. 1, DELETE  (删除数据表里记录的语句)   
  2.   
  3. DELETE FROM表名 WHERE 条件;   
  4.   
  5. 注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.   
  6.   
  7. 如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间   
  8. TRUNCATE TABLE 表名;    
  9. 此操作不可回退.  
1, DELETE  (删除数据表里记录的语句)

DELETE FROM表名 WHERE 条件;

注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.

如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间
TRUNCATE TABLE 表名; 
此操作不可回退.



Java代码 复制代码
  1. http://www.chinaunix.net 作者:oraix  发表于:2004-11-28 23:02:53     
  2.   
  3. 注意:这里说的delete是指不带where子句的delete语句    
  4. 相同点    
  5. truncate和不带where子句的delete, 以及drop都会删除表内的数据    
  6.   
  7. 不同点:    
  8. 1. truncate和 delete只删除数据不删除表的结构(定义)    
  9.     drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.    
  10. 2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.    
  11.    truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.    
  12. 3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动    
  13.   显然drop语句将表所占用的空间全部释放    
  14.   truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;   truncate会将高水线复位(回到最开始).    
  15. 4.速度,一般来说: drop>; truncate >; delete    
  16. 5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及    
  17. 使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.    
  18. 想删除表,当然用drop    
  19. 想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.    
  20. 如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据    
分享到:
评论
2 楼 dolphin_ygj 2009-04-20  
Oracle找回数据(转)
1、 用dbms_flashback找回数据


首先必须要有使用dbms_flashback包的权力,可以在sys下通过

Grant execute on dbms_flashback to user;授权




Sql>execute dbms_flashback.enable_at_time(date);  //开启快照模式

Sql>进行回复操作,此时查询的表都是date所指时间的表,可以通过游标打开表,或把该表中的数据存入临时表

Sql>execute dbms_flashback.disable; //结束快照模式

Sql>把游标或临时表中的数据写回到原来的表中







一个示例存储过程:

1、确定数据被删之前的状态:

SQL>connect test/test

SQL>select * from yang;

SQL> select * from yang;

PART_ID ID NAME

---------- ---------- ----------

1 1 yang

1 1 yang

11 1 ding

SQL> select to_char(sysdate,'mm-dd-yy hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'

-----------------

01-21-05 14:48:09

2、删除表中的全部数据:

SQL>delete yang;

SQL>commit;

SQL>select to_char(sysdate,'mm-dd-yy hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'

-----------------

01-21-05 14:49:08

3、启用flashback。

SQL> exec dbms_flashback.enable_at_time(to_date('2005-01-21 14:48:09','yyyy-mm-dd hh24:mi:ss'));

PL/SQL 过程已成功完成。

SQL> select * from yang;

PART_ID ID NAME

---------- ---------- ----------

1 1 yang

1 1 yang

11 1 ding

这说明通过flashback可以找回丢失的数据。

因为在flashback方式下不能使用DML语句,而只能查看数据,因此使用通常的方法并不能恢复数据,但我们使用存储过程中的游标来保存flashback状态下的数据,等关闭flashback后再用此游标把数据恢复。

4、使用存储过程如下:

SQL>set serveroutput on

SQL>DECLARE

r_yang yang%ROWTYPE;

CURSOR c_yang IS SELECT * FROM yang;

BEGIN

OPEN c_yang;

dbms_flashback.disable;

LOOP

FETCH c_yang INTO r_yang;

EXIT WHEN c_yang%NOTFOUND;

dbms_output.put_line(r_yang.part_id||','||r_yang.id||','||r_yang.name);

insert into yang (part_id,id,name) values (r_yang.part_id,r_yang.id,r_yang.name);

commit;

END LOOP;

CLOSE c_yang;

END;

/

1,1,yang

1,1,yang

11,1,ding

PL/SQL 过程已成功完成。

5、然后再查看表中的数据,发现数据已经恢复了。

SQL> select * from yang;

PART_ID ID NAME

---------- ---------- ----------

1 1 yang

1 1 yang

11 1 ding







2、用timestamp找回数据




insert into yang

select * from yang as of timestamp to_timestamp('2005-01-21 14:48:0', 'yyyy-mm-dd hh24:mi:ss');

将表yang在2005-01-21 14:48:0这一时间点时的记录插入到当前时刻的yang表中。

1 楼 dolphin_ygj 2009-04-20  
Oracle查找删除记录后表中某一时间点的数据
删除数据前表中记录
1> select t.*, t.rowid from vt_temp_test;
1 1 2 3.00 4.00
2 5 6 7.00 8.00
3 9 10 11.00 12.00
4 13 14 15.00 16.00

记录原数据完整时间点
2> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
1 2009-01-08 09:23:53

删除表中记录
3> delete from vt_temp_test;

找回原数据完整时间点数据
4> select * from vt_temp_test as of timestamp to_timestamp('2009-01-08 09:23:53', 'yyyy-mm-dd hh24:mi:ss'); 
1 1 2 3.00 4.00
2 5 6 7.00 8.00
3 9 10 11.00 12.00
4 13 14 15.00 16.00

插入丢失数据到原表
5> insert into vt_temp_test select * from vt_temp_test as of timestamp to_timestamp('2009-01-08 09:23:53', 'yyyy-mm-dd hh24:mi:ss');

验证数据恢复情况
6> select * from vt_temp_test
1 1 2 3.00 4.00
2 5 6 7.00 8.00
3 9 10 11.00 12.00
4 13 14 15.00 16.00

---- 此时表明数据已完全恢复到原数据完整时间点的数据 ----

#### 注:当执行 truncate table vt_temp_test 时,就无法恢复数据,查找当时数据会报错:ORA-01466 unable to read table - table definition has changed。drop table vt_temp_test则更不可恢复 ####

相关推荐

    oracle定时删除表空间的数据并释放表空间

    本文将深入探讨如何在Oracle环境中实现定时删除表空间的数据并释放空间,主要涵盖以下几个关键知识点: 1. **Oracle 表空间(Tablespaces)**:表空间是Oracle数据库中存储数据的基本单位,它由一个或多个数据文件...

    如何正确的删除Oracle表空间数据文件

    如果在操作系统层面误删了数据文件,有几种恢复方法: 1. 如果已执行`ALTER DATABASE DATAFILE N OFFLINE DROP;`但未实际删除文件,可以先将文件ONLINE,然后使用`ALTER TABLESPACE XXX DROP DATAFILE N;`命令删除。...

    彻底删除 Oracle 的数据表

    本文介绍了几种常用的彻底删除Oracle数据表的方法,包括使用`PURGE`命令、在`DROP`语句中添加`PURGE`选项等。正确应用这些方法可以帮助管理员有效地管理数据库空间,并避免不必要的数据残留问题。

    oracle删除和重建实例

    删除和重建 Oracle 实例需要注意以下几点: * 在删除实例之前,需要备份数据库,以免数据丢失。 * 删除实例需要关闭所有 Oracle 进程,以免出现意外错误。 * 重建实例需要使用正确的实例名和SID,以免出现冲突。 * ...

    oracle下如何删除重复数据的几种方法

    本文介绍了在Oracle数据库中处理重复数据的几种方法。无论是部分字段重复还是完全重复的记录,都可以通过创建临时表的方式提高删除重复记录的效率。此外,在处理重复数据时,还应考虑到保留最新或最旧记录的需求,...

    oracle删除重复数据的几种方法

    oracle 删除重复数据的几种方法 在 Oracle 中,删除重复的数据是一种常见的操作。delete 操作可以用来删除重复的数据,但是需要根据实际情况选择合适的方法。下面将介绍四种删除重复数据的方法,每种方法都有其优...

    oracle实例删除

    Oracle RAC (Real Application Clusters) 是一种高可用性和可扩展性的数据库解决方案,它允许多个Oracle数据库实例同时访问同一个数据库。在Oracle RAC环境中进行实例管理是一项重要的任务,包括添加新的实例或删除...

    Oracle的几种登录方式及建议使用

    SQL*Plus是Oracle提供的一种命令行工具,它是最早也是最基础的数据库访问方式。用户可以通过输入SQL语句直接与数据库交互,执行查询、插入、更新和删除等操作。在没有图形界面或者网络环境限制的情况下,SQL*Plus是...

    Oracle恢复误删除数据,解除锁定的等SQL语句

    当你不小心删除了数据库表中的数据时,Oracle提供了一种称为"闪回"的功能来恢复这些数据。在Oracle 10g及更高版本中,你可以使用`AS OF TIMESTAMP`子句查询到特定时间点的数据。例如,要查询两个小时以前的表数据,...

    oracle中如何删除重复的记录

    要删除Oracle数据库表中的重复记录,有几种方法可以采用: ##### 方法一:使用子查询与DELETE语句 这种方法适用于只需要删除重复记录中的某些行的情况。步骤如下: 1. **找出重复的记录**:首先,我们需要找到...

    Oracle Database 10g删除表的程序.rar_oracle 10g

    在Oracle 10g中,删除表有几种不同的方法,主要通过SQL语句实现。最常用的是`DROP TABLE`语句,用于永久性地从数据库中删除整个表及其所有数据。以下是对`DROP TABLE`语句的详细解释: ```sql DROP TABLE 表名 ...

    oracle删除重复记录性能分析

    本文旨在通过对比几种不同的方法来删除Oracle中的重复记录,并分析其性能差异,从而为数据库管理员提供有效的解决方案。 #### 二、方法与实现 ##### 方法一:使用ROWID直接删除 这种方法利用ROWID属性唯一性来...

    Java操作Oracle数据库(建表,插数据,删除)

    Java 是一种广泛使用的编程语言,而 Oracle 数据库是一种功能强大且广泛使用的关系型数据库管理系统。在本文中,我们将探讨如何使用 Java 操作 Oracle 数据库,包括建表、插入数据和删除数据等操作。 Java 操作 ...

    Oracle DG主备库删除归档脚本

    Oracle Data Guard(DG)是Oracle数据库系统中的一种高可用性和灾难恢复解决方案,它允许在主数据库和一个或多个备用数据库之间创建和维护实时同步。在Oracle DG环境中,归档日志是实现数据保护和故障切换的关键组件...

    快速掌握删除Oracle 10g垃圾表的好方法

    当面临以下几种情况时,可能需要考虑清理这些垃圾表: 1. **空间占用**:这些未被真正删除的表会继续占用数据库的存储空间。随着垃圾表数量的增加,可能会对数据库性能产生影响,特别是在磁盘空间有限的情况下。 2...

    Oracle 11g 的几种登录方式及简易使用(图文)

    本文将详细介绍Oracle 11g的三种主要登录方式:企业管理器(EM)、SQL*Plus以及SQL Developer,并简述它们的基本功能和应用场景。 1. **企业管理器(Enterprise Manager,简称EM)** Oracle EM 提供了一个图形化的...

    Oracle的几种登录方式与简易使用.zip_5G18_childrenhxe_oracle

    在本文中,我们将深入探讨Oracle的几种登录方式及其简易使用,以帮助新手快速上手。 1. **SQL*Plus登录** SQL*Plus是Oracle提供的一种命令行工具,用于直接与数据库交互。在命令行界面输入`sqlplus username/...

    oracle临时表用法

    Oracle 临时表是一种特殊的表结构,它可以在数据库中临时存储数据,用于实现一些特定的应用场景。下面是 Oracle 临时表的详细知识点: 创建临时表 创建临时表的语法为: ``` CREATE GLOBAL TEMPORARY TABLE table ...

    Oracle中用Rowid查找和删除表中的重复记录

    针对不同的场景,可以采取以下几种策略来删除重复记录: 1. **基于Group By和Min/Max Rowid** ```sql DELETE FROM cz WHERE (c1, c10, c20) IN (SELECT c1, c10, c20 FROM cz GROUP BY c1, c10, c20 HAVING COUNT...

    oracle外部表的使用

    在Oracle数据库中,外部表(External Tables)是一种特殊类型的表,它允许...总之,Oracle外部表为处理大量外部数据提供了一种高效、灵活的方式,通过合理的设计和管理,可以大大简化数据集成过程,提高数据处理效率。

Global site tag (gtag.js) - Google Analytics