我正在尝试恢复意外删除的Oracle APEX工作区的应用程序。数据库是12c和APEX 18.1
如果唯一可用的备份是oradata文件夹(包含所有Tablespace文件)的OS级备份,那将是最好的解决方法?我的APEX模式位于自己的表空间中。我可以简单地将APEX表空间文件的昨晚副本复制到当前副本上,以进行恢复吗?
没有RMAN备份,并且数据库安装了所有默认选项,没有存档日志,也没有闪回。我也没有用expdp产生的转储。
我已经尝试使用dbms_flashback包返回几个小时,但无济于事,因为我收到有关回滚段的错误,该错误太小。我最早可以使它工作,已经处于所需恢复点之后的状态。
答案 0 :(得分:0)
我假设您仅丢失了APEX表空间,但是数据库当前正在运行。如果是这种情况,并且假设您的APEX表空间没有跨越多个数据文件,则可以尝试换出该数据文件。在尝试任何一种方法之前,请先在rman中强制进行备份。
这里有几个不同的选项。您真正需要的是以下
我将概述两个选项,因为我没有所有相关信息。第一个选项尝试通过rman实际还原数据文件,第二个选项只是将其交换出来。首先显然是优先的,但可能无法实现。
首先在init.ora
文件中设置以下参数
_allow_resetlogs_corruption=TRUE
将整个oradata
备份目录移动到/tmp/oradata
。然后在该目录中找到dbf
和ctl
文件的位置。
然后从bash终端运行rman target /
。在rman中运行以下命令。
RESTORE CONTROLFILE FROM '/tmp/oradata/your_ctrl_file_dir'
ALTER TABLESPACE apex OFFLINE IMMEDIATE';
SET NEWNAME FOR DATAFILE '/tmp/oradata/apex01.dbf' TO
RESTORE TABLESPACE apex;
SWITCH DATAFILE ALL;
RECOVER TABLESPACE apex;
首先找到数据文件的位置。您可以通过在sqlplus / as sysdba
或使用的任何客户端中运行以下命令来找到它们
spool '/tmp/spool.out'
select value from v$parameter where name = 'db_create_file_dest';
select tablespace name from dba_data_files;
查看spool.out文件和
如果表空间仍然存在,请运行
select file_name, status from dba_data_files WHERE tablespace name = < name >
您希望您的数据文件可用。然后,您想要将表空间设置为只读并使其脱机
alter tablespace < name > read only;
alter tablespace < name > offline;
现在将您的dbf
文件复制到查询db_create_file_dest
值所返回的目录中。不要覆盖旧的,然后运行。
alter tablespace < name > rename datafile '/u03/waterver/oradata/yourold.dbf' to '/u03/waterver/oradata/yournew.dbf'
这将更新您的控制文件以指向新的数据文件。
然后,您可以使表空间恢复联机状态并以读写模式恢复。您可能还需要验证表空间状态的状态,与该表空间关联的数据文件的名称等。