关于oracle里面delete,trancate,drop的区别和用法
delete:属于DML语句,删除数据库中指定条件的数据,相应语法:
DELETE table WHERE a = b;
执行该语句后,需要使用commit进行提交才能反映到数据库中
TRUNCATE:(不是trancate)属于DDL语句,快速的删除指定表的所有数据,
TRUNCATE在各种表上无论是大的还是小的都非常快,同其它DDL语句一样,都显示的有提交操作,因此,执行之后是无法进行回滚操作的。TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比Delete操作后的表要快得多。TRUNCATE不能触发任何Delete触发器。当表被清空后表和表的索引将重新设置成初始大小,而delete则不能。
语法:TRUNCATE TABLE 表名
DROP:属于DDL语句,作用是删除整个表、删除指定的用户、删除指定的存储空间等等
语法:
drop table table_name [cascade constraint]
drop user user_name [cascade]
drop tablespace tablespace_name including content and datafiles
怎样恢复oracle删除(delete)的数据
第一步,先应记住被删除的表中有多少记录 select count(*) from t1; 第二步,delete该表的数据 delete from t1; commnit; 第三步,获得当前scn select dbms_flashback.get_system_change_number from dual; 第四步,根据第三步返回的scn不停地尝试查询直到所有记录都存在为止。
select count(*) from t1 as of scn 10670000;--10670000为返回的scn 第五步,当第四步返回的值为所删除的记录数时执行 insert into t1 select * from t1 as of scn 10670000; commite; 到此数据恢复完毕!。
oracle删除数据语句怎么写
Oracle数据删除语句
--查看当前SCN数值
SELECT dbms_flashback.get_system_change_number from dual;
--Scn与时间的对应关系
SELECT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss', to_char(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER) AS SCN from dual;
--通过时间flashback query数据
www.2cto.com
SELECT * FROM scott.test AS OF TIMESTAMP TO_TIMESTAMP('2013-11-17 10:25:17', 'YYYY-MM-DD HH:MI:SS');
--通过SCN 闪回数据
SELECT * FROM scott.test AS OF SCN 23565583;
--闪回表中误删除的数据
flashback table tablename to timestamp xxx
flashback table tablename to scn xxx
--闪回表前提条件
--该表需开启行移动功能,可在恢复之前打开再执行恢复
alter table test enable row movement;
详解Oracle DELETE和TRUNCATE 的区别
1.delete from后面可以写条件,truncate不可以。
2.delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日至里面只记录页释放,简言之,delete from更新日志,truncate基本不,所用的事务日志空间较少。
3.delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。
4.当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。truncate始终锁定表和页,而不是锁定各行。
5.如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变,而truncate后,种子会恢复初始。
6.truncate不会触发delete的触发器,因为truncate操作不记录各个行删除。