问题描述:
一次我删除普通用户表的时候,不小心把dba权限登录的表删除了,造成我的数据不能删除表空间和用户,只能够创建用户和创建表空间,在网上查资料,问公司的数据库老大,经过一番努力重要解决了这个问题。这里给出四种解决思路以及方案:
处理一:
如果提示有用户在连接不能删除,可通过下面的语句进行查询,查询是不是这个用户正在连接。
查询连接的用户:
Select username,sid,serial# from v$session where username='BULRL';
处理二:
如果执行某些功能oracle报错,可以开启sql跟踪去oracle的日志中查看错误,想到与运行java程序,后台报错一样,只有知道了哪里错了才能去解决这个错误。但是使用完之后,一定要关
闭sql跟踪,不然日志数据量会越来越庞大。
-----开启sql跟踪
alter session set sql_trace=true;
-----关闭sql跟踪
alter session set sql_trace=false;
处理三:
truncate的数据如何恢复oracle恢复删除的表,oracle有一个自己的回收站。对应误删的表可以从回收站中回。
一:表的恢复
对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的。一般步骤有:
1、从flash back里查询被删除的表
select * from recyclebin
2.执行表的恢复
flashback table tb to before drop,这里的tb代表你要恢复的表的名称。
二:表数据恢复
对误删的表记录,只要没有truncate语句,就可以根据事务的提交时间进行选择恢复,一般步骤有:
1、先从flashback_transaction_query视图里查询,视图提供了供查询用的表名称、事务提交时间、UNDO_SQL等字段。
如:select * from flashback_transaction_query where table_name='TEST';
2、执行表记录恢复
一般先根据时间进行查询,查询语句模式为select * from tb as of timestamp to_timestamp(time,'yyyy-mm-dd hh24:mi:ss'); tb指表名称,time指某个时间点
如select * st as of timestamp to_timestamp('2009-12-11 20:53:57','yyyy-mm-dd hh24:mi:ss');
若有数据,恢复极为简单了,语句为flashback table tb to timestamp to_timestamp(time,'yyyy-mm-dd hh24:mi:ss');
如flashback st to timestamp to_timestamp('2009-12-11 20:47:30','yyyy-mm-dd hh24:mi:ss');
注意:alter table testvarchar enable row movement;
这个命令的作用是,允许Oracle 修改分配给行的rowid。在Oracle 中,插入一行时就会为它分配一个rowid,而且这一行永远拥有这个rowid。闪回表处理会对EMP 完成DELETE,并且重新插入行,这样就会为这些行分配一个新的rowid。要支持闪回就必须允许Oracle 执行这个操作
处理四:
如果数据库回收站中没有数据,但是数据库的某些功能仍不能使用,对不起,只能选择重装数据库了。对应重装数据库本人也有些心得,重装过好多次数据库。
重装数据库之前需要把所有的关于oracle的软件全部卸载,之后重装oracle,特别注意的一个地方就是重装oracle的时候一定要修改实例名字,比如说以前的实例名叫orcl,你可以改成orcl1。重装完oracle之后,重启一下电脑,新装的oracle就可以使用了。
如果仍采用原先的实例名,重装后的数据库仍不能使用。如果你非要使用原先的实例名,只能删除注册表,把关于oracle的全部删除。具体我就不再说明,网上有教程。或者重装系统之后再装oracle。
但是如果你安装oracle的时候修改了实例名称,那就不用去删除注册表了。或者重装系统了!本人建议还是修改实例名,我感觉这个方法最好用!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论