sunny_zhao0127
作者sunny_zhao0127·2013-11-21 11:07
数据库管理员·C.H.Robinsion

SYSPROC.ADMIN_CMD()

字数 4478阅读 2476评论 0赞 1
http://yibingmei.blog.51cto.com/764708/171817
SYSPROC.ADMIN_CMD() procedure的简单学习
 
使用db2的人都知道,db2过程的使用有很大的局限,比起oracle差了很多,因为过程中只能操作简单的DDLDML!对于很多操作(比如runstatus,load等)都不能在sql过程中做!个人觉得DB2似乎不很重视这方面的研发,比如说DB2之前连sql过程都不支持,再比如,DB2oracle之前提出来了分析函数,但自从提出来以后一直就那么几个,直到V9.5做了相对oracle的完善(Laglead等)!呵呵!
 
言归正传,db2 V9以后出了一个系统的过程ADMIN_CMD,这个过程基本上解决了上述(过程中只能使用简单DDLDML)问题,但个人觉得还是有一定局限性(IBM的东东就是补补贴贴,不能做到一次到位),呵呵!

首先来看ADMIN_CMD都能做什么?我查询了一下db2的官网,V9.5中能做的事大致如下:
ü         ADD CONTACT
ü         ADD CONTACTGROUP
ü         AUTOCONFIGURE
ü         BACKUP - online only
ü         DESCRIBE
ü         DROP CONTACT
ü         DROP CONTACTGROUP
ü         EXPORT
ü         FORCE APPLICATION
ü         IMPORT
ü         INITIALIZE TAPE
ü         LOAD
ü         PRUNE HISTORY/LOGFILE
ü         QUIESCE DATABASE
ü         QUIESCE TABLESPACES FOR TABLE
ü         REDISTRIBUTE
ü         REORG INDEXES/TABLE
ü         RESET ALERT CONFIGURATION
ü         RESET DATABASE CONFIGURATION
ü         RESET DATABASE MANAGER CONFIGURATION
ü         REWIND TAPE
ü         RUNSTATS
ü         SET TAPE POSITION
ü         UNQUIESCE DATABASE
ü         UPDATE ALERT CONFIGURATION
ü         UPDATE CONTACT
ü         UPDATE CONTACTGROUP
ü         UPDATE DATABASE CONFIGURATION
ü         UPDATE DATABASE MANAGER CONFIGURATION
ü         UPDATE HEALTH NOTIFICATION CONTACT LIST
ü         UPDATE HISTORY
 
 
再说执行ADMIN_CMD需要的权限!
  • sysadm
  • dbadm
ADMIN_CMD采用返回结果集的方式,返回执行过程中的系统的信息!这个结果集包括sqlcodeMSG等,并且根据所执行操作的不同,有时候会返回2个结果集,但有的操作就下部需要会返回结果集(比如RUNSTATS),用户可以对结果集进行操作,来对执行结果进行其他的处理。
 
这边具体讨论下,SQL过程中ADMIN_CMD关于EXPORT的操作!对于其他类型的操作可以通过如下连接访问IBM官网,查询相关信息!
 
EXPORT操作返回一个结果集,包括3部分内容:
l         ROWS_EXPORTED----记录export多少行!类型为BIGINT
l         MSG_RETRIEVAL--记录export执行后的信息(sqlcode等)类型为VARCHAR(512)
这里返回的是一段字符串代码,然后可以通过如下操作查询到对应的信息SELECT SQLCODE, MSG  FROM TABLE (SYSPROC.ADMIN_GET_MSGS('3203498_txu')) AS MSG
l         MSG_REMOVAL--记录清除export的信息的代码!类型为VARCHAR(512)
这里返回的也同样是一段字符串代码,然后可以通过如下操作查询到对应的信息SELECT CALL SYSPROC.ADMIN_REMOVE_MSGS  ('3203498_txu')
那么怎么在存储过程中操作返回的结果集呢,PUB上有人问,其实这就属于基础知识了,但是这边还是做了一个补充
 
--首先建立一个结果集数组
--这里定义一个就够了,因为ADMIN_CMDEXPORT操作返回值为1result set,但是要注意别的操作有可能返回2result set的,这时就需要定义2个了
 
declare loc1 result_set_locator varying; 
 
 
--然后执行存储过程ADMIN_CMD
CALL SYSPROC.ADMIN_CMD ('EXPORT to /home/user1/data/myfile.ixf OF ixf MESSAGES ON SERVER select * from staff');
 
--然后调用该ADMIN_CMD返回结果集。
associate result set locator(loc1) with procedure ADMIN_CMD;
--将返回结果集和结果集数组关联
 
--再然后将结果集数组分配给cursor
 allocate cursor1 cursor for result set loc1;
 
--下来就是操作游标的东东了J
fetch cursor1 into ....--这里就不详细说了。。
 
--最后需要关闭游标
close cursor1;      

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

  • innodb log sequence error
    评论 0 · 赞 0
  • DB2 ERROR
    评论 1 · 赞 0
  • app
    评论 0 · 赞 0
  • db2level
    评论 0 · 赞 0
  • puppet
    评论 0 · 赞 0
  • 相关文章

    相关问题

    相关资料

    X社区推广