如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com

    适用于: Oracle Database - Enterprise Edition –版本10.1.0.2及以上 本文信息适用于任何平台。   目标 本文将由于以下目的:
  1. 了解闪回表功能
  2. 以几个例子使用闪回表功能。
  3. 解决当使用该功能时可能出现的常见错误
  解决方案 闪回表功能的什么: ------------------------------------------------------
  • 该功能引入SQL中的FLASHBACK TABLE语句,这能快速恢复表到过去时间点,而无需还原备份。
  • 表能被闪回到的过去时间取决于系统中的undo数据量。此外, Oracle数据库无法通过更改表结构的任何DDL操作将表还原到一个较早状态。
  • 你无法回滚一个FLASHBACK TABLE语句。但是,你可以发出另一个FLASHBACK TABLE语句并自指定一个当前时间之前的时间。因此,建议在发出FLASHBACK TABLE子句之前记录当前SCN。
如何启用并使用该功能: ----------------------------------------------------- 要闪回表到一个较早SCN或时间戳,你必须有以下之一
  1. 在表上的FLASHBACK 对象权限或FLASHBACK ANY TABLE 系统权限。
  2. 在表上的SELECT, INSERT, DELETE, 和 ALTER对象权限。
  3. 必须对闪回列表中的所有表启用行移动。
展示其使用与常见错误: --------------------------------------------------------------------------------------------------- CANNOT FLASHBACK "SYS" TABLES: SQL> select dbms_flashback.get_system_change_number from dual; GET_SYSTEM_CHANGE_NUMBER ------------------------ 521237 SQL> flashback table ban to scn 521237 2 ; flashback table ban to scn 521237 * ERROR at line 1: ORA-08185: Flashback not supported for user SYS CANNOT FLASHBACK A TABLE WHICH DOESN'T HAVE ROW MOVEMENT ENABLED SQL> flashback table banchu to timestamp(systimestamp - interval '1' minute); flashback table banchu to timestamp(systimestamp - interval '1' minute) * ERROR at line 1: ORA-08189: cannot flashback the table because row movement is not enabled A USER "SOMU" TRYING TO FLASHBACK A TABLE OF USER "SOM" WITHOUT PROPER PRIVILEGES: SQL> flashback table som.banchu to timestamp(systimestamp - interval '1' minute); flashback table som.banchu to timestamp(systimestamp - interval '1' minute) * ERROR at line 1: ORA-01031: insufficient privileges GRANTING PROPER PRIVILEGES TO USER "SOMU" Connected as "SOM": SQL>grant flashback on banchu to somu; SQL> grant select,insert,delete,alter on banchu to somu; Grant succeeded. SQL> select * from banchu; ID ---------- 100 200 300 Connected as "SOMU" SQL> flashback table som.banchu to timestamp(systimestamp - interval '3' minute); Flashback complete. SQL> select * from som.banchu; ID ---------- 100 200 Please note that '300' is missing. Connected as 'SOM': ------------------- SQL> select * from banchu; ID ---------- 100 200 DROPPING A TABLE AND THEN FLASHBACK: SQL> drop table banchu; Table dropped. SQL> flashback table banchu to scn 522748; flashback table banchu to scn 522748 * ERROR at line 1: ORA-00942: table or view does not exist SQL> select * from banchu; ID ---------- 100 200 如果你指定了用户定义名称,且回收站包含该名称的多个对象,则数据库检索最近被移动到回收站的对象 SQL> select * from banchu; ID ---------- 100 200 SQL> DROP TABLE BANCHU; Table dropped. SQL> CREATE TABLE BANCHU(PHONE NUMBER); Table created. SQL> INSERT INTO BANCHU VALUES(9999); 1 row created. SQL> COMMIT; Commit complete. SQL> DROP TABLE BANCHU; Table dropped. SQL> FLASHBACK TABLE BANCHU TO BEFORE DROP; Flashback complete. SQL> SELECT * FROM BANCHU; PHONE ---------- 9999 注:以上查询检索最近被drop的表。 要检索旧表,使用RENAME TO选项再次闪回: SQL> flashback table banchu to before drop rename to banchu1; Flashback complete. SQL> select * from banchu1; ID ---------- 100 200 当使用系统生成名检索旧表时,显示错误: ---------------------------------------------------------------------------------------------------------------------- SQL> select object_name,original_name from user_recyclebin; OBJECT_NAME ORIGINAL_NAME ------------------------------ ----------------------------- BIN$2LsYTE+bSF/gNAgAIKT8Ng==$0 BANCHU BIN$2K3a5EGlDtrgNAgAIKT8Ng==$0 TEST1 SQL> flashback table BIN$2LsYTE+bSF/gNAgAIKT8Ng==$0 to before drop; flashback table BIN$2LsYTE+bSF/gNAgAIKT8Ng==$0 to before drop * ERROR at line 1: ORA-00905: missing keyword 该错误是由于未使用双引号括起生成的名称 SQL> flashback table "BIN$2LsYTE+bSF/gNAgAIKT8Ng==$0" to before drop; 确保用户有正确的权限,否则会生成 ORA-1031