环境:
- SQL>select*fromv$versionwhererownum=1;
- BANNER
- ----------------------------------------------------------------
- OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Prod
- SQL>!uname-a
- Linuxthink-V30SA2.6.35-22-generic#33-UbuntuSMPSunSep1920:34:50UTC2010i686GNU/Linux
我打算用闪回数据库来恢复,关于开启闪回数据库请参见: 闪回如何开启及注意事项
模拟的实验过程如下:
- SQL>showuser
- USERis"SYS"
- SQL>selectflashback_onfromv$database;
- FLASHBACK_ON
- ------------------
- YES
- SQL>createuseru1identifiedbyu1defaulttablespaceusersquota10monusers;--20:56分创建u1用户
- Usercreated.
- SQL>grantconnect,createanytabletou1;
- Grantsucceeded.
- SQL>connu1/u1
- Connected.
- SQL>createtabletest(iint);
- Tablecreated.
- SQL>insertintotestvalues(1);
- 1rowcreated.
- SQL>insertintotestvalues(2);
- 1rowcreated.
- SQL>commit;
- Commitcomplete.
- SQL>select*fromtest;
- I
- ----------
- 1
- 2
- SQL>conn/assysdba
- Connected.
- SQL>dropuseru1cascade;--21:09分把u1及其关联对象删除。
- Userdropped.
- SQL>shutdownimmediate
- SQL>startupmount
- SQL>flashbackdatabasetotimestampsysdate-9/1440;
- Flashbackcomplete.
- SQL>alterdatabaseopenresetlogs;
- Databasealtered.
- SQL>select*fromu1.test;
- I
- ----------
- 1
- 2
小结:
整个模拟实验的关键在于创建u1和删除u1之间的时间差,flashback database指定的timestamp要落在这个之间,否则实验会失败。