Я пытаюсь восстановить случайно удаленные приложения рабочего пространства Oracle APEX. База данных 12c и APEX 18.1
Что было бы лучшим способом сделать это, если единственная доступная резервная копия - это резервная копия на уровне ОС папки oradata (со всеми файлами Tablespace)? Моя схема APEX живет в своем собственном табличном пространстве. Могу ли я просто скопировать вчерашнюю копию файла табличного пространства APEX поверх текущего для восстановления?
Резервных копий RMAN нет, и база данных установлена со всеми параметрами по умолчанию, без архивного журнала и без ретроспективной копии. У меня также нет дампа, созданного с помощью expdp.
Я уже пытался использовать пакет dbms_flashback, чтобы вернуться на несколько часов назад, но безрезультатно, так как я получаю сообщение об ошибке о том, что сегмент отката слишком мал. Самое раннее, что я могу заставить его работать, уже находится в состоянии после желаемой точки восстановления.
спасибо, Крис, за очень информативный ответ. Возможно, это сработало бы, но в моем случае база данных находилась на виртуальной машине, где у нас были полные снимки всей виртуальной машины за 7 дней. По сути, мы восстановили рабочий моментальный снимок последнего дня, и я смог решить свою проблему, не прибегая к каким-либо специальным инструментам или процедурам Oracle. К счастью, это была машина для разработчиков, поэтому транзакции с данными конечных пользователей не были потеряны.
Я предполагаю, что вы потеряли только табличное пространство APEX, но ваша база данных в настоящее время работает. Если это так и предполагается, что ваше табличное пространство APEX не охватывает несколько файлов данных, вы можете попытаться заменить файл данных. Пожалуйста, сделайте резервную копию в rman, прежде чем пытаться что-либо из этого.
Здесь есть несколько разных вариантов. Все, что вам действительно нужно, это следующее
Я собираюсь выделить два варианта, потому что у меня нет всей соответствующей информации. Первый вариант пытается фактически восстановить файлы данных с помощью rman, второй просто заменяет их. Первое, очевидно, предпочтительнее, но может быть недостижимо.
Сначала установите следующий параметр в файле init.ora
_allow_resetlogs_corruption=TRUE
Переместите весь каталог резервных копий oradata
в /tmp/oradata
. Найдите затем расположение ваших файлов dbf
и ctl
в этом каталоге.
Затем запустите 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 и
Если табличное пространство все еще существует, запустите
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.
Затем вы можете вернуть свое табличное пространство в оперативный режим и обратно в режим чтения и записи. Вы также можете проверить состояние табличного пространства, имя файла данных, связанного с этим табличным пространством, и т. д.
Если мой ответ сработал для вас, пожалуйста, примите его