当前位置:数据库 > Oracle >>

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;

 

 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,