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]
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 复制阳光
- 《可复制的领导力》读后感之一----学会倾听,提高效率
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- Application|linux应用编程笔记(5)系统调用文件编程方法实现文件复制
- 书画复制资料简记
- 情感账户告急
- 新特性解读|新特性解读 | MySQL 8.0.16 在组复制中启用成员自动重新加入
- 其他|如何复制百度文库中的内容
- 复制D的流程和行动纲领