oracle 有用delete 删除一个表中的所有数据 再用create 创建这个表 失败了
发布网友
发布时间:2023-05-17 02:25
我来回答
共4个回答
热心网友
时间:2023-09-11 01:50
创建表没有成功是因为你只是删除了表中的数据,并没有删除table。如果要删除表,需要使用drop。代码如下:
drop table 表名;
想要恢复之前删除掉的数据,使用rollback的前提是没有commit,如果已经提交,rollback就不行了。需要使用“闪回”。说到oracle的闪回,一两句话解释不清,你可以百度找一下相关资料,或者把邮箱发给我,我给你发相关文档。研究一下,应该能够找回你的数据。追问您好,谢谢您的回答,我的邮箱是693783106@qq.com ,delete 后在创建这个表失败,再rollback 不能恢复数据了(没有commit操作);
追答闪回文档已发,rollback不行,采取这个方式试试吧。
热心网友
时间:2023-09-11 01:50
楼主基础不行啊,这个问题很简单。
首先要搞清楚DDL,DML语句。
DDL语句主要有create,drop,truncate,grant,analyze,revoke,comment,alter等
DML语句主要是insert,update,delete
DQL就是select
DDL语句自动commit。DML语句需要手动commit,当然如果事务过长,会导致“快照过旧”错误,无法commit。DQL不需要commit
然后回答下楼主的问题。
delete一个数据,是指不破坏表结构,删除一定条件的数据(如果全表删除应当使用truncate,好处在于:1.快2.下降HWM,这点很重要,不懂得再说)。然后create table,这里是在同一个会话(session)完成的,必然会导致session commit,这个时候的timestamp已经变了。rollback的时候是回滚到建表后这个commit的时间点,所以无法恢复。
不过可以用闪回来恢复。不过闪回时间要看闪回区(回滚段)的大小和之后有没有操作。
语法自行百度。闪回到删除的时间点之前。
如果是drop table需要恢复的,请使用flashback table a to before drop;这样会从回收站(recyclebin)取出,清空回收站语法是purge recyclebin。
热心网友
时间:2023-09-11 01:51
delete是删除表中数据,不是删除表。删除表要用drop,只有删除了表才能再用create创建这个表。
rollback是针对没有commit的操作才有效,如果已经提交,rollback就没用了。提交后的数据恢复,可以用flashback回复到删除前的表,也可以从日志去查出删除的数据,手动回复。
热心网友
时间:2023-09-11 01:51
Oracle DBA神器:PRM-DUL灾难恢复工具,Schema级别数据恢复。PRM-DULFor Oracle Database – schema级别oracle数据库数据恢复特性 ,PRM-DUL即ParnassusData Recovery Manager是企业级别Oracle数据库灾难恢复工具。PRM可以在无备份的情况下恢复被truncated掉的表,也可以恢复无法打开的Oracle数据库(Alter Database Open失败)中的数据。