在PLSQL用system新建了用户,本来是要给新建的用户导库的,一时犯二直接在PLSQL把库导到了system用户下。现在新建用户再导库的话会报很多错,有三分之二的表和视图都无效了。
------解决思路----------------------
数据库是否开启了闪回
尝试闪回数据库到导入前的状态
数据库闪回(Flashback Database)
闪回数据库可以迅速的使数据库回到误操作或人为错误的前一个时间点,如实际中的“撤消”操作,将可以不利用备份就快速地实现时间点的恢复。实际上,Oracle为了实现这一个功能,创建了另外一组日志,就是Flashback Logs(前滚日志),记录数据库的前滚操作。
Flashback Database的前提条件:
(1)数据库必须处于ARCHIVELOG模式
(2)数据库必须具有flash recovery area,为此需要设置如下参数:
? DB_RECOVER_FILE_DEST:确定Flashback日志的存放地点
? DB_RECOVER_FILE_DEST_SIZE:确定Flashback日志恢复区的大小
? DB_FLASHBACK_RETENTION_TARGET:设定闪回数据的保存时间,单位是分钟。默认是1440分钟(一天)
(3)对于RAC数据库,flash recovery area必须存储在集群文件系统或ASM内
常见flashback database命令
SQL> flashback databaseto timestamp to_date(xxx);
SQL> flashback database to timestampTO_TIMESTAMP (xxx);
SQL> flashback database to scnxxx;
SQL> flashback database to sequencexxx thread 1
SQL> flashback databaseto timestamp(sysdate-1/24)
例子:
(1)启用flashback log和归档模式
SQL> shutdown immediate
SQL> startup mount;
SQL> alter database archivelog
SQL> alter database flashbackon;
SQL> alter database open;
(2)获取当前的SCN
SQL> select current_scn from v$database; -- 查看当前的SCN
CURRENT_SCN
-----------
1237617
(3)模拟故障(截断scott.emp)
SQL> truncate table scott.emp;
(4)完成FLASHBACKDATABASE(必须在mount状态下)
SQL> shutdown immediate
SQL> startup mount;
SQL> flashback database to scn1237617;
(5)使用resetlogs方式打开数据库
SQL> alter database open resetlogs;
(6)测试flashbackdatabase是否成功
SQL> conn scott/tiger
SQL> select * from emp;