从数据库表空间文件的文件系统备份中恢复 Oracle 表空间 (APEX)

Recovering an Oracle tablespace (APEX) from file system backups of database tablespace files

我正在尝试恢复意外删除的 Oracle APEX 工作space 的应用程序。数据库是12c和APEX 18.1

如果唯一可用的备份是 oradata 文件夹(包含所有 Tablespace 文件)的 OS 级备份,那么最好的方法是什么? .我的 APEX 架构独立存在 tablespace。我可以简单地将昨晚的 APEX table space 文件复制到当前文件上来恢复吗?

没有 RMAN 备份,数据库安装了所有默认选项,没有存档日志,也没有闪回。我也没有用 expdp 生成任何转储。

我已经尝试使用 dbms_flashback 包返回几个小时但无济于事,因为我收到有关回滚段太小的错误。最早我可以让它工作,已经处于所需恢复点之后的状态。

澄清

我假设您只是丢失了 APEX 表空间,但您的数据库目前正在运行。如果是这种情况,并且假设您的 APEX 表空间不跨越多个数据文件,您可以尝试换出数据文件。请在尝试任何操作之前在 rman 中强制备份。

这里有几个不同的选项。您真正需要的是以下内容

  1. 数据文件
  2. 控制文件
  3. 存档/重做日志(如果你想及时向前或向后移动)

我将概述两个选项,因为我没有所有相关信息。第一个选项尝试通过 rman 实际恢复数据文件,第二个选项只是将其换出。第一个明显优惠,但未必能实现。

RMAN 恢复

首先在您的 init.ora 文件中设置以下参数

_allow_resetlogs_corruption=TRUE

将整个 oradata 备份目录移动到 /tmp/oradata。然后在该目录中找到 dbfctl 文件的位置。

然后 运行 rman target / 来自 bash 终端。在 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 文件和

  1. 验证数据文件的位置
  2. 查看数据文件是否仍与该表空间关联。

如果表空间还在运行

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'

This updates your controlfile to point to the new datafile.

然后您可以使您的表空间重新联机并返回读写模式。您可能还想验证表空间状态、与该表空间关联的数据文件的名称等。