Как удалить данные из файла журнала TP? - PullRequest
0 голосов
/ 10 декабря 2018

Один из моих rtdbs вышел из строя из-за очень большого файла журнала TP и хоста, у которого недостаточно памяти для восстановления процесса.Виновником является одна из таблиц, в которые были отправлены поддельные данные.Есть ли способ удалить данные этой конкретной таблицы из файла журнала TP, чтобы не влиять на eod roll?У меня там не работает wdb, и я хотел бы сохранить данные для других таблиц.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Как упомянул emc211 (хотя и не совсем показанный в примере), подход в RDB состоит в том, чтобы иметь пользовательскую функцию обновления, которая отфильтровывает неверные данные.

Если плохие данные изолированы для определенной таблицы:

upd:{if[x<>`badTableName;x insert y]};

Если плохие данные содержатся в «хорошей» таблице:

upd:{$[x=`goodTable;x insert select from ($[1<count first y;flip;enlist][cols[x]!y]) where notBadData;x insert y]};

Затем воспроизвестииспользуя -11! и сохраненный.

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

q)L:`:/path/to/cleansedLogFile;
q).[L;();:;()];
q)lh:hopen L;

upd:{if[x<>`badTableName;lh enlist (`upd;x;y)]};
upd:{$[x=`goodTable;lh enlist (`upd;x;value flip select from ($[1<count first y;flip;enlist][cols[x]!y]) where notBadData);lh enlist (`upd;x;y)]};

, а затем снова воспроизводите, используя -11! и когда завершено hclose lh.

0 голосов
/ 10 декабря 2018

Если вы вручную перезаписали свою функцию обновления, вы можете удалить таблицу проблем. См. Пример ниже

q)//create a sample tplog 
q)`:tplog set ()
`:tplog
q)hopen `:tplog
3i
q)3 enlist (`upd;`t;([]1 2 3;10 20 30;`a`b`c))
3
q)3 enlist (`upd;`t;([]1 2 3;10 20 30;`a`b`c))
3
q)3 enlist (`upd;`badTable;([]1 2 3;10 20 30;`a`b`c))
3
q)3 enlist (`upd;`t;([]1 2 3;10 20 30;`a`b`c))
3

обычное воспроизведение

q)upd:upsert
q)-11!`:tplog
4
q)t
x x1 x2
-------
1 10 a
2 20 b
3 30 c
1 10 a
2 20 b
3 30 c
1 10 a
2 20 b
3 30 c
q)badTable
x x1 x2
-------
1 10 a
2 20 b
3 30 c
q)delete from `. //clear everything
`.

выбросить badTable

q)upd:{$[x=`badTable;(::);x upsert y]}
q)-11!`:tplog
4
q)t
x x1 x2
-------
1 10 a
2 20 b
3 30 c
1 10 a
2 20 b
3 30 c
1 10 a
2 20 b
3 30 c
q)badTable //badTable no longer exists 
'badTable
  [0]  badTable
       ^
...