|
|
|
Восстановление данных при flashback запросе
|
|||
|---|---|---|---|
|
#18+
Всем добрый день. Задача восстановить ряд удаленных записей из нескольких таблиц базы на определенный момент времени (несколько часов назад) При попытке восстановить таблицу по технологии Flashback вот так: FLASHBACK TABLE T1 TO TIMESTAMP to_date('05/05/2017 10:35:00','mm/dd/yyyy hh24:mi:ss'); для части таблиц восстановление проходит, а на некоторых возникает ошибка "ORA-01555: snapshot too old: rollback segment number 11 with NAME "_SYSSMU195$" too small" Вопросы 1. Означает ли ошибка "ORA-01555: snapshot too old: rollback segment number 11 with NAME "_SYSSMU195$" too small" то, что данные уже не восстановить? Смущает то, что если пытаться восстановить данные на более древний момент времени, то ошибка выдается другая, более понятная: "ORA-08180: no snapshot found based on specified time", по которой очевидно что таких данных уже нет. Также смутило, что поискав в интернете информацию по этой теме наткнулся на статью " https://renaps.wordpress.com/2007/08/08/ora-01555-snapshot-too-old-when-using-flashback-query/" в которой пишут, что если поменять размеры файлов UNDO, то ошибка уйдет и данные можно восстановить. У меня такие изменения результата не принесли, или я недопонимаю насколько нужно увеличивать. 2. Если сделать запрос вида SELECT * FROM T2 AS OF TIMESTAMP TO_TIMESTAMP ('2017-0505 10:35:00', 'YYYY-MM-DD HH24:MI:SS') то выбирается какое то количество записей (в моем примере 1800300), а на следующей опять выдается ошибка ORA-01555. А есть ли вероятность, что это ошибка выдается только при извлечении строки 1800300, а данные по следующим строкам более 1800300 есть. Можно ли их как то достать? 3. Также непонятно, почему при выполнении запроса SELECT * FROM T2 AS OF TIMESTAMP TO_TIMESTAMP ('2017-0505 10:35:00', 'YYYY-MM-DD HH24:MI:SS') WHERE ROWNUM=10 ошибка ORA-01555 выдается, а если условие сделать так: SELECT * FROM T2 AS OF TIMESTAMP TO_TIMESTAMP ('2017-0505 10:35:00', 'YYYY-MM-DD HH24:MI:SS') WHERE ROWNUM<11 то ошибка не выдается и выбираются 10 записей Буду очень благодарен за помощь, подсказки, советы. Другие варианты восстановления уже отпали, этот - последняя надежда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2017, 11:21 |
|
||
|
Восстановление данных при flashback запросе
|
|||
|---|---|---|---|
|
#18+
1 создайте новое андо и переключите на него текущую активность, чтобы данные ваших убитых таблиц не перезатирались дальше 2 привлекайте админа или техподдержу, кто сможет более осмысленно попытаться вытащить то, что еще имеется, шансы частично восстановить проблемные таблицы еще есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2017, 13:00 |
|
||
|
Восстановление данных при flashback запросе
|
|||
|---|---|---|---|
|
#18+
Сергей_КМпочему WHERE ROWNUM=10Потому что это тавтологически ложное условие, но всё равно нужно извлечь все строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2017, 08:13 |
|
||
|
Восстановление данных при flashback запросе
|
|||
|---|---|---|---|
|
#18+
DВА, благодарю за ответы. С админами и техподдержкой сложно, лучше бы самому освоить, почитать. Какие могут быть дальнейшие действия для частичного построчного восстановления данных в этой ситуации. И означает, ли если ошибка в запросе SELECT * FROM T1 AS OF TIMESTAMP TO_TIMESTAMP ('2017-0505 10:35:00', 'YYYY-MM-DD HH24:MI:SS') возникает на строке 1800300 то, что для всех строк более 1800300 такая ошибка будет? Можно ли как-то исключить из запроса строки с ошибками и в итоге вставить условие вида " rownum>2000000 and rownum<2000009", или есть другие технологии? Если несложно, в 2 словах, пожалуйста, задайте направление) Elic,Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2017, 10:00 |
|
||
|
Восстановление данных при flashback запросе
|
|||
|---|---|---|---|
|
#18+
Сергей_КМИ означает, ли если ошибка в запросе SELECT * FROM T1 AS OF TIMESTAMP TO_TIMESTAMP ('2017-0505 10:35:00', 'YYYY-MM-DD HH24:MI:SS') возникает на строке 1800300 то, что для всех строк более 1800300 такая ошибка будет?Нет. Сергей_КМЕсли несложно, в 2 словах, пожалуйста, задайте направление)Поздно пить боржоми. Сергей_КМили есть другие технологии?Построчное извлечение данных с игнорированием ошибки. Но это очччччень медленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2017, 10:16 |
|
||
|
Восстановление данных при flashback запросе
|
|||
|---|---|---|---|
|
#18+
Elic, поподробнее бы про Построчное извлечение данных с игнорированием ошибки Это делается с помощью какого-то условия в запросе или скриптом? Можете какой-то пример привести или ткнуть что почитать? Спасибо. Вопрос времени восстановления не смущает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2017, 10:46 |
|
||
|
Восстановление данных при flashback запросе
|
|||
|---|---|---|---|
|
#18+
Сергей_КМЭто делается с помощью какого-то условия в запросе или скриптом?Скорее всего, хватит и поблочного. RTFM *_extents + dbms_rowid.rowid_create Но все твои вопросы указывают на то, что у тебя не взлетит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2017, 11:53 |
|
||
|
Восстановление данных при flashback запросе
|
|||
|---|---|---|---|
|
#18+
Просто в UNDO информация уже недоступна (перезатерта) Варианты: -- доставать из бэкапа (TSPITR), -- восстанавливать через LogMiner (кстати, если именно восстановить несколько удаленных записей, то не очень плохая идея) Но: -- в первом случае необходимо наличие бэкапов -- а во-втором, БД должна быть в ARCHIVELOG и они должны быть доступны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2017, 13:25 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39450020&tid=1885974]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
80ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
4ms |
| others: | 254ms |
| total: | 442ms |

| 0 / 0 |
