Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вопрос по восстановлению / 5 сообщений из 5, страница 1 из 1
04.08.2015, 11:21
    #39022362
-_Михаил_-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению
Изначальная ситуация:

База на Линукс Цет DB2 9,7,9. Разработчик прислал ddl скрипт, где вставлял таблицы и изменял структуру базы. Скрипт был с ошибками и мы получили ошибки в логе, после чего разработчик прислал новый вариант скрипта и мы попробовали снова. Ошибки были в основном из за дубликации. Вот части лога:


> Database Connection Information
>
> Database server = DB2/LINUXZ64 9.7.9
> SQL authorization ID = DB2INST1
> Local database alias = KTC3
>
>
> DB20000I The SQL command completed successfully.
>
> DB20000I The SQL command completed successfully.
>
> DB20000I The SQL command completed successfully.
>
> DB20000I The SQL command completed successfully.
>
> DB20000I The SQL command completed successfully.
>
> DB21034E The command was processed as an SQL statement because it was not
> a valid Command Line Processor command. During SQL processing it
> returned:
> SQL0612N "BRANCH" is a duplicate name. SQLSTATE=42711
>
> DB21034E The command was processed as an SQL statement because it was not
> a valid Command Line Processor command. During SQL processing it
> returned:
> SQL0205N Column or attribute "GVVINFONUMMER_7" is not defined in
> "DB2INST1.KONTO". SQLSTATE=42703
>
> DB21034E The command was processed as an SQL statement because it was not
> a valid Command Line Processor command. During SQL processing it
> returned:
> SQL0612N "KONTOBRANCH" is a duplicate name. SQLSTATE=42711
>
> DB21034E The command was processed as an SQL statement because it was not
> a valid Command Line Processor command. During SQL processing it
> returned:
> SQL0612N "KONTOBRANCH" is a duplicate name. SQLSTATE=42711
>
> DB20000I The SQL command completed successfully.
>
> DB21034E The command was processed as an SQL statement because it was not
> a valid Command Line Processor command. During SQL processing it
> returned:
> SQL0205N Column or attribute "LFDNRKONTO" is not defined in
> "DB2INST1.FEATUREKONTOPOSTEN". SQLSTATE=42703
>
> DB20000I The SQL command completed successfully.
>
> DB20000I The SQL command completed successfully.
>
> DB21034E The command was processed as an SQL statement because it was not
> a valid Command Line Processor command. During SQL processing it
> returned:
> SQL0601N The name of the object to be created is identical to the
> existing name "DB2INST1.FKPOSTENHIST" of type "TABLE". SQLSTATE=42710
>
> DB21034E The command was processed as an SQL statement because it was not
> a valid Command Line Processor command. During SQL processing it
> returned:
> SQL0612N "BRANCH" is a duplicate name. SQLSTATE=42711
>
> DB21034E The command was processed as an SQL statement because it was not
> a valid Command Line Processor command. During SQL processing it
> returned:
> SQL0205N Column or attribute "GVVINFONUMMER_7" is not defined in
> "DB2INST1.TAGESENDESALDO". SQLSTATE=42703
>
> SQL0605W The index was not created because an index "DB2INST1.I5UMSATZ"
> with a matching definition already exists. SQLSTATE=01550
>
> DB20000I The SQL command completed successfully.
>
> DB20000I The SQL command completed successfully.
>
> SQL0104N An unexpected token "CALL SYSPROC.ADMIN_CMD('reorg table Konto "
> was
> found following "BEGIN-OF-STATEMENT". Expected tokens may include:
> "<values>". SQLSTATE=42601
>
> DB20000I The SQL command completed successfully.
>
> DB20000I The SQL command completed successfully.
>
> DB20000I The SQL command completed successfully.
>
> DB20000I The SQL command completed successfully.
>
> SQL0605W The index was not created because an index
> "DB2INST1.I0FKPOSTENHIST"
> with a matching definition already exists. SQLSTATE=01550
>
> SQL0605W The index was not created because an index
> "DB2INST1.I1FKPOSTENHIST"
> with a matching definition already exists. SQLSTATE=01550


Что бы проверить скрипт снова разработчик предлагает сделать рестор и ролльфорвард. Мой вопрос:

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

Заранее прошу прощения за возможно глупый вопрос
...
Рейтинг: 0 / 0
04.08.2015, 16:35
    #39022757
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению
-_Михаил_-,

Скорее всего, вам предложили восстановить базу из архива и накатить его по логам до момента начала выполнения скрипта, который начал изменения.
После этого вы получите состояние всего в базе (и данных, и метаданных) на этот момент времени.
...
Рейтинг: 0 / 0
04.08.2015, 17:42
    #39022834
CawaSPb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению
-_Михаил_-,

В дополнение.

Вот такие скрипты очень вам помогут:
------------------------------------------------
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
#!/bin/bash

SCRIPTNAME=$1
SCRIPTFILENAME="${SCRIPTNAME%.*}"

db2 -c- -v -s -t -f "${SCRIPTNAME}" -l "${SCRIPTFILENAME}.log" -z "${SCRIPTFILENAME}.out" -m
RC=$?
if [ $RC -lt 4 ]; then
    db2 -c- -v -l "${SCRIPTFILENAME}.log" -z "${SCRIPTFILENAME}.out"  commit
else
    db2 -c- -v -l "${SCRIPTFILENAME}.log" -z "${SCRIPTFILENAME}.out"  rollback
fi
------------------------------------------------

Или для виндов (например, с клиента скрипты проливать).
------------------------------------------------
Код: plaintext
1.
2.
3.
4.
5.
6.
@db2 -c- -v -s -t -f %1 -l "%~dpn1.log" -z "%~dpn1.out" -m

@IF ERRORLEVEL 4 (
  db2 -c- -v -l "%~dpn1.log" -z "%~dpn1.out"  rollback
) ELSE ( 
  db2 -c- -v -l "%~dpn1.log" -z "%~dpn1.out"  commit
)
------------------------------------------------

Разные файлы для вывода - в одном есть вывод количества аффектящихся строк (-m опция) и дополнительный вывод (например от команд import/export/load), во втором - время выполнения команд.
Сохраняйте эти логи при каждом изменении БД. У нас, случалось, пригождались года через два после проводимого изменения (помимо всего прочего именуем каталог с выполняемым скриптом по номеру запроса на изменение в трекере). При "разборе полётов" вещь неоценимая.

PS Требуется, конечно, отслеживать, чтобы в скрипте не было внутренних коммитов и выдвигать это как требование к поставкам скриптов. Это не всегда возможно, в частности ввиду неявных коммитов, совершаемых операциями reorg, export, load, import и др., но это уже на ручной разбор.
В остальном же, сделать накатывание поставок атомарными - большой плюс.
...
Рейтинг: 0 / 0
05.08.2015, 10:20
    #39023140
-_Михаил_-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению
Mark Barinstein,

Спасибо за ответ, как всегда точно и по делу
...
Рейтинг: 0 / 0
05.08.2015, 10:21
    #39023141
-_Михаил_-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по восстановлению
CawaSPb,

спасибо, попробую
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вопрос по восстановлению / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]