Oracle数据库的闪回
Oracle数据库的闪回
oracle
使用的是10g,前几天在操作数据库的时候,突然发现每删除一个表就会产生一个系统生成的表,再一看这个表里面就是刚刚删除的表,只是表名被改成了系统字段,初步判定是从oracle的新技术,删除表并不立即丢弃,因为以前用9i的时候没遇到过这种情况,新技术虽然比较人性化,但是有时候也有不方便的时候,我在这里就针对这一块来提出10个问题。
1自己已经删除的表,怎么会多出一张表,而且结构还是一样的?
这是由于oracle从9i开始引用的新技术,叫做闪回(flashback)技术,从10g开始默认闪回为开,Drop 掉的表不被会删除,它还保存在回收站中,Oracle给他指派一个系统生成的名字,此名字通常有30个字符长,且只能查询,可方便用户撤销已经误删的表和数据库。
2如何进行物理删除?
可以使用drop table tablename purge; 这样就可以物理删除表。
3删除了的表要怎么才可以恢复?
使用flashback table tablename to before drop;可以恢复。
4如何删除回收站中的单个表?
purge table test_drop;
5我一次性删了好多表,不愿意一张一张删除,该怎么删?
可以使用清空回收站命令:purge recyclebin;
6如何查看回收站中的表?
用show recyclebin;可以查看当前回收站中的表
7如何查看当前闪回是否开启?
可以使用select flashback_on from v$database;查看是否已经开启闪回。
8如何关闭闪回?
1.关闭数据库SQL> shutdown immediate; 2.启动数据库为mount模式SQL> startup mount; SQL> alter database flashback off ;
9如何启动闪回?
1.关闭数据库SQL> shutdown immediate; 2.启动数据库为mount模式SQL> startup mount 3.显示和修改归档模式SQL> archive log listSQL> alter database archivelog;SQL> alter database open 4.设置归档日志的格式SQL>alter system set log_archive_format='ARC%s%t%r.log' scope=spfile; 5.设置归档日志的存放路径SQL>alter system set log_archive_dest='+data/arcl' scope=spfile;SQL>shutdown immediateSQL>startup 6.强制切换归档日至SQL>alter system switch logfile; 7.取消归档SQL>alter database noarchivelog;
10如何闪回数据库?
1.关闭数据库SQL> shutdown immediate; 2.启动数据库为mount模式SQL> startup mountSQL>flashback database to timestamp(to_date('2008-03-11 16:58:23', 'yyyy-mm-dd hh24:mi:ss')); SQL>alter database open;