q456123 发表于 2016-11-13 08:55:04

DB2 复制SCHEMA

问题: 从一个已有的schema 创建一个结构完全相同的schema。
DB2的一个存储过程,可以帮我们实现这样的功能,它就是SYSPROC.ADMIN_COPY_SCHEMA, 它的定义结构如下:
ADMIN_COPY_SCHEMA(
VARCHAR(128) sourceschema,
VARCHAR(128) targetschema,
VARCHAR(128) copymode,
VARCHAR(128) objectowner,
CLOB(2M) sourcetbsp,
CLOB(2M) targettbsp,
VARCHAR(128) errortabschema,
VARCHAR(128) errortab
);

参数的详细解释:

[*]sourceschema   要copy的源schema
[*]targetschema   目标schema, 无需已经存在
[*]copymode    copy的方式,主要有三种,
      DDL, 只拷贝对象的定义
      COPY, 对象会在新的schema中创建,然后会load(NONRECOVERABLE MODE)数据到新的schema下的对象中。因此在执行完存储过程后需要做一次备份,否则新表无法访问。
      COPYNO, 在新的schema创建,然后load(COPYNO MODE)数据到新的schema
[*]objectowner   新创建对象的owner, 如果为NULL,那么执行COPY的用户将是owner
[*]sourcetbsp   用于映射新的表空间,这个参数是以逗号隔开的表空间名。如果为NULL,那么所有新的对象都与原有的对象创建于同一个表空间。
[*]targettbsp   以逗号隔开的列表,当源对象来自sourcetbsp中的一个表空间是,新的copy对象将会创建在targettbsp列表中相应次序的表空间中。 如果为NULL, 与源对象在同一表空间创建。如果为SYS_ANY, 则会用默认的表空间选择算法来选择表空间。
[*]errortabschema   这是一个参数,当有对象不能被成功copy时,需要将这些信息存于一张表中作为日志。 这个参数是log表的schema的名称,在SYSTOOLSPACE表空间中。 如果没有这样的记录,作为OUT,这个参数将返回NULL。
[*]errortab   参数,log表的名称。 这个表不能创建或已存在,那么存储过程调用将失败,且返回出错信息。表的具体定义见下图:


Sample:
CALL SYSPROC.ADMIN_COPY_SCHEMA('SOURCE_SCHEMA', 'TARGET_SCHEMA',
'COPY', NULL, 'SOURCETS1 , SOURCETS2', 'TARGETTS1, TARGETTS2,
SYS_ANY', 'ERRORSCHEMA', 'ERRORNAME')

DB2 CALL SYSPROC.ADMIN_COPY_SCHEMA('HUANG','JAY','DDL',NULL,NULL,NULL,'ERRORSCHEMA','ERRORNAME')


Reference: http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/r0022035.htm

1301664724 发表于 2022-2-24 10:16:00

强烈支持楼主ing……
页: [1]
查看完整版本: DB2 复制SCHEMA