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;

猜你喜欢

转载自willone001.iteye.com/blog/1925980