Восстановление табличного пространства Oracle (APEX) из резервных копий файловой системы файлов табличного пространства базы данных

Я пытаюсь восстановить случайно удаленные приложения рабочего пространства Oracle APEX. База данных 12c и APEX 18.1

Что было бы лучшим способом сделать это, если единственная доступная резервная копия - это резервная копия на уровне ОС папки oradata (со всеми файлами Tablespace)? Моя схема APEX живет в своем собственном табличном пространстве. Могу ли я просто скопировать вчерашнюю копию файла табличного пространства APEX поверх текущего для восстановления?

Резервных копий RMAN нет, и база данных установлена ​​со всеми параметрами по умолчанию, без архивного журнала и без ретроспективной копии. У меня также нет дампа, созданного с помощью expdp.

Я уже пытался использовать пакет dbms_flashback, чтобы вернуться на несколько часов назад, но безрезультатно, так как я получаю сообщение об ошибке о том, что сегмент отката слишком мал. Самое раннее, что я могу заставить его работать, уже находится в состоянии после желаемой точки восстановления.

Если мой ответ сработал для вас, пожалуйста, примите его

Chris Maggiulli 24.11.2021 13:51

спасибо, Крис, за очень информативный ответ. Возможно, это сработало бы, но в моем случае база данных находилась на виртуальной машине, где у нас были полные снимки всей виртуальной машины за 7 дней. По сути, мы восстановили рабочий моментальный снимок последнего дня, и я смог решить свою проблему, не прибегая к каким-либо специальным инструментам или процедурам Oracle. К счастью, это была машина для разработчиков, поэтому транзакции с данными конечных пользователей не были потеряны.

mindwalkr 25.11.2021 17:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
480
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Уточнение

Я предполагаю, что вы потеряли только табличное пространство APEX, но ваша база данных в настоящее время работает. Если это так и предполагается, что ваше табличное пространство APEX не охватывает несколько файлов данных, вы можете попытаться заменить файл данных. Пожалуйста, сделайте резервную копию в rman, прежде чем пытаться что-либо из этого.

Здесь есть несколько разных вариантов. Все, что вам действительно нужно, это следующее

  1. Файл данных
  2. Файл управления
  3. Архив/редоллоги (если вы хотите переместиться вперед или назад во времени)

Я собираюсь выделить два варианта, потому что у меня нет всей соответствующей информации. Первый вариант пытается фактически восстановить файлы данных с помощью 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 и

  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.

Затем вы можете вернуть свое табличное пространство в оперативный режим и обратно в режим чтения и записи. Вы также можете проверить состояние табличного пространства, имя файла данных, связанного с этим табличным пространством, и т. д.

Другие вопросы по теме