Как сделать резервное копирование и восстановление db2 с использованием лицензии db2exp c или db2de c на другом сервере и автоматически изменять размеры неограниченных табличных пространств, избегая SQL1139n - PullRequest
0 голосов
/ 25 марта 2020

Мне нужно переместить базу данных с одного сервера (A) на другой (B).
Сервер A имеет эту лицензию версии:
db2licm -l

Nome prodotto:                     "DB2 Express-C"
Tipo di licenza:                   "Senza garanzia"
Data scadenza:                     "Permanente"
Identificativo prodotto:           "db2expc"
Informazioni sulla versione:       "10.5"
Numero massimo di CPU:             "2"
Quantità massima di memoria (GB):  "16"
Politica di restrizione:           "Interruzione parziale"

сервер B имеет эта лицензия версия:
db2licm -l

Product name:                     "IBM DB2 Developer-C Edition"
License type:                     "Community"
Expiry date:                      "Permanent"
Product identifier:               "db2dec"
Version information:              "11.5"
Max amount of memory (GB):        "16"
Max number of cores:              "4"
Max amount of table space (GB):   "100"

Это две бесплатные лицензии и при резервном копировании и восстановлении выдается ошибка:

SQL1139n Общий размер таблицы пространство слишком велико

для резервного копирования я использую:

db2 backup database <DBNAME> to /home/db2inst1/backup

и для восстановления использую: db2 restore database <db_name> from <location> taken at <timestamp>

это также приводит к ошибке на пути к табличному пространству: на сервере B не существует серверный путь к табличному пространству.

Табличные пространства имеют автоматический размер и без ограничений.

Как можно починить?

1 Ответ

1 голос
/ 25 марта 2020

Go на сервере A
db2 => connect to <DBNAME> user db2inst1
sb2 => LIST TABLESPACES SHOW DETAIL

Будут показаны некоторые детали. Вы должны посмотреть на все табличные пространства, которые Page size и tot pages
используют MB = Page size x tot pages для калибровки c размера табличных пространств в МБ.
не смотрите на временное табличное пространство: это необязательно.

Позвольте быть примером:

tablespace name page size       tot pages       MB
SYSCATSPACE     4096            32768           128
USERSPACE1      4096            8192            32
SYSTOOLSPACE    4096            8192            32
TBS_N0          32768           19456           608

, чтобы избежать проблем, увеличьте этот размер:

ALTER TABLESPACE SYSCATSPACE  MAXSIZE 512 M
ALTER TABLESPACE USERSPACE1   MAXSIZE 128 M
ALTER TABLESPACE SYSTOOLSPACE MAXSIZE 128 M
ALTER TABLESPACE TBS_N0       MAXSIZE 1   G

Теперь табличное пространство имеет максимальный размер, и это не будет увеличивать SQL1139n при восстановлении времени.

Теперь сделайте резервную копию:
db2 backup database <DBNAME> to /home/db2inst1/backup
Теперь мы можем вернуть последнюю настройку:

ALTER TABLESPACE SYSCATSPACE  MAXSIZE NONE
ALTER TABLESPACE USERSPACE1   MAXSIZE NONE
ALTER TABLESPACE SYSTOOLSPACE MAXSIZE NONE
ALTER TABLESPACE TBS_N0       MAXSIZE NONE

Скопировать резервную копию на сервер B и сделать:
db2 restore database <DBNAME> from "/database" taken at <timestamp> redirect generate script restore.clp

отредактируйте restore.clp, чтобы изменить все пути указания пути на сервере A, чтобы они соответствовали существующему пути на сервере B.

удалите комментарий к строке:
ON 'path' и убедитесь, что путь существует на сервере B: где БД будет создаваться.

удалите комментарий к строке:

SET STOGROUP PATHS FOR <IBMSTOGROUPNAME>
ON 'path'
;

и убедитесь, что путь существует на сервере B: это место, где БД будет создавать новые табличные пространства.

теперь выполните восстановление с помощью:
db2 -tvf restore.clp

Если вы допустили ошибку и восстановление go неправильно, выполните:
db2 restore database <DBNAMW> abort
, если эта команда не работает (выдает ошибку) do:
db2 drop db <DBNAME>

если все go вправо:

ALTER TABLESPACE SYSCATSPACE MAXSIZE  NONE
ALTER TABLESPACE USERSPACE1 MAXSIZE   NONE
ALTER TABLESPACE SYSTOOLSPACE MAXSIZE NONE
ALTER TABLESPACE TBS_N0 MAXSIZE       NONE

Новая база данных будет создана на сервере B из резервной копии копия базы данных на сервере А.

...