如何在不同的服务器上使用 db2expc 或 db2dec 许可证进行 db2 备份和恢复并自动调整无限表空间以避免 SQL1139n

How to make db2 backup and restore using db2expc or db2dec license on different server and autosize unlimited tablespaces avoid SQL1139n

我必须将数据库从一台服务器 (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 The total size of the table space is too big

获取备份我使用:

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

为了恢复我使用: db2 restore database <db_name> from <location> taken at <timestamp>

这也会在表空间路径上产生错误:在服务器 B 上,不存在服务器 A 表空间路径。

表空间是自动调整大小的,没有限制。

如何解决?

去服务器A
db2 => connect to <DBNAME> user db2inst1
sb2 => LIST TABLESPACES SHOW DETAIL

将显示一些细节。您必须查看 Page sizetot pages
的所有表空间 使用 MB = Page size x tot pages 计算 MB 表空间大小。
不要看临时表空间:没有必要。

举个例子:

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

如果您执行了一些错误并且恢复出错,请执行:
db2 restore database <DBNAMW> abort
如果此命令不起作用(给出错误),请执行:
db2 drop db <DBNAME>

如果一切顺利:

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

将从服务器 A 中的数据库备份副本在服务器 B 上创建新数据库。