DB2 复制SCHEMA

问题: 从一个已有的schema 创建一个结构完全相同的schema。

DB2的一个存储过程,可以帮我们实现这样的功能,它就是[b][color=blue]SYSPROC.ADMIN_COPY_SCHEMA[/color][/b], 它的定义结构如下:

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
);



参数的详细解释:
[list]
[*]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
这是一个[IN OUT]参数,当有对象不能被成功copy时,需要将这些信息存于一张表中作为日志。 这个参数是log表的schema的名称,在SYSTOOLSPACE表空间中。 如果没有这样的记录,作为OUT,这个参数将返回NULL。
[*]errortab
[IN OUT]参数,log表的名称。 这个表不能创建或已存在,那么存储过程调用将失败,且返回出错信息。表的具体定义见下图:
[img]http://dl.iteye.com/upload/attachment/203173/b232e269-3ab6-36a3-94bf-d98e1277ef4e.jpg[/img]
[/list]

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')



[img]http://dl.iteye.com/upload/attachment/203176/e79afeb7-6600-33dc-a4e6-5dfe3ab3d005.jpg[/img]

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

    推荐阅读