澄清
我假设您只是丢失了 APEX 表空间,但您的数据库当前正在运行。如果是这种情况,并且假设您的 APEX 表空间不跨越多个数据文件,您可以尝试换出数据文件。请在尝试任何操作之前强制在 rman 中进行备份。
这里有几个不同的选项。您真正需要的只是以下内容
- 数据文件
- 控制文件
- 存档/重做日志(如果您想及时向前或向后移动)
我将概述两个选项,因为我没有所有相关信息。第一个选项尝试通过 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'
这会更新您的控制文件以指向新的数据文件。
然后您可以使您的表空间重新联机并重新进入读写模式。您可能还想验证表空间状态、与该表空间关联的数据文件的名称等。