ahuango 发表于 2013-1-25 22:06:34

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表的名称。 这个表不能创建或已存在,那么存储过程调用将失败,且返回出错信息。表的具体定义见下图:
http://dl.iteye.com/upload/attachment/203173/b232e269-3ab6-36a3-94bf-d98e1277ef4e.jpg


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

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

Reference: http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/r0022035.htm
页: [1]
查看完整版本: DB2 复制SCHEMA